Fix: no crear usuarios de prueba con contraseñas hardcodeadas por defecto
Qué
Corrige el hallazgo crítico de la auditoría de backend (2026-08-27):
DataSeeder creaba usuarios admin/tutor/psicopedagogo/legales/docente con
contraseñas hardcodeadas (Admin123!, etc.) y corría en cualquier perfil
salvo "test", incluida producción.
Por qué
El proyecto no fija spring.profiles.active en ningún entorno, así que
"todo menos test" en la práctica significaba "también producción". El
riesgo: cualquiera con acceso al repo (actual, histórico, o un fork
filtrado) conoce el email y la contraseña del admin.
Cambios
-
DataSeeder.java: @Profile("!test") → @ConditionalOnProperty(name =
"app.seed-demo-users", havingValue = "true"). Default false, seguro
por defecto. -
application.properties: nueva property app.seed-demo-users con
default false vía SEED_DEMO_USERS. -
.env.example: documentada la variable SEED_DEMO_USERS=true para
dev/local.
Cómo correr localmente con usuarios base precargados
Setear SEED_DEMO_USERS=true y BREVO_API_KEY (cualquier valor sirve en
local, solo se usa para armar el cliente HTTP de Brevo) en el entorno
de ejecución. Si tu Postgres local es de antes del commit db862266
(rol sintético → rol real), hace falta docker compose down -v +
up -d para que el schema traiga la columna id_rol.
Testing
- Compila limpio (./mvnw compile).
- Suite completa (516 tests) sigue pasando sin cambios — el perfil test
no define SEED_DEMO_USERS, así que el comportamiento en tests es el
mismo (el seeder no corre). - Probado el arranque completo end-to-end contra Postgres real: con
SEED_DEMO_USERS=true se crean los 5 funcionarios base (ACTIVO), con
SEED_DEMO_USERS sin definir no se crea ninguno.