diff --git a/src/auth/auth.service.ts b/src/auth/auth.service.ts index 9a0c42f..f2352d3 100644 --- a/src/auth/auth.service.ts +++ b/src/auth/auth.service.ts @@ -45,11 +45,11 @@ export class AuthService { .then((operador) => { this.validarLogin(operador, password); if ( - operador.institucion.id_institucion !== + operador.institucion.id_institucion != modulo.institucion.id_institucion ) throw new ConflictException( - 'Este módulo no pertenece a tu institución, selecciona uno válido.', + 'Este módulo no pertenece a tu institución, selecciona una que si.', ); const payload: JwtPayload = { @@ -83,7 +83,7 @@ export class AuthService { !this.bcryptService.comparar(password, usuarioOperador.password) ) throw new UnauthorizedException( - 'Usuario y/o password incorrectos, trata de nuevo.', + 'Usuario y/o password incorrectos, ingresa unas credenciales válidas.', ); } } diff --git a/src/auth/strategy/jwt-strategy.service.ts b/src/auth/strategy/jwt-strategy.service.ts index b892ab3..d47796f 100644 --- a/src/auth/strategy/jwt-strategy.service.ts +++ b/src/auth/strategy/jwt-strategy.service.ts @@ -1,19 +1,54 @@ -import { Injectable } from '@nestjs/common'; +import { ConflictException, Injectable } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import { PassportStrategy } from '@nestjs/passport'; import { Strategy, ExtractJwt } from 'passport-jwt'; +import { ModuloService } from 'src/modulo/modulo.service'; +import { Operador } from 'src/operador/entity/operador.entity'; +import { OperadorService } from 'src/operador/operador.service'; +import { Usuario } from 'src/usuario/entity/usuario.entity'; +import { UsuarioService } from 'src/usuario/usuario.service'; +import { Modulo } from '../../modulo/entity/modulo.entity'; + import { JwtPayload } from '../dto/jwt-payload'; @Injectable() export class JwtStrategyService extends PassportStrategy(Strategy) { - constructor(private configService: ConfigService) { + constructor( + private configService: ConfigService, + private moduloService: ModuloService, + private operadorService: OperadorService, + private usuarioService: UsuarioService, + ) { super({ jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), secretOrKey: configService.get('AUTH_SECRETKEY'), }); } - validate(payload: JwtPayload) { - return payload; + async validate(payload: JwtPayload) { + const user: { modulo?: Modulo; usuario?: Usuario; operador?: Operador } = + {}; + + if (payload.id_usuario) + await this.usuarioService + .findById(payload.id_usuario, true, true) + .then((usuario) => (user.usuario = usuario)); + else if (payload.id_operador) + await this.operadorService + .findById(payload.id_operador) + .then(async (operador) => { + user.operador = operador; + if (operador.tipoUsuario.id_tipo_usuario === 4) { + if (payload.id_modulo) + await this.moduloService + .findById(payload.id_modulo) + .then((modulo) => (user.modulo = modulo)); + else + throw new ConflictException( + 'Credenciales no válidas, inicia sesión de nuevo.', + ); + } + }); + return user; } } diff --git a/src/usuario/usuario.controller.ts b/src/usuario/usuario.controller.ts index 453b4f4..829fa02 100644 --- a/src/usuario/usuario.controller.ts +++ b/src/usuario/usuario.controller.ts @@ -131,6 +131,21 @@ export class UsuarioController { return this.usuarioService.passwordReset(body.id_usuario); } + @Put('update-password') + @UseGuards(AuthGuard('jwt')) + @ApiOperation({ + description: + 'Enpoint que desactiva todas las cuentas de usuarios de una institución.', + }) + @ApiBearerAuth('jwt') + @ApiBody({ + description: 'Es obligatorio enviar el campo id_usuario.', + examples: { ejemplo: { value: { id_institucion: 200 } } }, + }) + desactivarCuentas(@Body() body: UpdateUsuarioInputDto) { + return this.usuarioService.passwordReset(body.id_usuario); + } + @Serealize(UsuarioOutputDto) @Get('usuario') @UseGuards(AuthGuard('jwt'))