chore(home): mirror from kalinamall (6398d48) with papatramp URLs

This commit is contained in:
2026-07-14 20:43:58 +10:00
commit 9116e0472d
59 changed files with 5335 additions and 0 deletions
+112
View File
@@ -0,0 +1,112 @@
# Roadmap — Seaca
Мобильный клиент SAC (Kotlin). Серверные задачи (API, настройки в веб-SAC, FCM с бэкенда) — в [security-alert-center](https://git.papatramp.ru/PapaTramp/security-alert-center), фаза **v0.6 — Mobile**.
---
## Принятые решения
| Тема | Решение |
|------|---------|
| UI | Kotlin + Jetpack Compose (нативно) |
| Push | FCM (бесплатный канал доставки) |
| Привязка | Код регистрации от администратора (+ URL сервера; QR опционально позже) |
| Оповещения | Те же правила SAC: `min_severity`, cooldown, dedup — канал `push_mobile` в policy |
| Админка устройств | Только веб-SAC: список, отзыв, способ логина, выдача кодов |
| Роли | `viewer` — просмотр; `operator` — ack/resolve; admin-функции — не в приложении |
---
## v0.1 — Каркас приложения ✅
- [x] Gradle-проект: Compose, Navigation, Retrofit, DataStore (DI-фреймворк не используем — `SacRepository` вручную)
- [x] Экран «Подключение»: URL SAC, код регистрации, логин/пароль
- [x] `POST /api/v1/mobile/enroll` + refresh-сессия
- [x] Secure storage: `base_url`, access/refresh token, `device_id`
- [x] Ошибки сети / `GET /health` перед enroll
- [x] Базовая навигация: Обзор, События, Проблемы, Хосты, Отчёты
- [ ] CI: сборка debug APK (локально — `gradlew assembleDebug`, JDK 17+)
**Зависимость:** SAC **≥ 0.9.0** — `mobile_devices_allowed`, enrollment codes, `POST /api/v1/mobile/enroll`
---
## v0.2 — Паритет с веб-UI (чтение) ✅
- [x] Списки с пагинацией: events, problems, hosts, reports
- [x] Карточки: event, problem (+ связанные events), host (+ inventory)
- [x] Dashboard: виджеты как `GET /api/v1/dashboards/summary`
- [x] Фильтры events/problems (severity, status) — упрощённый набор
- [x] Pull-to-refresh
- [x] Тёмная тема (системная)
- [x] Локализация: русский
---
## v0.3 — Действия оператора ✅
- [x] `POST /api/v1/problems/{id}/ack` и `/resolve`
- [x] Обновление карточки после действия
- [x] Admin-only API не вызываем из приложения
- [x] Биометрический замок при возврате в приложение
- [x] «Доверять сертификату» для внутреннего TLS (self-signed)
---
## v0.4 — Push (FCM) ✅ (частично)
- [x] Firebase-проект, конфиг в app/ (не в git; шаблон `*.example`)
- [x] Регистрация FCM-токена: `PUT /api/v1/mobile/devices/me/fcm`
- [x] Обработка data message: `kind`, `id`, `severity`, deep link `seaca://…`
- [x] Notification channels по severity (critical / high / default)
- [x] RDG flap: qwinsta/logoff через SAC API (карточка события)
- [x] Тестовый push из веб-SAC («Проверить push на устройстве») — на стороне SAC
**Зависимость:** SAC worker — `use_mobile` в notification policy, `SAC_FCM_*` в `sac-api.env` (включается после первого APK)
---
## v0.5 — Полировка ✅ (основное)
- [x] Refresh token rotation (`POST /api/v1/mobile/auth/refresh`) — уже в v0.1
- [x] Биометрия при **запуске** и при возврате в приложение
- [x] Pull-to-refresh на обзоре и в списках
- [x] Формат даты/времени (несколько пресетов + системный локаль)
- [x] Режимы push на устройстве: звук / без звука / выкл.
- [x] Звук push: системный или пользовательский (ringtone picker)
- [x] Экран «Моё устройство»: сервер, пользователь, роль, версия, настройки, «Выйти»
- [ ] Виджет: число open problems
- [ ] Offline-кэш последних N событий (Room)
- [ ] Минимальная версия приложения (проверка с сервера)
---
## Сервер SAC (отдельный репозиторий) — чеклист v0.6
Эти пункты реализуются в **security-alert-center**, не в Seaca:
- [x] `mobile_settings`: `devices_allowed`, max devices, min app version
- [x] Таблицы `mobile_devices`, `mobile_enrollment_codes`, `mobile_refresh_tokens`
- [x] Веб: **Настройки → Мобильные устройства** — вкл/выкл, коды, список, отзыв, способ логина
- [x] API enrollment: создать код (admin), погасить, список устройств, revoke, test push
- [x] JWT refresh + привязка к `device_id`
- [x] FCM HTTP v1 из worker (`SAC_FCM_*` в `sac-api.env`)
- [ ] Audit: выдача кода, enroll, revoke, смена FCM
---
## Не в плане (пока)
- iOS
- UnifiedPush без FCM
- Управление пользователями SAC из телефона
- Настройки Telegram/SMTP с телефона
- Несколько SAC-серверов в одном приложении
---
## KPI
- От события на SAC до push на телефон: p95 < 45 с (как Telegram)
- Pairing по коду: < 2 минут для оператора
- Отзыв устройства: push прекращается в течение 1 минуты
+39
View File
@@ -0,0 +1,39 @@
# Seaca — оператор
## Подключение
URL API SAC + код `sacmob_…` + логин/пароль. Self-signed TLS — подтвердить доверие сертификату.
## Разделы
| Раздел | Содержание |
|--------|------------|
| Обзор | Сводка 24 ч; pull-to-refresh |
| События | Лента; **RDG flap** в заголовке |
| Проблемы | Ack / Resolve (monitor+) |
| Хосты | Агенты, heartbeat |
| Отчёты | `report.daily.ssh` / `report.daily.rdp` |
| Моё устройство | Push, звук, дата, выход |
## RDG flap — qwinsta / logoff
Пара RD Gateway **302→303** за несколько секунд:
1. Событие **302** или **303** (метка **RDG flap**).
2. **qwinsta / logoff**`POST /api/v1/events/{id}/actions/qwinsta` на SAC.
3. SAC: WinRM **qwinsta** на клиентский ПК (`internal_ip`).
4. В диалоге — сессии, **logoff** по ID.
Нужен **Windows domain admin** в настройках SAC (WinRM).
## Push
Режимы на экране «Моё устройство». Тап — карточка события или problem.
## Блокировка
Биометрия/PIN при запуске и возврате в приложение.
## Потеря доступа
Новый код или снятие отзыва устройства в веб-SAC.