Commit Graph

73 Commits

Author SHA1 Message Date
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
f3753f2e04 Feature: Mostrar usuarios en DispositivoCard sin expandir
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 31s
- Agregar preview de usuarios que utilizan el dispositivo
- Usuarios conectados en badge rosa, desconectados en gris
- Mostrar contador total de usuarios
2025-11-24 18:23:40 -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
003fdf18a7 Fix: Configurar pool de PostgreSQL para evitar errores de autenticación
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 16s
- Agregar configuración de pool con límites y timeouts
- Agregar manejo de errores del pool para evitar crashes
- Soluciona errores intermitentes de autenticación causados por conexiones inactivas
2025-11-09 16:30:15 -06:00
1b47b60c5b Fix: Corregir reglas CSS de colapsar en móvil
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 26s
- Mover reglas de grid de 52px a media query desktop-only
- Evitar que reglas de desktop sobrescriban comportamiento móvil
- Soluciona contenedores cortados en vista móvil
2025-10-28 17:40:40 -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
591aa07653 Eliminar docker-compose.override.yml obsoleto
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 13s
El desarrollo ahora se hace mediante push a Gitea y deployment automático
via Actions en el servidor de desarrollo, replicando exactamente el
entorno de producción. El override ya no es necesario.
2025-10-28 16:53:32 -06:00
54bd400a75 Fix: Corregir docker-compose.override y sintaxis de redes
Some checks failed
build-and-deploy / build-and-deploy (push) Failing after 21s
- Renombrar servicio 'node' a 'radiusnucleo-node' en override
- Eliminar 'version' obsoleta de ambos archivos (Docker Compose v2)
- Corregir sintaxis de networks (usar {} para redes sin config)

Esto soluciona el error: 'service node has neither an image nor a build context specified'
2025-10-28 15:49:43 -06:00
dfaa67e976 Fix: Corregir indentación YAML en docker-compose
Some checks failed
build-and-deploy / build-and-deploy (push) Failing after 9s
- Servicios al nivel correcto (2 espacios)
- Propiedades de servicios con 4 espacios
- Items de listas con 6 espacios
- Esto soluciona el error: 'Additional property postgres is not allowed'
2025-10-28 11:40:33 -06:00
08e8e1f7d3 Solucionar problemas de PWA y cache
Some checks failed
build-and-deploy / build-and-deploy (push) Failing after 11s
- Agregar manifest.json a rutas públicas de Traefik (anteriormente solo estaba manifest.webmanifest)
- Cambiar estrategia de cache del Service Worker de cache-first a estrategia inteligente:
  * Archivos de build (/assets/): Network-first con cache fallback
  * HTML: Network-first siempre para obtener última versión
  * Recursos estáticos (iconos, manifest): Cache-first (no cambian)
- Incrementar versión de cache de v2 a v3 para forzar limpieza
- Evitar redirecciones a Authentik para archivos manifest

Esto soluciona:
- Error CORS en manifest.json (ya no redirige a Authentik)
- Problemas de cache que requerían limpiar datos del navegador
- Archivos desactualizados servidos desde cache
2025-10-28 10:33:38 -06:00
67e2e4cb0f Modernizar workflow y docker-compose con variables
Some checks failed
build-and-deploy / build-and-deploy (push) Failing after 9s
- Convertir imágenes hardcodeadas a variables (REG, REPO_OWNER)
- Agregar variables APP_NAME y APP_DOMAIN al workflow
- Agregar flag --wait al despliegue para esperar contenedores listos
- Pasar variables de entorno (RADIUS_*) explícitamente en cada paso
- Agregar paso informativo sobre el deployment
- Simplificar comandos docker compose (sin -f innecesario)
- Corregir indentación del docker-compose.yml
- Eliminar paso redundante "Show service status"

Estos cambios hacen que el workflow sea más robusto y consistente
con el patrón usado en analiticaNucleo.
2025-10-28 10:25:07 -06:00
732edadcb6 Eliminar todos los efectos de movimiento en hover
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 26s
- Quitar transform translateY de UserCard hover (card-inner y botones)
- Quitar transform translateY de .icon-btn hover en styles.css
- Quitar transform translateY de .card hover en styles.css
- Quitar transform translateY de GroupCheckButton hover
- Reemplazar efectos de movimiento por cambios sutiles de opacidad
- Actualizar transiciones para remover propiedades transform innecesarias
2025-10-28 10:18:10 -06:00
5c39dc1fd2 Rediseñar UserCard con estilo minimalista inspirado en diseño 3D
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 15s
- Cambiar a diseño limpio tipo ficha con información organizada en filas label-value
- Reducir avatar a inicial pequeña (36x36px) con fondo sutil
- Implementar sistema de sombras suaves de múltiples capas para profundidad
- Simplificar paleta de colores con acentos sutiles
- Mejorar tipografía con mejor jerarquía (18px título, 13px info)
- Cambiar botones a diseño minimalista con borde sutil
- Agregar transiciones suaves con cubic-bezier para movimiento natural
- Implementar hover con elevación de 4px y sombras progresivas
- Organizar información en formato tabla limpia (vlan, estado, conexión, etiquetas)
- Reducir efectos visuales excesivos por diseño más elegante y profesional
2025-10-28 10:12:30 -06:00
37fdcaec9c Mejorar diseño de UserCard con avatares, iconos y mejor jerarquía visual
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 24s
- Agregar avatar circular con inicial del usuario y estados visuales (normal, conectado, deshabilitado)
- Implementar iconos SVG en todos los botones de acción (editar, desconectar, habilitar/deshabilitar, eliminar, expandir)
- Mejorar jerarquía de información con chips de colores específicos (VLAN azul, activo verde, deshabilitado rojo, conectado rosa)
- Agregar animación pulse en avatar cuando el usuario está conectado
- Implementar efectos hover con elevación y sombras rosas
- Organizar etiquetas y dispositivos en secciones separadas con bordes
- Resolver conflictos de merge en styles.css (mantener estilos de scrollbar y gradientes de topbar/panel)
- Agregar responsive design para móviles
- Mejorar transiciones y efectos glassmorphism en toda la card
2025-10-28 10:04:40 -06:00
b7503bb118 Agregar hook para monitorear Gitea Actions después de push
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 21s
- Copia hook de plantillaNuxtAuthentikProxy
- Configura para repositorio radiusNucleo
- Espera hasta 10 minutos a que termine la action
- Muestra estado final con detalles y URL de logs
2025-10-27 16:00:52 -06:00
2e3055e1b4 Migrar workflow a usar variables y secrets de Gitea Actions
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 22s
- Reemplazar credenciales hardcoded por secrets
- Usar REGISTRY_URL variable en lugar de hardcode
- Usar RADIUS_CLIENTS_CIDR y RADIUS_SHARED_SECRET desde secrets
- Mejorar seguridad eliminando valores sensibles del código

Variables configuradas:
- REGISTRY_URL = gitea.nucleoriofrio.com

Secrets configurados:
- REGISTRY_USERNAME
- REGISTRY_PASSWORD
- RADIUS_CLIENTS_CIDR
- RADIUS_SHARED_SECRET
2025-10-27 15:55:59 -06:00
ac850620ba Arreglar callback de Authentik
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 23s
Problema: El callback /outpost.goauthentik.io/callback estaba en el router
público sin middleware de Authentik, causando que llegara directamente
a Node.js → 404 Error

Solución: Quitar /outpost.goauthentik.io del router público para que
el callback pase por el router principal con el middleware
authentik-forward-auth@file, que maneja correctamente el flujo OAuth
2025-10-27 15:49:38 -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
ab0f79e103 Agregar favicon.ico y apple-touch-icon.png
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 26s
2025-10-17 05:46:06 -06:00
3b36a3e3a7 fix3
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 13s
2025-10-17 05:31:56 -06:00
61d8908daa fix 2
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 21s
2025-10-17 05:16:18 -06:00
35c9947204 fix
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 22s
2025-10-17 05:04:30 -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
ad18d22c7e Fix: Servir assets estáticos sin autenticación
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 24s
Problema:
- Los assets (CSS/JS) estaban siendo bloqueados por Authentik
- El servidor devolvía HTML (página de login) en lugar de CSS
- Error: MIME type 'text/html' is not a supported stylesheet

Solución:
- Crear dos routers en Traefik:
  1. Router público (prioridad 100): /assets, /icons, manifest, favicon SIN autenticación
  2. Router principal (prioridad 10): Todo lo demás CON autenticación
- Los assets estáticos ahora se sirven directamente sin pasar por Authentik
- Mantiene la seguridad para el resto de la aplicación

Rutas públicas: /assets/*, /.well-known/*, /icons/*, /manifest.webmanifest, /favicon.ico
2025-10-17 04:29:25 -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
fe4053d90f Agregar integración con Traefik y consolidar workflow
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 42s
- Agregar labels de Traefik al servicio radiusnucleo-node para exposición en wifi.nucleoriofrio.com
- Configurar autenticación con Authentik y soporte para SSE/WebSocket
- Renombrar servicio node a radiusnucleo-node con container_name explícito
- Actualizar redes a radiusnucleo_radius_net como externa
- Consolidar workflow de Gitea en un solo job build-and-deploy
- Agregar creación automática de red radiusnucleo_radius_net en workflow
2025-10-17 03:21:46 -06:00
bf941aceb3 pwa compatible
All checks were successful
build-and-deploy / build (push) Successful in 11s
build-and-deploy / deploy (push) Successful in 15s
2025-09-26 21:20:34 -06:00
ef311916b3 fix
All checks were successful
build-and-deploy / build (push) Successful in 8s
build-and-deploy / deploy (push) Successful in 5s
2025-09-26 21:05:30 -06:00
efb942d4c1 fix
Some checks failed
build-and-deploy / build (push) Successful in 8s
build-and-deploy / deploy (push) Failing after 14s
2025-09-26 21:03:42 -06:00
c5a1c6aaf0 fix
All checks were successful
build-and-deploy / build (push) Successful in 9s
build-and-deploy / deploy (push) Successful in 15s
2025-09-26 20:57:10 -06:00
aad02ed556 fix
All checks were successful
build-and-deploy / build (push) Successful in 10s
build-and-deploy / deploy (push) Successful in 14s
2025-09-26 20:49:50 -06:00
636a5506d9 nuevo fix
Some checks failed
build-and-deploy / build (push) Successful in 8s
build-and-deploy / deploy (push) Failing after 18s
2025-09-26 20:47:43 -06:00
c6a758f87a fix
All checks were successful
build-and-deploy / build (push) Successful in 8s
build-and-deploy / deploy (push) Successful in 5s
2025-09-26 20:35:21 -06:00
d125c03556 fix
All checks were successful
build-and-deploy / build (push) Successful in 15s
build-and-deploy / deploy (push) Successful in 6s
2025-09-26 20:31:10 -06:00
984279e756 fix
All checks were successful
build-and-deploy / build (push) Successful in 13s
build-and-deploy / deploy (push) Successful in 16s
2025-09-26 20:29:03 -06:00
5b57ed92ae fix
All checks were successful
build-and-deploy / build (push) Successful in 8s
build-and-deploy / deploy (push) Successful in 16s
2025-09-26 20:21:23 -06:00
8bae7023ac fix
Some checks failed
build-and-deploy / build (push) Successful in 22s
build-and-deploy / deploy (push) Failing after 15s
2025-09-26 20:18:49 -06:00
196fa3bc1c fix
Some checks failed
build-and-deploy / build (push) Successful in 7s
build-and-deploy / deploy (push) Failing after 14s
2025-09-26 20:15:56 -06:00
0022b01044 fix
Some checks failed
build-and-deploy / build (push) Successful in 7s
build-and-deploy / deploy (push) Failing after 15s
2025-09-26 20:11:44 -06:00
72a5ff06d1 fix
Some checks failed
build-and-deploy / build (push) Successful in 8s
build-and-deploy / deploy (push) Failing after 4s
2025-09-26 20:09:16 -06:00
9f8af74d64 fix
Some checks failed
build-and-deploy / build (push) Successful in 7s
build-and-deploy / deploy (push) Failing after 3s
2025-09-26 20:06:34 -06:00
a4f7774631 fix
Some checks failed
build-and-deploy / build (push) Successful in 25s
build-and-deploy / deploy (push) Failing after 16s
2025-09-26 20:04:43 -06:00
0d468bc921 listo para deploy en gitea
Some checks failed
build-and-deploy / build (push) Failing after 23s
build-and-deploy / deploy (push) Has been skipped
2025-09-26 20:02:54 -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