fix: разделение клиентов — сервисы из real API, инстансы/операции из polygon (v1.2.28)

This commit is contained in:
2026-08-01 09:22:02 +04:00
parent ca2367724e
commit dcd978808d
4 changed files with 54 additions and 29 deletions
+32 -11
View File
@@ -32,27 +32,48 @@ def get_token():
return request.cookies.get("token") or current_app.config["NUBES_API_TOKEN"]
def get_client():
"""HttpClient с автоопределением стенда.
def _make_client(*, use_polygon):
"""Фабрика HttpClient — ЕДИНСТВЕННОЕ место где выбирается endpoint.
Если POLYGON_ENDPOINT задан → направить ВСЕ запросы в polygon.
Реальный NUBES_API_TOKEN остаётся нетронутым — polygon его не проверяет.
Args:
use_polygon: если True и POLYGON_ENDPOINT задан → polygon.
Если False → всегда реальный API (для чтения сервисов/инстансов).
Иначе:
- Если NUBES_API_ENDPOINT — известный стенд (STANDS) → detect_endpoint()
- Если кастомный URL → использовать напрямую
Returns:
HttpClient с правильным endpoint и токеном.
"""
polygon = current_app.config.get("POLYGON_ENDPOINT", "")
if polygon:
return HttpClient(polygon, get_token())
token = get_token()
# Режим полигона — только если разрешено и переменная задана
if use_polygon:
polygon = current_app.config.get("POLYGON_ENDPOINT", "")
if polygon:
return HttpClient(polygon, token)
# Реальный API: автоопределение или NUBES_API_ENDPOINT
endpoint = current_app.config["NUBES_API_ENDPOINT"]
if endpoint in STANDS:
endpoint = detect_endpoint(token) or endpoint
return HttpClient(endpoint, token)
def get_client():
"""HttpClient для ОПЕРАЦИЙ (create/modify/delete/run/poll).
Если POLYGON_ENDPOINT задан → polygon.
Иначе → автоопределение реального стенда.
"""
return _make_client(use_polygon=True)
def get_real_client():
"""HttpClient для ЧТЕНИЯ (сервисы, список инстансов).
ВСЕГДА реальный API, даже при POLYGON_ENDPOINT.
"""
return _make_client(use_polygon=False)
def get_client_id():
"""Извлечь ClientID из payload JWT-токена (base64url, без проверки подписи).