import { ConflictException, Injectable, UnauthorizedException, } from '@nestjs/common'; import { JwtService } from '@nestjs/jwt'; import { BcryptService } from '../bcrypt/bcrypt.service'; import { ModuloService } from '../modulo/modulo.service'; import { OperadorService } from '../operador/operador.service'; import { UsuarioService } from '../usuario/usuario.service'; import { JwtPayload } from './dto/jwt-payload'; @Injectable() export class AuthService { constructor( private bcryptService: BcryptService, private jwtService: JwtService, private moduloService: ModuloService, private operadorService: OperadorService, private usuarioService: UsuarioService, ) {} validate() {} loginUsuario(usuario: string, password: string) { return this.usuarioService.findByUsuario(usuario).then((usuario) => { if (!this.bcryptService.comparar(password, usuario.password)) throw new UnauthorizedException( 'Usuario y/o contraseña incorrectos, trata de nuevo.', ); /* Crear JWT y regresarlo */ return usuario; }); } async loginOperador( id_institucion: number, id_modulo: number, operador: string, password: string, ) { const modulo = await this.moduloService.findById(id_modulo); return this.operadorService .findByOperador(id_institucion, operador) .then((operador) => { if (!this.bcryptService.comparar(password, operador.password)) throw new UnauthorizedException( 'Usuario y/o contraseña incorrectos, trata de nuevo.', ); if (!operador.activo) throw new UnauthorizedException( 'Esta cuenta se encuentra desactivada.', ); if ( modulo.institucion.id_institucion != operador.institucion.id_institucion ) throw new ConflictException( 'El módulo seleccionado no pertenece a la misma institución al la que pertenece el operador.', ); const payload: JwtPayload = { id_operador: operador.id_operador, id_tipo_usuario: operador.tipoUsuario.id_tipo_usuario, id_modulo: modulo.id_modulo, }; return { operador, token: this.jwtService.sign(payload) }; }); } }