import { Request, Response, NextFunction } from 'express';
import { verifyToken } from '@app/lib/jwt';
export interface AuthenticatedRequest extends Request {
userId?: number;
userEmail?: string;
}
export const requireAuth = (req: AuthenticatedRequest, res: Response, next: NextFunction) => {
try {
const authHeader = req.headers.authorization;
if (!authHeader || !authHeader.startsWith('Bearer ')) {
return res.status(401).json({ error: 'Unauthorized: No token provided' });
}
const token = authHeader.substring(7);
const payload = verifyToken(token);
req.userId = payload.userId;
req.userEmail = payload.email;
next();
} catch (err: any) {
if (err.name === 'JsonWebTokenError') {
return res.status(401).json({ error: 'Unauthorized: Invalid token' });
}
if (err.name === 'TokenExpiredError') {
return res.status(401).json({ error: 'Unauthorized: Token expired' });
}
next(err);
}
};