Files
doc-manager/.claude/tasks/T-2026-001.md
T
admin 49ebe245d0 feat(orders): T-2026-001 — verify X-Site-Key via Auth_server, drop local Sites as source of truth
POST /api/incoming/orders now validates incoming key through
https://auth.queo.ru/api/verify (with targetService=doc_manager, scope=incoming_orders).
Accepts key in X-Site-Key, X-Api-Key, or Authorization: Bearer headers.

Local Sites table becomes optional convenience map: if a Site with matching
slug exists, we use its organizationId and link Order.siteId; otherwise the
Order is created under DEFAULT_ORGANIZATION_ID with no siteId. No local key
storage is needed anymore — Auth_server is the source of truth.

modules/sites/auth-verify.ts:
- 5-second timeout to /api/verify
- 5-minute TTL cache on positive verify (configurable AUTH_VERIFY_TTL_SECONDS)
- 30-second TTL on negative (so spam attacks don't hammer Auth)
- Graceful degrade: Auth unreachable → returns {valid:false, error:'auth_unreachable:…'},
  endpoint replies 401 with that detail (does NOT silently accept)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-16 22:38:25 +03:00

2.1 KiB

T-2026-001 — Приём заявок с vote: проверка ключа через Auth_server

Часть кросс-проектной задачи T-2026-001. Overview: C:\project\orchestrator\tasks\T-2026-001-vote-doc-orders\_overview.md Проект: Doc_manager (doc.queo.ru)

Зависимости

  • Делать после: Auth_server (нужен verify-endpoint)
  • Блокирует: сквозной тест
  • Можно параллельно с: заданием Question

Контекст

Endpoint /api/incoming/orders и раздел /orders уже реализованы. Меняем источник истины по сайтам/ключам: вместо локальной таблицы Sites — проверка ключа централизованно через Auth_server.

Что сделать

  • /api/incoming/orders: входящий X-Site-Key проверять через Auth verify (а не по локальной таблице Sites); из ответа брать идентичность сайта (siteId/domain).
  • Кэшировать результат verify (короткий TTL), обрабатывать недоступность Auth (понятная ошибка/повтор, без потери заявки).
  • Привязывать созданный Order к siteId из Auth.
  • Локальный реестр Sites: вывести из обязательного пути приёма заявок (оставить как кэш/справочник или убрать — по ситуации, не ломая текущие данные).
  • Проверить payload (customerName, customerInn, customerEmail, acceptedOfferAt, items[]) и «Перевести в проект» (клиент по ИНН).

Критерий готовности

  • curl с ключом, выпущенным Auth, проходит verify и создаёт Order(new), видимый в /orders; без валидного ключа — отказ.

Статус: TODO