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:
+11
-8
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user