diff --git a/proxmox/lxc171-claude-agent/discord-bridge/dashboard/api.py b/proxmox/lxc171-claude-agent/discord-bridge/dashboard/api.py index 52b5004..b629f69 100644 --- a/proxmox/lxc171-claude-agent/discord-bridge/dashboard/api.py +++ b/proxmox/lxc171-claude-agent/discord-bridge/dashboard/api.py @@ -426,9 +426,43 @@ class Handler(SimpleHTTPRequestHandler): self.send_header("Content-Length", "0") self.end_headers() return - self.path = "/index.html" if path == "/" else path + if path in ("/", "/index.html"): + return self.send_html("index.html") + if path == "/login.html": + return self.send_html("login.html") + self.path = path return super().do_GET() + def send_html(self, name: str): + """Trimite o pagina, cu `` pus la servire. + + De ce e nevoie: `tailscale serve --set-path /claude` TAIE prefixul, deci + serverul nu poate sti daca browserul e la `/claude` sau la `/claude/` — + ambele ajung aici ca `/`. Fara slash final, un URL relativ (`api/status`) + se rezolva la radacina hostului, unde proxy-ul nu mai trimite nimic + incoace: pagina se incarca si ramane goala, fara nicio eroare vizibila. + `` fixeaza rezolvarea indiferent de forma adresei. + """ + try: + body = (_DASH / name).read_text(encoding="utf-8") + except OSError: + return self.send_error(404) + pfx = mount_prefix() + if pfx: + body = body.replace("", f'\n', 1) + data = body.encode("utf-8") + self.send_response(200) + self.send_header("Content-Type", "text/html; charset=utf-8") + self.send_header("Content-Length", str(len(data))) + # no-store: paginile poarta acum si configuratia (base href), deci o + # copie veche din cache ar trimite cererile in alta parte. + self.send_header("Cache-Control", "no-store") + self.end_headers() + try: + self.wfile.write(data) + except (BrokenPipeError, ConnectionResetError): + pass + def route_get(self, path: str): qs = parse_qs(urlparse(self.path).query) if path == "/api/status": diff --git a/proxmox/lxc171-claude-agent/discord-bridge/tests/test_dashboard.py b/proxmox/lxc171-claude-agent/discord-bridge/tests/test_dashboard.py index e3638fb..fe7fe60 100644 --- a/proxmox/lxc171-claude-agent/discord-bridge/tests/test_dashboard.py +++ b/proxmox/lxc171-claude-agent/discord-bridge/tests/test_dashboard.py @@ -381,3 +381,29 @@ def test_static_servit_si_sub_prefix(server_cu_prefix): server_cu_prefix.login() status, data, _ = server_cu_prefix.call("/claude/static/app.css") assert status == 200 and ".card" in data["_html"] + + +def test_base_href_pus_cand_exista_prefix(server_cu_prefix): + """Proxy-ul taie prefixul, deci serverul nu poate sti daca browserul e la + `/claude` sau `/claude/`. `` face rezolvarea determinista.""" + server_cu_prefix.login() + _, data, _ = server_cu_prefix.call("/") + assert '' in data["_html"] + + +def test_base_href_si_pe_pagina_de_login(server_cu_prefix): + _, data, _ = server_cu_prefix.call("/login.html") + assert '' in data["_html"] + + +def test_fara_prefix_nu_se_pune_base(server): + server.login() + _, data, _ = server.call("/") + assert "