fixes: favoritos y mas cosas
Signed-off-by: Omar Sánchez Pizarro <omar.sanchez@pistacero.net>
This commit is contained in:
81
web/backend/routes/admin.js
Normal file
81
web/backend/routes/admin.js
Normal file
@@ -0,0 +1,81 @@
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user