Commit Graph

35 Commits

Author SHA1 Message Date
elpatron ec11dd8d2b feat(vessel): Schiffsflotte im Profil und Logbuch-Auswahl
Benutzerweiter Vessel-Pool (E2E, Sync, Migration von Legacy-Yachts) mit
LogbookVesselSelection und LogbookVesselPicker. Profil mit Accordion
(Flotte & Crew); Demo und Onboarding-Tour inkl. profile_vessel_pool.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-01 21:25:08 +02:00
elpatron 0caaf681d8 Fix live journal freeze and passkey login on localhost.
Harden live log init with safe per-entry decrypt, stable loading state, and no parallel list scan in live mode. Improve multi-sail picker UX, stop WebAuthn retry after user cancel, redirect 127.0.0.1 to localhost, and tolerate missing appearance prefs table.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-01 08:49:45 +02:00
elpatron 57f63ad486 fix(auth): Session-Restore erst mit vollständiger lokaler Session
Stellt hasUnlockedLocalSession für UI-Wiederherstellung und
enforceUnlockedSession wieder her; persistSessionUserId setzt userId
nur bei Angabe in der Server-Antwort.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-31 11:37:50 +02:00
elpatron 72cbad8d5e fix(auth): Session-Wiederherstellung nicht an active_userid koppeln
Trennt hasUnlockedLocalCrypto (Master-Key + Username) von
hasUnlockedLocalSession (+ userId für API), damit ein gültiges
Server-Cookie ohne userId in der Antwort keinen fälschlichen Logout auslöst.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-31 11:35:17 +02:00
elpatron 634eb622fd fix(pwa): weiße Seite nach Android-Neustart ohne Master-Key vermeiden
Erzwingt Login wenn nur die HTTP-Session übrig ist, begrenzt SW-Reloads,
fängt Bootstrap-/Render-Fehler ab und stabilisiert den PWA-Kaltstart.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-31 11:30:37 +02:00
elpatron 68af8c6361 fix(profile): Reauth für Passkey-Umbenennung und Geräte-Dialog
PATCH /credentials verlangt requireReauth wie add/delete; Client ruft
reauthWithPasskey vor rename auf. Abbrechen-Text beim Gerät vergessen korrigiert.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-31 09:59:44 +02:00
elpatron ad7e036ab7 feat(profile): Wiederherstellungsschlüssel rotieren
Neuer Recovery-Code über Profilseite mit Passkey-Reauth, Anzeige der
12 Wörter und API-Endpoint rotate-recovery; Plausible-Event dokumentiert.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-31 09:58:21 +02:00
elpatron d4538ec06e feat(profile): Passkey-Labels, Sicherheits-Checkliste und Geräte-Block
Erweitert die Profilseite um benennbare Passkeys, Sicherheitsübersicht,
Gerät/Sync-Status, Backup-Hinweis in der Gefahrenzone und Dialog beim
Löschen des letzten Passkeys.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-31 09:43:28 +02:00
elpatron 6ad75ff947 fix(auth): Add-credential-Challenges pro Versuch und single-use
Speichert Challenges nach challenge statt userId für parallele Flows und invalidiert sie vor der Verifikation, damit fehlgeschlagene Versuche keine Leaks hinterlassen.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-31 09:25:02 +02:00
elpatron afc5a1e200 feat(profile): Benutzerprofilseite mit Passkeys, PIN und Statistiken
Zentralisiert Account-Verwaltung vom Dashboard aus: Identität, Passkey-CRUD, lokaler PIN und KPIs; Kontolöschung wandert ausschließlich in die Profilseite.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-31 09:19:56 +02:00
elpatron dea33e3f00 feat(security): Session-Cookies statt X-User-Id und API-Härtung
Ersetzt die spoofbare X-User-Id-Auth durch signierte HttpOnly-Sessions nach
WebAuthn, erzwingt WRITE-only Sync, speichert den Master-Key nur im RAM und
ergänzt CORS, Rate-Limits, Helmet sowie Passkey-Reauth für sensible Aktionen.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-30 13:47:24 +02:00
elpatron 2926d743fb feat: Plausible Analytics mit 18 Custom Events
Trackt zentrale Nutzeraktionen (Auth, Logbuch, Reisetage, Kollaboration, Onboarding, Export) über einen typisierten Analytics-Service und dokumentiert alle Events für Plausible Goals.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-29 19:02:41 +02:00
elpatron 0da855381d feat: Demo-Logbuch und Onboarding-Tour bei Registrierung
Neue Nutzer erhalten automatisch ein Demo-Logbuch mit drei Ostsee-Reisetagen
und eine interaktive App-Tour; die Tour kann in den Einstellungen erneut gestartet werden.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-29 17:59:02 +02:00
elpatron 5d11dbacea fix: Passkey-Login über Plattformen hinweg vereinfachen und stabilisieren.
Merkt Accounts lokal für Ein-Klick-Login ohne Benutzernamen, verbessert PRF-Fallbacks für Windows Hello/Bitwarden und behebt PIN-Session-Probleme.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-29 14:49:32 +02:00
elpatron eca4e1eb29 feat: enhance WebAuthn PRF handling with follow-up authentication and base64url encoding for user IDs 2026-05-29 13:34:55 +02:00
elpatron 1cc8c6291e feat: implement persistent master key storage (Approach 1) and local PIN fallback (Approach 2) 2026-05-29 12:08:22 +02:00
elpatron 3bb59d2ca0 fix: add retry fallback in registration and login for authenticators with unsupported PRF options 2026-05-29 10:41:46 +02:00
elpatron e0e93a5685 fix: request empty prf options during registration to prevent typeerror on credentials container create 2026-05-29 10:38:25 +02:00
elpatron b9e3ce4252 fix: clean up unused local helper and verify compilation 2026-05-29 10:34:14 +02:00
elpatron fe8c5f12c6 fix: pass Base64URL salt during registration 2026-05-29 10:29:58 +02:00
elpatron 1c56136645 fix: WebAuthn PRF JSON Base64URL serialization for optionsJSON 2026-05-29 10:19:48 +02:00
elpatron 128dd17863 fix: WebAuthn PRF salt length and server logbook key storage 2026-05-29 08:46:50 +02:00
elpatron abfaf3e99c Use raw ArrayBuffer instead of Uint8Array for PRF salt input 2026-05-29 08:35:19 +02:00
elpatron 1001bafab7 Fix SimpleWebAuthn startRegistration and startAuthentication parameter structure 2026-05-29 08:29:26 +02:00
elpatron 217ba14d1a Add client-side diagnostic logging for Passkey PRF authentication 2026-05-29 08:24:17 +02:00
elpatron 8985afac38 Enroll Passkey PRF key on first login recovery phase 2026-05-29 07:53:46 +02:00
elpatron 71ea02416f Implement cascading logbook deletion on account deletion 2026-05-28 21:54:30 +02:00
elpatron ecdf8c2dc0 Request PRF evaluation salt during WebAuthn registration to enable passwordless logins 2026-05-28 21:46:29 +02:00
elpatron b3978ed294 feat(collab): E2E-compliant crew invitations and link-sharing collaboration 2026-05-28 20:31:10 +02:00
elpatron 572d38e490 Dockerize client, server, and postgres database for production with container healthchecks 2026-05-28 12:23:50 +02:00
elpatron 92b20ad0c0 fix: persist active master key in sessionStorage to survive page reloads 2026-05-28 11:19:15 +02:00
elpatron 50371b9297 feat: implement usernameless Passkey login flow using discoverable credentials 2026-05-28 10:45:33 +02:00
elpatron 55cbe71520 fix: correct WebAuthn options extensions path in client auth service 2026-05-27 21:44:41 +02:00
elpatron 6e2dce6ec5 feat & docs: implement multi-logbook database cache, API routes, and switcher dashboard 2026-05-27 21:33:16 +02:00
elpatron 35479cfff3 feat: implement WebAuthn Passkeys register/login API and client onboarding UI 2026-05-27 21:28:15 +02:00