fix: разделение клиентов — сервисы из real API, инстансы/операции из polygon (v1.2.28)
This commit is contained in:
+32
-11
@@ -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, без проверки подписи).
|
||||
|
||||
|
||||
Reference in New Issue
Block a user