diff --git a/README.md b/README.md index b62c3d7..17650ea 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Seaca -Android-клиент [Security Alert Center (SAC)](https://git.kalinamall.ru/PapaTramp/security-alert-center). +Android-клиент [Security Alert Center (SAC)](https://git.papatramp.ru/PapaTramp/security-alert-center). **Версия:** `0.5.11` (versionCode 25) @@ -23,7 +23,7 @@ Android-клиент [Security Alert Center (SAC)](https://git.kalinamall.ru/Pap 2. URL API SAC + код + логин/пароль в Seaca 3. FCM-токен регистрируется автоматически -[docs/operator-guide.md](docs/operator-guide.md) · SAC [docs/seaca-mobile.md](https://git.kalinamall.ru/PapaTramp/security-alert-center/src/branch/main/docs/seaca-mobile.md) +[docs/operator-guide.md](docs/operator-guide.md) ## Сборка @@ -37,7 +37,9 @@ APK: `app/build/outputs/apk/debug/app-debug.apk` ## Репозитории -| Репозиторий | Роль | -|-------------|------| -| security-alert-center | Сервер API | -| ssh-monitor / RDP-login-monitor | Агенты | +| Репозиторий | URL | +|-------------|-----| +| seaca | https://git.papatramp.ru/PapaTramp/seaca | +| security-alert-center | https://git.papatramp.ru/PapaTramp/security-alert-center | +| ssh-monitor | https://git.papatramp.ru/PapaTramp/ssh-monitor | +| RDP-login-monitor | https://git.papatramp.ru/PapaTramp/rdp-login-monitor | diff --git a/scripts/check-github-clean.sh b/scripts/check-github-clean.sh deleted file mode 100755 index bf94d7f..0000000 --- a/scripts/check-github-clean.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/env bash -# Перед push на github: нет internal URL и файлов других зеркал. -set -Eeuo pipefail - -ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" -cd "$ROOT" - -PATTERNS=( - 'git\.kalinamall\.ru' - 'git\.papatramp\.ru' - 'papatramp\.lan' - '192\.168\.' - 'kalinamall/main' - 'push.*kalinamall' -) - -scan_files() { - local hits=0 - local files - files=$(git ls-files) - while read -r f; do - [[ -z $f ]] && continue - [[ -f $f ]] || continue - case $f in - scripts/check-github-clean.sh | scripts/push-remotes.sh) continue ;; - esac - for pat in "${PATTERNS[@]}"; do - if grep -qE "$pat" "$f" 2>/dev/null; then - echo " INTERNAL? $f (pattern: $pat)" - hits=$((hits + 1)) - fi - done - done <<<"$files" - return $hits -} - -echo "[check-github-clean] сканирование tracked-файлов" -n=0 -scan_files || n=$? -if [[ $n -gt 0 ]]; then - echo "[check-github-clean] найдено: $n" - exit 1 -fi - -for f in scripts/readme/kalinamall.md scripts/readme/home.md; do - if [[ -f $f ]]; then - echo " FORBIDDEN FILE: $f" - exit 1 - fi -done - -echo "[check-github-clean] OK" diff --git a/scripts/push-remotes.sh b/scripts/push-remotes.sh deleted file mode 100755 index 06cfb1c..0000000 --- a/scripts/push-remotes.sh +++ /dev/null @@ -1,78 +0,0 @@ -#!/usr/bin/env bash -# Синхронизация main на kalinamall / home / github: свой README и только свои readme-шаблоны. -set -Eeuo pipefail - -ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" -cd "$ROOT" - -CHECK_SECRETS="${CHECK_SECRETS:-$HOME/Documents/Cursor/Projects/Answer.and.other.shit/guides/init.new.comps/scripts/check-no-secrets.sh}" -CHECK_GITHUB="${CHECK_GITHUB:-$ROOT/scripts/check-github-clean.sh}" - -sync_remote() { - local remote=$1 - local readme_template=$2 - local branch="sync-${remote}" - shift 2 - local -a remove=( "$@" ) - - git fetch "$remote" - git checkout -B "$branch" "${remote}/main" - git checkout main -- . - cp "$readme_template" README.md - - for f in "${remove[@]}"; do - if [[ -e $f ]]; then - rm -rf "$f" - fi - done - - rm -rf .cursor .cursorignore - - git add -u . - git add README.md - if git diff --cached --quiet; then - echo "[push-remotes] $remote: без изменений" - else - git commit -m "chore: sync $remote (README и файлы зеркала)" - fi - - if [[ $remote == github ]]; then - if [[ -f $CHECK_GITHUB ]]; then - bash "$CHECK_GITHUB" - fi - if [[ -f $CHECK_SECRETS ]]; then - bash "$CHECK_SECRETS" github - fi - fi - - git push "$remote" "${branch}:main" - git checkout main - git branch -D "$branch" -} - -echo "[push-remotes] kalinamall" -sync_remote kalinamall "$ROOT/scripts/readme/kalinamall.md" \ - scripts/readme/github.md \ - scripts/readme/home.md - -echo "[push-remotes] home" -sync_remote home "$ROOT/scripts/readme/home.md" \ - scripts/readme/github.md \ - scripts/readme/kalinamall.md \ - scripts/push-remotes.sh \ - scripts/check-github-clean.sh - -echo "[push-remotes] github" -sync_remote github "$ROOT/scripts/readme/github.md" \ - scripts/readme/kalinamall.md \ - scripts/readme/home.md \ - scripts/push-remotes.sh \ - scripts/check-github-clean.sh - -cp "$ROOT/scripts/readme/kalinamall.md" README.md -git add README.md -if ! git diff --cached --quiet; then - git commit -m "docs: README kalinamall (рабочая копия main)" -fi - -echo "[push-remotes] готово." diff --git a/scripts/readme/home.md b/scripts/readme/home.md new file mode 100644 index 0000000..17650ea --- /dev/null +++ b/scripts/readme/home.md @@ -0,0 +1,45 @@ +# Seaca + +Android-клиент [Security Alert Center (SAC)](https://git.papatramp.ru/PapaTramp/security-alert-center). + +**Версия:** `0.5.11` (versionCode 25) + +## Возможности + +- Обзор, события, проблемы, хосты, отчёты (API веб-SAC) +- Push (FCM), режимы звука, выбор ringtone +- Ack / Resolve проблем (monitor+) +- **RDG flap** — метка в списке; **qwinsta / logoff** → SAC API → WinRM на клиентский ПК +- Биометрия при запуске и возврате в приложение +- Формат даты, экран «Моё устройство» + +## Нет в приложении (только веб-SAC) + +Пользователи, каналы оповещений, WinRM domain admin, коды регистрации. + +## Привязка + +1. Админ: мобильные устройства + код `sacmob_…` +2. URL API SAC + код + логин/пароль в Seaca +3. FCM-токен регистрируется автоматически + +[docs/operator-guide.md](docs/operator-guide.md) + +## Сборка + +JDK 17+, `local.properties`. Опционально `app/google-services.json` для FCM. + +```bash +./gradlew assembleDebug +``` + +APK: `app/build/outputs/apk/debug/app-debug.apk` + +## Репозитории + +| Репозиторий | URL | +|-------------|-----| +| seaca | https://git.papatramp.ru/PapaTramp/seaca | +| security-alert-center | https://git.papatramp.ru/PapaTramp/security-alert-center | +| ssh-monitor | https://git.papatramp.ru/PapaTramp/ssh-monitor | +| RDP-login-monitor | https://git.papatramp.ru/PapaTramp/rdp-login-monitor | diff --git a/scripts/readme/kalinamall.md b/scripts/readme/kalinamall.md deleted file mode 100644 index 001c3e6..0000000 --- a/scripts/readme/kalinamall.md +++ /dev/null @@ -1,87 +0,0 @@ -# Seaca - -**Seaca** (Security Event Alert Center App) — нативный мобильный клиент **Security Alert Center (SAC)** для Android. - -Оператор видит те же данные, что и в веб-интерфейсе SAC: обзор, события, отчёты, проблемы и хосты. Push-уведомления приходят по тем же правилам severity и cooldown, что Telegram/email/webhook на сервере. Управление пользователями, каналами оповещений и привязкой устройств — **только в веб-SAC** (раздел «Настройки»). - -## Связанные репозитории - -| Репозиторий | Роль | -|-------------|------| -| security-alert-center | Сервер SAC: API, UI, оповещения, управление мобильными устройствами | -| ssh-monitor | Агент Linux | -| RDP-login-monitor | Агент Windows | - -| Репозиторий | URL | -|-------------|-----| -| security-alert-center | https://git.kalinamall.ru/PapaTramp/security-alert-center | -| ssh-monitor | https://git.kalinamall.ru/PapaTramp/ssh-monitor | -| RDP-login-monitor | https://git.kalinamall.ru/PapaTramp/RDP-login-monitor | -## Стек - -| Слой | Технология | -|------|------------| -| 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) | - -## Что есть в приложении - -- Обзор, события, отчёты, проблемы, хосты (списки и карточки с читаемыми полями) -- Pull-to-refresh на обзоре и в списках -- Фильтры событий и проблем (severity, status) -- Формат даты/времени на выбор (слэш, дефис, точка или системный локаль) -- Ack / Resolve для роли `operator` и выше -- Push с переходом в карточку события или problem; режимы: со звуком, без звука, выключено -- Выбор звука уведомления: системный или свой (ringtone picker) -- Биометрическая блокировка при **запуске** и при возврате в приложение -- Экран «Моё устройство»: сервер, пользователь, роль, версия, настройки push, выход -- Первичная привязка к серверу по **коду регистрации**, который выдаёт администратор в веб-SAC - -## Чего нет в приложении (только веб) - -- Управление пользователями SAC -- Настройки каналов (Telegram, SMTP, webhook), severity, policy -- Выдача и отзыв кодов регистрации, список устройств, способ входа на устройство — всё это в **Настройки → Мобильные устройства** на сервере - -## Привязка телефона к серверу - -1. Администратор в веб-SAC включает «Разрешать подключение мобильных устройств». -2. Создаёт **код регистрации** для пользователя (срок действия, одноразовый или с лимитом использований). -3. Оператор в Seaca: URL API SAC (выдаёт администратор) + код + логин/пароль (если код не привязан к предварительной сессии). -4. Приложение регистрирует FCM-токен; устройство появляется в списке на сервере. -5. Администратор может отключить устройство, сменить разрешённый способ входа, переименовать. - -Подробный план — [docs/ROADMAP.md](docs/ROADMAP.md). - -## Статус - -**Версия:** `0.5.7` (Android: Kotlin, Compose; enroll, UI, ack/resolve, FCM, биометрия, звук push, форматы даты) - -## Документация - -| Документ | Назначение | -|----------|------------| -| [docs/operator-guide.md](docs/operator-guide.md) | Инструкция для оператора | -| [docs/ROADMAP.md](docs/ROADMAP.md) | План разработки | - -## Сборка - -Требуется **JDK 17+** (Android Studio JBR или отдельная установка) и Android SDK (`local.properties` с `sdk.dir=…`). - -```bash -# Опционально: конфиг Firebase в app/ (шаблон *.example, рабочий файл не в git) — для FCM -./gradlew assembleDebug -# Windows: -gradlew.bat assembleDebug -``` - -APK: `app/build/outputs/apk/debug/app-debug.apk` - -Без конфига Firebase приложение собирается, но FCM не инициализируется (просмотр данных работает). - -## Лицензия - -Как у остальных репозиториев семейства SAC (уточняется владельцем проекта).