Files
wiki/tasks/multi-agent/reports/dev-2026-05-21-webhooks.md
2026-05-21 16:10:01 +03:00

48 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Dev Report: Настройка Webhooks (Plane + Gitea → Orchestrator)
Дата: 2026-05-21
Статус: DONE
## Задача
Настроить webhooks из Plane и Gitea в Orchestrator с HMAC-верификацией подписи.
## Сделано
- [x] Task 1: Создан webhook в Gitea через API (id=2, events: push/pull_request/status)
- [x] Task 2: Создан webhook в Plane через прямую вставку в PostgreSQL (Plane CE не экспортирует webhook API через /api/v1/)
- [x] Task 3: Добавлена HMAC-SHA256 верификация в оба handler'а (gitea.py, plane.py)
- [x] Task 4: Пересобран Orchestrator, протестирован end-to-end (push → event в БД)
- [x] Task 5: Создана документация docs/SETUP_WEBHOOKS.md
## Изменённые файлы
- `/home/slin/repos/orchestrator/src/webhooks/gitea.py` — добавлена verify_gitea_signature(), HTTPException на 401
- `/home/slin/repos/orchestrator/src/webhooks/plane.py` — добавлена verify_plane_signature(), HTTPException на 401
- `/home/slin/repos/orchestrator/.env` — заполнены ORCH_GITEA_WEBHOOK_SECRET и ORCH_PLANE_WEBHOOK_SECRET
- `/home/slin/repos/orchestrator/docs/SETUP_WEBHOOKS.md` — новый файл, полная документация
## Результат
### Gitea webhook
- Webhook создан: URL `https://openclaw.mva154.duckdns.org/orchestrator/webhook/gitea`
- Secret: `fc122bd5cba8740c90f1d6bd64f07d3c2593d6ca`
- Push в enduro-trails → event записывается в БД (проверено: event id=18, source=gitea, type=push)
### Plane webhook
- Webhook создан в БД: id `93f0c342-a614-4248-9d0f-c107276f5620`
- URL: `https://openclaw.mva154.duckdns.org/orchestrator/webhook/plane`
- Secret: `e7d95ee9114155d5ee55a95e23ffff7c89d38b16`
### Signature verification
- Запрос без подписи → 401 ✓
- Запрос с неверной подписью → 401 ✓
- Запрос с правильной подписью → 200 ✓
- Если secret пустой в .env → верификация пропускается (backward compatible)
## Проблемы и решения
1. **Plane API не поддерживает webhook management через /api/v1/** — решено прямой вставкой в PostgreSQL (пароль: plane)
2. **Git push rejected** на тестовой ветке — решено через fetch + reset --hard перед тестом
3. **Plane webhook signature header** — использован `X-Plane-Signature` (нужно проверить при реальном событии из Plane, может отличаться)
## Заметки
- Plane CE (stable) хранит webhooks в таблице `webhooks`, workspace_id связан через `workspaces.slug='ag_proj'`
- Gitea отправляет подпись в header `X-Gitea-Signature` как hex digest (без префикса sha256=)
- Config уже содержал поля `gitea_webhook_secret` и `plane_webhook_secret` с env_prefix `ORCH_`