5.8 KiB
5.8 KiB
Roadmap — Seaca
Мобильный клиент SAC (Kotlin). Серверные задачи (API, настройки в веб-SAC, FCM с бэкенда) — в 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 — Каркас приложения ✅
- Gradle-проект: Compose, Navigation, Retrofit, DataStore (DI-фреймворк не используем —
SacRepositoryвручную) - Экран «Подключение»: URL SAC, код регистрации, логин/пароль
POST /api/v1/mobile/enroll+ refresh-сессия- Secure storage:
base_url, access/refresh token,device_id - Ошибки сети /
GET /healthперед enroll - Базовая навигация: Обзор, События, Проблемы, Хосты, Отчёты
- CI: сборка debug APK (локально —
gradlew assembleDebug, JDK 17+)
Зависимость: SAC ≥ 0.9.0 — mobile_devices_allowed, enrollment codes, POST /api/v1/mobile/enroll
v0.2 — Паритет с веб-UI (чтение) ✅
- Списки с пагинацией: events, problems, hosts, reports
- Карточки: event, problem (+ связанные events), host (+ inventory)
- Dashboard: виджеты как
GET /api/v1/dashboards/summary - Фильтры events/problems (severity, status) — упрощённый набор
- Pull-to-refresh
- Тёмная тема (системная)
- Локализация: русский
v0.3 — Действия оператора ✅
POST /api/v1/problems/{id}/ackи/resolve- Обновление карточки после действия
- Admin-only API не вызываем из приложения
- Биометрический замок при возврате в приложение
- «Доверять сертификату» для внутреннего TLS (self-signed)
v0.4 — Push (FCM) ✅ (частично)
- Firebase-проект, конфиг в app/ (не в git; шаблон
*.example) - Регистрация FCM-токена:
PUT /api/v1/mobile/devices/me/fcm - Обработка data message:
kind,id,severity, deep linkseaca://… - Notification channels по severity (critical / high / default)
- RDG flap: qwinsta/logoff через SAC API (карточка события)
- Тестовый push из веб-SAC («Проверить push на устройстве») — на стороне SAC
Зависимость: SAC worker — use_mobile в notification policy, SAC_FCM_* в sac-api.env (включается после первого APK)
v0.5 — Полировка ✅ (основное)
- Refresh token rotation (
POST /api/v1/mobile/auth/refresh) — уже в v0.1 - Биометрия при запуске и при возврате в приложение
- Pull-to-refresh на обзоре и в списках
- Формат даты/времени (несколько пресетов + системный локаль)
- Режимы push на устройстве: звук / без звука / выкл.
- Звук push: системный или пользовательский (ringtone picker)
- Экран «Моё устройство»: сервер, пользователь, роль, версия, настройки, «Выйти»
- Виджет: число open problems
- Offline-кэш последних N событий (Room)
- Минимальная версия приложения (проверка с сервера)
Сервер SAC (отдельный репозиторий) — чеклист v0.6
Эти пункты реализуются в security-alert-center, не в Seaca:
mobile_settings:devices_allowed, max devices, min app version- Таблицы
mobile_devices,mobile_enrollment_codes,mobile_refresh_tokens - Веб: Настройки → Мобильные устройства — вкл/выкл, коды, список, отзыв, способ логина
- API enrollment: создать код (admin), погасить, список устройств, revoke, test push
- JWT refresh + привязка к
device_id - 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 минуты