2025-03-19 19:56:57 -05:00

44 lines
1.3 KiB
JavaScript

const jwt = require('jsonwebtoken');
const path = require('path');
const {models} = require(path.resolve(process.env.ROOT_PATH, './db/db.js'));
function authenticateToken(req, res, next) {
const authHeader = req.headers['authorization'];
const token = authHeader && authHeader.split(' ')[1];
if (!token) {
return res.status(401).json({ error: 'Authentication required' });
}
jwt.verify(token, process.env.JWT_SECRET, (err, user) => {
if (err) {
console.error('JWT verification error:', err.message);
return res.status(403).json({ error: 'Invalid token' });
}
req.user = user;
next();
});
}
async function authenticateAdmin(req, res, next) {
// Check if user is logged in via session instead of JWT
if (!req.session || !req.session.login) {
return res.status(401).json({ error: 'Authentication required' });
}
try {
const user = await models.User.query().findById(req.session.user.id);
if (!user.is_admin) {
return res.status(403).json({ error: 'Admin access required' });
}
req.user = user;
next();
} catch (error) {
console.error('Admin authentication error:', error);
return res.status(500).json({ error: 'Internal server error' });
}
}
module.exports = { authenticateToken, authenticateAdmin };