pcpuma_unam_api/src/auth/auth.service.ts

73 lines
2.2 KiB
TypeScript
Raw Normal View History

2022-04-22 02:52:40 +00:00
import {
ConflictException,
Injectable,
UnauthorizedException,
} from '@nestjs/common';
2022-04-21 21:31:26 +00:00
import { JwtService } from '@nestjs/jwt';
2022-04-22 01:33:05 +00:00
import { BcryptService } from '../bcrypt/bcrypt.service';
2022-04-22 02:52:40 +00:00
import { ModuloService } from '../modulo/modulo.service';
2022-04-22 01:33:05 +00:00
import { OperadorService } from '../operador/operador.service';
import { UsuarioService } from '../usuario/usuario.service';
2022-04-22 02:52:40 +00:00
import { JwtPayload } from './dto/jwt-payload';
2022-04-21 21:31:26 +00:00
@Injectable()
export class AuthService {
2022-04-22 01:33:05 +00:00
constructor(
private bcryptService: BcryptService,
2022-04-22 02:52:40 +00:00
private jwtService: JwtService,
private moduloService: ModuloService,
2022-04-22 01:33:05 +00:00
private operadorService: OperadorService,
private usuarioService: UsuarioService,
) {}
2022-04-21 21:31:26 +00:00
validate() {}
2022-04-22 01:33:05 +00:00
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;
});
}
2022-04-22 02:52:40 +00:00
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) };
});
2022-04-22 01:33:05 +00:00
}
2022-04-21 21:31:26 +00:00
}