import { Request, Response, NextFunction } from 'express'; import jwt from 'jsonwebtoken'; import { getUserByUsername, User } from './db.js'; const JWT_SECRET = process.env.JWT_SECRET || 'tiktok-rezepte-secret-key-change-in-production'; export interface AuthenticatedRequest extends Request { user?: User; } export function authMiddleware(req: AuthenticatedRequest, res: Response, next: NextFunction) { const authHeader = req.headers.authorization; if (!authHeader || !authHeader.startsWith('Bearer ')) { return res.status(401).json({ error: 'Nicht authentifiziert' }); } try { const token = authHeader.split(' ')[1]; const decoded = jwt.verify(token, JWT_SECRET) as { username: string }; const user = getUserByUsername(decoded.username); if (!user) return res.status(401).json({ error: 'Benutzer nicht gefunden' }); req.user = user; next(); } catch { res.status(401).json({ error: 'Ungültiges Token' }); } } export function adminMiddleware(req: AuthenticatedRequest, res: Response, next: NextFunction) { if (!req.user || !req.user.is_admin) { return res.status(403).json({ error: 'Keine Berechtigung' }); } next(); }