77 lines
2.4 KiB
JavaScript
77 lines
2.4 KiB
JavaScript
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 };
|