MouleeswaranM's picture
Upload folder using huggingface_hub
fcf8749 verified
raw
history blame
1.7 kB
const jwt = require('jsonwebtoken');
const { jwtConfig, verifyToken } = require('../config/jwt');
const prisma = require('../config/database');
/**
* Verify JWT token and attach user to request
*/
const authenticateToken = async (req, res, next) => {
try {
const authHeader = req.headers['authorization'];
const token = authHeader && authHeader.split(' ')[1];
if (!token) {
return res.status(401).json({
success: false,
message: 'Access token required',
});
}
const decoded = verifyToken(token);
const user = await prisma.user.findUnique({
where: { id: decoded.userId },
select: {
id: true,
name: true,
phone: true,
role: true,
status: true,
rating: true,
deliveriesCount: true,
totalEarnings: true,
weeklyEarnings: true,
},
});
if (!user) {
return res.status(401).json({
success: false,
message: 'User not found',
});
}
req.user = user;
next();
} catch (error) {
if (error.name === 'TokenExpiredError') {
return res.status(401).json({
success: false,
message: 'Token expired',
});
}
return res.status(403).json({
success: false,
message: 'Invalid token',
});
}
};
// Role-based access control
const requireRole = (...roles) => {
return (req, res, next) => {
if (!req.user || !roles.includes(req.user.role)) {
return res.status(403).json({
success: false,
message: `Access denied. Required role: ${roles.join(' or ')}`,
});
}
next();
};
};
module.exports = {
authenticateToken,
requireRole,
};