Trek_CN/client
Maurice 51387b0af1 feat(auth): add email-based password reset with MFA + session invalidation
Adds /auth/forgot-password and /auth/reset-password endpoints plus two new
client pages. When SMTP is configured the user receives a branded, i18n-aware
reset email; when it isn't the reset link is logged to the server console in
a clearly-fenced block so self-hosters can relay it manually.

Security properties:
- 256-bit cryptographically-random tokens, only SHA-256 hashes stored in DB
- 60 min expiry, single-use, prior unconsumed tokens auto-invalidated
- Enumeration-safe: /forgot-password always responds {ok:true} with a minimum
  latency pad so timing doesn't leak account existence
- Per-IP rate limit (3/15min on forgot, 5/15min on reset) + per-email throttle
- If the user has MFA enabled, a valid TOTP or backup code is required at
  reset-complete time — a compromised mailbox alone cannot take over a
  2FA-protected account
- New users.password_version column + JWT "pv" claim: bumping it on reset
  invalidates every live session immediately
- Full audit-log coverage (user.password_reset_request/_success/_fail)
- Forgot-page shows a visible hint when SMTP is unconfigured

Migration 115 adds users.password_version and password_reset_tokens
(user_id, token_hash UNIQUE, expires_at, consumed_at, created_ip).
2026-04-20 14:06:42 +02:00
..
public ui(trip): replace plane loading animation with TREK logo GIF 2026-04-05 17:28:04 +02:00
scripts Add PWA support for iOS home screen install 2026-03-21 22:21:23 +01:00
src feat(auth): add email-based password reset with MFA + session invalidation 2026-04-20 14:06:42 +02:00
tests add Emil-style UI polish pass (animations, shared components, feel) 2026-04-18 17:39:15 +02:00
index.html feat: Journey addon — travel journal with entries, photos, public sharing & PDF export 2026-04-11 19:01:34 +02:00
package-lock.json add mapbox gl option, gps location, journey reorder + polish 2026-04-19 01:41:02 +02:00
package.json add mapbox gl option, gps location, journey reorder + polish 2026-04-19 01:41:02 +02:00
postcss.config.js Initial commit — NOMAD (Navigation Organizer for Maps, Activities & Destinations) 2026-03-18 23:58:08 +01:00
tailwind.config.js Initial commit — NOMAD (Navigation Organizer for Maps, Activities & Destinations) 2026-03-18 23:58:08 +01:00
tsconfig.json test(front): add test suite frontend (WIP) 2026-04-07 12:31:09 +02:00
vite.config.js raise PWA precache limit so mapbox-gl bundle builds 2026-04-19 13:04:26 +02:00
vitest.config.ts fix(tests): restore native AbortController for undici fetch compatibility 2026-04-14 15:08:55 +02:00