HISTORY: журнал сессии 2026-10-07 (IoT P0-1/P0-2, P1-4, P0-3.2, P0-7)
This commit is contained in:
@@ -0,0 +1,52 @@
|
|||||||
|
# Журнал сессии — 2026-10-07 (IoT: P0-доработки до production-ready)
|
||||||
|
|
||||||
|
**Рабочая папка:** /home/naeel/nubes/SQS_und_IoT/IoT
|
||||||
|
**Ветка:** feature/replace-kafka-with-sqs
|
||||||
|
|
||||||
|
> Основание: `doc/thinking/remediation-plan-2026-10-05.md` (на ветке master) —
|
||||||
|
> план по двум анализам готовности. Работа только по явной команде; после каждой
|
||||||
|
> правки — коммит.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Сделано
|
||||||
|
|
||||||
|
### P0-1/P0-2 — tenant-граница + обязательная подпись JWT (`5e1cd28`)
|
||||||
|
- `internal/service/api/middleware/auth.go`:
|
||||||
|
- `validateJWT` теперь возвращает `sub`;
|
||||||
|
- middleware сверяет `sub` с `{namespace}` из URL (`mux.Vars`) → 403 при
|
||||||
|
несовпадении (закрыт горизонтальный доступ к чужим namespace);
|
||||||
|
- вне `AUTH_TEST_MODE` подпись HS256 ОБЯЗАТЕЛЬНА: без `JWT_HMAC_SECRET`
|
||||||
|
middleware отказывает (fail-closed, 500), а не проверяет «структурно».
|
||||||
|
- `internal/service/config/config.go`: `JWT_HMAC_SECRET` добавлен в список
|
||||||
|
обязательных (когда `AUTH_TEST_MODE=false`) — отказ на старте.
|
||||||
|
|
||||||
|
### P1-4 — убраны неаутентифицированные `/internal/mqtt/*` (`cd47258`)
|
||||||
|
- `internal/service/api/router.go`: удалены маршруты `/internal/mqtt/auth|acl`.
|
||||||
|
EMQX ходит в PostgreSQL напрямую (`backend=postgresql`), HTTP-fallback был
|
||||||
|
не нужен и висел на публичном порту без auth (перебор паролей/ACL).
|
||||||
|
- Примечание: те же эндпоинты остаются в ЛЕГАСИ `internal/api/` (не исполняется).
|
||||||
|
|
||||||
|
### P0-3 (часть 2) — пароль устройства не отдаётся повторно (`f480be3`)
|
||||||
|
- `internal/service/api/handler/devices.go`: `GetIoTDevice` больше не возвращает
|
||||||
|
`mqtt_password` (передаём `""` в `deviceToResponse`). Пароль — только при создании.
|
||||||
|
- Часть 1 (хэш паролей в БД + перевод EMQX на `password_hash_algorithm`) НЕ
|
||||||
|
сделана: требует правки `emqx/emqx.conf` и миграции существующих строк.
|
||||||
|
|
||||||
|
### P0-7 — подтверждение из SQS только после записи в БД (`c84cbae`)
|
||||||
|
- Проблема: `InsertTelemetry` лишь буферизует и возвращает nil до фактической
|
||||||
|
записи; consumer удалял сообщение сразу после `processTelemetry == nil` →
|
||||||
|
краш/flush-ошибка в окне = безвозвратная потеря телеметрии.
|
||||||
|
- `internal/storage/iotpg/iot_telemetry_store.go`: добавлен `Flush(ctx)`.
|
||||||
|
- `internal/service/consumer/consumer.go`: копим receipt handles, вызываем
|
||||||
|
`store.Flush(ctx)`, и только при успехе — `DeleteMessage`. При ошибке flush
|
||||||
|
сообщения НЕ удаляются (вернутся после visibility timeout).
|
||||||
|
|
||||||
|
## Осталось (не сделано)
|
||||||
|
- P0-3 часть 1 (хэш паролей + EMQX), P0-8 (идемпотентность), P1-9 (`/health`
|
||||||
|
отражает состояние подсистем), P1-11/P1-12 (тесты/CI), P2-14 (вычистить
|
||||||
|
легаси `internal/api/`).
|
||||||
|
- Платформенные проблемы (wss ~150с, MSS/MTU) — вне кода.
|
||||||
|
|
||||||
|
## Проверки
|
||||||
|
- `go build ./...` и `go vet ./internal/...` — зелёные на каждом шаге.
|
||||||
Reference in New Issue
Block a user