utn-cli 2.0.38 → 2.0.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/templates/backend/rutas/Servicio1.js +19 -0
- package/templates/backend/servicios/Nucleo/Miscelaneas.js +31 -23
- package/templates/frontend/src/app/Componentes/Nucleo/subir-archivo/subir-archivo.component.html +1 -1
- package/templates/frontend/src/app/Componentes/Nucleo/tabla/tabla.component.css +1 -1
- package/templates/frontend/src/app/Componentes/Nucleo/tarjeta-modulo/tarjeta-modulo.component.css +1 -0
- package/templates/frontend/src/app/Componentes/Nucleo/tarjeta-modulo/tarjeta-modulo.component.html +4 -0
- package/templates/frontend/src/app/Paginas/Nucleo/contenedor-componentes/contenedor-componentes.component.ts +4 -1
- package/templates/frontend/src/app/datos-globales.service.ts +2 -2
package/package.json
CHANGED
|
@@ -23,6 +23,25 @@ Router.get('/funcionDeEjemplo', async (solicitud, respuesta, next) => {
|
|
|
23
23
|
}
|
|
24
24
|
});
|
|
25
25
|
|
|
26
|
+
// Router.get('/listarArchivosExterno/:Etiquetas', async (solicitud, respuesta, next) => {
|
|
27
|
+
// try {
|
|
28
|
+
// if (await Miscelaneo.validarTokenV2(solicitud.headers.authorization) && await Miscelaneo.validarAccesoDelOrigen(solicitud)) {
|
|
29
|
+
// try {
|
|
30
|
+
// const Datos = { Etiquetas: solicitud.params.Etiquetas };
|
|
31
|
+
// Datos.Token = solicitud.headers.authorization;
|
|
32
|
+
// return respuesta.json({ body: await Miscelaneo.listarArchivosExterno(Datos), error: undefined });
|
|
33
|
+
// } catch (error) {
|
|
34
|
+
// const MensajeDeError = 'No fue posible obtener los arcvhivos';
|
|
35
|
+
// console.error(new ManejadorDeErrores(MensajeDeError, ManejadorDeErrores.obtenerNumeroDeLinea(), true, `Dirección IP: ${solicitud.ip}`));
|
|
36
|
+
// return respuesta.status(500).json({ body: undefined, error: MensajeDeError });
|
|
37
|
+
// }
|
|
38
|
+
// }
|
|
39
|
+
// return respuesta.status(401).json({ body: undefined, error: ManejadorDeErrores.mensajeDeError401() });
|
|
40
|
+
// } catch (error) {
|
|
41
|
+
// next(error);
|
|
42
|
+
// }
|
|
43
|
+
// });
|
|
44
|
+
|
|
26
45
|
// Router.get("/descargarArchivo/:ArchivoId", async (solicitud, respuesta, next) => {
|
|
27
46
|
// try {
|
|
28
47
|
// if (await Miscelaneo.validarToken(solicitud.headers.authorization) && await Miscelaneo.validarAccesoDelOrigen(solicitud)) {
|
|
@@ -368,7 +368,6 @@ class Miscelaneo {
|
|
|
368
368
|
return;
|
|
369
369
|
}
|
|
370
370
|
|
|
371
|
-
|
|
372
371
|
async Autenticar(Solicitud) {
|
|
373
372
|
const crypto = require('crypto');
|
|
374
373
|
const bcrypt = require('bcryptjs');
|
|
@@ -384,8 +383,7 @@ class Miscelaneo {
|
|
|
384
383
|
if (Resultado) {
|
|
385
384
|
console.log("La clave brindada para el usuario", Solicitud.body.Identificacion, "coincide");
|
|
386
385
|
const Token = await jwt.sign({ Identificador: Identificador, uid: Identificador }, await this.palabraSecretaParaTokens(), { expiresIn: '2h' });
|
|
387
|
-
await ConexionSigu.query("INSERT INTO `SIGU`.`SIGU_Sesiones` VALUES (?, ?, ?, NOW(4), ?) ON DUPLICATE KEY UPDATE `Token` = ?, `LastUser` = ?", [Identificador, Solicitud.headers.host.trim(), Token, LastUser, Token, LastUser]
|
|
388
|
-
);
|
|
386
|
+
await ConexionSigu.query("INSERT INTO `SIGU`.`SIGU_Sesiones` VALUES (?, ?, ?, NOW(4), ?) ON DUPLICATE KEY UPDATE `Token` = ?, `LastUser` = ?", [Identificador, Solicitud.headers.host.trim(), Token, LastUser, Token, LastUser]);
|
|
389
387
|
await ConexionSigu.query("DELETE FROM `SIGU`.`SIGU_SesionesFallidas` WHERE `Identificador` = ?", [Identificador]);
|
|
390
388
|
const permisos = await ConexionSigu.query("\
|
|
391
389
|
WITH RECURSIVE`ModulosJerarquia` AS( \
|
|
@@ -431,7 +429,6 @@ class Miscelaneo {
|
|
|
431
429
|
WHERE `Identificador` = ? AND `DireccionUsadaPorElUsuario` = ?", [Identificador, ipUsuario]);
|
|
432
430
|
if (ipExiste[0][0].Total === 0) {
|
|
433
431
|
console.log("IP nueva detectada para el usuario, iniciando 2FA");
|
|
434
|
-
|
|
435
432
|
// GENERAR CODIGO 2FA
|
|
436
433
|
let Codigo2FA = await ConexionSigu.query("SELECT UUID() AS `Dato`");
|
|
437
434
|
Codigo2FA = Codigo2FA[0][0].Dato;
|
|
@@ -459,11 +456,10 @@ class Miscelaneo {
|
|
|
459
456
|
"Código de verificación 2FA",
|
|
460
457
|
"<p>Hemos recibido su solicitud de acceso para 2FA.</p>" +
|
|
461
458
|
"<p>Para continuar con el proceso, por favor utilice el siguiente código único de verificación:</p>" +
|
|
462
|
-
"<
|
|
459
|
+
"<p>" + Codigo2FA + "</p>" +
|
|
463
460
|
"<p>Si usted no inició este proceso, puede ignorar este mensaje.</p>"
|
|
464
461
|
);
|
|
465
462
|
return { Requiere2FA: true };
|
|
466
|
-
|
|
467
463
|
}
|
|
468
464
|
|
|
469
465
|
// SI LA IP YA EXISTE CONTINUA
|
|
@@ -477,7 +473,7 @@ class Miscelaneo {
|
|
|
477
473
|
LastUser,
|
|
478
474
|
LastUser
|
|
479
475
|
]);
|
|
480
|
-
return { Token, Dominio: ((process.env.ENV || 'local') === 'production' ? '.sigu.utn.ac.cr' : '
|
|
476
|
+
return { Token, Dominio: ((process.env.ENV || 'local') === 'production' ? '.sigu.utn.ac.cr' : '-') };
|
|
481
477
|
|
|
482
478
|
} else {
|
|
483
479
|
console.log("La clave brindada para el usuario", Solicitud.body.Identificacion, "no conincide");
|
|
@@ -560,20 +556,11 @@ class Miscelaneo {
|
|
|
560
556
|
);
|
|
561
557
|
|
|
562
558
|
// Registrar sesión
|
|
563
|
-
await ConexionSigu.query("
|
|
564
|
-
|
|
565
|
-
VALUES (?, ?, ?, NOW(4), ?) \
|
|
566
|
-
ON DUPLICATE KEY UPDATE `Token` = ?, `LastUser` = ?", [
|
|
567
|
-
Identificador,
|
|
568
|
-
Solicitud.headers.host.trim(),
|
|
569
|
-
Token,
|
|
570
|
-
LastUser,
|
|
571
|
-
Token,
|
|
572
|
-
LastUser
|
|
573
|
-
]);
|
|
559
|
+
await ConexionSigu.query("INSERT INTO `SIGU`.`SIGU_Sesiones` VALUES (?, ?, ?, NOW(4), ?) ON DUPLICATE KEY UPDATE `Token` = ?, `LastUser` = ?"
|
|
560
|
+
, [Identificador, Solicitud.headers.host.trim(), Token, LastUser, Token, LastUser]);
|
|
574
561
|
return {
|
|
575
562
|
Token,
|
|
576
|
-
Dominio: ((process.env.ENV || 'local') === 'production' ? '.sigu.utn.ac.cr' : '
|
|
563
|
+
Dominio: ((process.env.ENV || 'local') === 'production' ? '.sigu.utn.ac.cr' : '-')
|
|
577
564
|
};
|
|
578
565
|
} catch (error) {
|
|
579
566
|
console.log(error);
|
|
@@ -592,7 +579,7 @@ class Miscelaneo {
|
|
|
592
579
|
|
|
593
580
|
async obtenerDetalleDelModulo() {
|
|
594
581
|
const Modulos = await ejecutarConsultaSIGU("SELECT `a`.`Nombre`, `a`.`Padre`, `a`.`Descripcion`, `a`.`Detalle`,\
|
|
595
|
-
`a`.`Tipo`, CONCAT('https://storage.sigu.utn.ac.cr/images/cards/', `a`.`Icono`) AS `Icono`, `a`.`Color`, `a`.`Correo`,\
|
|
582
|
+
`a`.`Tipo`, IF(`a`.`Icono` <> '', CONCAT('https://storage.sigu.utn.ac.cr/images/cards/', `a`.`Icono`), '') AS `Icono`, `a`.`Color`, `a`.`Correo`,\
|
|
596
583
|
`a`.`Version`, `a`.`FechaDePublicacion`, `a`.`AcuerdoDeNivelDeServicio`, `a`.`DiccionarioDeDatos`, `a`.`Repositorios`,\
|
|
597
584
|
`a`.`EnlaceDelVideo`,`a`.`EnlaceDelManual`\
|
|
598
585
|
, `a`.`Estado`, REGEXP_SUBSTR(`a`.`Repositorios`, '[^,]*front[^,]*') AS `Frontend`\
|
|
@@ -658,7 +645,7 @@ class Miscelaneo {
|
|
|
658
645
|
const Permisos = await ejecutarConsultaSIGU("SELECT `PermisoId` FROM `SIGU`.`SIGU_PermisosPersonasV2` WHERE `Identificador` = ?"
|
|
659
646
|
, [Resultado.uid]);
|
|
660
647
|
const Modulos = await ejecutarConsultaSIGU("SELECT `a`.`Nombre`, `a`.`Padre`, `a`.`Descripcion`, `a`.`Detalle`,\
|
|
661
|
-
`a`.`Tipo`, CONCAT('https://storage.sigu.utn.ac.cr/images/cards/', `a`.`Icono`) AS `Icono`, `a`.`Color`, `a`.`Correo`,\
|
|
648
|
+
`a`.`Tipo`, IF(`a`.`Icono` <> '', CONCAT('https://storage.sigu.utn.ac.cr/images/cards/', `a`.`Icono`), '') AS `Icono`, `a`.`Color`, `a`.`Correo`,\
|
|
662
649
|
`a`.`Version`, `a`.`FechaDePublicacion`, `a`.`AcuerdoDeNivelDeServicio`, `a`.`DiccionarioDeDatos`, `a`.`Repositorios`,\
|
|
663
650
|
`a`.`EnlaceDelVideo`,`a`.`EnlaceDelManual`\
|
|
664
651
|
, `a`.`Estado`, REGEXP_SUBSTR(`a`.`Repositorios`, '[^,]*front[^,]*') AS `Frontend`\
|
|
@@ -916,7 +903,7 @@ class Miscelaneo {
|
|
|
916
903
|
return ((process.env.ENV || 'local') === 'production' ? 'https' : 'http')
|
|
917
904
|
+ '://' + Modulo
|
|
918
905
|
+ ((process.env.ENV || 'local') === 'production' ? '' : '-' + (process.env.ENV || 'local'))
|
|
919
|
-
+ ((process.env.ENV || 'local') === 'production' ? '.sigu.utn.ac.cr' : '
|
|
906
|
+
+ ((process.env.ENV || 'local') === 'production' ? '.sigu.utn.ac.cr' : '-');
|
|
920
907
|
}
|
|
921
908
|
|
|
922
909
|
async registroDelModuloEnSIGU() {
|
|
@@ -1273,7 +1260,7 @@ class Miscelaneo {
|
|
|
1273
1260
|
// Validación del token en la sesión
|
|
1274
1261
|
const tokenAlmacenado = await ejecutarConsultaSIGU("SELECT COUNT(*) AS `Total` FROM `SIGU`.`SIGU_Sesiones`\
|
|
1275
1262
|
WHERE `Identificador` = ? AND `Token` = ?", [Resultado.uid, Resultado.token]);
|
|
1276
|
-
if (tokenAlmacenado[0]['Total'] >= 1) {
|
|
1263
|
+
if (tokenAlmacenado[0]['Total'] >= 1) {
|
|
1277
1264
|
// Validación de permisos
|
|
1278
1265
|
const rolPermisoId = await this.permisoIdV2();
|
|
1279
1266
|
const permisos = await ejecutarConsultaSIGU("SELECT COUNT(*) AS `Total` FROM `SIGU`.`SIGU_PermisosPersonasV2`\
|
|
@@ -1962,6 +1949,27 @@ class Miscelaneo {
|
|
|
1962
1949
|
}
|
|
1963
1950
|
}
|
|
1964
1951
|
|
|
1952
|
+
async listarArchivosExterno(Datos) {
|
|
1953
|
+
const Partes = Datos.Etiquetas.split('--');
|
|
1954
|
+
const Etiquetas = Partes.slice(0, -1).join("--");
|
|
1955
|
+
const partes = Datos.Etiquetas.split('--');
|
|
1956
|
+
const ultimaParte = partes[partes.length - 1].split('=')[1];
|
|
1957
|
+
let Resultado = undefined;
|
|
1958
|
+
try {
|
|
1959
|
+
Resultado = await this.obtenerDatosDelUsuario(Datos.Token);
|
|
1960
|
+
if (!Resultado) {
|
|
1961
|
+
throw new ManejadorDeErrores(ManejadorDeErrores.mensajeDeErrorVerificacionDeToken(), ManejadorDeErrores.obtenerNumeroDeLinea());
|
|
1962
|
+
}
|
|
1963
|
+
} catch (error) {
|
|
1964
|
+
console.log(error);
|
|
1965
|
+
return;
|
|
1966
|
+
}
|
|
1967
|
+
return await ejecutarConsulta("SELECT `ArchivoId`, `Identificador`, `Ruta`, CONCAT(`Nombre`, ' (', DATE_FORMAT(`LastUpdate`, '%Y-%M-%d %H:%i'), ')') AS `Nombre`, `Etiquetas`\
|
|
1968
|
+
FROM `" + this.NombreDelRepositorioDeLaBaseDeDatos.slice(0, -3) + "`.`Archivos`\
|
|
1969
|
+
WHERE `Identificador` = ?"
|
|
1970
|
+
, [Etiquetas]);
|
|
1971
|
+
}
|
|
1972
|
+
|
|
1965
1973
|
async borrarArchivo(Datos) {
|
|
1966
1974
|
let Resultado = undefined;
|
|
1967
1975
|
try {
|
package/templates/frontend/src/app/Componentes/Nucleo/subir-archivo/subir-archivo.component.html
CHANGED
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
<div class="pie">
|
|
39
|
-
<button mat-button [disabled]="!EsEditable" (click)="SubirArchivo()">Guardar</button>
|
|
40
39
|
<button mat-button (click)="Cancelar()">Cerrar</button>
|
|
40
|
+
<button mat-button [disabled]="!EsEditable" (click)="SubirArchivo()">Guardar</button>
|
|
41
41
|
</div>
|
|
42
42
|
</div>
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
background-color: #0069B4 !important;
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
.Activa, .Activo, .Finalizado, .Aprobada, .Aprobado, .Ejecutando, .Autorizado, .Aperturado, .Ejecutada {
|
|
40
|
+
.Activa, .Activo, .Finalizado, .Aprobada, .Aprobado, .Ejecutando, .Autorizado, .Aperturado, .Ejecutada, .Confirmada {
|
|
41
41
|
background-color: #518a5f;
|
|
42
42
|
color: white;
|
|
43
43
|
padding: 8px 16px;
|
package/templates/frontend/src/app/Componentes/Nucleo/tarjeta-modulo/tarjeta-modulo.component.html
CHANGED
|
@@ -3,7 +3,11 @@
|
|
|
3
3
|
push_pin
|
|
4
4
|
</span>
|
|
5
5
|
<div class="modulo-header">
|
|
6
|
+
@if(modulo.Icono) {
|
|
6
7
|
<img src="{{ modulo.Icono }}" class="modulo-icon" />
|
|
8
|
+
} @else {
|
|
9
|
+
<div class="modulo-icon"></div>
|
|
10
|
+
}
|
|
7
11
|
<div>
|
|
8
12
|
<!-- <h2 class="modulo-nombre">{{ modulo.Nombre }}</h2> -->
|
|
9
13
|
<span class="modulo-tipo tipo-{{ modulo.Tipo.toLowerCase() }}">{{ modulo.Tipo }}</span>
|
|
@@ -123,7 +123,10 @@ export class ContenedorComponentesComponent {
|
|
|
123
123
|
}
|
|
124
124
|
|
|
125
125
|
irAtras(): void {
|
|
126
|
-
this.location.
|
|
126
|
+
const rutaActual = this.location.path();
|
|
127
|
+
if (rutaActual !== '' && !rutaActual.includes('accesov2')) {
|
|
128
|
+
this.location.back();
|
|
129
|
+
}
|
|
127
130
|
}
|
|
128
131
|
|
|
129
132
|
irAlMenuDeModulo(): void {
|
|
@@ -38,7 +38,7 @@ export class DatosGlobalesService {
|
|
|
38
38
|
// } else {
|
|
39
39
|
// this.claseDelContenedor = 'contenedor';
|
|
40
40
|
// }
|
|
41
|
-
// portalv2-frontend-pruebas
|
|
41
|
+
// portalv2-frontend-pruebas
|
|
42
42
|
// const protocolo = new URL(window.location.href).protocol
|
|
43
43
|
window.location.href = 'https://accesov2-frontend.sigu.utn.ac.cr/';
|
|
44
44
|
}
|
|
@@ -53,7 +53,7 @@ export class DatosGlobalesService {
|
|
|
53
53
|
// } else {
|
|
54
54
|
// this.claseDelContenedor = 'contenedor';
|
|
55
55
|
// }
|
|
56
|
-
// portalv2-frontend-pruebas
|
|
56
|
+
// portalv2-frontend-pruebas
|
|
57
57
|
// const protocolo = new URL(window.location.href).protocol
|
|
58
58
|
window.location.href = 'https://portalv2-frontend.sigu.utn.ac.cr/';
|
|
59
59
|
}
|