diff --git a/CHANGELOG.md b/CHANGELOG.md index 184bd93..41dfbdb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,26 @@ getaggte Releases (Kanal `stable`, optional `beta`) — niemals Entwicklungs-Bui _Keine offenen Änderungen — der nächste Stand wird hier gesammelt und als `vX.Y.Z` getaggt._ +## [0.5.0] - 2026-06-14 + +### Hinzugefügt +- **Kontowiederherstellung.** + - **2FA-Backup-Codes:** 8 Einmal-Codes werden bei der 2FA-Einrichtung erzeugt, einmalig + angezeigt und als `.txt` herunterladbar; in den Einstellungen (Sicherheit) neu erzeugbar. + Beim Login-2FA-Schritt als Alternative zum Authenticator-Code verwendbar. + - **„Passwort vergessen":** Reset über einen 2FA-Code oder Backup-Code (ohne E-Mail nötig). + Zusätzlich ein E-Mail-Reset-Link, sobald ein echter Mailer konfiguriert ist + (`mail.default` ≠ `log`/`array`). + - **CLI-Notfall:** `php artisan clusev:reset-admin` setzt das Admin-Passwort (und optional 2FA + + Backup-Codes) per Server-Shell zurück — der Last-Resort bei kompletter Aussperrung. + +### Sicherheit +- Passwort-Resets (Formular, E-Mail-Link, CLI) rotieren das `remember_token` — eine gestohlene + „Angemeldet bleiben"-Cookie überlebt einen Reset nicht. +- Backup-Codes werden atomar (Row-Lock) verbraucht (kein Replay). +- Der Notify-Toaster liegt jetzt auch auf den Auth-Seiten; alle Reset-/Backup-Aktionen werden im + Audit-Log erfasst. + ## [0.4.6] - 2026-06-14 ### Behoben diff --git a/config/clusev.php b/config/clusev.php index 5ce04c7..f98b945 100644 --- a/config/clusev.php +++ b/config/clusev.php @@ -3,7 +3,7 @@ return [ // First tagged release is v0.1.0 (semantic, not -dev). The live build hash // is resolved from .git at runtime (see App\Livewire\Versions\Index). - 'version' => '0.4.6', + 'version' => '0.5.0', // Default user channel. Only 'stable' and 'beta' are ever offered to users. 'channel' => 'stable', diff --git a/docs/session-handoff.md b/docs/session-handoff.md index 91cf7d3..1c9a63d 100644 --- a/docs/session-handoff.md +++ b/docs/session-handoff.md @@ -25,6 +25,12 @@ original foundational decisions doc (do not overwrite it). - `v0.4.4` — stop iOS zoom-on-focus: one unlayered `@media (pointer: coarse)` rule in `app.css` forces 16px on `input`/`textarea`/`select` on touch devices (phone + tablet any size), desktop sizing unchanged. + - `v0.5.0` — **account recovery** (spec/plan in `docs/superpowers/`): 2FA backup codes + (encrypted, shown once + downloadable + regenerable, usable at the login challenge), + forgot-password via 2FA/backup code (email-link path gated on a configured mailer), and a + `clusev:reset-admin` CLI lockout fallback. Resets rotate `remember_token`; codes consumed + atomically. **Phase 2 still open: WebAuthn/YubiKey** as a login factor (needs `laragear/webauthn`, + JS ceremonies, HTTPS/domain) — own spec. - `v0.4.6` — bilingual input validation: added `lang/{de,en}/validation.php` (full Laravel 13 key set + localized `attributes`); previously all field-validation errors were English-only. - `v0.4.5` — branding: full favicon/PWA set (`public/favicon.*`, `icon-192/512`,