Implement ecosystem contract v2: capabilities, shared ledgers, attachments
- GET /v1/capabilities and the extended sync entity allowlist (§0, §1). - Shared ledgers (§7): ledgers, members and hashed one-time invite codes; X-Balance-Ledger selects the space on /v1/sync and /v1/attachments with its own records, change stream and cursor. Personal space keeps the v1 tables and behaviour; the migration only adds tables. - Attachments (§8): SHA-256, size and media type checks, blob files in BALANCE_ATTACHMENTS_DIR (default: attachments next to the database), garbage collection of unreferenced blobs with a grace period for fresh uploads, and ledger deletion removes its blobs. - Tests for every new endpoint and error code; API, sync, data model, security, deployment and README docs updated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
10272f3851
commit
dfb4fe4e1a
17 files changed
+2496
-56
No files matched your search
@@ -51,6 +51,25 @@ HTTP следует оставлять только для controlled local deve
|
||||
- JSON size;
|
||||
- cursor/sequence bounds.
|
||||
|
||||
## Общие пространства и вложения (контракт v2)
|
||||
|
||||
- Доступ к ledger проверяется на каждый запрос по `ledger_members`; `X-Balance-Ledger`
|
||||
не участника → `403`, неизвестный → `404`. Управлять пространством и выдавать
|
||||
приглашения может только владелец.
|
||||
- Коды приглашений — 10 случайных символов из 32 (50 бит, `OsRng`), одноразовые,
|
||||
7 дней; в БД хранится только SHA-256. `/v1/ledgers/join` ограничен общим
|
||||
лимитом 30 запросов/мин на IP.
|
||||
- Вложения проверяются до записи на диск: формат хеша, тип из белого списка,
|
||||
размер ≤ 10 MiB и SHA-256 тела. Файл пишется во временный файл и
|
||||
переименовывается. Тело больше 2 MiB читается только после проверки
|
||||
access token. Путь к файлу строится из проверенного hex-хеша и id
|
||||
пространства (небезопасный id заменяется его хешем), поэтому значения клиента
|
||||
не становятся компонентами пути.
|
||||
- Файлы отдаются с `Content-Disposition: attachment`, `X-Content-Type-Options:
|
||||
nosniff`, `Cache-Control: no-store` и не отображаются в origin веб-клиента.
|
||||
- Каталог вложений содержит финансовые документы: права `0750`, резервные
|
||||
копии — вместе с БД.
|
||||
|
||||
## Logging
|
||||
|
||||
Безопасно логировать:
|
||||
|
||||
Reference in new issue
Block a user