marvis docker container, ignore ueransim
This commit is contained in:
111
patch-ncm.py
111
patch-ncm.py
@@ -6,6 +6,11 @@ Reads from the clean .bak, applies all patches, writes the result.
|
||||
Safe to re-run (idempotent).
|
||||
"""
|
||||
|
||||
import os
|
||||
import socket
|
||||
import sys
|
||||
|
||||
|
||||
JS = "/etc/athonet/ems-frontend/advanced/assets/index-Cw8Irsq8.js"
|
||||
BAK = JS + ".bak"
|
||||
|
||||
@@ -14,26 +19,60 @@ with open(BAK, "r", encoding="utf-8") as f:
|
||||
|
||||
changed = False
|
||||
|
||||
|
||||
def env_flag(name: str) -> str | None:
|
||||
value = os.getenv(name)
|
||||
if value is None:
|
||||
return None
|
||||
return value.strip().lower()
|
||||
|
||||
|
||||
def is_enabled(name: str, default_host: str, default_port: int) -> bool:
|
||||
flag = env_flag(name)
|
||||
if flag in {"1", "true", "yes", "on"}:
|
||||
return True
|
||||
if flag in {"0", "false", "no", "off"}:
|
||||
return False
|
||||
host = os.getenv(f"{name}_HOST", default_host)
|
||||
port = int(os.getenv(f"{name}_PORT", str(default_port)))
|
||||
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
|
||||
sock.settimeout(0.5)
|
||||
return sock.connect_ex((host, port)) == 0
|
||||
|
||||
|
||||
ENABLE_MARVIS = is_enabled("P5G_MARVIS_ENABLED", "127.0.0.1", 8100)
|
||||
ENABLE_RADIO = is_enabled("P5G_RADIO_ENABLED", "127.0.0.1", 4000)
|
||||
|
||||
if not ENABLE_MARVIS and not ENABLE_RADIO:
|
||||
print("ERROR: neither P5G Marvis nor P5G Radio appears reachable; refusing to patch")
|
||||
sys.exit(1)
|
||||
|
||||
# ── 1. Sidebar nav entry ───────────────────────────────────────────────────
|
||||
SIDEBAR_OLD = '!_o(ue.UPF,t)}]}]}'
|
||||
SIDEBAR_NEW = ('!_o(ue.UPF,t)}]},' # UPF entry closes; start custom entries
|
||||
'{value:"/marvis",label:"P5G Marvis",'
|
||||
'icon:a.jsx(ge.Magic,{}),disabled:false,'
|
||||
'subItems:['
|
||||
'{value:"/marvis/overview",label:"P5G Marvis Insights",disabled:false},'
|
||||
'{value:"/marvis/actions",label:"P5G Marvis Actions",disabled:false},'
|
||||
'{value:"/marvis/minis",label:"P5G Marvis Minis",disabled:false},'
|
||||
'{value:"/marvis/ai",label:"P5G Marvis AI",disabled:false}'
|
||||
']},' # close Marvis, comma before Radio
|
||||
'{value:"/radio",label:"P5G Radio",'
|
||||
'icon:a.jsx(ge.Magic,{}),disabled:false}'
|
||||
']}') # close outer items array + object
|
||||
sidebar_items = []
|
||||
if ENABLE_MARVIS:
|
||||
sidebar_items.append(
|
||||
'{value:"/marvis",label:"P5G Marvis",'
|
||||
'icon:a.jsx(ge.Magic,{}),disabled:false,'
|
||||
'subItems:['
|
||||
'{value:"/marvis/overview",label:"P5G Marvis Insights",disabled:false},'
|
||||
'{value:"/marvis/actions",label:"P5G Marvis Actions",disabled:false},'
|
||||
'{value:"/marvis/minis",label:"P5G Marvis Minis",disabled:false},'
|
||||
'{value:"/marvis/ai",label:"P5G Marvis AI",disabled:false}'
|
||||
']}'
|
||||
)
|
||||
if ENABLE_RADIO:
|
||||
sidebar_items.append(
|
||||
'{value:"/radio",label:"P5G Radio",'
|
||||
'icon:a.jsx(ge.Magic,{}),disabled:false}'
|
||||
)
|
||||
SIDEBAR_NEW = '!_o(ue.UPF,t)}]},' + ",".join(sidebar_items) + ']}'
|
||||
|
||||
if SIDEBAR_OLD in src:
|
||||
src = src.replace(SIDEBAR_OLD, SIDEBAR_NEW, 1)
|
||||
print("Applied: sidebar entry")
|
||||
changed = True
|
||||
elif SIDEBAR_NEW.split(',icon')[0] in src:
|
||||
elif any(label in src for label in ["P5G Marvis", "P5G Radio"]):
|
||||
print("Skipped: sidebar entry already present")
|
||||
else:
|
||||
print("ERROR: sidebar anchor not found"); exit(1)
|
||||
@@ -69,12 +108,18 @@ ROUTE_MARKER = 'path:"marvis"'
|
||||
|
||||
RADIO_MARKER = 'path:"radio"'
|
||||
|
||||
if ROUTE_ANCHOR in src and ROUTE_MARKER not in src:
|
||||
src = src.replace(ROUTE_ANCHOR, 'G4t,' + MARVIS_ROUTE + ',' + RADIO_ROUTE + ',rht', 1)
|
||||
print("Applied: marvis + radio routes with Or wrapper")
|
||||
route_parts = []
|
||||
if ENABLE_MARVIS:
|
||||
route_parts.append(MARVIS_ROUTE)
|
||||
if ENABLE_RADIO:
|
||||
route_parts.append(RADIO_ROUTE)
|
||||
|
||||
if ROUTE_ANCHOR in src and ROUTE_MARKER not in src and RADIO_MARKER not in src:
|
||||
src = src.replace(ROUTE_ANCHOR, 'G4t,' + ",".join(route_parts) + ',rht', 1)
|
||||
print("Applied: injected iframe routes")
|
||||
changed = True
|
||||
elif ROUTE_MARKER in src:
|
||||
print("Skipped: marvis route already present")
|
||||
elif ROUTE_MARKER in src or RADIO_MARKER in src:
|
||||
print("Skipped: route entry already present")
|
||||
else:
|
||||
print("WARNING: route anchor G4t,rht not found — iframe routes not injected")
|
||||
|
||||
@@ -84,19 +129,32 @@ else:
|
||||
# "Permissions for route /marvis are not managed". Tt=()=>!0 means no
|
||||
# specific permission required (same as profile and siteLoader routes).
|
||||
PERMS_OLD = '...QUe}'
|
||||
PERMS_NEW = '...QUe,"/marvis":Tt,"/marvis/overview":Tt,"/marvis/actions":Tt,"/marvis/minis":Tt,"/marvis/ai":Tt,"/radio":Tt}'
|
||||
perm_entries = []
|
||||
if ENABLE_MARVIS:
|
||||
perm_entries.extend([
|
||||
'"/marvis":Tt',
|
||||
'"/marvis/overview":Tt',
|
||||
'"/marvis/actions":Tt',
|
||||
'"/marvis/minis":Tt',
|
||||
'"/marvis/ai":Tt',
|
||||
])
|
||||
if ENABLE_RADIO:
|
||||
perm_entries.append('"/radio":Tt')
|
||||
PERMS_NEW = '...QUe,' + ",".join(perm_entries) + '}'
|
||||
|
||||
if PERMS_OLD in src and PERMS_NEW not in src:
|
||||
src = src.replace(PERMS_OLD, PERMS_NEW, 1)
|
||||
print("Applied: /marvis permissions entry")
|
||||
print("Applied: permissions entry")
|
||||
changed = True
|
||||
elif PERMS_NEW in src:
|
||||
print("Skipped: /marvis permissions entry already present")
|
||||
elif all(entry in src for entry in perm_entries):
|
||||
print("Skipped: permissions entry already present")
|
||||
else:
|
||||
print("WARNING: BW permissions anchor not found — permissions not registered")
|
||||
|
||||
assert src.count('P5G Marvis') >= 1, "P5G Marvis not found after patch"
|
||||
assert src.count('P5G Radio') >= 1, "P5G Radio not found after patch"
|
||||
if ENABLE_MARVIS:
|
||||
assert src.count('P5G Marvis') >= 1, "P5G Marvis not found after patch"
|
||||
if ENABLE_RADIO:
|
||||
assert src.count('P5G Radio') >= 1, "P5G Radio not found after patch"
|
||||
|
||||
if not changed:
|
||||
print("Nothing changed — already fully patched")
|
||||
@@ -105,4 +163,7 @@ if not changed:
|
||||
with open(JS, "w", encoding="utf-8") as f:
|
||||
f.write(src)
|
||||
|
||||
print(f"Done — P5G Marvis: {src.count('P5G Marvis')} occurrences, P5G Radio: {src.count('P5G Radio')} occurrences")
|
||||
print(
|
||||
f"Done — P5G Marvis: {src.count('P5G Marvis')} occurrences, "
|
||||
f"P5G Radio: {src.count('P5G Radio')} occurrences"
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user