- 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
2.9 KiB
2.9 KiB
app-secrets Specification
Purpose
Хранение секретов приложения в слое метаданных с автогенерацией: единый стабильный секрет на инсталляцию без обязательной настройки окружения.
Requirements
Requirement: Хранение секрета приложения
Слой метаданных SHALL хранить секрет подписи токенов приложения и SHALL возвращать один и тот же секрет при последующих запусках.
Scenario: Первый запуск
- WHEN секрет ещё не сохранён
- THEN система генерирует случайный секрет и сохраняет его в слое метаданных
Scenario: Повторный запуск
- WHEN секрет уже сохранён
- THEN система использует сохранённый секрет и не генерирует новый
Requirement: Отсутствие ручного секрета
Система SHALL работать без секрета, заданного в окружении, и SHALL не требовать его наличия при старте.
Scenario: Секрет не задан в окружении
- WHEN переменная секрета не задана
- THEN система запускается, используя секрет из слоя метаданных
Requirement: Конкурентный первый запуск
При одновременном первом запуске нескольких инстансов на общей базе метаданных система SHALL обеспечивать единый сохранённый секрет для всех инстансов.
Scenario: Гонка первого запуска
- WHEN два инстанса одновременно обнаруживают отсутствие секрета
- THEN сохраняется ровно один секрет, и оба инстанса используют его
Requirement: Использование секрета для подписи URL
При отсутствии отдельного секрета подписи URL система SHALL использовать секрет из слоя метаданных.
Scenario: URL_SECRET не задан
- WHEN отдельный секрет подписи URL не задан
- THEN подпись URL объектов использует секрет приложения из слоя метаданных
Scenario: URL_SECRET задан
- WHEN отдельный секрет подписи URL задан
- THEN он используется независимо от секрета приложения