const apiClient = require('../services/apiClient'); const axios = require('axios'); const requireAuth = (req, res, next) => { const token = req.cookies.auth_token; if (!token) { return res.redirect('/auth/login'); } // Inyectar el token en la configuración de Axios para esta request particular req.apiClient = axios.create({ ...apiClient.defaults, headers: { ...apiClient.defaults.headers, 'Authorization': `Bearer ${token}` } }); let user = { name: 'System', first_name: 'System', email: 'admin@edu-space.com', role: 'admin', is_authenticated: true, is_admin: () => true, has_permission: () => true, can_edit_reservation: () => true, can_delete_reservation: () => true, has_role: () => true, get_institutional_role: () => 'admin', role_badge_display: { class: 'bg-primary text-white', icon: 'bi-shield-check', label: 'Administrador' } }; try { const payloadBase64 = token.split('.')[1]; const decoded = JSON.parse(Buffer.from(payloadBase64, 'base64').toString('utf8')); if (decoded.exp && (decoded.exp * 1000) < Date.now()) { console.log('Token expired, redirecting to /auth/login'); res.clearCookie('auth_token'); return res.redirect('/auth/login'); } const roleStr = (decoded.role || 'Admin').toLowerCase(); user = { ...user, id: decoded.sub, name: decoded.name || 'System', first_name: (decoded.name || 'System').split(' ')[0], email: decoded.email || 'admin@edu-space.com', role: roleStr, is_admin: () => roleStr === 'admin' || decoded.is_admin === true, role_badge_display: { class: roleStr === 'admin' ? 'bg-primary text-white' : 'bg-info text-white', icon: roleStr === 'admin' ? 'bi-shield-check' : 'bi-person', label: decoded.role || 'Administrador' } }; } catch (e) { console.error('Error decoding token payload:', e.message); } req.user = user; res.locals.user = user; res.locals.current_user = user; res.locals.role = user.role; next(); }; module.exports = { requireAuth };