← Integrações GitHub
Python
Webhook do GitHub com FastAPI
Calcule o HMAC com await request.body e compare a assinatura antes de desserializar.
Exemplo de código
Endpoint de webhook
Exemplos de código, nomes de cabeçalhos, nomes de eventos e assinaturas permanecem literais nos dois idiomas.
import hashlib, hmac, json, os
from fastapi import FastAPI, Header, HTTPException, Request, status
app = FastAPI()
@app.post('/webhooks/github', status_code=status.HTTP_202_ACCEPTED)
async def github_webhook(request: Request, x_hub_signature_256: str = Header(default=''),
x_github_delivery: str = Header(default=''), x_github_event: str = Header(default='')):
body = await request.body()
digest = hmac.new(os.environ['GITHUB_WEBHOOK_SECRET'].encode(), body, hashlib.sha256).hexdigest()
if not hmac.compare_digest(f'sha256={digest}', x_hub_signature_256):
raise HTTPException(status_code=401)
await enqueue(x_github_delivery, x_github_event, json.loads(body))
return {'accepted': True}
Passos de configuração
Valide a primeira delivery
Passos de configuração 1
Crie um workspace no DevLog e copie o endpoint e o Secret.
Passos de configuração 2
Configure o mesmo Secret no GitHub e na variável segura da aplicação.
Passos de configuração 3
Envie um ping e confirme assinatura, Delivery ID e payload no inbox.