Myapp/app2.py

48 lines
1.8 KiB
Python

from flask import Flask, request, abort, jsonify, make_response
import hmac
import hashlib
import subprocess
app = Flask(__name__)
@app.route('/webhook', methods=['POST'])
def handle_webhook():
# Sprawdzanie podpisu HMAC
secret = "123" # Zastąp swoim własnym tajnym kluczem
signature = request.headers.get('X-Hub-Signature')
if not is_valid_signature(request.data, secret, signature):
abort(400) # Nieprawidłowy podpis HMAC, zakończ żądanie
# Sprawdzanie typu zdarzenia
event_type = request.headers.get('X-GitHub-Event')
if event_type != 'push':
return make_response(jsonify({'message': 'Nieobsługiwane zdarzenie'}), 200)
# Pobieranie informacji o zmianach
payload = request.json
repository = payload['repository']['name']
ref = payload['ref']
# Sprawdzanie, czy zmiany dotyczą odpowiedniego repozytorium i gałęzi
if repository != 'Myapp' or ref != 'refs/heads/master':
return make_response(jsonify({'message': 'Ignorowanie niepasujących zmian'}), 200)
# Wywołanie restartu innej aplikacji
restart_application()
return make_response(jsonify({'message': 'Restartowanie aplikacji...'}), 200)
def is_valid_signature(data, secret, signature):
# Generowanie podpisu HMAC
expected_signature = 'sha1=' + hmac.new(secret.encode('utf-8'), data, hashlib.sha1).hexdigest()
# Porównywanie podpisu z otrzymanym w nagłówku
return hmac.compare_digest(signature, expected_signature)
def restart_application():
# Logika restartu innej aplikacji
# Możesz dostosować ten kod do własnych potrzeb, np. używając poleceń systemowych lub bibliotek zarządzających procesami
subprocess.run(["systemctl", "restart", "nazwa_twojej_aplikacji"])
if __name__ == '__main__':
app.run(debug=True)