Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

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

Đang mở
#709 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 2 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
5/5
Thời gian dự kiến
Hơn một tuần
Mức phù hợp với người mới
25/100
Loại issue
Tái cấu trúc
Độ rõ ràng
Cần làm rõ
Mức độ hoạt động
Sôi nổi
Công nghệ
fastapi, postgresql, python
Lĩnh vực
api, backend

Hướng nghiên cứu

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.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

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.
Ngôn ngữ chính
Python
Star
30
Fork
15
Merge trung bình
3 ngày 18 giờ
Pull request đã merge (30 ngày)
13

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của pyronear/pyro-api

Tất cả issue của pyronear/pyro-api

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.