Files
seaca/docs/ROADMAP.md
T
PapaTramp c9fb5eefec docs: mark SAC 0.9.0 mobile backend checklist done
Server-side Seaca API is available; Android client can start v0.1.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-10 13:19:14 +10:00

5.2 KiB
Raw Blame History

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, Hilt/Koin, Retrofit, DataStore
  • Экран «Подключение»: URL SAC, код регистрации, логин/пароль
  • POST /api/v1/auth/login + обмен кода на device_id (когда API готов на SAC)
  • Secure storage: base_url, access/refresh token, device_id
  • Экран «Ошибка / нет сети» и проверка GET /health
  • Базовая навигация: Обзор, События, Проблемы, Хосты, Отчёты
  • CI: сборка debug APK (опционально — позже)

Зависимость: SAC ≥ 0.9.0mobile_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, type, host) — упрощённый набор
  • Pull-to-refresh; polling в foreground (SSE на Android в фоне не используем)
  • Тёмная тема (как веб)
  • Локализация: русский

v0.3 — Действия оператора

  • POST /api/v1/problems/{id}/ack и /resolve
  • Обновление списков после действия
  • Скрытие admin-only API (403) — без попыток открыть settings/users
  • Биометрический замок при возврате в приложение
  • Certificate pinning / «Доверять сертификату» для внутреннего TLS

v0.4 — Push (FCM)

  • Firebase-проект, google-services.json (не в git)
  • Регистрация FCM-токена: PUT /api/v1/mobile/devices/{id}/fcm
  • Обработка data message: kind, id, severity, deep link seaca://…
  • Notification channels по severity (critical / high / default)
  • Actions в уведомлении: «Подтвердить» / «Закрыть» problem (operator+)
  • Тестовый push из веб-SAC («Проверить push на устройстве»)

Зависимость: SAC worker — use_push_mobile в notification policy, push_notify.py


v0.5 — Полировка

  • Refresh token rotation (POST /api/v1/auth/refresh)
  • Виджет: число 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 минуты