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>
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user