fix(auth): скрыть пароли от читателя и согласовать Portal

This commit is contained in:
Denozordec committed 2026-10-13 15:35:31 +07:00
1 parent a15917d08b
commit 608f743003
20 files changed
+1412 -19

No files matched your search

+20 -2
View File
@@ -1,6 +1,6 @@
# UX/UI: журнал реализации
Актуальное продолжение 2026-10-13: завершены191–195. Backend ux-peak194/frontend ux-peak191; Portal1.3.1 установлен наlocalhost:5175, AUTH_REQUIRED=true, actual login/JWT/RBAC/browser SSO passed. Telegram test принят API и подтверждён пользователем. Найдены196: пароль CHR выдаётся reader JWT и ссылка AppsMenu использует build-time Portal URL — исправить до приёмки приватности/ссылок. Public IPv6 недоступен у пользователя; crash/lock-loss перенесены после интеграций.12.5 открыта.
Актуальное продолжение 2026-10-13: завершены191–196. Runtime backend/frontend ux-peak196, Portal1.3.1 healthy, AUTH_REQUIRED=true; reader password redacted вlist/detail, writer/admin сохранены, runtime Portal links исправлены. SQL roles3×2 endpoints/10996ms, E2E41/1.4m, live reader/admin UI4 passed. Telegram базовая доставка подтверждена пользователем. Следующий197 — real Telegram outbox/dedupe/multiple senders/unknown hold/manual retry в собственной временной БД.12.5 открыта.
Общий план: [UX/UI по этапам и пятичасовым окнам](ux-ui-plan.md). План задаёт объём, этот журнал фиксирует выполненные блоки и ограничения. Записи расположены от новых к старым; подробная история этапа12 также сохранена в [ux-ui-stage-12.md](ux-ui-stage-12.md).
@@ -36,7 +36,25 @@
| 10 | Маршрутизация, диагностика, карта и терминал | Завершён в границах локальной приёмки 2026-10-01; блоки 10.1–10.71, внешние ограничения в 10.71 |
| 11А | Пользователи, контейнеры, сертификаты и резервные копии | Завершён в границах локальной приёмки 2026-10-01; 11А.1–11А.33, внешние ограничения в 11А.33 |
| 11Б | Оповещения, сбор данных, интеграции, релизы и настройки | Завершён в границах локальной приёмки 2026-10-03; ограничения и evidence в11Б.7 |
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в границах12.3.83; внешняя12.5 в работе, выполненные блоки1–195 и ограничения ниже. Runtime backend ux-peak194/frontend ux-peak191. |
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Локальная приёмка завершена в границах12.3.83; внешняя12.5 в работе, выполненные блоки1–196 и ограничения ниже. Runtime backend/frontend ux-peak196. |
## 12.5.196 — приватность серверов и согласованный runtime Portal (2026-10-13)
Реальное reader JWT в195 подтверждённо получало plaintext password CHR. Теперь serverReadForUser на HTTP list/detail возвращает password="" для пользователя без mm:servers:write/admin. Writer/admin и прежний AUTH_REQUIRED=false сохраняют existing DTO для редактирования. is_admin сам по себе не заменяет permission. Проекция создаёт копию и не меняет repository rows, хранимые/native credentials или работу collectors. Изменены servers-mapper.ts и два GET handlers routes/servers.ts; внутренние get/listServersRead остаются пригодными для native операций. Это защита этих endpoints, не аудит всех экспортов/secret-bearing DTO проекта.
authPortalBaseUrl теперь предпочитает runtime config, как существующий hook switcher fetch. Ссылка «Настроить на портале» больше не ведёт к build-time auth.shnt.top при отдельном тестовом issuer. ReUI PRO/base-nova/Frame/AppsMenu переиспользованы, vendor/стили/разметка не менялись. Unit подтвердил build fallback/runtime override/trailing slash.
Owned SQL test выполняет actual buildApp/auth middleware/handlers с подписанными test JWT на отдельной ограниченной роли: reader/writer/admin ×list/detail,401 безtoken, password вБД unchanged. Passed10996ms, own DB/role/container удалены. Новый test:server-privacy включён вtest:all, обычный прогон без явной own DB честно skip. Source TypeScript/backend build/scoped ESLint passed.41 unique E2E (runtime links2,header4,servers35) passed1.4m. Изолированные JWT не выдаются за реальный Portal: он проверен отдельно.
Production backend/frontend ux-peak196 развёрнуты.466 backend+525 frontend source files и1044 compiled backend artifacts совпали. Portal1.3.1/SQLite/shared lab secret и AUTH_REQUIRED=true сохранены новой закрытой Compose override; оригинальные credentials/.env не копировались. Реальный Portal admin API сохраняет необходимые поля редактирования, реальный reader list/detail не содержитпароль, валидная попытка создания403.4 live UI (reader/admin1440/320) безmocks/page errors/overflow: readonly control disabled, admin enabled, runtime Portal link http://localhost:5175/admin/apps. Собственные Portal users удалены. CHR config/passwords не менялись, новых Telegram send в196 нет.
Протоколы: [SQL](ux-ui/acceptance/portal196-sql196-result.json), [source](ux-ui/acceptance/portal196-source196-result.json), [compiled](ux-ui/acceptance/portal196-compiled196-result.json), [runtime](ux-ui/acceptance/portal196-runtime196-result.json), [fixture E2E](ux-ui/acceptance/portal196-e2e-2026-10-13.json), [actual Portal API](ux-ui/acceptance/portal-live196-api-2026-10-13.json), [live UI4](ux-ui/acceptance/portal196-live-ui-2026-10-13.json).
| Референс | Схема |
| --- | --- |
| [ReUI App Shell12](https://reui.io/preview/base/app-shell-12?ref=mcp) | Runtime issuer/Portal → меню приложений → тот же Portal; reader → masked DTO + blocked edit, writer → existing editor |
Следующий197: реальная доставка из outbox через собственную временную БД, dedupe/two senders, controlled lost receipt после реального Telegram acceptance, no automatic repeat, explicit acknowledged retry/stale version/RBAC. Планируется3 помеченных test messages, включая намеренный повтор№2; не превращать controlled receipt suppression в физическую WAN/lost-ACK приёмку. Portal JWT revocation доexp, настоящее expiry/refresh/client OS и crash/lock-loss остаются отдельными границами.12.5 открыта.
## 12.5.195 — реальный Portal1.3.1 и доставка Telegram (2026-10-13)