Skip to content

feat(settings): Mit Firmenkonto anmelden unter Einstellungen → Verbindung - #69

Merged
CallMeTechie merged 3 commits into
masterfrom
feat/company-signin
Oct 26, 2026
Merged

CallMeTechie merged 3 commits into
masterfrom
feat/company-signin

Conversation

@CallMeTechie

Copy link
Copy Markdown
Owner

Worum es geht

„Mit Firmenkonto anmelden“ in der Community-App: Ein Gerät lässt sich ohne Einrichtungscode vom Admin einrichten – mit dem Firmenkonto (Passwort / AD-LDAP oder „Mit Microsoft anmelden“). Logik, PKCE, Loopback-Empfänger und IPC kommen aus CallMeTechie/gatecontrol-client-core#61; hier ist nur die Oberfläche. Gleiches Verhalten wie in Pro (GateControl-Pro-Client#69), eingepasst in den Einrichtungsort der Community-App (Einstellungen → Verbindung).

Voraussetzung: client-core#61 zuerst mergen, danach core.ref hier auf den Merge-Commit von core master umpinnen (npm run core:bump). Aktuell zeigt core.ref auf den Branch-Stand von #61 (2b574c3), damit die CI schon gegen den neuen core läuft.

Ablauf in der App

  • Einstellungen → Verbindung: nach Eingabe der „Server-URL“ (500 ms entprellt, beim Öffnen der Einstellungen einmal) fragt die App GET /api/v1/client/signin (core signin:methods).
    • Server bietet die Anmeldung an (GateControl ≥ 1.201.0) → unter der Server-Karte erscheint die Karte „Mit Firmenkonto anmelden“.
    • Älterer Server (404), keine Antwort, Serversperre per Richtlinie → keine Karte, nur Einrichtungscode/API-Schlüssel wie bisher.
  • Karte:
    • ein „Mit Microsoft anmelden“ je Eintrag des Servers (sein Label dahinter) → Standardbrowser; während des Wartens Hinweis und Abbrechen.
    • „E-Mail oder Benutzername“, „Passwort“, Hinweis des Servers, „Anmelden“; bei totp_required „Bestätigungscode“ (6 Ziffern).
    • Fehlertexte aus dem Vertrag (core), dazu password_change_required („Du musst dein Passwort zuerst einmal im Browser ändern. Melde dich dafür im Portal an.“) und directory_unavailable („Der Anmeldedienst deiner Firma ist gerade nicht erreichbar. …“), unbekannte Codes → allgemeiner Fehler.
    • Erfolg wie „Speichern & Registrieren“ mit einem Einrichtungscode („Gerät eingerichtet (Peer-ID …)“), Server-URL übernommen.
  • Verlassen der Einstellungen bricht eine wartende Browser-Anmeldung ab.

Design

Keine neuen Styles: nur vorhandene Bausteine der Einstellungen (.card.set-card, .set-card-title, .set-card-desc, .field/.inp, .field-hint, .field-actions, .btn-pri/.btn-sec, .field-status).

Sicherheit

Einrichtungscode, Handoff und Verifier verlassen den Main-Prozess nicht; das Passwort geht nur an signin:password und wird nach Erfolg aus dem Feld gelöscht. Einlösen über den bestehenden Setup-Code-Weg (hostname, platform, X-Machine-Fingerprint). Fenster-Schutz und Bridge unverändert; der Browser öffnet sich über den http(s)-Filter von shell:open-external.

Tests

  • E2E test/e2e/signin.spec.js gegen den Mock-Server (neu: support/signin-mock.js, 404 ohne setSignin()): älterer Server ohne Karte; Passwort falsch → Fehler, richtig → 2FA → /enroll mit genau dem ausgegebenen Code; Microsoft mit Start-URL, Loopback-Antwort, Handoff-Tausch mit PKCE-Prüfung im Mock, Abschlussseite, zweite Anfrage abgewiesen; fremder state → kein Handoff-Tausch; Abbrechen. Weder Passwort, Bestätigungscode, Handoff noch Einrichtungscode stehen im App-Log, in den Stores oder den Ereignissen.
  • Lokal: npm test grün (Syntax 27 Dateien, 303 Tests); E2E unter Linux/xvfb grün: app, policy, signin, window-guard.

Nicht geprüft: echter Lauf unter Windows mit Standardbrowser und echtem Entra-Login.


Generated by Claude Code

Claude added 3 commits October 26, 2026 07:42
…dung

Für die Adresse in „Server-URL“ fragt die App GET /api/v1/client/signin
(core signin:methods, 500 ms entprellt, beim Öffnen der Einstellungen einmal).
Bietet der Server die Anmeldung an (GateControl >= 1.201.0), erscheint unter
der Server-Karte die Karte „Mit Firmenkonto anmelden“; ältere Server (404),
keine Antwort oder eine Serversperre der Richtlinie: keine Karte.

Die Karte nutzt nur vorhandene Bausteine (.card.set-card, .set-card-title,
.set-card-desc, .field/.inp, .field-hint, .field-actions, .btn, .field-status):
* „Mit Microsoft anmelden“ je Eintrag (Label des Servers dahinter), öffnet
  den Standardbrowser; „Abbrechen“ beendet das Warten
* „E-Mail oder Benutzername“, „Passwort“, Hinweis des Servers, „Anmelden“
* bei totp_required erscheint „Bestätigungscode“ (6 Ziffern)
* Fehlertexte aus dem core (Vertrag); Erfolg wie „Speichern & Registrieren“
  mit einem Einrichtungscode („Gerät eingerichtet“)

Einrichtungscode, Handoff und PKCE-Verifier bleiben im Main-Prozess (core);
das Einlösen läuft über den bestehenden Setup-Code-Weg. Verlassen der
Einstellungen bricht eine wartende Browser-Anmeldung ab.

i18n ui.signin.* (de/en). E2E: Mock-Server mit signin-Endpunkten
(support/signin-mock.js) und signin.spec.js (älterer Server, Passwort mit
2FA, Microsoft mit Loopback-Antwort und Handoff, fremder state, Abbrechen,
nichts Geheimes in den Dateien der App).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016xX1efcZF1f6G9rhmaJNLD
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016xX1efcZF1f6G9rhmaJNLD
…eldung)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016xX1efcZF1f6G9rhmaJNLD
@CallMeTechie
CallMeTechie merged commit 1261737 into master Oct 26, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants