diff --git a/HISTORY/2026-10-07-session-log.md b/HISTORY/2026-10-07-session-log.md index 1ad026b..48acc45 100644 --- a/HISTORY/2026-10-07-session-log.md +++ b/HISTORY/2026-10-07-session-log.md @@ -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`.