System-to-System (#28): подписанные доставки в системные webhooks
- app/signature.py: HMAC-подпись/проверка — зеркало WebhookSignature.php
  gnexus-auth ("t=<unix>,v1=hmac_sha256('<t>.<body>', secret)"); verify —
  константное сравнение + окно свежести 300 с (replay). Пригодится и для
  входящих вебхуков gnexus-auth (single sign-out).
- app/worker/senders.py: POST в endpoint цели s2s с заголовками
  X-Gnexus-Event-Id/Type/Timestamp/Signature + X-Synapse-Source; секрет
  per-target (token_ref → S2S_SECRET_*), в БД только ссылка; 2xx = успех.
- tasks.py: первая попытка отправки сразу на маршрутизации (не ждать
  beat-цикла), провал — общий ретрай-цикл; _attempt_send теперь одна.
- docs/05: отправка/ретраи/референс-код для принимающих сервисов;
  .env.example: S2S_SECRET_*; README: структура, опечатка.

Проверено на живом стеке с приёмником-верификатором: OK (подпись/свежесть/
заголовки/тело), и цель без секрета — честная ошибка с именем переменной.

Co-Authored-By: Claude Code <noreply@anthropic.com>
1 parent 80d54ee commit 98b371157321176318d43766945b6b16c8540ac7
@Eugene Sukhodolskiy Eugene Sukhodolskiy authored 23 hours ago
Showing 6 changed files
View
.env.example
View
README.md
View
app/signature.py 0 → 100644
View
app/worker/senders.py 0 → 100644
View
app/worker/tasks.py
View
docs/05-ingestion-api.md