shashwatIDR's picture
Upload 147 files
b89a86e verified
import { Request, Response, NextFunction } from "express";
import jwt from "jsonwebtoken";
const JWT_SECRET = process.env.JWT_SECRET || "your-jwt-secret-key";
export interface AuthRequest extends Request {
user?: {
id: string;
type: 'user' | 'seller' | 'admin';
username: string;
};
}
export const authenticateToken = async (req: AuthRequest, res: Response, next: NextFunction) => {
const authHeader = req.headers.authorization;
const token = authHeader && authHeader.split(' ')[1];
if (!token) {
return res.status(401).json({ message: 'Access token required' });
}
try {
const payload = jwt.verify(token, JWT_SECRET) as any;
req.user = payload;
next();
} catch (error) {
return res.status(403).json({ message: 'Invalid or expired token' });
}
};
export const requireRole = (roles: Array<'user' | 'seller' | 'admin'>) => {
return (req: AuthRequest, res: Response, next: NextFunction) => {
if (!req.user || !roles.includes(req.user.type)) {
return res.status(403).json({ message: 'Insufficient permissions' });
}
next();
};
};
export const optionalAuth = async (req: AuthRequest, res: Response, next: NextFunction) => {
const authHeader = req.headers.authorization;
const token = authHeader && authHeader.split(' ')[1];
if (token) {
try {
const payload = jwt.verify(token, JWT_SECRET) as any;
req.user = payload;
} catch (error) {
// Token invalid, but continue without user
}
}
next();
};
export const generateToken = (user: { id: string; type: 'user' | 'seller' | 'admin'; username: string }) => {
return jwt.sign(user, JWT_SECRET, { expiresIn: '24h' });
};