From 927948d646bba9984c1b9bd1c6fb7483b0f57164 Mon Sep 17 00:00:00 2001 From: PTah Date: Wed, 10 Jun 2026 12:34:00 +1000 Subject: [PATCH] =?UTF-8?q?docs:=20initial=20Seaca=20repo=20=E2=80=94=20RE?= =?UTF-8?q?ADME=20and=20mobile=20roadmap?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Kotlin Android client for SAC with FCM push and admin enrollment codes. Co-authored-by: Cursor --- .gitignore | 28 +++++++++++++ README.md | 61 +++++++++++++++++++++++++++ docs/ROADMAP.md | 107 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 196 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 docs/ROADMAP.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a649a34 --- /dev/null +++ b/.gitignore @@ -0,0 +1,28 @@ +# Android / Gradle +*.iml +.gradle/ +/local.properties +/.idea/ +.DS_Store +/build/ +/captures/ +.externalNativeBuild/ +.cxx/ +*.apk +*.aab +*.ap_ +*.dex + +# Kotlin +.kotlin/ + +# Secrets +google-services.json +*.keystore +*.jks +local.properties +secrets.properties + +# Env +.env +.env.* diff --git a/README.md b/README.md new file mode 100644 index 0000000..ddee696 --- /dev/null +++ b/README.md @@ -0,0 +1,61 @@ +# Seaca + +**Seaca** (Security Event Alert Center App) — нативный мобильный клиент [Security Alert Center (SAC)](https://git.kalinamall.ru/PapaTramp/security-alert-center) для Android. + +Оператор видит те же данные, что и в веб-интерфейсе SAC: обзор, события, отчёты, проблемы и хосты. Push-уведомления приходят по тем же правилам severity и cooldown, что Telegram/email/webhook на сервере. Управление пользователями, каналами оповещений и привязкой устройств — **только в веб-SAC** (раздел «Настройки»). + +## Связанные репозитории + +| Репозиторий | Роль | +|-------------|------| +| [security-alert-center](https://git.kalinamall.ru/PapaTramp/security-alert-center) | Сервер SAC: API, UI, оповещения, управление мобильными устройствами | +| [ssh-monitor](https://git.kalinamall.ru/PapaTramp/ssh-monitor) | Агент Linux | +| [RDP-login-monitor](https://git.kalinamall.ru/PapaTramp/RDP-login-monitor) | Агент Windows | + +## Стек + +| Слой | Технология | +|------|------------| +| UI | Kotlin, Jetpack Compose, Material 3 | +| Сеть | Retrofit / OkHttp, Kotlin Serialization | +| Хранение | DataStore + Android Keystore (токены, URL сервера) | +| Push | **Firebase Cloud Messaging (FCM)** | +| Минимум SDK | Android 8.0 (API 26) | + +### FCM — бесплатно? + +**Да.** Firebase Cloud Messaging — бесплатный сервис Google для доставки push на Android (и не только). Платный тариф Firebase нужен для других продуктов (Analytics, Crashlytics на больших объёмах и т.д.); для стандартных data/notification push лимиты практически не ограничивают типичный SAC. Данные событий формируются на **вашем** SAC-сервере; через FCM уходит только компактный payload (заголовок, id, deep link). + +Альтернатива без Google (UnifiedPush) в этом проекте не планируется. + +## Что есть в приложении + +- Обзор, события, отчёты, проблемы, хосты (списки и карточки) +- Ack / Resolve для роли `operator` и выше +- Push с переходом в карточку события или problem +- Биометрическая блокировка при открытии (локально) +- Первичная привязка к серверу по **коду регистрации**, который выдаёт администратор в веб-SAC + +## Чего нет в приложении (только веб) + +- Управление пользователями SAC +- Настройки каналов (Telegram, SMTP, webhook), severity, policy +- Выдача и отзыв кодов регистрации, список устройств, способ входа на устройство — всё это в **Настройки → Мобильные устройства** на сервере + +## Привязка телефона к серверу + +1. Администратор в веб-SAC включает «Разрешать подключение мобильных устройств». +2. Создаёт **код регистрации** для пользователя (срок действия, одноразовый или с лимитом использований). +3. Оператор в Seaca: URL сервера (или из QR) + код + логин/пароль (если код не привязан к предварительной сессии). +4. Приложение регистрирует FCM-токен; устройство появляется в списке на сервере. +5. Администратор может отключить устройство, сменить разрешённый способ входа, переименовать. + +Подробный план — [docs/ROADMAP.md](docs/ROADMAP.md). + +## Статус + +**Версия:** `0.1.0` (документация и план; код приложения — в разработке) + +## Лицензия + +Как у остальных репозиториев семейства SAC (уточняется владельцем проекта). diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md new file mode 100644 index 0000000..e2ed237 --- /dev/null +++ b/docs/ROADMAP.md @@ -0,0 +1,107 @@ +# 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 — Каркас приложения + +- [ ] 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 v0.6.1 — `mobile_devices_allowed`, enrollment codes, `POST /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`, push min severity (по умолчанию = policy) +- [ ] Таблицы `mobile_devices`, `mobile_enrollment_codes` +- [ ] Веб: **Настройки → Мобильные устройства** — вкл/выкл, коды, список, отзыв, способ логина +- [ ] API enrollment: создать код (admin), погасить, список устройств, revoke +- [ ] JWT refresh + привязка к `device_id` +- [ ] FCM HTTP v1 из worker (service account JSON в `/etc/security-alert-center/`) +- [ ] Audit: выдача кода, enroll, revoke, смена FCM + +--- + +## Не в плане (пока) + +- iOS +- UnifiedPush без FCM +- Управление пользователями SAC из телефона +- Настройки Telegram/SMTP с телефона +- Несколько SAC-серверов в одном приложении + +--- + +## KPI + +- От события на SAC до push на телефон: p95 < 45 с (как Telegram) +- Pairing по коду: < 2 минут для оператора +- Отзыв устройства: push прекращается в течение 1 минуты