Loading backend/src/admin/admin.controller.ts +3 −1 Original line number Diff line number Diff line import { Controller, Get, Req } from '@nestjs/common'; import { Controller, Get, Req, UseGuards } from '@nestjs/common'; import { AdminService } from './admin.service'; import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; import { ADMIN_ROLES } from 'src/shared/enum/admin-role.enum'; import { Roles } from 'src/auth/role.decorator'; import { CustomAdminRequest } from 'src/auth/admin/interface/customAdminReq'; import { AuthAdminGuard } from 'src/auth/admin/authAdmin.guard'; @Controller('') @ApiTags('Admin') export class AdminController { constructor(private readonly adminService: AdminService) {} @UseGuards(AuthAdminGuard) @Roles(ADMIN_ROLES) @ApiBearerAuth('jwt') @Get('admin/whoami') Loading backend/src/admin/admin.module.ts +4 −1 Original line number Diff line number Diff line Loading @@ -4,10 +4,13 @@ import { AdminController } from './admin.controller'; import { TypeOrmModule } from '@nestjs/typeorm'; import { Admin } from './entities/admin.entity'; import { Town } from 'src/town/entities/town.entity'; import { AuthAdminService } from 'src/auth/admin/authAdmin.service'; import { JwtService } from '@nestjs/jwt'; import { EncryptionService } from 'src/auth/encryption/encryption.service'; @Module({ controllers: [AdminController], providers: [AdminService], providers: [AdminService, AuthAdminService, JwtService, EncryptionService], imports: [TypeOrmModule.forFeature([Admin, Town])], exports: [AdminService], }) Loading backend/src/app.module.ts +1 −1 Original line number Diff line number Diff line Loading @@ -65,7 +65,7 @@ import { PlaceTraduction } from './place/entities/place-traduction.entity'; PointOfInterestModule, ], controllers: [AppController], providers: [AppService, DatabaseSeederModule, { provide: APP_GUARD, useClass: AuthAdminGuard }], providers: [AppService, DatabaseSeederModule], exports: [TypeOrmModule], }) export class AppModule {} backend/src/auth/admin/authAdmincontroller.ts +3 −1 Original line number Diff line number Diff line import { Body, Controller, Post } from '@nestjs/common'; import { Body, Controller, Post, UseGuards } from '@nestjs/common'; import { AuthAdminService } from './authAdmin.service'; import { CreateAdminDto } from 'src/admin/dto/create-admin.dto'; import { LoginAdminDto } from 'src/auth/admin/dto/login-admin.dto'; Loading @@ -6,6 +6,7 @@ import { ApiBearerAuth, ApiBody, ApiCreatedResponse, ApiTags, ApiUnauthorizedRes import { AdminSigninResDto } from './dto/admin-signin-res.dto'; import { Roles } from '../role.decorator'; import { ADMIN_ROLE, SUPERADMIN_ROLES } from 'src/shared/enum/admin-role.enum'; import { AuthAdminGuard } from './authAdmin.guard'; @Controller() @ApiTags('Create admin account and sign in as admin') Loading @@ -22,6 +23,7 @@ export class AuthAdminController { }, }, }) @UseGuards(AuthAdminGuard) @Roles(SUPERADMIN_ROLES) @Post('admin/signup') @ApiBearerAuth('jwt') Loading backend/src/auth/user/authUser.guard.ts 0 → 100644 +21 −0 Original line number Diff line number Diff line import { CanActivate, ExecutionContext, Injectable, UnauthorizedException } from '@nestjs/common'; import { UserService } from 'src/user/user.service'; import { AuthUserService } from './authUserservice'; @Injectable() export class AuthUserGuard implements CanActivate { constructor( private authUserService: AuthUserService, private userService: UserService, ) {} async canActivate(context: ExecutionContext): Promise<boolean> { const request = context.switchToHttp().getRequest(); let { authorization }: any = request.headers; if (!authorization) throw new UnauthorizedException('session expired! Please sign In'); authorization = authorization.split(' ')[1]; const jwtPayload = await this.authUserService.validateToken(authorization); const user = await this.userService.findOne(jwtPayload.email); request.user = { ...user }; return true; } } Loading
backend/src/admin/admin.controller.ts +3 −1 Original line number Diff line number Diff line import { Controller, Get, Req } from '@nestjs/common'; import { Controller, Get, Req, UseGuards } from '@nestjs/common'; import { AdminService } from './admin.service'; import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; import { ADMIN_ROLES } from 'src/shared/enum/admin-role.enum'; import { Roles } from 'src/auth/role.decorator'; import { CustomAdminRequest } from 'src/auth/admin/interface/customAdminReq'; import { AuthAdminGuard } from 'src/auth/admin/authAdmin.guard'; @Controller('') @ApiTags('Admin') export class AdminController { constructor(private readonly adminService: AdminService) {} @UseGuards(AuthAdminGuard) @Roles(ADMIN_ROLES) @ApiBearerAuth('jwt') @Get('admin/whoami') Loading
backend/src/admin/admin.module.ts +4 −1 Original line number Diff line number Diff line Loading @@ -4,10 +4,13 @@ import { AdminController } from './admin.controller'; import { TypeOrmModule } from '@nestjs/typeorm'; import { Admin } from './entities/admin.entity'; import { Town } from 'src/town/entities/town.entity'; import { AuthAdminService } from 'src/auth/admin/authAdmin.service'; import { JwtService } from '@nestjs/jwt'; import { EncryptionService } from 'src/auth/encryption/encryption.service'; @Module({ controllers: [AdminController], providers: [AdminService], providers: [AdminService, AuthAdminService, JwtService, EncryptionService], imports: [TypeOrmModule.forFeature([Admin, Town])], exports: [AdminService], }) Loading
backend/src/app.module.ts +1 −1 Original line number Diff line number Diff line Loading @@ -65,7 +65,7 @@ import { PlaceTraduction } from './place/entities/place-traduction.entity'; PointOfInterestModule, ], controllers: [AppController], providers: [AppService, DatabaseSeederModule, { provide: APP_GUARD, useClass: AuthAdminGuard }], providers: [AppService, DatabaseSeederModule], exports: [TypeOrmModule], }) export class AppModule {}
backend/src/auth/admin/authAdmincontroller.ts +3 −1 Original line number Diff line number Diff line import { Body, Controller, Post } from '@nestjs/common'; import { Body, Controller, Post, UseGuards } from '@nestjs/common'; import { AuthAdminService } from './authAdmin.service'; import { CreateAdminDto } from 'src/admin/dto/create-admin.dto'; import { LoginAdminDto } from 'src/auth/admin/dto/login-admin.dto'; Loading @@ -6,6 +6,7 @@ import { ApiBearerAuth, ApiBody, ApiCreatedResponse, ApiTags, ApiUnauthorizedRes import { AdminSigninResDto } from './dto/admin-signin-res.dto'; import { Roles } from '../role.decorator'; import { ADMIN_ROLE, SUPERADMIN_ROLES } from 'src/shared/enum/admin-role.enum'; import { AuthAdminGuard } from './authAdmin.guard'; @Controller() @ApiTags('Create admin account and sign in as admin') Loading @@ -22,6 +23,7 @@ export class AuthAdminController { }, }, }) @UseGuards(AuthAdminGuard) @Roles(SUPERADMIN_ROLES) @Post('admin/signup') @ApiBearerAuth('jwt') Loading
backend/src/auth/user/authUser.guard.ts 0 → 100644 +21 −0 Original line number Diff line number Diff line import { CanActivate, ExecutionContext, Injectable, UnauthorizedException } from '@nestjs/common'; import { UserService } from 'src/user/user.service'; import { AuthUserService } from './authUserservice'; @Injectable() export class AuthUserGuard implements CanActivate { constructor( private authUserService: AuthUserService, private userService: UserService, ) {} async canActivate(context: ExecutionContext): Promise<boolean> { const request = context.switchToHttp().getRequest(); let { authorization }: any = request.headers; if (!authorization) throw new UnauthorizedException('session expired! Please sign In'); authorization = authorization.split(' ')[1]; const jwtPayload = await this.authUserService.validateToken(authorization); const user = await this.userService.findOne(jwtPayload.email); request.user = { ...user }; return true; } }