Kopfleiste: Benutzer-Menü und gemeinsames Abmelden

- Benutzername und "Abmelden" im eigenen Header entfallen, nur noch
  Rückfall, wenn topbar.js nicht lädt
- Sitzungsanzeige als slot="benutzer" im Benutzer-Menü der Leiste
- hi-abmelden: POST /api/logout beendet die Timer-Sitzung, laufende
  Timer fragen vorher nach (Abbrechen stoppt das ganze Abmelden)
- html data-theme="dark": die Leiste ist dunkel wie die App, auch bei
  hellem System
- README/DEPLOY: Abmelden, Launch-URL /auth/login, CSP-Hinweis

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Kerim AtilganandClaude Opus 5.5 committed 2026-10-25 13:12:20 +01:00
1 parent 8f5517a409
commit 0ee9b708a1
5 files changed
+94 -14

No files matched your search

+17
View File
@@ -265,6 +265,23 @@ Wichtig in beiden Fällen:
* `/health` ist der Endpunkt für Health-Checks (antwortet **ohne** Anmeldung)
* Websockets werden **nicht** gebraucht
### Portal-Kopfleiste
`frontend/index.html` lädt die zentrale Handy-Insel-Kopfleiste
(`https://portal.handy-insel.de/topbar.js`, `data-app="timer"`). Sie bringt
App-Umschalter und Benutzer-Menü mit; Benutzername und „Abmelden“ der App
stehen deshalb dort, die eigenen im Header erscheinen nur, wenn das Skript
nicht lädt.
* **Abmelden** in der Leiste ruft vorher `POST /api/logout` auf (Ereignis
`hi-abmelden`) und meldet danach bei Portal und Authentik ab.
* **Launch-URL** der Kachel im Portal: `https://timer.handy-insel.de/auth/login`
(startet direkt die Anmeldung über Authentik).
* **Content-Security-Policy:** Die App setzt keine. Kommt im Proxy eine dazu,
muss sie `script-src`/`connect-src https://portal.handy-insel.de` und
`img-src https://portal.handy-insel.de https://login.handy-insel.de`
erlauben (Details in den Proxy-Beispielen).
### Bondrucker
Vollständige Einrichtung: **`deploy/bondrucker/README.md`**. Hier nur das