chore: sync home (README и файлы зеркала)
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
# Seaca
|
# 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)
|
**Версия:** `0.5.11` (versionCode 25)
|
||||||
|
|
||||||
@@ -23,7 +23,7 @@ Android-клиент [Security Alert Center (SAC)](https://git.kalinamall.ru/Pap
|
|||||||
2. URL API SAC + код + логин/пароль в Seaca
|
2. URL API SAC + код + логин/пароль в Seaca
|
||||||
3. FCM-токен регистрируется автоматически
|
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`
|
|||||||
|
|
||||||
## Репозитории
|
## Репозитории
|
||||||
|
|
||||||
| Репозиторий | Роль |
|
| Репозиторий | URL |
|
||||||
|-------------|------|
|
|-------------|-----|
|
||||||
| security-alert-center | Сервер API |
|
| seaca | https://git.papatramp.ru/PapaTramp/seaca |
|
||||||
| ssh-monitor / RDP-login-monitor | Агенты |
|
| 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 |
|
||||||
|
|||||||
@@ -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"
|
|
||||||
@@ -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] готово."
|
|
||||||
@@ -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 |
|
||||||
@@ -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 (уточняется владельцем проекта).
|
|
||||||
Reference in New Issue
Block a user