From a85e086c943a7610efcfbf336bd2852c62e24e42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Fri, 14 Aug 2026 09:46:59 +0400 Subject: [PATCH] =?UTF-8?q?HISTORY:=20v0.1.28=20+=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D0=B1=D0=BB=D0=B5=D0=BC=D0=B0=20gateway=20401=20=D1=81=20?= =?UTF-8?q?=D0=B4=D0=B0=D1=82=D0=B0=D1=86=D0=B5=D0=BD=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D1=8B=D1=85=20IP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HISTORY/2026-08-14-session-log.md | 32 +++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/HISTORY/2026-08-14-session-log.md b/HISTORY/2026-08-14-session-log.md index e3608db..bd7d7b3 100644 --- a/HISTORY/2026-08-14-session-log.md +++ b/HISTORY/2026-08-14-session-log.md @@ -200,3 +200,35 @@ digest `sha256:b4d1dccda75a67e1a5db3887576e1112993d6485504e683d0fa82a2374bca99b` email из JWT детерминированно задаёт TenantID/AccessKey/SecretKey; рандома нет; ключи на экране не светятся — только по кнопке в модалке с подсказкой; `POST /ui/api/auth` перестаёт отдавать ключи; новый `GET /ui/api/credentials` под JWT-сессией. + +--- + +## v0.1.28 — email-идентичность, детерминированные креды, credentials-эндпоинт (14.08.2026) + +**Что сделано**: +1. `app/tenant/tenant_store.go`: индекс `bySub` → `byEmail`; `GetByEmail` вместо `GetBySub`; + `CreateFromJWT(sub, email, maxQueues)` — ID/AccessKey/SecretKey детерминированы из email + (SHA256, соль `shared-sqs:secret-key:v1` для секрета). Рандом остался только для manual-тенантов. + Легаси-тенант (старые ключи/ID) при входе полностью пересчитывается: старые индексы + и Redis-запись удаляются под мьютексом. +2. `app/auth/jwt.go`: `TenantIDFromSub` (sless) УДАЛЁН — связей с внешними сервисами больше нет. +3. `app/admin/admin.go`: `jwtAuth` требует email (400 без него), НЕ возвращает access/secret key; + новый `GET /ui/api/credentials` отдаёт ключи под JWT-сессией; jwtMiddleware по email. +4. `app/ui/index.html`: Access Key убран из таблицы и карточки тенанта; кнопки «Credentials» + (дашборд + тенант) открывают модалку с ключами и подсказкой (зачем ключи, export-команды, + пример aws cli). Логин-страница: образ v0.1.28. +5. `Makefile`: VERSION=v0.1.28. + +**Проверки**: build OK, vet OK, тесты admin/models OK. Локально через мок-gateway: +auth без ключей ✓, credentials отдаёт ключи ✓, без токена 401 ✓. Хеши сверены с python: +tenant_id `t-fec713a719ad0b33`, AK `SSAK-fec713a719ad0b33c91fa54a`, SK `e898ed410a…`. + +**Деплой**: образ v0.1.28 digest `sha256:c6b63f4c…`, поставлен по digest +(`set image … app=naeel/shared-sqs@sha256:c6b63f4c…`), под `containerk8s-86df69bfb-drv9x` Ready. +`/health` на проде → `{"status":"ok","version":"v0.1.28"}`. + +**⚠ ПРОБЛЕМА (не наш код)**: TEST-gateway теперь отдаёт 401 на запросы с датацентровых IP +(кластер iot-naeel И ВМ 5.172.178.213) — с рабочей станции тот же токен даёт 200. +Ранее (~09:00) под успешно валидировался. Похоже на rate-limit/бан DDoS-Guard по egress-IP +платформы после сегодняшних частых запросов. Вход в UI будет 403, пока шлюз не отпустит. +SQS API, /health, /, /metrics не затронуты.