34 lines
852 B
Python
34 lines
852 B
Python
"""Verify gaiia webhooks in a Flask endpoint.
|
|
|
|
pip install flask gaiia
|
|
GAIIA_WEBHOOK_SECRET=whsec_... flask --app examples/webhook_flask.py run
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
import os
|
|
|
|
from flask import Flask, abort, request
|
|
|
|
from gaiia import WebhookSignatureError, verify_webhook_signature
|
|
|
|
app = Flask(__name__)
|
|
SECRET = os.environ["GAIIA_WEBHOOK_SECRET"]
|
|
|
|
|
|
@app.post("/gaiia/webhook")
|
|
def webhook() -> tuple[str, int]:
|
|
raw = request.get_data()
|
|
try:
|
|
verify_webhook_signature(
|
|
header_value=request.headers.get("X-Gaiia-Webhook-Signature", ""),
|
|
raw_body=raw,
|
|
secret=SECRET,
|
|
)
|
|
except WebhookSignatureError as e:
|
|
abort(400, description=str(e))
|
|
|
|
event = json.loads(raw)
|
|
app.logger.info("gaiia event: %s", event.get("type"))
|
|
return "", 204
|