feat: MFA frontend with auth page restyling, challenge screen, and setup wizard

- Restyle organizer auth pages: Dutch text, remove placeholder social login
- Restyle portal auth pages to Vuexy v1 centered card pattern with decorative shapes
- MFA challenge card component with VOtpInput, method tabs, backup code input,
  trusted device checkbox, and session countdown timer
- Login pages handle mfa_required response with device fingerprint header
- Security settings page with TOTP setup (QR code), email setup, disable MFA,
  backup codes regeneration, and trusted devices management
- Portal profile page includes MFA security section
- Admin user detail page shows MFA status with reset button
- MFA enforcement route guard redirects to security settings when required
- Device fingerprint utility for trusted device identification
- MFA types, composables with TanStack Query for both apps

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-15 21:32:17 +02:00
parent a9e8e9bb62
commit 0be2956ea4
38 changed files with 3991 additions and 377 deletions

View File

@@ -87,6 +87,17 @@ function handleLogout() {
<VListItemTitle>Accountinstellingen</VListItemTitle>
</VListItem>
<VListItem :to="{ name: 'account-settings-security' }">
<template #prepend>
<VIcon
class="me-2"
icon="tabler-shield-lock"
size="22"
/>
</template>
<VListItemTitle>Beveiliging</VListItemTitle>
</VListItem>
<VListItem
:disabled="isLoggingOut"
@click="handleLogout"