import { Response, NextFunction } from 'express'; import { RequestWithUser } from '../types/Express'; import jwt from 'jsonwebtoken'; import { JwtSecret } from '../config/env'; import { ErrorResponse } from '../utils/response'; import { HttpCodes } from '../config/errors'; import userModel from '../models/userModel'; export const protect = async ( req: RequestWithUser, res: Response, next: NextFunction ) => { const token = req.cookies.token; req.user = null; if (token) { try { const payload = jwt.verify(token, JwtSecret) as MyPayload; if (!payload || !payload._id) return ErrorResponse( res, HttpCodes.Unauthorized.code, "Couldn't create a correct session - Invalid token." ); const { _id } = payload; const user = await userModel.findOne({ _id }); if (!user) { return ErrorResponse( res, HttpCodes.Unauthorized.code, "Couldn't create a correct session.- Invalid token." ); } req.user = user; } catch (e) { res.cookie('token', '', { sameSite: 'none', httpOnly: true, expires: new Date(0), }); return ErrorResponse( res, HttpCodes.InternalServerError.code, "Couldn't create a correct session." ); } return next(); } else { ErrorResponse( res, HttpCodes.Unauthorized.code, "You aren't logged in to do this action." ); } }; export const checkSuperAdmin = async ( req: RequestWithUser, res: Response, next: NextFunction ) => { const userRole = req.user?.role; if (userRole !== 'superAdmin') { return ErrorResponse( res, HttpCodes.Forbidden.code, "You don't have permission to do this action." ); } next(); };