const jwt = require("jsonwebtoken"); const { User } = require("../models"); const authenticate = async (req, res, next) => { try { console.log("Authenticating request to:", req.path); const token = req.header("Authorization")?.replace("Bearer ", ""); if (!token) { console.log("No token provided"); return res.status(401).json({ message: "Access denied" }); } console.log("Token received, verifying..."); const decoded = jwt.verify(token, process.env.JWT_SECRET); console.log("Token decoded for user:", decoded.id); const user = await User.findByPk(decoded.id); if (!user) { console.log("User not found for token"); return res.status(401).json({ message: "Invalid token" }); } console.log("User authenticated:", user.username); req.user = user; next(); } catch (error) { console.error("Authentication error:", error.message); res.status(401).json({ message: "Invalid token" }); } }; const authorizeAdmin = (req, res, next) => { if (req.user.role !== "admin") { return res.status(403).json({ message: "Admin access required" }); } next(); }; const authorizeManager = (req, res, next) => { if (req.user.role !== "admin" && req.user.role !== "manager") { return res.status(403).json({ message: "Manager access required" }); } next(); }; module.exports = { authenticate, authorizeAdmin, authorizeManager };