import hmac
import hashlib
def verify_signature(raw_body: bytes, signature_header: str, secret: str) -> bool:
expected = 'sha256=' + hmac.new(
secret.encode(),
raw_body,
hashlib.sha256
).hexdigest()
return hmac.compare_digest(signature_header, expected)
# Flask example
@app.route('/webhooks/gatlio', methods=['POST'])
def gatlio_webhook():
sig = request.headers.get('X-Gatlio-Signature', '')
if not verify_signature(request.data, sig, os.environ['GATLIO_WEBHOOK_SECRET']):
return 'Invalid signature', 400
payload = request.get_json()
# process payload...
return '', 200