Commit 7b9ccb51 authored by Lorenzo Trujillo Rojas's avatar Lorenzo Trujillo Rojas
Browse files

Merge branch pueblosmagicosconia:main into main

parents 7f85e57a c7b94c2a
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
import { Injectable } from '@nestjs/common';
import { Injectable, UnauthorizedException } from '@nestjs/common';
import { CreateAdminDto } from './dto/create-admin.dto';
import { Admin } from './entities/admin.entity';
import { Repository } from 'typeorm';
@@ -12,6 +12,10 @@ export class AdminService {
  }

  async findOne(email: string): Promise<Admin> {
    try {
      return await this.adminRepository.findOneByOrFail({ email });
    } catch (error) {
      throw new UnauthorizedException('Admin not found');
    }
  }
}
+2 −2
Original line number Diff line number Diff line
import { ApiProperty } from '@nestjs/swagger';
import { ADMIN_ROLE } from 'src/enum/admin-role.enum';
import { UserStatus } from 'src/enum/user-status.enum';
import { ADMIN_ROLE } from 'src/shared/enum/admin-role.enum';
import { UserStatus } from 'src/shared/enum/user-status.enum';

export class CreateAdminDto {
  @ApiProperty()
+2 −2
Original line number Diff line number Diff line
import { ADMIN_ROLE } from 'src/enum/admin-role.enum';
import { UserStatus } from 'src/enum/user-status.enum';
import { ADMIN_ROLE } from 'src/shared/enum/admin-role.enum';
import { UserStatus } from 'src/shared/enum/user-status.enum';
import { Entity, Column, PrimaryColumn } from 'typeorm';

@Entity()
+5 −1
Original line number Diff line number Diff line
@@ -17,6 +17,9 @@ import { join } from 'path';
import { Town } from './town/entities/town.entity';
import { TownModule } from './town/town.module';
import { TownTraduction } from './town/entities/town-traduction.entity';
import { AuthModule } from './shared/service/auth.module';
import { APP_GUARD } from '@nestjs/core';
import { AuthGuard } from './auth/admin/auth.guard';

@Module({
  imports: [
@@ -38,12 +41,13 @@ import { TownTraduction } from './town/entities/town-traduction.entity';
    StateModule,
    DatabaseSeederModule,
    TownModule,
    AuthModule,
    ServeStaticModule.forRoot({
      rootPath: join(__dirname, '..', 'static'),
    }),
  ],
  controllers: [AppController],
  providers: [AppService, DatabaseSeederModule],
  providers: [AppService, DatabaseSeederModule, { provide: APP_GUARD, useClass: AuthGuard }],
  exports: [TypeOrmModule],
})
export class AppModule {}
+23 −0
Original line number Diff line number Diff line
import { CanActivate, ExecutionContext, Injectable, UnauthorizedException } from '@nestjs/common';
import { Reflector } from '@nestjs/core';
import { AuthService } from 'src/shared/service/auth.service';
import { Roles } from '../role.decorator';

@Injectable()
export class AuthGuard implements CanActivate {
  constructor(
    private authService: AuthService,
    private reflector: Reflector,
  ) {}
  async canActivate(context: ExecutionContext): Promise<boolean> {
    const requiredRole = this.reflector.get(Roles, context.getHandler());
    if (!requiredRole) return true;
    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 role = await this.authService.validateToken(authorization);
    if (!requiredRole.includes(role)) throw new UnauthorizedException('Unauthorized access');
    return true;
  }
}
Loading