feat(saas): recuperación de contraseña, freno de fuerza bruta y hardening
Bloque A de la fase SaaS: - Recuperación por email: código de un solo uso (solo su SHA-256 en BD), caducidad 30 min, emitir uno nuevo invalida los anteriores, respuesta idéntica exista o no la cuenta (anti-enumeración) y email asíncrono; restablecer cierra todas las sesiones de la familia. MailService cae a modo log sin SMTP configurado. - LoginAttemptService: 5 fallos -> bloqueo con backoff exponencial (429 + Retry-After) en login, PIN del panel y solicitudes de reset, comprobado ANTES de evaluar credenciales. - Registro exige aceptar la política de privacidad (privacy_accepted_at). - Borrado definitivo de cuenta (RGPD) con confirmación por contraseña. - CORS por configuración; seeder demo fail-safe (matchIfMissing=false, activado explícito en el compose local); application-prod.yml. - Liquibase 005 con rollback. 44 tests verdes incl. migración en Postgres.
This commit is contained in:
@@ -35,6 +35,9 @@ services:
|
||||
# Spring enlaza estas dos sobre spring.datasource.* por binding relajado.
|
||||
SPRING_DATASOURCE_USERNAME: ${DB_USER}
|
||||
SPRING_DATASOURCE_PASSWORD: ${DB_PASSWORD}
|
||||
# Solo en LOCAL: sembrar la familia demo. En producción no se declara
|
||||
# (el seeder es fail-safe: sin la propiedad, no siembra nada).
|
||||
RECORDALEXIA_SEED_ENABLED: "true"
|
||||
TZ: Europe/Madrid
|
||||
expose:
|
||||
- "8080"
|
||||
|
||||
Reference in New Issue
Block a user