Files
ds-galo/openspec/changes/archive/2026-10-11-metadata-managed-jwt-secret/proposal.md
T
iu 8638d1bbfc chore(openspec): archive completed changes and sync main specs
- archive local-fs-storage-backend, sqlite-metadata-backend,
  storage-orphan-reconciliation, metadata-managed-jwt-secret, default-local-backends
- sync specs: storage-backends, metadata-backends, storage-reconciliation,
  app-secrets; update photos/share-links
- defaults reflected in specs: SQLite and local FS
2026-10-11 10:19:44 +03:00

37 lines
2.2 KiB
Markdown

# Proposal
## Why
`JWT_SECRET` сейчас обязателен в окружении: его нужно задавать вручную и одинаково на
всех инстансах. Хранение секрета в слое метаданных с автогенерацией убирает обязательный
секрет из env и даёт стабильное значение на инсталляцию.
## What Changes
- Убрать обязательный `JWT_SECRET` из конфига и окружения.
- Добавить таблицу `app_settings` (key/value) в оба бэкенда метаданных (PostgreSQL и
SQLite) и репозиторий чтения/создания секрета.
- При старте после открытия метаданных читать секрет или генерировать его
(`crypto/rand`) и сохранять; использовать для `TokenManager` и как fallback при подписи
URL объектов.
- `URL_SECRET` остаётся необязательным env-оверрайдом.
- Обновить `.env.example`, `project.md`, `README.md`.
## Capabilities
### New Capabilities
- `app-secrets`: хранение секретов приложения (JWT) в слое метаданных с автогенерацией при первом использовании.
### Modified Capabilities
<!-- Нет изменений требований существующих спек: для клиента поведение аутентификации не меняется. -->
## Impact
- `backend/internal/config` (убрать `JWTSecret` и его обязательность).
- `backend/internal/app`, `backend/cmd/server` (порядок старта: метаданные → секрет →
storage/app).
- `backend/internal/storage` (fallback-секрет для подписи URL).
- Новая settings-репозиция (`internal/settings`), миграции PostgreSQL и SQLite.
- Тесты (контрактные, e2e), `.env.example`, `project.md`, `README.md`.
- Не затрагивает формат данных клиента.