feat(discord-bridge): dashboard publicat in tailnet prin tailscale serve
https://claude-agent.tailf7372d.ts.net/punte — acelasi tipar ca /echo de pe moltbot: procesul ramane legat de 127.0.0.1, tailscaled il proxeaza si pune HTTPS. Montarea sub prefix a cerut doua schimbari: - toate URL-urile din pagini sunt acum relative, fiindca --set-path TAIE prefixul inainte de a proxa (serverul vede /api/status, browserul cere /punte/api/status). DASHBOARD_PREFIX ramane necesar doar pentru redirectul de login, si e acceptat si intact pe intrare, ca sa mearga si curl direct pe localhost. - adresa fara slash final (/punte) primeste 301 catre /punte/: altfel URL-urile relative s-ar rezolva la radacina hostului, unde proxy-ul nu trimite nimic incoace, si panoul ar arata gol fara nicio eroare vizibila. ops/install.sh configureaza serve-ul daca sudo permite; altfel spune comanda. Sase teste noi pentru montarea sub prefix (31 in total pe dashboard). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01B29CApsP1JkSdjYaGaHpE7
This commit is contained in:
@@ -334,3 +334,50 @@ def test_ruta_necunoscuta(server):
|
||||
server.login()
|
||||
assert server.call("/api/nope")[0] == 404
|
||||
assert server.call("/api/nope", {})[0] == 404
|
||||
|
||||
|
||||
# --- montare sub prefix (tailscale serve --set-path) ------------------------
|
||||
|
||||
@pytest.fixture()
|
||||
def server_cu_prefix(server, state_dir):
|
||||
"""Acelasi server, dar cu DASHBOARD_PREFIX=/punte in env."""
|
||||
(state_dir / "env").write_text(
|
||||
"DASHBOARD_TOKEN=secret-de-test\nDASHBOARD_PREFIX=/punte\n", encoding="utf-8")
|
||||
config.reload(state_dir)
|
||||
return server
|
||||
|
||||
|
||||
def test_prefixul_e_normalizat():
|
||||
assert api.strip_prefix("/api/status") == "/api/status"
|
||||
|
||||
|
||||
def test_rutele_merg_si_cu_prefix_si_fara(server_cu_prefix):
|
||||
"""Proxy-ul taie prefixul, dar `curl` direct pe localhost nu — merg ambele."""
|
||||
server_cu_prefix.login()
|
||||
assert server_cu_prefix.call("/api/status")[0] == 200
|
||||
assert server_cu_prefix.call("/punte/api/status")[0] == 200
|
||||
|
||||
|
||||
def test_prefixul_gol_nu_taie_nimic(server):
|
||||
server.login()
|
||||
assert server.call("/api/status")[0] == 200
|
||||
assert server.call("/punte/api/status")[0] == 404
|
||||
|
||||
|
||||
def test_redirect_de_login_pastreaza_prefixul(server_cu_prefix):
|
||||
"""Un `/login.html` absolut ar arunca browserul in radacina hostului."""
|
||||
status, _, resp = server_cu_prefix.call("/punte/")
|
||||
assert status == 200
|
||||
assert resp.url.endswith("/punte/login.html")
|
||||
|
||||
|
||||
def test_calea_fara_slash_final_e_redirectionata(server_cu_prefix):
|
||||
"""`/punte` fara slash ar rezolva `api/status` la radacina hostului."""
|
||||
_, _, resp = server_cu_prefix.call("/punte")
|
||||
assert resp.url.endswith("/punte/login.html")
|
||||
|
||||
|
||||
def test_static_servit_si_sub_prefix(server_cu_prefix):
|
||||
server_cu_prefix.login()
|
||||
status, data, _ = server_cu_prefix.call("/punte/static/app.css")
|
||||
assert status == 200 and ".card" in data["_html"]
|
||||
|
||||
Reference in New Issue
Block a user