opencrm/backend
duffyduck fcf4ecc324 Version 1.0.0: Passwort-Reset + Rate-Limiting + Auto-Geburtstagsgrüße
Die drei letzten wichtigen Features für ein produktionsreifes 1.0.0:

## 1. Passwort vergessen-Flow

Der klassische Selfservice-Reset per Email – sowohl für Mitarbeiter als auch
für Portal-Kunden. User können sich nicht mehr aussperren, Admin muss nicht
mehr manuell eingreifen.

- Neues Link "Passwort vergessen?" auf Login-Seite
- PasswordResetRequest: Email + Typ-Auswahl (Mitarbeiter / Portal)
- PasswordResetConfirm: Token-basierte Bestätigung + neues Passwort (min 6 Zeichen)
- Token ist 2 Stunden gültig, dann muss neu angefordert werden
- Token ist kryptografisch sicher (crypto.randomBytes(32))
- User-Enumeration-Schutz: Backend gibt immer 200 zurück, egal ob Email existiert
- Nach erfolgreichem Reset werden ALLE bestehenden Sessions gekickt
  (tokenInvalidatedAt gesetzt) – falls jemand parallel eingeloggt war

DB:
- User.passwordResetToken + passwordResetExpiresAt
- Customer.portalPasswordResetToken + portalPasswordResetExpiresAt

## 2. Rate-Limiting gegen Brute-Force

Mit express-rate-limit:
- Login: 10 Versuche pro 15 Minuten pro IP. Erfolgreiche zählen nicht mit.
- Passwort-Reset-Request: 5 Versuche pro Stunde pro IP (Mail-Flut verhindern)

Sowohl Mitarbeiter-Login als auch Portal-Login geschützt.

## 3. Auto-Geburtstagsgrüße per Cron

Das autoBirthdayGreeting-Flag hatten wir schon, aber kein Scheduler der
ihn wirklich abschickt. Jetzt:

- Läuft täglich um 08:00 Uhr
- Findet Kunden mit heutigem Geburtstag + autoBirthdayGreeting=true
- Nur Email-Kanal (Messenger brauchen Browser-Klick)
- Catch-up 30s nach Server-Start: wenn Server am Geburtstag down war, wird
  beim nächsten Boot nachgeholt
- lastBirthdayGreetingYear verhindert Doppelversand

Dependencies: node-cron, @types/node-cron, express-rate-limit

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-23 17:14:27 +02:00
..
factory-defaults docs: Factory-Defaults Import/Export-Anleitung in READMEs 2026-04-23 14:19:02 +02:00
prisma Version 1.0.0: Passwort-Reset + Rate-Limiting + Auto-Geburtstagsgrüße 2026-04-23 17:14:27 +02:00
scripts Factory-Defaults: Export + Import von Stammdaten-Katalogen 2026-04-23 14:10:12 +02:00
src Version 1.0.0: Passwort-Reset + Rate-Limiting + Auto-Geburtstagsgrüße 2026-04-23 17:14:27 +02:00
uploads save email as pdf like an attachment 2026-02-04 19:18:32 +01:00
.env first commit 2026-01-29 01:16:54 +01:00
.env.example first commit 2026-01-29 01:16:54 +01:00
.gitignore Factory-Defaults: Export + Import von Stammdaten-Katalogen 2026-04-23 14:10:12 +02:00
package-lock.json Version 1.0.0: Passwort-Reset + Rate-Limiting + Auto-Geburtstagsgrüße 2026-04-23 17:14:27 +02:00
package.json Version 1.0.0: Passwort-Reset + Rate-Limiting + Auto-Geburtstagsgrüße 2026-04-23 17:14:27 +02:00
todo.md Version 1.0.0: Passwort-Reset + Rate-Limiting + Auto-Geburtstagsgrüße 2026-04-23 17:14:27 +02:00
tsconfig.json first commit 2026-01-29 01:16:54 +01:00