161 lines
4.3 KiB
JavaScript
161 lines
4.3 KiB
JavaScript
/**
|
|
* 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
|
|
});
|
|
}
|
|
}
|
|
}
|