823ac4df57
Co-authored-by: Cursor <cursoragent@cursor.com>
113 lines
5.9 KiB
Markdown
113 lines
5.9 KiB
Markdown
# Roadmap — Seaca
|
||
|
||
Мобильный клиент SAC (Kotlin). Серверные задачи (API, настройки в веб-SAC, FCM с бэкенда) — в [security-alert-center](https://git.kalinamall.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)
|
||
- [ ] Actions в уведомлении: «Подтвердить» / «Закрыть» problem (operator+) — **после первого APK**
|
||
- [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 минуты
|