48 lines
1.8 KiB
Python
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)
|