diff --git a/History/2026-08-26.md b/History/2026-08-26.md index 137a271..604081b 100644 --- a/History/2026-08-26.md +++ b/History/2026-08-26.md @@ -125,7 +125,7 @@ WHITELIST_TIMEOUT=10 ## Версионирование -Версия KUMA установлена в `0.0.2`. В дальнейшем увеличивается только третья позиция: `0.0.*`. +Версия KUMA установлена в `0.0.3`. В дальнейшем увеличивается только третья позиция: `0.0.*`. ## SMTP-алерты @@ -143,3 +143,5 @@ SMTP_SUBJECT_PREFIX=[KUMA] Для сортировки почты добавлен префикс темы `[KUMA]`. `SMTP_FROM` остаётся реальным адресом SMTP-аккаунта; несуществующий адрес отправителя не используется. Добавлен UI на `/` для ручной проверки whitelist и отправки алерта. Whitelist URL предустановлен: `https://whitelist.nodejsk8s.services.ngcloud.ru/v2/app`. + +`POST /alert` больше не отправляет HTML страницы Keycloak. При редиректе отправляется краткое сообщение со статусом и URL авторизации; обычный ответ ограничен 4000 символами. diff --git a/History/chat-2026-08-26.md b/History/chat-2026-08-26.md new file mode 100644 index 0000000..6b6def2 --- /dev/null +++ b/History/chat-2026-08-26.md @@ -0,0 +1,72 @@ +# История чата KUMA + +Дата: 2026-08-26 + +> Секреты и токены замаскированы. + +## Запросы и действия + +1. Локальный каталог `/home/naeel/nubes/kuma` был привязан к пустому Git-репозиторию: + `https://gitea.services.ngcloud.ru/forcloud/kuma.git`. +2. Создан stateless Flask-сервис KUMA для whitelist: + `https://whitelist.nodejsk8s.services.ngcloud.ru/`. +3. Добавлены Docker-файлы и Python-код. Код перенесён в каталог `src/`. +4. Добавлен `.gitignore` для `.env`, кэшей Python, окружений, логов, БД, бинарников, архивов, IDE и временных файлов. +5. Создан локальный файл секретов `/home/naeel/nubes/kuma/.env`; он игнорируется Git. +6. Создан каталог `History` для документации проекта. +7. Проверен Gitea Container Registry: + `https://gitea.services.ngcloud.ru/v2/`. +8. Образы публиковались в Registry: + - `gitea.services.ngcloud.ru/forcloud/kuma:0.1.0` + - `gitea.services.ngcloud.ru/forcloud/kuma:0.2.0` + - `gitea.services.ngcloud.ru/forcloud/kuma:0.2.1` + - `gitea.services.ngcloud.ru/forcloud/kuma:0.0.1` + - `gitea.services.ngcloud.ru/forcloud/kuma:0.0.2` +9. Зафиксировано правило версий: использовать только формат `0.0.*`. +10. Проверено, что whitelist endpoint без авторизации отвечает `HTTP 302` с перенаправлением на `/v2/login`. +11. В KUMA добавлен `GET /check` для проверки whitelist. +12. Добавлен UI на `/` с предустановленным whitelist URL и ручными кнопками проверки и отправки алерта. +13. Добавлен `POST /alert`, который получает ответ whitelist и отправляет его по SMTP. +14. Для сортировки писем добавлен префикс темы `[KUMA]`. +15. SMTP Яндекса проверен напрямую через `smtp.yandex.ru:465` SSL. После включения обязательной настройки IMAP аутентификация прошла. +16. Git-коммиты и push выполнялись в ветку `master`. + +## Текущий managed service + +URL UI: + +`https://kuma.containerk8s.dev.nubes.ru/` + +Актуальный образ: + +`gitea.services.ngcloud.ru/forcloud/kuma:0.0.3` + +Последний коммит: + +`будет создан после текущего изменения` + +## Текущие endpoint + +- `GET /` — UI KUMA. +- `GET /health` — проверка состояния. +- `GET /check` — запрос whitelist без автоматического перехода по redirect. +- `POST /alert` — отправка ответа whitelist по SMTP. + +## Конфигурация + +Whitelist URL предустановлен: + +`https://whitelist.nodejsk8s.services.ngcloud.ru/v2/app` + +SMTP использует сервер Яндекса, SSL-порт `465`, полный email как логин и пароль приложения. Значения логина и пароля в этот файл не записываются. + +Тема алертов начинается с: + +`[KUMA]` + +## Важные уточнения + +- IMAP требуется включить в интерфейсе Яндекс Почты, чтобы активировать пароли приложений и OAuth-токены. +- KUMA IMAP не использует и почту не читает. +- KUMA использует SMTP только для отправки алертов. +- Пароли и токены не должны попадать в Git, Dockerfile, образ или History. diff --git a/src/app.py b/src/app.py index 47d3f4e..8dc77b6 100644 --- a/src/app.py +++ b/src/app.py @@ -8,7 +8,7 @@ from flask import Flask, jsonify, request import requests app = Flask(__name__) -VERSION = "0.0.2" +VERSION = "0.0.3" WHITELIST_URL = os.getenv( "WHITELIST_URL", "https://whitelist.nodejsk8s.services.ngcloud.ru/v2/app", @@ -100,7 +100,15 @@ def check(): @app.post("/alert") def alert(): - payload = requests.get(request.json.get("url", WHITELIST_URL), timeout=10).text + url = request.json.get("url", WHITELIST_URL) + response = requests.get(url, allow_redirects=False, timeout=10) + if response.is_redirect: + payload = ( + f"Whitelist недоступен без авторизации. HTTP {response.status_code}. " + f"URL авторизации: {response.headers.get('Location', 'не указан')}" + ) + else: + payload = f"Whitelist HTTP {response.status_code}\n\n{response.text[:4000]}" try: send_alert("KUMA whitelist alert", payload) return jsonify({"ok": True, "sent": True})