Originally created by: QY-25123
doberman dash is already scoped to one repo per run (--path, default the current
directory — see create_app(repo_root=...)), but every browser tab rendered the identical
<title>Doberman Dashboard</title>, so running several dashboards side by side (one per
project) gave no way to tell the tabs apart. The tab title and the topbar wordmark now carry
the repo folder's name, e.g. widget-service — Doberman Dashboard.
_project_display_name(repo_root) derives the label from the resolved folder name._render_shell(repo_root) renders the HTML shell per create_app call instead of serving<title>, the topbar, and the JSdocument.title = "(N) " + DASH_BASE_TITLE)._js_string_literal<, >, &) before landing inside the inline <script>, so</script><script>... can't break out of the script element.tests/unit/test_dash_project_title.py — project name derived from the repo folder;<title>/topbar carry it; two different projects render different titles; the JS title_js_string_literal cannot be used to close the enclosing <script> tag; the bearer token</script>-style script-breakout attempt via the folder name; two dashboards for different
Tickets: #401
Tickets: #435
Tickets: #436
Tickets: #437
Tickets: #443
Tickets: #444
Tickets: #454
Ticket changed by: fu351
Originally posted by: fu351
Merged, thanks @QY-25123! Escaping the project name separately for each context,
html.escapefor markup and_js_string_literalfor the script body, is the correct treatment of the hard spot here, an untrusted string inside an inline script tag, and the</script>breakout test proves it. A dependency pin I merged put a changelog conflict on your branch, so I landed this through [#454] instead of asking you to rebase or touching your fork, your commits are in as you wrote them,app.pymerged clean.Related
Tickets:
#454