From f5ff1c6777b20662944ee25d5eda531569689a2b Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 17 Jun 2023 01:02:35 +0200 Subject: [PATCH] =?UTF-8?q?Dodanie=20plik=C3=B3w=20app1.py=20i=20app2.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app1.py | 10 ++++++++++ app2.py | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 app1.py create mode 100644 app2.py diff --git a/app1.py b/app1.py new file mode 100644 index 0000000..57c26a7 --- /dev/null +++ b/app1.py @@ -0,0 +1,10 @@ +from flask import Flask + +app = Flask(__name__) + +@app.route('/') +def hello_world(): + return 'Hello, World!' + +if __name__ == '__main__': + app.run(debug=True) diff --git a/app2.py b/app2.py new file mode 100644 index 0000000..a948239 --- /dev/null +++ b/app2.py @@ -0,0 +1,47 @@ +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)