Commit c7b94c2a authored by Lorenzo Trujillo Rojas's avatar Lorenzo Trujillo Rojas
Browse files

Merge branch 'main' into 'main'

Agregando decorador para la autenticacion de usuarios

See merge request !26
parents 5f22cb4b 0f474a80
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