fix(discord-bridge): dashboard-ul ramanea gol la /claude — lipsea <base href>

Simptom: pagina se incarca prin tailscale, dar niciun API nu era cerut; in
dashboard.log se vedea doar GET / si nimic altceva.

Cauza: --set-path taie prefixul, deci /claude si /claude/ ajung la server
identic, ca "/". Fara slash final, URL-urile relative se rezolvau la radacina
hostului (https://host/api/status), unde proxy-ul nu trimite nimic incoace.
Cererile nici nu ajungeau la noi, iar pagina ramanea goala fara nicio eroare.
Redirectul 301 adaugat anterior nu putea ajuta: serverul nu vede forma
originala a adresei.

Paginile se servesc acum printr-un handler propriu care pune <base href> din
DASHBOARD_PREFIX, plus Cache-Control: no-store, fiindca HTML-ul poarta de acum
configuratie si o copie veche ar trimite cererile aiurea.

Patru teste noi. Verificat in browser pe cazul reprodus (pagina servita pe
radacina, ca prin proxy): toate cererile pleaca cu /claude/ si datele se incarca.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01B29CApsP1JkSdjYaGaHpE7
This commit is contained in:
Claude Agent
2026-08-30 14:11:24 +00:00
parent 6b6f6644f9
commit e0ea85005d
2 changed files with 61 additions and 1 deletions

View File

@@ -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/`. `<base href>` face rezolvarea determinista."""
server_cu_prefix.login()
_, data, _ = server_cu_prefix.call("/")
assert '<base href="/claude/">' in data["_html"]
def test_base_href_si_pe_pagina_de_login(server_cu_prefix):
_, data, _ = server_cu_prefix.call("/login.html")
assert '<base href="/claude/">' in data["_html"]
def test_fara_prefix_nu_se_pune_base(server):
server.login()
_, data, _ = server.call("/")
assert "<base" not in data["_html"]
def test_paginile_nu_se_pun_in_cache(server_cu_prefix):
"""O copie veche ar purta un `base href` gresit si ar trimite cererile aiurea."""
server_cu_prefix.login()
_, _, resp = server_cu_prefix.call("/")
assert resp.headers.get("Cache-Control") == "no-store"