Files
project.linkedcorp.net/CHANGELOG.md
T
Milton Gonzalez 7557dffc52 feat: autorregistro con verificacion de correo + aprobacion, superadmin y SMTP
- POST /api/auth/register: primer usuario del sistema -> superadmin con sesion
  directa (bootstrap, sin correo ni aprobacion); los siguientes quedan
  pending_verification y reciben un correo con enlace de un solo uso (24h).
- GET /api/auth/verify-email: pasa a pending_approval y notifica in-app a los
  admin/superadmin activos.
- admin/superadmin aprueban (POST /api/users/:id/approve, eligen rol y
  departamento) o rechazan (POST /api/users/:id/reject, borra y audita el
  email) desde Organizacion -> Usuarios (nuevo badge de estado + acciones).
- login() da mensaje especifico segun el status de la cuenta en vez del
  generico "credenciales invalidas".
- Recuperacion de clave (forgot/reset-password): respuesta siempre generica,
  token de 1 hora de un solo uso.
- Nuevo modulo settings: SMTP configurable SOLO por superadmin desde
  Configuracion -> Correo (SMTP); clave cifrada AES-256-GCM (ENCRYPTION_KEY)
  en la tabla system_settings, nunca expuesta por la API. sendMail() degrada
  a modo dev (loguea en vez de enviar) si no hay SMTP configurado, y nunca
  deja que un fallo de envio tumbe al que lo llama.
- Migracion 002_registration_and_smtp.sql: rol superadmin, columnas de ciclo
  de vida en users (status, tokens), tabla system_settings, y promueve al
  usuario mas antiguo del sistema a superadmin.
- Fix: React.StrictMode disparaba el efecto de VerifyEmailPage dos veces; la
  segunda llamada (token ya consumido) mostraba "enlace invalido" pese a que
  la verificacion ya habia funcionado. Se agrega una guarda por token.
- Fix (deuda tecnica v1.0.0): se reordena el montaje de rutas en app.js —
  subtasksRoutes (mount generico en /api) va al final, para no interceptar
  con su requireAuth interno una request sin token dirigida a un router mas
  especifico registrado despues.
- Documentacion actualizada: AGENTS.md, SPEC.md, API.md, BASE_DE_DATOS.md,
  CONFIGURACION.md, ESTADO.md, CHANGELOG.md. Version 1.1.0.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-05 23:28:46 -05:00

39 lines
2.4 KiB
Markdown

# Changelog - project.linkedcorp.net
## [1.1.0] - 2026-09-06
### Added
- Autorregistro público (`/registro`) con verificación de correo (enlace de un solo uso, 24h) y
aprobación posterior por Administrador/Superadministrador (`/api/users/:id/approve|reject`).
- Recuperación de clave (`/olvide-clave` → `/restablecer-clave`), respuesta siempre genérica.
- Rol `superadmin`: el usuario más antiguo del sistema (bootstrap automático al primer registro).
- Configuración → Correo (SMTP), solo visible/editable por el superadmin; clave cifrada
(AES-256-GCM) en `system_settings`, nunca expuesta por la API. Sin configurar, los correos de
verificación/recuperación se loguean en vez de enviarse (modo dev, no rompe el flujo).
### Fixed
- Bug real: `React.StrictMode` disparaba dos veces el efecto de `VerifyEmailPage`, y la segunda
llamada (token ya consumido) mostraba "enlace inválido" aunque la verificación sí había
funcionado. Corregido con una guarda por token ya solicitado.
- Reordenado el montaje de rutas del backend: `subtasksRoutes` (mount genérico en `/api`) queda al
final, para no interceptar con su `requireAuth` interno una request sin token dirigida a un
router más específico registrado después (ver deuda técnica de la v1.0.0).
## [1.0.0] - 2026-09-06
### Added
- Primer despliegue a producción: `https://project.linkedcorp.net` (arquetipo B, dos servicios).
- `create-admin.js`: bootstrap del usuario Administrador de producción con clave fuerte generada.
### Changed
- `seed-db.js` separa catálogos (universal) de datos de ejemplo (solo entornos no productivos).
- Logo real de LinkedCorp (sidebar, login) en vez del placeholder "LC"; tamaño duplicado.
- `ComboBox`/`Flyout` se posicionan con portal a `document.body` (ya no se recortan dentro de un
`Expander` o `DetailPopup`).
- Master-detail de listados unificado en `DetailPopup` (popup de tamaño fijo, no se cierra con
clic afuera) en Proyectos, Actividades, Departamentos, Usuarios, Miembros y Catálogos.
- "Miembros" del proyecto pasa a ser su propia pestaña (antes vivía dentro de "Info").
## [0.1.0] - 2026-09-03
### Added
- Estructura inicial del proyecto (backend Express + frontend React/Vite + MariaDB).
- Modelo de datos MVP: usuarios/roles, departamentos, proyectos, actividades, subtareas,
dependencias, comentarios, adjuntos, notificaciones, auditoría, catálogos.
- Identidad UI/UX Fluent/Windows 11 (UI-UX-WINDOWS) adaptada a app web.