docs: решено перевести хранилище и файлы записей на PocketBase

- разведка pocketbase-admin-fit ответила замером панели версии 0.39.10:
  записка в docs/research/pocketbase.md, решение — в ADR
- панель показывает файлы и пользователей только своих, поэтому файлы
  переезжают в её раскладку, а вход идёт через её провайдера OIDC
- периметр расширился панелью на /_/ и паролем суперпользователя;
  закрывает её Authelia на прокси, задачи в беклоге у этого нет
This commit is contained in:
av
2026-08-11 13:03:38 +03:00
parent ba7b4f37a6
commit 10ffe8bec3
10 changed files with 299 additions and 34 deletions
+16 -4
View File
@@ -2,7 +2,7 @@
- **Тип:** feature
- **Категория:** Очередь
- **Зачем:** HTTP API открыт наружу без аутентификации: любой из интернета заводит задачи за наши деньги и читает чужие расшифровки по идентификатору.
- **Зачем:** HTTP API открыт наружу без аутентификации: любой из интернета заводит задачи за наши деньги и читает чужие расшифровки по идентификатору. Ответ провайдера разбирает PocketBase, а не наш код.
- **Теги:** goal:multi-user, question
Двигает пункт 1 «Завершения» цели: неаутентифицированный запрос к записям не
@@ -13,12 +13,22 @@
здесь ещё нет: после входа видно всё, что видно сейчас, — этим занимается
`record-ownership`.
**Ответ провайдера разбирает PocketBase, а не наш код** — решено 2026-08-11
([adr](../../docs/adr/ADR-2026-08-11-pocketbase-storage-with-admin-panel.md)).
У её коллекции пользователей настраивается провайдер `oidc` с адресами Authelia,
и учётные записи заводятся сами; проверено на версии 0.39.10,
[docs/research/pocketbase.md](../../docs/research/pocketbase.md). Отсюда порядок:
задача идёт после `pocketbase-storage`, до неё настраивать нечего.
## Затрагивает
- новые эндпоинты входа и выхода, обработка ответа провайдера;
- настройка провайдера `oidc` у коллекции пользователей PocketBase: адреса
Authelia, идентификатор клиента, секрет, соответствие полей учётной записи;
- эндпоинты входа и выхода, которые PocketBase приносит своими;
- `POST /api/audio` и `GET /api/status/:id` — оба уходят за аутентификацию;
- `GET /health` и `GET /metrics` — решить и записать, остаются ли открытыми;
- хранение сессии: таблица или подписанная кука;
- хранение сессии: её ведёт PocketBase, и решить надо, чем она предъявляется
приложению;
- секция конфигурации под провайдера: адрес, идентификатор клиента, секрет;
- `docs/security.md` — периметр меняется, и первая его строка перестаёт быть
верной;
@@ -42,7 +52,9 @@
Владельца у записи здесь не заводим и выборку не сужаем: после входа видно
столько же, сколько сейчас. Инвариант «бот отвечает только тем, кто в белом
списке» не трогаем — он живёт до `telegram-account-link`.
списке» не трогаем — он живёт до `telegram-account-link`. Панель администратора
тоже не трогаем: наружу её закрывает Authelia на обратном прокси, а это работа
выкладки.
## Вопросы