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
+10 -7
View File
@@ -2,7 +2,6 @@
from __future__ import annotations
import secrets
import uuid
from typing import Any, Optional
@@ -60,13 +59,17 @@ def ensure_xui_servers(settings: dict) -> list:
if migrated:
servers = [migrated]
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', {})
primary = get_xui_server(settings, None) or {}
if primary.get('url'):
primary = None
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_sub_url', primary.get('sub_url') 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:
if str(s.get('id')) == str(panel_id):
return s
# Prefer enabled
return None
for s in servers:
if s.get('enabled'):
return s