GitHub DevLog AI GitHub DevLog AIWebhook inbox privado para GitHub
← 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.