21 lines
2.4 KiB
Markdown
21 lines
2.4 KiB
Markdown
# Task 13: Политика анонимного доступа к POST /api/posts/preview
|
||
|
||
**Assigned to:** Antigravity (Implementation Orchestrator)
|
||
**Priority:** MEDIUM (security / quota protection / UX consistency)
|
||
**Date:** 2026-08-21
|
||
**Base SHA:** `76ab7d0e77d06cbc31b66fc5c0cdd80282d7f496`
|
||
|
||
## Проблема
|
||
Анонимный доступ к `POST /api/posts/preview` создает риски истощения квоты `VK_SERVICE_TOKEN` через пул IP-адресов либо взаимную блокировку анонимных пользователей на ключе `direct-client`. При этом весь визард создания розыгрыша (`POST /api/giveaways` и последующие шаги) жестко требует авторизации через VK ID (`requireAuthenticatedUser`), поэтому анонимный доступ к превью не обслуживает завершаемый пользовательский сценарий.
|
||
|
||
## Scope
|
||
1. Реализовать **Вариант A (рекомендуемый)**:
|
||
- Закрыть `POST /api/posts/preview` за `requireAuthenticatedUser(req)`.
|
||
- Анонимные запросы получают `401 Unauthorized` с внятным сообщением о необходимости войти через VK ID.
|
||
- Запросы без авторизации не доходят до VK API / провайдера (защита квоты приложения).
|
||
- Лимитирование становится строго user-scoped (`generalApiRateLimiter.assertAllowed('post-preview:user:' + sessionUser.id)`).
|
||
2. Обновить тесты:
|
||
- Создать `tests/preview-quota-policy.test.ts` (проверка `requireAuthenticatedUser`, 0 вызовов VK провайдера для неавторизованных запросов, успешная работа для авторизованных пользователей).
|
||
- Обновить `tests/post-preview-guard.test.ts`, `tests/security.test.ts`, `tests/rate-limit-identity.test.ts` с явным объяснением перехода на обязательную аутентификацию.
|
||
3. Документировать исправление в отчете `agents/antigravity/done/TASK-2026-08-21-13-preview-anonymous-policy.md`.
|
||
4. Полный верификационный гейт.
|