File size: 1,254 Bytes
81d1e4c
 
 
 
9f5a703
81d1e4c
 
 
 
 
 
9f5a703
 
 
 
 
81d1e4c
9f5a703
 
 
81d1e4c
 
 
 
 
9f5a703
 
81d1e4c
 
 
 
9f5a703
 
 
 
81d1e4c
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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");
  }
}