113 lines
3.5 KiB
JavaScript
113 lines
3.5 KiB
JavaScript
/**
|
|
* 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'
|
|
});
|
|
}
|
|
};
|
|
}
|