protofolio / backend /src /modules /auth /auth.controller.ts
moustafa7's picture
Production-ready: Security hardening, RBAC, logging, audit, DB indexes, compression
9f5a703
Raw History Blame Contribute Delete
1.25 kB
import { Request, Response } from "express";
import { AuthService } from "./auth.service";
import { ApiResponse } from "../../utils/apiResponse";
import { AuthRequest } from "../../types";
import { getCookieOptions } from "../../middleware/security";
const authService = new AuthService();
export class AuthController {
async login(req: Request, res: Response) {
const { email, password } = req.body;
const ip = req.ip || req.socket.remoteAddress;
const result = await authService.login(email, password, ip);
res.cookie("token", result.token, getCookieOptions());
res.setHeader("X-Content-Type-Options", "nosniff");
res.setHeader("X-Frame-Options", "DENY");
res.setHeader("Cache-Control", "no-store");
return ApiResponse.success(res, result, "Login successful");
}
async getProfile(req: AuthRequest, res: Response) {
const ip = req.ip || req.socket.remoteAddress;
const profile = await authService.getProfile(req.user!.id, ip);
return ApiResponse.success(res, profile);
}
async logout(req: Request, res: Response) {
res.clearCookie("token", getCookieOptions());
res.setHeader("Cache-Control", "no-store");
return ApiResponse.success(res, null, "Logged out successfully");
}
}