Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Generic webhooks: broken, unused, and not org-scoped. Fix or remove?

Aperta
#709 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 3 giorni

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
5/5
Tempo stimato
Più di una settimana
Idoneità per principianti
25/100
Tipo di issue
Refactoring
Chiarezza
Da chiarire
Stato di attività
Attiva
Stack tecnologico
fastapi, postgresql, python
Ambito
api, backend

Direzione di ricerca

Start by tracing webhook dispatch in src/app/services/validation.py:175, then inspect the webhook model, CRUD, schemas, /webhooks endpoint, and migrations mentioned in the issue. The issue presents two unresolved options: remove the mechanism or make it org-scoped with a public payload schema; confirm the project’s decision before changing anything. Done means implementing the selected option consistently, including the database migration.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Context

The generic webhook mechanism (introduced in #367) sends every validated detection to every URL in the webhooks table (src/app/services/validation.py:175). Nothing uses it today:

  • Slack notifications go through organization.slack_hook / slack_client (#478), not this table.
  • The only row we knew of in prod was a leftover Slack URL from before #478. It never worked and only produced 400 invalid_payload log noise. It has been deleted.
  • Rows can only be added through the admin /webhooks endpoint. The Python client does not expose it.

Problems if we keep it

  1. Double-encoded payload. dispatch_webhook passes model_dump_json() (a str) to httpx json=, so consumers receive a quoted JSON string instead of an object. #623 fixes this.
  2. No org scoping. Webhook has no organization_id and WebhookCRUD.fetch_all() is global, so every webhook receives every organization's detections. A partner registered here would see other orgs' data.
  3. Raw DB row as payload. We send the Detection row as-is (bucket_key, crop_bucket_key, pose_id, etc.). There is no public schema, so any change to the model silently breaks consumers.

Options

  • A. Remove it. Drop the model, endpoint, CRUD, schemas and the dispatch loop, and add a migration to drop webhooks. Close #623.
  • B. Make it usable. Merge #623, add organization_id to Webhook and filter dispatch by the sequence's org, and send a dedicated public payload schema (alert id, camera, location, azimuth, timestamps, platform URL) instead of the raw row.
Lingua principale
Python
Stelle
30
Fork
15
Merge medio
4g 15h
PR unite (30g)
16

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di pyronear/pyro-api

Tutte le issue di pyronear/pyro-api

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.