doc: журнал — полный код-ревью сервиса и фиксы замечаний (2026-10-08)

This commit is contained in:
Repinoid
2026-10-08 15:19:36 +03:00
parent 572c617f44
commit b947f1d467
+18
View File
@@ -131,3 +131,21 @@ Redis-схема не меняется (сообщения и так лежат
Осталось осознанно не тронуто: `DeleteMessageBatch` итерация с `RemoveIndex` внутри
безопасна (tombstone не меняет длину) — покрыто тестами.
## 8. Полный код-ревью сервиса (2026-10-08) — коммит `5b0e89a`
Разобран весь сервис: auth (SigV4 + JWT), router, billing, tenant, admin/UI API,
создание очередей. Критичных проблем не найдено. Исправлено три замечания:
1. **TOCTOU лимита тенантов** — `TenantStore.Create`: проверка `MaxTenantsGlobal`
была только под RLock, вставка — позже под Lock без повторной проверки. Добавлена
проверка под Lock (как уже было в `CreateFromJWT`).
2. **Потеря `NubesSub` при рестарте** — `CreateFromJWT`: обновлённый `NubesSub`
сохранялся в Redis только внутри ветки смены `MaxQueues`; теперь персист при
любом реальном изменении, запись только если что-то изменилось.
3. **`http.Client` на каждый вызов** — `auth.PingNubesAPI` переведён на общий
клиент (keep-alive).
UI/безопасность проверены отдельно: `listTenants`/`getTenant`/IDOR для UI-тенанта —
видит только себя, чужие `{id}` отсекаются, удаление через UI запрещено,
`SecretKey` отдаётся только по явному `/ui/api/credentials`.