import { Request, Response, NextFunction } from 'express'; import { storage } from '../storage'; export interface AuthenticatedRequest extends Request { user?: any; } export const authMiddleware = async (req: AuthenticatedRequest, res: Response, next: NextFunction) => { if (!req.isAuthenticated || !req.isAuthenticated()) { return res.status(401).json({ error: 'Authentication required' }); } try { // User is already available from Passport session if (!req.user) { return res.status(401).json({ error: 'User not found' }); } next(); } catch (error) { console.error('Auth middleware error:', error); res.status(500).json({ error: 'Authentication error' }); } }; export const requireRole = (roles: string[]) => { return (req: AuthenticatedRequest, res: Response, next: NextFunction) => { if (!req.user) { return res.status(401).json({ error: 'Authentication required' }); } if (!roles.includes(req.user.role)) { return res.status(403).json({ error: 'Insufficient permissions' }); } next(); }; }; export const requireOnboarding = (req: AuthenticatedRequest, res: Response, next: NextFunction) => { if (!req.user) { return res.status(401).json({ error: 'Authentication required' }); } if (!req.user.onboardingComplete) { return res.status(403).json({ error: 'Onboarding required', onboardingRequired: true }); } next(); };