/** * Authentication Middleware * * FELADAT: Implementáld az authentication middleware-t! * * Ez a middleware felelős azért, hogy: * 1. Ellenőrizze a JWT tokent (cookie-ból vagy Authorization header-ből) * 2. Validálja a tokent * 3. Beállítsa a req.user objektumot a dekódolt token alapján * 4. Hiba esetén 401 Unauthorized választ küldjön * * Példa használat: * router.get('/protected', authenticateToken, (req, res) => { * res.json({ user: req.user }); * }); */ export function authenticateToken(req, res, next) { try { // TODO: Implementáld az authentication-t // 1. Olvasd ki a tokent a cookie-ból vagy Authorization header-ből // 2. Validáld a tokent jwt.verify()-val // 3. Állítsd be req.user-t a dekódolt token payload-jából // 4. Hívd meg a next()-et, hogy tovább menjen a request // Ideiglenes: mindig hiba, amíg nincs implementálva return res.status(401).json({ success: false, error: 'Authentication middleware not implemented yet - this is your task!' }); } catch (error) { return res.status(401).json({ success: false, error: 'Invalid or expired token' }); } } /** * Authorization Middleware - Role Check * * FELADAT: Implementáld a role-based authorization middleware-t! * * Ez a middleware ellenőrzi, hogy a bejelentkezett usernek van-e megfelelő role-ja. * * Példa használat: * router.delete('/admin/users/:id', authenticateToken, requireRole(['ADMIN']), (req, res) => { * // Csak ADMIN role-lal lehet törölni * }); */ export function requireRole(allowedRoles) { return (req, res, next) => { try { // TODO: Implementáld a role check-et // 1. Ellenőrizd, hogy req.user létezik-e (authenticateToken után fut) // 2. Ellenőrizd, hogy req.user.role benne van-e az allowedRoles tömbben // 3. Ha nincs jogosultság, küldj 403 Forbidden választ // 4. Ha van jogosultság, hívd meg a next()-et return res.status(403).json({ success: false, error: 'Authorization middleware not implemented yet - this is your task!' }); } catch (error) { return res.status(403).json({ success: false, error: 'Insufficient permissions' }); } }; } /** * Resource Owner Check * * FELADAT: Implementáld a resource ownership ellenőrzést! * * Ez a middleware ellenőrzi, hogy a user tulajdonosa-e az adott resource-nak. * Például: csak a blog szerzője módosíthatja/törölheti a blogot. * * @param {Function} getResourceOwnerId - Függvény, ami visszaadja a resource owner ID-t * * Példa használat: * router.put('/blogs/:id', * authenticateToken, * checkOwnership(async (req) => { * const blog = await blogRepository.findById(req.params.id); * return blog.authorId; * }), * (req, res) => { ... } * ); */ export function checkOwnership(getResourceOwnerId) { return async (req, res, next) => { try { // TODO: Implementáld az ownership check-et // 1. Szerezd meg a resource owner ID-t a getResourceOwnerId függvénnyel // 2. Ellenőrizd, hogy req.user.id === ownerId VAGY req.user.role === 'ADMIN' // 3. Ha nem egyezik és nem admin, küldj 403 Forbidden választ // 4. Ha OK, hívd meg a next()-et return res.status(403).json({ success: false, error: 'Ownership check middleware not implemented yet - this is your task!' }); } catch (error) { return res.status(403).json({ success: false, error: 'Access denied' }); } }; }