This commit is contained in:
lemuel 2022-08-11 16:41:27 -05:00
commit 507e4fbf2b
8 changed files with 103 additions and 54 deletions

View File

@ -7,15 +7,14 @@ import { AuthService } from './auth.service';
import { LoginAdminDto } from './dto/input/login-admin.dto';
import { LoginOperadorDto } from './dto/input/login-operador.dto';
import { LoginUsuarioDto } from './dto/input/login-usuario.dto';
import { AuthOperadorOutputDto } from './dto/output/operador.dto';
import { AuthUsuarioOutputDto } from './dto/output/usuario.dto';
import { AuthTokenOutputDto } from './dto/output/token.dto';
@Controller('auth')
@ApiTags('auth')
export class AuthController {
constructor(private authService: AuthService) {}
@Serealize(AuthOperadorOutputDto)
@Serealize(AuthTokenOutputDto)
@Recaptcha()
@Post('login-admin')
@ApiOperation({
@ -36,7 +35,7 @@ export class AuthController {
return this.authService.loginAdmin(body.operador, body.password);
}
@Serealize(AuthOperadorOutputDto)
@Serealize(AuthTokenOutputDto)
@Recaptcha()
@Post('login-operador')
@ApiOperation({
@ -62,7 +61,7 @@ export class AuthController {
);
}
@Serealize(AuthUsuarioOutputDto)
@Serealize(AuthTokenOutputDto)
@Recaptcha()
@Post('login-usuario')
@ApiOperation({

View File

@ -30,7 +30,14 @@ export class AuthService {
const payload: JwtPayload = {
id_operador: operador.id_operador,
id_tipo_usuario: operador.tipoUsuario.id_tipo_usuario,
nombre: operador.nombre,
operador: operador.operador,
institucion: operador.institucion
? { id_instituion: operador.institucion.id_institucion }
: null,
tipoUsuario: {
id_tipo_usuario: operador.tipoUsuario.id_tipo_usuario,
},
};
return { operador, token: this.jwtService.sign(payload) };
@ -53,12 +60,19 @@ export class AuthService {
);
const payload: JwtPayload = {
id_modulo: modulo.id_modulo,
id_operador: operador.id_operador,
id_tipo_usuario: operador.tipoUsuario.id_tipo_usuario,
id_modulo: modulo.id_modulo,
nombre: operador.nombre,
operador: operador.operador,
institucion: operador.institucion
? { id_instituion: operador.institucion.id_institucion }
: null,
tipoUsuario: {
id_tipo_usuario: operador.tipoUsuario.id_tipo_usuario,
},
};
return { operador, token: this.jwtService.sign(payload) };
return { token: this.jwtService.sign(payload) };
});
}
@ -68,9 +82,48 @@ export class AuthService {
.then((usuario) => {
this.validarLogin(usuario, password);
const instituciones: {
id_institucion_usuario: number;
institucionCarrera: {
id_institucion_carrera: number;
institucion: { id_institucion: number };
carrera: { id_carrera: number };
};
}[] = [];
for (let i = 0; i < usuario.instituciones.length; i++)
if (
usuario.instituciones[i].activo &&
!usuario.instituciones[i].multa
)
instituciones.push({
id_institucion_usuario:
usuario.instituciones[i].id_institucion_usuario,
institucionCarrera: {
id_institucion_carrera:
usuario.instituciones[i].institucionCarrera
.id_institucion_carrera,
carrera: {
id_carrera:
usuario.instituciones[i].institucionCarrera.carrera
.id_carrera,
},
institucion: {
id_institucion:
usuario.instituciones[i].institucionCarrera.institucion
.id_institucion,
},
},
});
const payload: JwtPayload = {
id_usuario: usuario.id_usuario,
id_tipo_usuario: usuario.tipoUsuario.id_tipo_usuario,
nombre: usuario.nombre,
usuario: usuario.usuario,
instituciones: instituciones,
tipoUsuario: {
id_tipo_usuario: usuario.tipoUsuario.id_tipo_usuario,
},
};
return { token: this.jwtService.sign(payload), usuario };

View File

@ -1,9 +1,26 @@
export class JwtPayload {
id_tipo_usuario: number;
nombre: string;
tipoUsuario: { id_tipo_usuario: number };
id_modulo?: number;
id_operador?: number;
id_usuario?: number;
operador?: string;
usuario?: string;
institucion?: { id_instituion: number };
instituciones?: {
id_institucion_usuario: number;
institucionCarrera: {
id_institucion_carrera: number;
institucion: { id_institucion: number };
carrera: { id_carrera: number };
};
}[];
}

View File

@ -1,11 +0,0 @@
import { Expose, Type } from 'class-transformer';
import { OperadorOutputDto } from '../../../operador/dto/output/operador.dto';
export class AuthOperadorOutputDto {
@Expose()
@Type(() => OperadorOutputDto)
operador;
@Expose()
token;
}

View File

@ -0,0 +1,6 @@
import { Expose } from 'class-transformer';
export class AuthTokenOutputDto {
@Expose()
token;
}

View File

@ -1,11 +0,0 @@
import { Expose, Type } from 'class-transformer';
import { UsuariosOutputDto } from '../../../usuario/dto/output/usuarios.dto';
export class AuthUsuarioOutputDto {
@Expose()
token;
@Expose()
@Type(() => UsuariosOutputDto)
usuario;
}

View File

@ -19,9 +19,9 @@ export class BcryptService {
}
generarPassword = () => {
const length = 8;
const length = 10;
const charset =
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+-@#$%&=?¿*()/_-';
let password = '';
for (let i = 0; i < length; i++)

View File

@ -98,10 +98,6 @@ export class UsuarioService {
/* Falta conexión a soap */
if (existeUsuario.password)
throw new ConflictException('Ya fue regisrado este número de cuenta.');
// if (!existeUsuario.activo)
// throw new ConflictException(
// 'No se puede registar con este número de cuenta por que se encuentra desactivado.',
// );
return this.institucionUsuarioService.findByUsuarioInstitucionCarrera(
existeUsuario,
institucionCarrera,
@ -116,28 +112,28 @@ export class UsuarioService {
id_institucion,
1,
);
const query = this.repository
return this.repository
.createQueryBuilder('u')
.innerJoinAndSelect('u.instituciones', 'is')
.innerJoinAndSelect('u.tipoUsuario', 'tu')
.innerJoinAndSelect('is.institucionCarrera', 'ic')
.innerJoinAndSelect('ic.carrera', 'c')
.innerJoinAndSelect('ic.institucion', 'i')
.innerJoinAndSelect('c.nivel', 'n')
.where('usuario = :usuario && rfc = :rfc', { usuario, rfc });
return query.getOne().then((usuario) => {
if (!usuario) throw new NotFoundException('No existe este usuario.');
if (usuario.password)
throw new ConflictException(
'Ya fue regisrado este número de trabajador.',
.where('usuario = :usuario && rfc = :rfc', { usuario, rfc })
.getOne()
.then((usuario) => {
if (!usuario) throw new NotFoundException('No existe este usuario.');
if (usuario.password)
throw new ConflictException(
'Ya fue regisrado este número de trabajador.',
);
return this.institucionUsuarioService.findByUsuarioInstitucionCarrera(
usuario,
institucionCarrera,
'trabajador',
);
return this.institucionUsuarioService.findByUsuarioInstitucionCarrera(
usuario,
institucionCarrera,
'trabajador',
);
});
});
}
async findAll(filtros: {