Replace sac.kalinamall.ru with sac.example.com in public docs/deploy. Remove Push-Mirror and Rewrite-GitHostUrls scripts from repo. Simplify workspace-three-repos.md for GitHub-only workflow. Co-authored-by: Cursor <cursoragent@cursor.com>
5.3 KiB
Seaca — мобильный клиент SAC
Репозиторий приложения: seaca.
Требуется SAC ≥ 0.9.0 с применённой миграцией 014.
Роли
| Где | Кто |
|---|---|
| Веб-SAC | Админ: мобильные устройства, коды, отзыв, FCM на сервере |
| Seaca (Android) | Оператор: обзор, события, проблемы, хосты, отчёты; ack/resolve |
| Веб-SAC | Пользователи SAC, Telegram/SMTP — не в приложении |
Включение мобильных устройств (админ)
- Настройки → Мобильные устройства (Seaca)
- Включить «Разрешать мобильным устройствам подключаться» → Сохранить мобильные
- В Правило оповещений при необходимости включить канал Seaca (push) (для push после настройки FCM)
«Сохранить мобильные»
Сохраняет в БД:
- разрешение подключения новых устройств;
- максимум активных устройств на одного пользователя SAC;
- минимальную версию приложения (опционально).
Не настраивает FCM и не выдаёт коды.
Коды регистрации
| Поле | Смысл |
|---|---|
| Метка | Произвольная подпись для админа |
| Пользователь | Если выбран — enroll только для этого пользователя |
| Способ входа | Логин и пароль + код — в приложении нужны учётные данные SAC; Только код — пароль не нужен, пользователь должен быть выбран в форме |
| Срок (часов) | Код перестаёт принимать новые привязки; уже подключённые телефоны не отключаются |
Код показывается один раз после «Выдать код». Передайте оператору: URL сервера (https://sac-api.example.com для Seaca; веб-админка — https://sac.example.com), код sacmob_…, при режиме password — логин/пароль SAC.
Подключённые устройства
- Отключить — отзыв устройства и refresh-токенов; приложение получит 401 при следующем запросе
- Тест push — только если FCM настроен на сервере и у устройства есть FCM-токен
Сессия после привязки
- Оператор один раз выполняет enroll (
POST /api/v1/mobile/enroll). - Приложение хранит access_token (JWT, ~24 ч) и refresh_token (по умолчанию 90 дней,
SAC_MOBILE_REFRESH_EXPIRE_DAYSвsac-api.env). - Код регистрации после успешного enroll больше не нужен.
Для долгой работы без повторной привязки увеличьте SAC_MOBILE_REFRESH_EXPIRE_DAYS (например 3650). Отзыв устройства в вебе обнуляет доступ немедленно.
Push (FCM) на сервере
Подробно: seaca-fcm.md.
Кратко в config/sac-api.env:
SAC_FCM_ENABLED=true
SAC_FCM_PROJECT_ID=ваш-firebase-project-id
SAC_FCM_SERVICE_ACCOUNT_JSON=/etc/security-alert-center/fcm-service-account.json
После изменений: sudo systemctl restart sac-api или sudo /opt/sac-deploy.sh.
В UI индикатор FCM: настроен / не настроен читает эти переменные; править их через веб нельзя.
Perimeter (HAProxy)
| Hostname | Clients | IP allowlist |
|---|---|---|
sac.example.com |
Web UI | yes (git-sac-allowed) |
sac-api.example.com |
Seaca, /api/v1/mobile/* |
no (enroll + JWT) |
Both resolve to the same SAC server (<SAC_SERVER_IP>). nginx must accept both names in server_name. See reverse-proxy/docs/sac-access.md.
API (для разработчиков Seaca)
| Метод | Путь |
|---|---|
| GET | /health |
| POST | /api/v1/mobile/enroll |
| POST | /api/v1/mobile/auth/refresh |
| PUT | /api/v1/mobile/devices/me/fcm |
| GET | /api/v1/dashboards/summary |
| GET | /api/v1/events, /api/v1/events/{id} |
| GET | /api/v1/problems, /api/v1/problems/{id} |
| POST | /api/v1/problems/{id}/ack, /resolve |
| GET | /api/v1/hosts, /api/v1/hosts/{id} |
JWT с мобильного устройства содержит claim device_id.
См. также
- seaca-fcm.md — Firebase и push
- deployment.md — деплой SAC
- runbook-ops.md — эксплуатация