Files
wallabicher/web/backend/routes/admin.js
Omar Sánchez Pizarro 05f0455744 fixes: favoritos y mas cosas
Signed-off-by: Omar Sánchez Pizarro <omar.sanchez@pistacero.net>
2026-01-20 20:06:28 +01:00

82 lines
2.3 KiB
JavaScript

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;
sessions.forEach(session => {
if (!sessionsByUser[session.username]) {
sessionsByUser[session.username] = 0;
}
sessionsByUser[session.username]++;
if (session.isExpired) {
expiredSessions++;
} else {
activeSessions++;
}
});
res.json({
sessions,
stats: {
total: sessions.length,
active: activeSessions,
expired: expiredSessions,
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;