nuevo operador listo

This commit is contained in:
2022-10-15 23:51:56 -05:00
parent 132d1b18d9
commit b383da979f
11 changed files with 190 additions and 207 deletions
+2 -4
View File
@@ -77,10 +77,8 @@ export class AuthController {
@Get('validar-token')
@UseGuards(AuthGuard('jwt'))
@ApiOperation({
description: 'Endpoint utilizado para validar un token.',
})
@ApiOperation({ description: 'Endpoint utilizado para validar un token.' })
validarToken() {
return true;
return { valido: true };
}
}
+51 -29
View File
@@ -4,10 +4,14 @@ import {
UnauthorizedException,
} from '@nestjs/common';
import { JwtService } from '@nestjs/jwt';
import { Operador } from '../operador/entity/operador.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 { JwtPayloadAdmin } from './dto/jwt-payload-admin';
import { JwtPayloadOperador } from './dto/jwt-payload-operador';
import { JwtPayloadUsuario } from './dto/jwt-payload-usuario';
@Injectable()
export class AuthService {
@@ -20,19 +24,23 @@ export class AuthService {
) {}
loginAdmin(admin: string, password: string) {
return this.operadorService.informacionAdmin(admin).then((data) => {
if (
!data.operador ||
!this.bcryptService.comparar(password, data.password)
)
throw new BadRequestException(
'Usuario y/o password incorrectos, ingresa unas credenciales válidas.',
);
if (!data.activo)
throw new UnauthorizedException(
'Esta cuenta se encuentra desactivada.',
);
return { token: this.jwtService.sign(data.operador) };
return this.operadorService.findInfoOperadorAdmin(admin).then((admin) => {
this.validacionBasica(admin, password);
const JwtPayload: JwtPayloadAdmin = {
Operador: {
id_operador: admin.id_operador,
operador: admin.operador,
nombre: admin.nombre,
institucion: {
id_institucion: admin.institucion.id_institucion,
},
tipoUsuario: {
id_tipo_usuario: admin.tipoUsuario.id_tipo_usuario,
},
},
};
return { token: this.jwtService.sign(JwtPayload) };
});
}
@@ -40,22 +48,27 @@ export class AuthService {
const modulo = await this.moduloService.findInfoModuloById(id_modulo);
return this.operadorService
.informacionOperador(modulo.institucion, operador)
.then((data) => {
if (
!data.operador ||
!this.bcryptService.comparar(password, data.password)
)
throw new BadRequestException(
'Usuario y/o password incorrectos, ingresa unas credenciales válidas.',
);
if (!data.activo)
throw new UnauthorizedException(
'Esta cuenta se encuentra desactivada.',
);
if (data.operador.tipoUsuario.id_tipo_usuario === 4)
data.operador.id_modulo = modulo.id_modulo;
return { token: this.jwtService.sign(data.operador) };
.findInfoOperador(modulo.institucion, operador)
.then((operador) => {
this.validacionBasica(operador, password);
const JwtPayload: JwtPayloadOperador = {
Operador: {
id_operador: operador.id_operador,
operador: operador.operador,
nombre: operador.nombre,
institucion: {
id_institucion: operador.institucion.id_institucion,
},
tipoUsuario: {
id_tipo_usuario: operador.tipoUsuario.id_tipo_usuario,
},
},
};
if (operador.tipoUsuario.id_tipo_usuario === 4)
JwtPayload.Modulo.id_modulo = modulo.id_modulo;
return { token: this.jwtService.sign(JwtPayload) };
});
}
@@ -75,4 +88,13 @@ export class AuthService {
return { token: this.jwtService.sign(data.usuario) };
});
}
private validacionBasica(operador: Operador, password: string) {
if (!operador || !this.bcryptService.comparar(password, operador.password))
throw new BadRequestException(
'Usuario y/o password incorrectos, ingresa unas credenciales válidas.',
);
if (!operador.activo)
throw new UnauthorizedException('Esta cuenta se encuentra desactivada.');
}
}
+8 -10
View File
@@ -1,11 +1,9 @@
export class JwtPayload {
nombre: string;
id_operador: number;
institucion: { id_institucion: number };
operador: string;
tipoUsuario: { id_tipo_usuario: number };
export interface JwtPayloadAdmin {
Operador: {
id_operador: number;
nombre: string;
operador: string;
institucion: { id_institucion: number };
tipoUsuario: { id_tipo_usuario: number };
};
}
+9 -12
View File
@@ -1,13 +1,10 @@
export class JwtPayload {
nombre: string;
id_modulo: number;
id_operador: number;
institucion: { id_institucion: number };
operador: string;
tipoUsuario: { id_tipo_usuario: number };
export interface JwtPayloadOperador {
Operador: {
id_operador: number;
nombre: string;
operador: string;
institucion: { id_institucion: number };
tipoUsuario: { id_tipo_usuario: number };
};
Modulo?: { id_modulo: number };
}
+7 -17
View File
@@ -1,18 +1,8 @@
export class JwtPayload {
nombre: string;
id_usuario: number;
instituciones: {
id_institucion_usuario: number;
institucionCarrera: {
id_institucion_carrera: number;
institucion: { id_institucion: number };
carrera: { id_carrera: number };
};
}[];
tipoUsuario: { id_tipo_usuario: number };
usuario: string;
export interface JwtPayloadUsuario {
Usuario: {
id_usuario: number;
nombre: string;
usuario: string;
tipoUsuario: { id_tipo_usuario: number };
};
}
-26
View File
@@ -1,26 +0,0 @@
export class JwtPayload {
nombre: string;
tipoUsuario: { id_tipo_usuario: number };
id_modulo?: number;
id_operador?: number;
id_usuario?: number;
operador?: string;
usuario?: string;
institucion?: { id_institucion: number };
instituciones?: {
id_institucion_usuario: number;
institucionCarrera: {
id_institucion_carrera: number;
institucion: { id_institucion: number };
carrera: { id_carrera: number };
};
}[];
}
+12 -10
View File
@@ -8,7 +8,9 @@ import { UsuarioService } from '../../usuario/usuario.service';
import { Modulo } from '../../modulo/entity/modulo.entity';
import { Operador } from '../../operador/entity/operador.entity';
import { Usuario } from '../../usuario/entity/usuario.entity';
import { JwtPayload } from '../dto/jwt-payload';
import { JwtPayloadAdmin } from '../dto/jwt-payload-admin';
import { JwtPayloadOperador } from '../dto/jwt-payload-operador';
import { JwtPayloadUsuario } from '../dto/jwt-payload-usuario';
@Injectable()
export class JwtStrategyService extends PassportStrategy(Strategy) {
@@ -24,32 +26,32 @@ export class JwtStrategyService extends PassportStrategy(Strategy) {
});
}
async validate(payload: JwtPayload) {
async validate(
payload: JwtPayloadAdmin | JwtPayloadOperador | JwtPayloadUsuario,
) {
const user: { modulo?: Modulo; usuario?: Usuario; operador?: Operador } =
{};
if (payload.id_usuario)
if ('Usuario' in payload)
await this.usuarioService
.findById(payload.id_usuario, true, true)
.findById(payload.Usuario.id_usuario, true, true)
.then((usuario) => (user.usuario = usuario));
else if (payload.id_operador)
else if ('Operador' in payload)
await this.operadorService
.findInfoOperadorById(payload.id_operador)
.findInfoOperadorById(payload.Operador.id_operador)
.then(async (operador) => {
if (!operador.activo)
throw new ForbiddenException('Esta cuenta esta desactivada.');
/*
if (operador.tipoUsuario.id_tipo_usuario === 4) {
if (payload.id_modulo)
if ('Modulo' in payload)
await this.moduloService
.findById(payload.id_modulo)
.findInfoModuloById(payload.Modulo.id_modulo)
.then((modulo) => (user.modulo = modulo));
else
throw new ForbiddenException(
'Credenciales no válidas, inicia sesión de nuevo.',
);
}
*/
user.operador = operador;
});
return user;