diff --git a/apps/service-auth/src/clans/clans.controller.ts b/apps/service-auth/src/clans/clans.controller.ts index 1e1dbe8..bdd78c3 100644 --- a/apps/service-auth/src/clans/clans.controller.ts +++ b/apps/service-auth/src/clans/clans.controller.ts @@ -1,5 +1,6 @@ -import { CurrentUser } from '@app/auth'; -import { Controller, Get, Param, Query, Res } from '@nestjs/common'; +import { CurrentUser, JwtAuthGuard, RolesGuard } from '@app/auth'; +import { Public } from '@app/auth/decorators'; +import { Controller, Get, Param, Query, Res, UseGuards } from '@nestjs/common'; import { ApiBearerAuth, ApiResponse, ApiTags } from '@nestjs/swagger'; import { Response } from 'express'; import { ClansService } from './clans.service'; @@ -10,7 +11,7 @@ import { SeasonInput } from './dto/season-input.dto'; @ApiTags('CLANS') @ApiBearerAuth() @Controller('/clans') -// @UseGuards(JwtAuthGuard, RolesGuard) +@UseGuards(JwtAuthGuard, RolesGuard) export class ClansController { constructor(private clansService: ClansService) {} @@ -40,6 +41,7 @@ export class ClansController { return this.clansService.getCWLStats(clanTag); } + @Public() @Get('/:clanTag/badges/:size') @ApiResponse({ type: CWLStatsOutput, status: 200 }) async getClanBadges( diff --git a/apps/service-auth/src/clans/clans.service.ts b/apps/service-auth/src/clans/clans.service.ts index 0f6c363..df60b10 100644 --- a/apps/service-auth/src/clans/clans.service.ts +++ b/apps/service-auth/src/clans/clans.service.ts @@ -347,7 +347,6 @@ export class ClansService { public async getClanBadges(clanTag: string, size: string) { const clan = await this.clashClientService.getClanOrThrow(clanTag); - console.log(clan.badgeUrls[size]); return fetch(clan.badgeUrls[size]).then((res) => res.arrayBuffer()); } } diff --git a/libs/auth/src/decorators/index.ts b/libs/auth/src/decorators/index.ts index d8a4fc8..6e188c8 100644 --- a/libs/auth/src/decorators/index.ts +++ b/libs/auth/src/decorators/index.ts @@ -1,2 +1,3 @@ export * from './current-user.decorator'; export * from './roles.decorator'; +export * from './public.decorator'; diff --git a/libs/auth/src/decorators/public.decorator.ts b/libs/auth/src/decorators/public.decorator.ts new file mode 100644 index 0000000..767ac49 --- /dev/null +++ b/libs/auth/src/decorators/public.decorator.ts @@ -0,0 +1,5 @@ +import { SetMetadata } from '@nestjs/common'; + +export const IS_PUBLIC_KEY = 'isPublic'; + +export const Public = () => SetMetadata(IS_PUBLIC_KEY, true); diff --git a/libs/auth/src/guards/jwt-auth.guards.ts b/libs/auth/src/guards/jwt-auth.guards.ts index ce47998..cf0911f 100644 --- a/libs/auth/src/guards/jwt-auth.guards.ts +++ b/libs/auth/src/guards/jwt-auth.guards.ts @@ -1,6 +1,24 @@ -import { Injectable } from '@nestjs/common'; +import { ExecutionContext, Injectable } from '@nestjs/common'; +import { Reflector } from '@nestjs/core'; import { AuthGuard } from '@nestjs/passport'; import { AuthGuardStrategyMapping } from 'apps/service-auth/src/app.constants'; +import { Observable } from 'rxjs'; +import { IS_PUBLIC_KEY } from '../decorators/public.decorator'; @Injectable() -export class JwtAuthGuard extends AuthGuard(AuthGuardStrategyMapping.JWT) {} +export class JwtAuthGuard extends AuthGuard(AuthGuardStrategyMapping.JWT) { + public constructor(private reflector: Reflector) { + super(); + } + + canActivate(context: ExecutionContext): boolean | Promise | Observable { + const isPublic = this.reflector.getAllAndOverride(IS_PUBLIC_KEY, [ + context.getHandler(), + context.getClass(), + ]); + + if (isPublic) return true; + + return super.canActivate(context); + } +}