v0.3.0 — ManaTwoFactorChallengeView

Apps mit aktivem 2FA bekommen jetzt eine native Challenge-View nach
Email/Password-Login. ManaLoginView schaltet automatisch um wenn
AuthClient.status auf .twoFactorRequired wechselt.

Components:
- ManaTwoFactorChallengeView — Scaffold-View mit 6-stelligem Code-
  Input, Backup-Code-Toggle, Cancel zurück zum Login
- TwoFactorChallengeViewModel — @Observable State-Maschine, wraps
  AuthClient.verifyTotp/verifyBackupCode
- LoginViewModel.Status.twoFactorRequired(email:) als neuer Case;
  submit() routet automatisch dorthin wenn der AuthClient den
  Challenge-Status zurückgibt

6 neue Tests, 39/39 grün.

Setzt mana-swift-core ≥ 1.3.0 voraus.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Till JS 2026-05-14 00:20:30 +02:00
parent 6417b4cd33
commit c1555565b6
7 changed files with 348 additions and 4 deletions

View file

@ -6,6 +6,28 @@ Alle Änderungen werden hier dokumentiert. Format orientiert an
## [Unreleased]
## [0.3.0] — 2026-05-14
Minor — `ManaTwoFactorChallengeView` für 2FA-Login. Setzt
mana-swift-core ≥ 1.3.0 voraus (Status `.twoFactorRequired`).
### Neu
- `ManaTwoFactorChallengeView` + `TwoFactorChallengeViewModel`
6-stelliger TOTP-Code-Input (Number-Pad auf iOS), Fallback auf
Backup-Codes via Toggle, "Abbrechen" routet via
`auth.signOut(keepGuestMode:)` zurück zum Login.
- `LoginViewModel.Status.twoFactorRequired(email:)` als neuer Case.
- `ManaLoginView` schaltet bei `.twoFactorRequired` automatisch auf
`ManaTwoFactorChallengeView` um (analog zu `.emailNotVerified`).
### Tests
- 6 neue Tests für `TwoFactorChallengeViewModel`: canSubmit-Guards
(TOTP 6 Ziffern, Backup beliebig), toggleMode-State-Reset, submit
bei Erfolg/Fehler, Backup-Code-Routing.
- 39/39 grün.
## [0.2.0] — 2026-05-13
Minor — Action-Level-Gate für Apps mit Guest-/Login-optional-Modus.