Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 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 40 41 42 43 44 | import { AuthUser } from "@/common/decorators/AuthUser.decorator";
import { DiscordAuthGuard } from "@/common/guards/Discord.guard";
import { JwtAuthGuard } from "@/common/guards/Jwt.guard";
import { Config } from "@/modules/shared/config/types";
import { UserEntity } from "@/modules/shared/database/entities";
import { Cookies, Routes, Services, isInProduction } from "@/types/Constants";
import { Controller, Get, HttpCode, HttpStatus, Inject, Redirect, Req, Res, UseGuards } from "@nestjs/common";
import { ConfigService } from "@nestjs/config";
import { ApiTags } from "@nestjs/swagger";
import { FastifyReply, FastifyRequest } from "fastify";
import { IAuthService } from "./interfaces/IAuthService.interface";
@ApiTags(Routes.Auth)
@Controller(Routes.Auth)
export class AuthController {
public constructor(
@Inject(Services.Auth) private readonly authService: IAuthService,
private readonly configService: ConfigService,
) {}
@Get("login")
@UseGuards(DiscordAuthGuard)
public login(): void {}
@Get("redirect")
@HttpCode(HttpStatus.CREATED)
@UseGuards(DiscordAuthGuard)
@Redirect(isInProduction ? "http://localhost:4401/@me" : "http://localhost:4400/api/auth/status")
public async redirect(@Req() req: FastifyRequest, @Res() res: FastifyReply): Promise<void> {
const jwt = await this.authService.login(req.user);
res.cookie(Cookies.JWT, jwt, {
httpOnly: true,
maxAge: this.configService.getOrThrow<Config["API"]>("API").MaxAge,
path: "/",
});
}
@Get("status")
@UseGuards(JwtAuthGuard)
public status(@AuthUser() user: UserEntity): UserEntity {
return user;
}
}
|