import express from 'express'; import { basicAuthMiddleware } from '../middlewares/auth.js'; import { adminAuthMiddleware } from '../middlewares/adminAuth.js'; import { getDB, getAllSessions, deleteSession, getRateLimiterInfo } from '../services/mongodb.js'; const router = express.Router(); // Obtener información del rate limiter y bloqueos (requiere admin) router.get('/rate-limiter', basicAuthMiddleware, adminAuthMiddleware, async (req, res) => { try { const rateLimiterInfo = await getRateLimiterInfo(); res.json(rateLimiterInfo); } catch (error) { console.error('Error obteniendo información del rate limiter:', error); res.status(500).json({ error: error.message }); } }); // Obtener todas las sesiones (requiere admin) router.get('/sessions', basicAuthMiddleware, adminAuthMiddleware, async (req, res) => { try { const db = getDB(); if (!db) { return res.status(500).json({ error: 'MongoDB no está disponible' }); } const sessions = await getAllSessions(); // Agrupar por usuario para estadísticas const sessionsByUser = {}; let activeSessions = 0; let expiredSessions = 0; let connectedSessions = 0; // Sesiones con actividad reciente let inactiveSessions = 0; // Sesiones sin actividad pero no expiradas sessions.forEach(session => { if (!sessionsByUser[session.username]) { sessionsByUser[session.username] = 0; } sessionsByUser[session.username]++; if (session.isExpired) { expiredSessions++; } else { activeSessions++; // Contar sesiones conectadas (con actividad reciente) if (session.isActive) { connectedSessions++; } else { inactiveSessions++; } } }); res.json({ sessions, stats: { total: sessions.length, active: activeSessions, expired: expiredSessions, connected: connectedSessions, inactive: inactiveSessions, byUser: sessionsByUser, }, }); } catch (error) { console.error('Error obteniendo sesiones:', error); res.status(500).json({ error: error.message }); } }); // Eliminar una sesión específica (requiere admin) router.delete('/sessions/:token', basicAuthMiddleware, adminAuthMiddleware, async (req, res) => { try { const { token } = req.params; const deleted = await deleteSession(token); if (deleted) { res.json({ success: true, message: 'Sesión eliminada correctamente' }); } else { res.status(404).json({ error: 'Sesión no encontrada' }); } } catch (error) { console.error('Error eliminando sesión:', error); res.status(500).json({ error: error.message }); } }); export default router;