✨ 🤖 v0.1: Player mit Hide-to-Systray + Cloudron-SSO-WebAuthn-Fix #3

Closed
opened 2026-08-24 13:25:03 +02:00 by holm · 1 comment
Owner
Dimension Bewertung Einschätzung
Aufwand ████░░░░░░ Mittel — die WebAuthn-Faehrte hat mehrere Restart-Zyklen gekostet
Nutzen ██████████ Sehr hoch — erster nutzbarer Player, kein Bug-Nachbau mehr noetig
Bruchhäufigkeit ██░░░░░░░░ Niedrig — trifft nur beim allerersten Login pro Profil (danach Cloudron-Device-Trust)
Nachhaltigkeit ████████░░ Hoch — WebAuthn-Kappung ist eine einzeilige, robuste Injektion
Dringlichkeit ████████░░ Hoch — ohne den Fix ist Login fuer neue Profile blockiert

Was gebaut wurde

main.js fasst die beiden bestaetigten Bausteine aus #1 und #2 zu einem echten v0.1 zusammen:

  • Electron-BrowserWindow laedt https://audiothek.mueller.network/ direkt.
  • close-Event abgefangen: Fenster versteckt sich (win.hide()) statt die App zu beenden.
  • Tray-Icon (Platzhalter, einfarbiges Quadrat) in polybars bestehendem internal/tray -- Klick zeigt/versteckt das Fenster, Kontextmenue mit "Öffnen"/"Beenden".
  • Single-Instance-Lock: ein zweiter Start holt das bestehende Fenster nach vorne statt eine zweite Instanz zu oeffnen.
  • Launcher playzen.sh nach FlipDrop-Muster (readlink -f, raeumt ELECTRON_RUN_AS_NODE/VSCODE_* ab).

Neuer Befund unterwegs: Cloudron-SSO blockiert das 2FA-Feld

Der Login-Screen (id.nerdraum.de) ist nicht ABS' eigenes Login, sondern Cloudrons zentrales SSO. Mit Holm live durchgetestet: Buttons reagierten normal, aber das 2FA-Token-Feld liess sich weder anklicken noch per Tab erreichen noch per el.focus() fokussieren (DOM-Attribute dabei komplett unauffaellig: tabIndex:0, nicht disabled/readonly, kein Overlay). Direkt neben dem Feld steht ein "Use passkey"-Button.

Ursache: WebAuthn "Conditional UI" (die Autofill-Anbindung fuer Passkeys) haengt sich in dieser Electron-Version (41.9.1) ohne verfuegbaren Platform-Authenticator auf und blockiert dabei das assoziierte Eingabefeld, statt sauber zu scheitern.

Fix: navigator.credentials.get wird bei dom-ready -- vor jedem Seiten-Script -- auf ein sofortiges Reject gepatcht, damit die Conditional-UI-Anfrage nie startet. Mit Holm verifiziert: 2FA-Feld danach normal eintippbar, Login durchgelaufen.

Sackgassen unterwegs (fuer die naechste Session dokumentiert): WM-/i3-Fensterfokus (Holm bestaetigte, dass Buttons normal reagierten -- kein Fensterproblem), Tray-Embedding als Fokus-Dieb (Test ohne Tray zeigte denselben Fehler), autofocus-Attribut auf dem Feld (war false), zu alte Chromium-Engine (Electron 41.9.1 ist aktuell genug, kein grosser Versionsabstand zu Holms System-Chromium 151).

Was in diesem Commit liegt

  • main.js, package.json, playzen.sh

🤖 angelegt von Claude v00 (API/Token holm)

| Dimension | Bewertung | Einschätzung | |---|---|---| | Aufwand | `████░░░░░░` | Mittel — die WebAuthn-Faehrte hat mehrere Restart-Zyklen gekostet | | Nutzen | `██████████` | Sehr hoch — erster nutzbarer Player, kein Bug-Nachbau mehr noetig | | Bruchhäufigkeit | `██░░░░░░░░` | Niedrig — trifft nur beim allerersten Login pro Profil (danach Cloudron-Device-Trust) | | Nachhaltigkeit | `████████░░` | Hoch — WebAuthn-Kappung ist eine einzeilige, robuste Injektion | | Dringlichkeit | `████████░░` | Hoch — ohne den Fix ist Login fuer neue Profile blockiert | ## Was gebaut wurde `main.js` fasst die beiden bestaetigten Bausteine aus [#1](https://forgejo.mueller.network/holm.tools.public/playzen/issues/1) und [#2](https://forgejo.mueller.network/holm.tools.public/playzen/issues/2) zu einem echten v0.1 zusammen: - Electron-`BrowserWindow` laedt `https://audiothek.mueller.network/` direkt. - `close`-Event abgefangen: Fenster versteckt sich (`win.hide()`) statt die App zu beenden. - Tray-Icon (Platzhalter, einfarbiges Quadrat) in polybars bestehendem `internal/tray` -- Klick zeigt/versteckt das Fenster, Kontextmenue mit "Öffnen"/"Beenden". - Single-Instance-Lock: ein zweiter Start holt das bestehende Fenster nach vorne statt eine zweite Instanz zu oeffnen. - Launcher `playzen.sh` nach FlipDrop-Muster (`readlink -f`, raeumt `ELECTRON_RUN_AS_NODE`/`VSCODE_*` ab). ## Neuer Befund unterwegs: Cloudron-SSO blockiert das 2FA-Feld Der Login-Screen (`id.nerdraum.de`) ist nicht ABS' eigenes Login, sondern Cloudrons zentrales SSO. Mit Holm live durchgetestet: Buttons reagierten normal, aber das 2FA-Token-Feld liess sich weder anklicken noch per Tab erreichen noch per `el.focus()` fokussieren (DOM-Attribute dabei komplett unauffaellig: `tabIndex:0`, nicht disabled/readonly, kein Overlay). Direkt neben dem Feld steht ein "Use passkey"-Button. **Ursache:** WebAuthn "Conditional UI" (die Autofill-Anbindung fuer Passkeys) haengt sich in dieser Electron-Version (41.9.1) ohne verfuegbaren Platform-Authenticator auf und blockiert dabei das assoziierte Eingabefeld, statt sauber zu scheitern. **Fix:** `navigator.credentials.get` wird bei `dom-ready` -- vor jedem Seiten-Script -- auf ein sofortiges Reject gepatcht, damit die Conditional-UI-Anfrage nie startet. Mit Holm verifiziert: 2FA-Feld danach normal eintippbar, Login durchgelaufen. Sackgassen unterwegs (fuer die naechste Session dokumentiert): WM-/i3-Fensterfokus (Holm bestaetigte, dass Buttons normal reagierten -- kein Fensterproblem), Tray-Embedding als Fokus-Dieb (Test ohne Tray zeigte denselben Fehler), `autofocus`-Attribut auf dem Feld (war `false`), zu alte Chromium-Engine (Electron 41.9.1 ist aktuell genug, kein grosser Versionsabstand zu Holms System-Chromium 151). ## Was in diesem Commit liegt - `main.js`, `package.json`, `playzen.sh` > 🤖 angelegt von Claude v00 (API/Token holm)
Author
Owner

Erledigt — Commit 3da9d60 auf dev gepusht.

Beleg: Live-Test mit Holm -- 2FA-Feld nach der WebAuthn-Kappung normal eintippbar, Login durchgelaufen, Tray-Icon (gruenes Quadrat) sichtbar in polybars statbar-Tray, Fenster schliessen versteckt statt zu beenden.

🤖 Kommentar von Claude v00 (API/Token holm)

**Erledigt** — Commit [`3da9d60`](https://forgejo.mueller.network/holm.tools.public/playzen/commit/3da9d608d6136548c44bae409e0f4b7f687d2825) auf `dev` gepusht. Beleg: Live-Test mit Holm -- 2FA-Feld nach der WebAuthn-Kappung normal eintippbar, Login durchgelaufen, Tray-Icon (gruenes Quadrat) sichtbar in polybars `statbar`-Tray, Fenster schliessen versteckt statt zu beenden. > 🤖 Kommentar von Claude v00 (API/Token holm)
holm closed this issue 2026-08-24 13:25:41 +02:00
Sign in to join this conversation.
No description provided.