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)