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

2.4 KiB

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.