Commit Graph

23 Commits

Author SHA1 Message Date
6639c93cfe Fix: Usar DropdownMenu de radix-vue para menú de configuración
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 26s
- Reemplaza dropdown manual por componente DropdownMenu con radix-vue
- Agrega avoid-collisions y collision-padding para posicionamiento automático
- El menú ahora se ajusta automáticamente cuando no hay espacio horizontal
- Actualiza DropdownMenuItem para soportar prop 'as' y 'href' para enlaces
2025-11-25 01:17:39 -06:00
2d1c2b1df3 Feature: Agregar modal de información del sistema
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 27s
- Botón de info (ℹ) en la barra superior
- Documentación completa sobre:
  - Sesiones (estados, ciclo de vida, limitaciones)
  - Eventos FreeRADIUS (authorize, post-auth, accounting)
  - Usuarios normales y sus características
  - Invitados (temporales, auto-deshabilitación)
  - Dispositivos (MAC, relación con usuarios)
  - Flujo completo de conexión WiFi
2025-11-25 01:09:30 -06:00
06707df581 Feature: Sistema de tracking de sesiones RADIUS en tiempo real
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 30s
- Nueva tabla `sesiones` para historial persistente de conexiones
- Job de detección de stale cada 2 min (10 min idle = desconectado)
- Inicialización resiliente desde BD al arrancar el servidor
- Nuevos endpoints: /api/sessions, /api/sessions/history, /api/sessions.csv
- Nueva vista "Sesiones" en el dashboard con estadísticas
- Historial integrado en UserCard y DispositivoCard
- Estadísticas de bytes in/out y duración por sesión
- Retención configurable de historial (90 días por defecto)
2025-11-25 00:49:14 -06:00
4da390c963 Fix: Eliminar parpadeo de interfaz
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 28s
- Solo actualizar users/devices si los datos realmente cambiaron
- Aumentar debounce de SSE de 1s a 3s para reducir frecuencia de updates
- Evitar re-renders innecesarios comparando JSON antes de actualizar
2025-11-24 18:31:13 -06:00
96a8f95f9e Refactor: Migrar UI completa a Tailwind CSS v4 + shadcn-vue
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 58s
- Reemplazar CSS nativo con Tailwind CSS v4 y utilidades custom
- Crear librería de componentes UI basada en shadcn-vue (Radix Vue)
- Componentes UI: Button, Card, Input, Textarea, Badge, Dialog, Avatar, DropdownMenu
- Migrar todos los componentes existentes a Tailwind utilities
- Convertir EventCard.js (htm) a EventCard.vue (SFC)
- Implementar sistema de temas dark/light con clase .dark
- Mantener efectos glassmorphism via @utility custom
- Eliminar styles.css legacy
2025-11-24 18:12:24 -06:00
0fdcc56f90 Fix: Mostrar botones de colapsar solo en móvil
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 16s
- Ocultar botones de colapsar en vista desktop
- En móvil, contenedores colapsados ocupan solo el alto del header
- Mantener comportamiento desktop (52px width cuando colapsado)
- Mejorar UX en dispositivos móviles evitando contenedores inutilizables
2025-10-28 17:33:02 -06:00
1ea50f0aa5 Solucionar errores de CORS manteniendo seguridad de Authentik
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 46s
PROBLEMA:
- Frontend hacía fetch a APIs protegidas por Authentik
- Cuando sesión expiraba, Authentik redirigía causando error de CORS
- TypeError: Failed to fetch

SOLUCIÓN:
1. Backend inyecta window.__AUTHENTIK_USER__ en HTML inicial (app.js)
   - Servidor lee headers de Authentik y los pasa al frontend
   - Evita fetch innecesario en carga inicial

2. Frontend usa window.__AUTHENTIK_USER__ como fuente principal (useAuthentik.js)
   - Solo hace fetch cuando se fuerza refresh
   - Detecta errores de CORS como señal de sesión expirada
   - Muestra mensaje claro al usuario

3. App.vue detecta errores de autenticación en APIs
   - Cuando fetch falla con CORS, recarga página automáticamente
   - Authentik manejará la re-autenticación

SEGURIDAD:
- Todos los endpoints /api/* siguen protegidos por Authentik
- No se exponen APIs sin autenticación
- Headers de Authentik solo presentes con sesión válida
2025-10-27 15:15:44 -06:00
918ca465d6 Implementar autenticación Authentik completa
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 25s
- Backend: Nuevos endpoints /api/auth/status y /api/auth/check-group
- Frontend: Composable useAuthentik para gestión de autenticación
- Frontend: Componentes UserDropdown, UserAvatar, SessionStatusButton, GroupCheckButton
- Frontend: Integración en topbar con dropdown de usuario
- Config: URLs de Authentik y configuración de avatares
- Lectura de headers x-authentik-* inyectados por Traefik
- Verificación de grupos RBAC (frontend y backend)
- Validación de sesión contra Authentik
2025-10-17 04:47:30 -06:00
cba732fbca Implementar sistema de toast con detección de PWA
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 27s
Cambios:
- Crear componente Toast.vue con soporte para posiciones (top/bottom, left/center/right)
- Crear composable useToast.js para manejar notificaciones
- Integrar sistema de toast en App.vue
- Implementar detección de PWA:
  * Detecta si el usuario está en modo standalone (PWA instalada)
  * Si puede instalar, muestra toast con botón de instalación
  * Si ya está instalada pero no se usa, sugiere abrir en app
- Toast persistente hasta que el usuario interactúe
- Soporte para tema claro/oscuro
- Animaciones suaves y diseño moderno
- Responsive para móviles

El sistema permite mostrar toasts de tipo: success, error, warning, info, pwa
con opciones de posición, duración, acciones personalizadas y modo persistente.
2025-10-17 04:26:16 -06:00
dc2c373a4f Agregar botón de Inicio en el header
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 24s
Cambios en App.vue:
- Agregar botón Inicio con emoji 🏠 en el topbar
- Botón apunta a https://inicio.nucleoriofrio.com
- Posicionado al inicio de la sección de acciones
- Usa clase .icon-btn para consistencia visual

El botón usa scope extensions para navegar dentro de la PWA.
2025-10-17 04:18:16 -06:00
ca605a5759 app V1 completada 2025-09-26 19:55:12 -06:00
7d7a845a75 cronjob de manejo de invitados listo 2025-09-26 19:28:58 -06:00
0d4b0cbf67 UI/UX mejorados 5 2025-09-26 19:10:17 -06:00
9848bd46f1 edicion de metadata dispositivos, UI/UX 2025-09-26 18:20:36 -06:00
e10d8950d9 mejoras UI 4 2025-09-26 18:14:15 -06:00
bcc475045d creacion de vlans listo 2025-09-26 17:55:20 -06:00
44916b642b tablas y frontend visualizador de DB listo 2025-09-26 17:48:45 -06:00
3fc25719f3 a ver 2025-09-26 17:23:30 -06:00
6e6523c0c8 mejoras de UI 2025-09-26 17:08:33 -06:00
c92df7bb9a frontend actualizado y mejorado extremadamente 2025-09-26 16:54:39 -06:00
974fe0b9e1 frontend actualizado y mejorado extremadamente 2025-09-26 16:54:39 -06:00
6510250513 codigo refactorizado y ordenado, listo para siguiente fase 2025-09-26 15:37:06 -06:00
4783f51454 codigo refactorizado y ordenado, listo para siguiente fase 2025-09-26 15:37:06 -06:00