Fix infinite recursion in 3x-ui server ensure/get helpers.

ensure_xui_servers no longer calls get_xui_server when mirroring the primary panel into legacy sync fields.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
orohi
2026-07-26 03:21:33 +03:00
co-authored by Cursor
parent 8abe692624
commit c28235b09a
+11 -8
View File
@@ -2,7 +2,6 @@
from __future__ import annotations from __future__ import annotations
import secrets
import uuid import uuid
from typing import Any, Optional from typing import Any, Optional
@@ -59,14 +58,18 @@ def ensure_xui_servers(settings: dict) -> list:
migrated = legacy_sync_to_server(settings.get('sync') or {}) migrated = legacy_sync_to_server(settings.get('sync') or {})
if migrated: if migrated:
servers = [migrated] servers = [migrated]
settings['xui_servers'] = servers settings['xui_servers'] = servers
else:
settings['xui_servers'] = servers
# Keep legacy sync.* mirrored from first/default for older code paths # Mirror primary into legacy sync.* for older code paths (no get_xui_server — avoids recursion)
sync = settings.setdefault('sync', {}) sync = settings.setdefault('sync', {})
primary = get_xui_server(settings, None) or {} primary = None
if primary.get('url'): for s in servers:
if s.get('enabled'):
primary = s
break
if primary is None and servers:
primary = servers[0]
if primary and primary.get('url'):
sync.setdefault('xui_url', primary.get('url') or '') sync.setdefault('xui_url', primary.get('url') or '')
sync.setdefault('xui_sub_url', primary.get('sub_url') or '') sync.setdefault('xui_sub_url', primary.get('sub_url') or '')
sync.setdefault('xui_api_token', primary.get('api_token') or '') sync.setdefault('xui_api_token', primary.get('api_token') or '')
@@ -91,7 +94,7 @@ def get_xui_server(settings: dict, panel_id: Optional[str] = None) -> Optional[d
for s in servers: for s in servers:
if str(s.get('id')) == str(panel_id): if str(s.get('id')) == str(panel_id):
return s return s
# Prefer enabled return None
for s in servers: for s in servers:
if s.get('enabled'): if s.get('enabled'):
return s return s