From 987336395c2a430a1c221d97a4d724d3a0eb0a12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Wed, 26 Aug 2026 13:11:51 +0300 Subject: [PATCH] Add whitelist health check --- History/2026-08-26.md | 21 +++++++++++++++++++++ src/app.py | 35 +++++++++++++++++++++++++++++++++++ src/requirements.txt | 3 ++- 3 files changed, 58 insertions(+), 1 deletion(-) diff --git a/History/2026-08-26.md b/History/2026-08-26.md index 3d40e04..0ce6c2c 100644 --- a/History/2026-08-26.md +++ b/History/2026-08-26.md @@ -101,3 +101,24 @@ Registry endpoint: - Сервис пока не подключается к MariaDB. - Состояние не сохраняется. - Логика получения и отправки алертов whitelist ещё не реализована. + +## Проверка whitelist API + +Endpoint `https://whitelist.nodejsk8s.services.ngcloud.ru/v2/app` без авторизации отвечает: + +```text +HTTP 302 +Location: /v2/login +Found. Redirecting to /v2/login +``` + +В KUMA добавлен stateless endpoint `GET /check`, который запрашивает whitelist без автоматического перехода по redirect и возвращает статус, `Location` и тело ответа. + +Для авторизации предусмотрена переменная `WHITELIST_TOKEN`; при её наличии KUMA передаёт заголовок `Authorization: Bearer `. + +Добавлены переменные: + +```text +WHITELIST_URL=https://whitelist.nodejsk8s.services.ngcloud.ru/v2/app +WHITELIST_TIMEOUT=10 +``` diff --git a/src/app.py b/src/app.py index ee8fd8b..55f4d39 100644 --- a/src/app.py +++ b/src/app.py @@ -2,9 +2,14 @@ import os from flask import Flask, jsonify +import requests app = Flask(__name__) VERSION = "0.1.0" +WHITELIST_URL = os.getenv( + "WHITELIST_URL", + "https://whitelist.nodejsk8s.services.ngcloud.ru/v2/app", +) def mariadb_configuration(): @@ -18,6 +23,27 @@ def mariadb_configuration(): } +def check_whitelist(): + headers = {} + token = os.getenv("WHITELIST_TOKEN") + if token: + headers["Authorization"] = f"Bearer {token}" + response = requests.get( + WHITELIST_URL, + headers=headers, + allow_redirects=False, + timeout=int(os.getenv("WHITELIST_TIMEOUT", "10")), + ) + content_type = response.headers.get("Content-Type", "") + body = response.json() if "json" in content_type else response.text + return { + "url": WHITELIST_URL, + "status": response.status_code, + "location": response.headers.get("Location"), + "body": body, + } + + @app.get("/") def index(): return jsonify({ @@ -34,6 +60,15 @@ def health(): return jsonify({"ok": True, "version": VERSION}) +@app.get("/check") +def check(): + try: + result = check_whitelist() + return jsonify({"ok": 200 <= result["status"] < 300, **result}) + except requests.RequestException as exc: + return jsonify({"ok": False, "url": WHITELIST_URL, "error": str(exc)}), 502 + + @app.get("/mariadb") def mariadb(): return jsonify(mariadb_configuration()) diff --git a/src/requirements.txt b/src/requirements.txt index 8ab6294..5eaf725 100644 --- a/src/requirements.txt +++ b/src/requirements.txt @@ -1 +1,2 @@ -flask \ No newline at end of file +flask +requests \ No newline at end of file