44 lines
1.3 KiB
JavaScript
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 }; |