docs: initial Seaca repo — README and mobile roadmap
Kotlin Android client for SAC with FCM push and admin enrollment codes. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+28
@@ -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.*
|
||||
@@ -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 (уточняется владельцем проекта).
|
||||
+107
@@ -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 минуты
|
||||
Reference in New Issue
Block a user