Pepe Ziberi
f588b6d361
feat(auth): Zwei-Faktor-Authentisierung — TOTP (Authenticator-App) (v1.8.0)
...
Freiwillige MFA, du kannst sie für dich aktivieren; Login verlangt danach den zweiten Faktor.
- Schema/Migration: User.totpSecret/totpConfirmedAt/mfaBackupCodes + Tabelle webauthn_credentials
(WebAuthn folgt), otplib v12
- lib/mfa.ts: TOTP-Secret/QR-URI/Verify + bcrypt-gehashte Backup-Codes
- lib/auth.ts: buildSessionForUser, createMfaToken/verifyMfaToken (10-Min-Zwischentoken), userHasMfa
- Login-Flow: nach Passwort -> bei aktiver MFA kein Cookie, sondern mfaToken; öffentlicher
/api/auth/mfa-login/verify prüft TOTP ODER Backup-Code und setzt dann die Session (Rate-Limit)
- Einrichtung in /settings: QR scannen, Code bestätigen, Backup-Codes (einmalig), deaktivieren
- Admin-Reset-API: /api/admin/users/[id]/mfa-reset (SERVER_ADMIN alle, TENANT_ADMIN eigene Org)
- Login-Seite: zweiter Schritt für Code/Backup-Code
- SMS bewusst weggelassen (Kosten/SIM-Swap)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-23 18:06:24 +02:00
Pepe Ziberi
235959101b
feat(legal): In-App-Hinweise, Export-Disclaimer & Web-Härtung (v1.7.3)
...
Teil 4 des Compliance-Updates:
- Export: rechtlicher Prüf-Hinweis in PDF-Footer und eingebrannt in PNG
("Angaben vor Verwendung fachlich prüfen · Offline-/Einsatzunterlagen bleiben massgebend")
- Dashboard: dezenter, minimierbarer Hinweisbanner (unterstützendes Werkzeug ohne garantierte
Verfügbarkeit → /verantwortungsvolle-nutzung); bleibt in den Rechtsseiten erhalten
- Messpanel: expliziter Berechnungs-/Geodaten-Hinweis ("vor operativer Verwendung fachlich prüfen")
- Middleware: private Routen (/app, /admin, /settings, /konto) mit X-Robots-Tag noindex + no-store
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-23 12:11:43 +02:00
Pepe Ziberi
6ab2fd9a6b
feat(legal): Organisationsbestätigung, Re-Consent-Gate & Admin-Ansicht (v1.7.2)
...
Teil 3 des Compliance-Updates — Zustimmungs-UI und Nachweis-Verwaltung:
- LegalConsentGate (blockierender Dialog): erkennt offene Pflicht-Zustimmungen nach Login,
zeigt Organisationsbestätigung mit freundlicher Erklärung + 7 einzeln anzukreuzenden
Pflichtbestätigungen (keine Vorauswahl) für Org-Admins, sonst Re-Consent für aktualisierte
Nutzungsbedingungen/Datenschutz. Abmelden/Dokumente-Lesen bleiben möglich (Allowlist);
keine stillschweigende Zustimmung. Tastatur-/Screenreader-tauglich (role=dialog)
- /konto/datenschutz: eigene Zustimmungen einsehen, Datenexport/Kontolöschung anfordern,
Datenschutzkontakt (Route via Middleware geschützt)
- /admin/legal (nur SERVER_ADMIN): aktive Dokumentversionen, Zustimmungszahlen, fehlende
Zustimmungen, Suche nach Benutzer, CSV-Export (minimale Nachweisdaten)
- APIs: /api/legal/my-acceptances, /api/admin/legal, /api/admin/legal/acceptances (+CSV)
- Gate ins Root-Layout eingehängt
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-23 12:07:59 +02:00
Pepe Ziberi
6aa70e1504
feat(share): Nur-Ansicht-Teilen-Link (live, optional PIN) + QR (v1.6.9)
...
Build and Push Docker Image / build-and-push (push) Successful in 31m39s
Neuer öffentlicher Teilen-Link für die aktuelle Lage — ohne Login nur zum
Ansehen, live aktualisiert. Optional mit 4–8-stelliger PIN geschützt.
- DB: Project.shareToken (unique) / sharePin (bcrypt) / shareEnabled + Migration
- API: POST/GET /api/projects/[id]/share (Verwaltung, Mandanten-Check, VIEWER blockiert),
GET/POST /api/share/[token] (öffentlich, PIN-Prüfung, Rate-Limit gegen Brute-Force)
- Öffentliche Seite /view/[token]: PIN-Gate, read-only MapView, Socket-Live + 30s-Poll
- Teilen-Dialog im Werkzeuge-/Mobil-Menü: Link kopieren, QR-Code, PIN setzen/entfernen,
Teilen beenden (widerruft den Link)
- Middleware: /api/share/ öffentlich freigeschaltet
Hinweis: hochgeladene Custom-Symbole zeigen im anonymen Viewer den Platzhalter
(Icon-Endpunkte bleiben auth-geschützt); eingebaute taktische Zeichen erscheinen normal.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-22 23:30:47 +02:00
Pepe Ziberi
93af663dd1
fix(auth): JWT-Secret härten und Session-Laufzeit verkürzen
...
- Gemeinsames Secret-Modul (jwt-secret.ts): bricht in Produktion hart ab,
wenn NEXTAUTH_SECRET fehlt oder <32 Zeichen – kein öffentlicher Fallback mehr
- auth.ts und middleware.ts nutzen dieselbe Secret-Quelle (kein Divergieren)
- Schwacher Compose-Fallback entfernt: Deployment ohne Secret bricht ab (:?)
- "Angemeldet bleiben" 30 → 14 Tage; Laufzeiten zentralisiert (SESSION_MAX_AGE_*)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-18 20:11:56 +02:00
Pepe Ziberi
8ef2cbe68e
v1.0.4: Security hardening - rate limiting, middleware, HSTS, password strength, anti-enumeration
2026-02-21 18:55:10 +01:00