/** * AuthController * * FELADAT: Implementáld az alábbi metódusokat! * * Ez a controller felelős az authentication és authorization kezeléséért. * A következő funkciók implementálása szükséges: * * 1. register() - Felhasználó regisztráció * - Email és username uniqueness ellenőrzés * - Jelszó hash-elés bcrypt-tel * - User létrehozása a repository-n keresztül * - JWT token generálás * - Cookie beállítás * * 2. login() - Bejelentkezés * - User keresése email vagy username alapján * - Jelszó ellenőrzés bcrypt.compare()-val * - JWT token generálás (access és refresh token) * - Cookie-k beállítása * - Redis-ben session tárolás (opcionális) * * 3. logout() - Kijelentkezés * - Cookie-k törlése * - Redis session törlése * * 4. refreshToken() - Token frissítés * - Refresh token validálás * - Új access token generálás * * 5. getCurrentUser() - Bejelentkezett user adatai * - req.user alapján user visszaadása */ export class AuthController { constructor(userRepository) { this.userRepository = userRepository; } /** * POST /api/auth/register * Új felhasználó regisztrációja */ async register(req, res) { try { // TODO: Implementáld a regisztrációt // 1. Validáld az input adatokat (email, username, password) // 2. Ellenőrizd, hogy létezik-e már a user (email vagy username) // 3. Hash-eld a jelszót bcrypt-tel // 4. Hozd létre a user-t a repository-n keresztül // 5. Generálj JWT tokent // 6. Állítsd be a cookie-kat // 7. Küldd vissza a user adatokat (jelszó nélkül!) res.status(501).json({ success: false, error: 'Register not implemented yet - this is your task!' }); } catch (error) { res.status(400).json({ success: false, error: error.message }); } } /** * POST /api/auth/login * Bejelentkezés */ async login(req, res) { try { // TODO: Implementáld a login-t // 1. Keresd meg a user-t email vagy username alapján // 2. Ellenőrizd a jelszót bcrypt.compare()-val // 3. Generálj JWT access és refresh tokent // 4. Állítsd be a cookie-kat (httpOnly, secure) // 5. Opcionálisan tárolj session-t Redis-ben // 6. Küldd vissza a user adatokat és tokeneket res.status(501).json({ success: false, error: 'Login not implemented yet - this is your task!' }); } catch (error) { res.status(401).json({ success: false, error: error.message }); } } /** * POST /api/auth/logout * Kijelentkezés */ async logout(req, res) { try { // TODO: Implementáld a logout-ot // 1. Töröld a cookie-kat // 2. Töröld a Redis session-t (ha van) // 3. Invalidáld a refresh tokent res.status(501).json({ success: false, error: 'Logout not implemented yet - this is your task!' }); } catch (error) { res.status(400).json({ success: false, error: error.message }); } } /** * POST /api/auth/refresh * Access token frissítése refresh token alapján */ async refreshToken(req, res) { try { // TODO: Implementáld a token refresh-t // 1. Olvasd ki a refresh tokent a cookie-ból // 2. Validáld a refresh tokent // 3. Generálj új access tokent // 4. Állítsd be az új cookie-t res.status(501).json({ success: false, error: 'Refresh token not implemented yet - this is your task!' }); } catch (error) { res.status(401).json({ success: false, error: error.message }); } } /** * GET /api/auth/me * Bejelentkezett felhasználó adatai */ async getCurrentUser(req, res) { try { // TODO: Implementáld a current user lekérést // 1. Olvasd ki a user-t req.user-ből (amit az auth middleware állít be) // 2. Küldd vissza a user publikus adatait res.status(501).json({ success: false, error: 'Get current user not implemented yet - this is your task!' }); } catch (error) { res.status(401).json({ success: false, error: error.message }); } } }