import { ConflictException, Injectable, UnauthorizedException, } from '@nestjs/common'; import { JwtService } from '@nestjs/jwt'; import { Operador } from '../operador/entity/operador.entity'; import { Usuario } from '../usuario/entity/usuario.entity'; 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, ) {} loginAdmin(admin: string, password: string) { return this.operadorService.findAdmin(admin, false).then((operador) => { this.validarLogin(operador, password); const payload: JwtPayload = { id_operador: operador.id_operador, id_tipo_usuario: operador.tipoUsuario.id_tipo_usuario, }; return { operador, token: this.jwtService.sign(payload) }; }); } async loginOperador(id_modulo: number, operador: string, password: string) { const modulo = await this.moduloService.findById(id_modulo); return this.operadorService .findByOperador(modulo.institucion, operador, false) .then((operador) => { this.validarLogin(operador, password); const payload: JwtPayload = { id_modulo: modulo.id_modulo, id_operador: operador.id_operador, id_tipo_usuario: operador.tipoUsuario.id_tipo_usuario, }; return { operador, token: this.jwtService.sign(payload) }; }); } loginUsuario(usuario: string, password: string) { return this.usuarioService.findByUsuario(usuario, false).then((usuario) => { this.validarLogin(usuario, password); const payload: JwtPayload = { id_usuario: usuario.id_usuario, id_tipo_usuario: usuario.tipoUsuario.id_tipo_usuario, }; return { token: this.jwtService.sign(payload), usuario }; }); } validarLogin(usuarioOperador: Usuario | Operador, password: string) { if ( !usuarioOperador || !this.bcryptService.comparar(password, usuarioOperador.password) ) throw new UnauthorizedException( 'Usuario y/o password incorrectos, trata de nuevo.', ); if (!usuarioOperador.activo) throw new ConflictException('Esta cuenta se encuentra desactivada.'); } }