utn-cli 1.0.0

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.
Files changed (140) hide show
  1. package/commands/backend.js +282 -0
  2. package/commands/db.js +49 -0
  3. package/commands/frontend.js +225 -0
  4. package/index.js +98 -0
  5. package/package.json +27 -0
  6. package/templates/backend/InformacionDelModulo.json +21 -0
  7. package/templates/backend/NOMBRE_DEL_CANONICO_DEL_PROYECTO.rest +74 -0
  8. package/templates/backend/README.md +0 -0
  9. package/templates/backend/gitignore +3 -0
  10. package/templates/backend/index.rest +288 -0
  11. package/templates/backend/package.json +30 -0
  12. package/templates/backend/reporte.pdf +0 -0
  13. package/templates/backend/rutas/API.js +49 -0
  14. package/templates/backend/rutas/Servicio1.js +184 -0
  15. package/templates/backend/rutas/misc.js +671 -0
  16. package/templates/backend/rutas/rutas.js +11 -0
  17. package/templates/backend/server.js +79 -0
  18. package/templates/backend/servicios/API.js +101 -0
  19. package/templates/backend/servicios/InformacionDelModulo.js +70 -0
  20. package/templates/backend/servicios/Nucleo/EnvioDeCorreos.js +45 -0
  21. package/templates/backend/servicios/Nucleo/ManejadorDeErrores.js +54 -0
  22. package/templates/backend/servicios/Nucleo/Miscelaneas.js +1901 -0
  23. package/templates/backend/servicios/Nucleo/Monitoreo.js +65 -0
  24. package/templates/backend/servicios/Nucleo/db.js +78 -0
  25. package/templates/backend/servicios/Servicio1.js +118 -0
  26. package/templates/backend/variables-calidad.env +6 -0
  27. package/templates/backend/variables-desarrollo.env +6 -0
  28. package/templates/backend/variables-pruebas.env +6 -0
  29. package/templates/bd/README.md +78 -0
  30. package/templates/bd/cumulodb-scripts/gitignore +1 -0
  31. package/templates/bd/docker-compose.yml +28 -0
  32. package/templates/bd/docker-scripts/1-crear estructura.sql +29 -0
  33. package/templates/bd/docker-scripts/2-cambios estructura original.sql +1 -0
  34. package/templates/bd/docker-scripts/3-insertar datos de prueba.sql +1 -0
  35. package/templates/bd/docker-scripts/4-crear eventos y rutinas.sql +1 -0
  36. package/templates/bd/docker-scripts/5-crear vistas.sql +1 -0
  37. package/templates/bd/docker-scripts/6-calidad.sql +1 -0
  38. package/templates/bd/docker-scripts/7-pruebas.sql +1 -0
  39. package/templates/bd/docker-scripts/8-local.sql +1 -0
  40. package/templates/bd/servidores-scripts/calidad.sql +1 -0
  41. package/templates/bd/servidores-scripts/datos_iniciales_produccion.sql +1 -0
  42. package/templates/bd/servidores-scripts/produccion.sql +1 -0
  43. package/templates/bd/servidores-scripts/pruebas.sql +1 -0
  44. package/templates/frontend/.vscode/extensions.json +4 -0
  45. package/templates/frontend/.vscode/launch.json +20 -0
  46. package/templates/frontend/.vscode/tasks.json +42 -0
  47. package/templates/frontend/Dockerfile +5 -0
  48. package/templates/frontend/README.md +59 -0
  49. package/templates/frontend/angular.json +101 -0
  50. package/templates/frontend/dist/frontend/3rdpartylicenses.txt +459 -0
  51. package/templates/frontend/dist/frontend/prerendered-routes.json +3 -0
  52. package/templates/frontend/docker-compose.yml +5 -0
  53. package/templates/frontend/editorconfig +17 -0
  54. package/templates/frontend/gitignore +45 -0
  55. package/templates/frontend/nginx.conf +12 -0
  56. package/templates/frontend/package.json +46 -0
  57. package/templates/frontend/public/favicon.ico +0 -0
  58. package/templates/frontend/src/app/Componentes/Nucleo/graficos/graficos.component.css +15 -0
  59. package/templates/frontend/src/app/Componentes/Nucleo/graficos/graficos.component.html +25 -0
  60. package/templates/frontend/src/app/Componentes/Nucleo/graficos/graficos.component.ts +80 -0
  61. package/templates/frontend/src/app/Componentes/Nucleo/iframe/iframe.ts +37 -0
  62. package/templates/frontend/src/app/Componentes/Nucleo/mensaje-confirmacion/mensaje-confirmacion.component.css +5 -0
  63. package/templates/frontend/src/app/Componentes/Nucleo/mensaje-confirmacion/mensaje-confirmacion.component.html +22 -0
  64. package/templates/frontend/src/app/Componentes/Nucleo/mensaje-confirmacion/mensaje-confirmacion.ts +64 -0
  65. package/templates/frontend/src/app/Componentes/Nucleo/mensaje-confirmacion-html/mensaje-confirmacion-html.component.css +5 -0
  66. package/templates/frontend/src/app/Componentes/Nucleo/mensaje-confirmacion-html/mensaje-confirmacion-html.component.html +22 -0
  67. package/templates/frontend/src/app/Componentes/Nucleo/mensaje-confirmacion-html/mensaje-confirmacion-html.ts +64 -0
  68. package/templates/frontend/src/app/Componentes/Nucleo/mensaje-informacion/mensaje-informacion.component.css +5 -0
  69. package/templates/frontend/src/app/Componentes/Nucleo/mensaje-informacion/mensaje-informacion.component.html +11 -0
  70. package/templates/frontend/src/app/Componentes/Nucleo/mensaje-informacion/mensaje-informacion.ts +46 -0
  71. package/templates/frontend/src/app/Componentes/Nucleo/mensajes/mensajes.component.css +11 -0
  72. package/templates/frontend/src/app/Componentes/Nucleo/mensajes/mensajes.component.html +17 -0
  73. package/templates/frontend/src/app/Componentes/Nucleo/mensajes/mensajes.component.ts +43 -0
  74. package/templates/frontend/src/app/Componentes/Nucleo/reporte-de-incidencias/reporte-de-incidencias.component.css +37 -0
  75. package/templates/frontend/src/app/Componentes/Nucleo/reporte-de-incidencias/reporte-de-incidencias.component.html +35 -0
  76. package/templates/frontend/src/app/Componentes/Nucleo/reporte-de-incidencias/reporte-de-incidencias.component.ts +103 -0
  77. package/templates/frontend/src/app/Componentes/Nucleo/subir-archivo/subir-archivo.component.css +90 -0
  78. package/templates/frontend/src/app/Componentes/Nucleo/subir-archivo/subir-archivo.component.html +39 -0
  79. package/templates/frontend/src/app/Componentes/Nucleo/subir-archivo/subir-archivo.component.ts +132 -0
  80. package/templates/frontend/src/app/Componentes/Nucleo/tabla/paginador-personalizado.ts +17 -0
  81. package/templates/frontend/src/app/Componentes/Nucleo/tabla/tabla.component.css +332 -0
  82. package/templates/frontend/src/app/Componentes/Nucleo/tabla/tabla.component.html +166 -0
  83. package/templates/frontend/src/app/Componentes/Nucleo/tabla/tabla.component.ts +228 -0
  84. package/templates/frontend/src/app/Componentes/Nucleo/tarjeta/tarjeta.component.css +129 -0
  85. package/templates/frontend/src/app/Componentes/Nucleo/tarjeta/tarjeta.component.html +35 -0
  86. package/templates/frontend/src/app/Componentes/Nucleo/tarjeta/tarjeta.component.ts +46 -0
  87. package/templates/frontend/src/app/Componentes/Nucleo/tarjeta-modulo/tarjeta-modulo.component.css +92 -0
  88. package/templates/frontend/src/app/Componentes/Nucleo/tarjeta-modulo/tarjeta-modulo.component.html +17 -0
  89. package/templates/frontend/src/app/Componentes/Nucleo/tarjeta-modulo/tarjeta-modulo.component.ts +42 -0
  90. package/templates/frontend/src/app/Componentes/Nucleo/tarjeta-multiple/tarjeta-multiple.component.css +90 -0
  91. package/templates/frontend/src/app/Componentes/Nucleo/tarjeta-multiple/tarjeta-multiple.component.html +22 -0
  92. package/templates/frontend/src/app/Componentes/Nucleo/tarjeta-multiple/tarjeta-multiple.component.ts +46 -0
  93. package/templates/frontend/src/app/Componentes/Nucleo/tarjeta-reporte/tarjeta-reporte.component.css +129 -0
  94. package/templates/frontend/src/app/Componentes/Nucleo/tarjeta-reporte/tarjeta-reporte.component.html +20 -0
  95. package/templates/frontend/src/app/Componentes/Nucleo/tarjeta-reporte/tarjeta-reporte.component.ts +25 -0
  96. package/templates/frontend/src/app/Componentes/guardar-incapacidad/guardar-incapacidad.component.css +20 -0
  97. package/templates/frontend/src/app/Componentes/guardar-incapacidad/guardar-incapacidad.component.html +46 -0
  98. package/templates/frontend/src/app/Componentes/guardar-incapacidad/guardar-incapacidad.component.ts +64 -0
  99. package/templates/frontend/src/app/Paginas/Nucleo/contenedor-componentes/contenedor-componentes.component.css +142 -0
  100. package/templates/frontend/src/app/Paginas/Nucleo/contenedor-componentes/contenedor-componentes.component.html +90 -0
  101. package/templates/frontend/src/app/Paginas/Nucleo/contenedor-componentes/contenedor-componentes.component.ts +139 -0
  102. package/templates/frontend/src/app/Paginas/contenedor-principal/contenedor-principal.component.css +4 -0
  103. package/templates/frontend/src/app/Paginas/contenedor-principal/contenedor-principal.component.html +17 -0
  104. package/templates/frontend/src/app/Paginas/contenedor-principal/contenedor-principal.component.ts +36 -0
  105. package/templates/frontend/src/app/Paginas/gestion-de-reportes/gestion-de-reportes.component.css +4 -0
  106. package/templates/frontend/src/app/Paginas/gestion-de-reportes/gestion-de-reportes.component.html +6 -0
  107. package/templates/frontend/src/app/Paginas/gestion-de-reportes/gestion-de-reportes.component.ts +36 -0
  108. package/templates/frontend/src/app/Paginas/gestion-graficos/gestion-graficos.component.css +13 -0
  109. package/templates/frontend/src/app/Paginas/gestion-graficos/gestion-graficos.component.html +13 -0
  110. package/templates/frontend/src/app/Paginas/gestion-graficos/gestion-graficos.component.ts +75 -0
  111. package/templates/frontend/src/app/Paginas/gestion-iframe1/gestion-iframe1.component.css +13 -0
  112. package/templates/frontend/src/app/Paginas/gestion-iframe1/gestion-iframe1.component.html +3 -0
  113. package/templates/frontend/src/app/Paginas/gestion-iframe1/gestion-iframe1.component.ts +14 -0
  114. package/templates/frontend/src/app/Paginas/gestion-tabla/gestion-tabla.component.css +13 -0
  115. package/templates/frontend/src/app/Paginas/gestion-tabla/gestion-tabla.component.html +24 -0
  116. package/templates/frontend/src/app/Paginas/gestion-tabla/gestion-tabla.component.ts +300 -0
  117. package/templates/frontend/src/app/Paginas/gestion-tabla-XYZ/gestion-tabla-XYZ.component.css +13 -0
  118. package/templates/frontend/src/app/Paginas/gestion-tabla-XYZ/gestion-tabla-XYZ.component.html +43 -0
  119. package/templates/frontend/src/app/Paginas/gestion-tabla-XYZ/gestion-tabla-XYZ.component.ts +305 -0
  120. package/templates/frontend/src/app/Paginas/gestion-tabla-jefe/gestion-tabla-jefe.component.css +13 -0
  121. package/templates/frontend/src/app/Paginas/gestion-tabla-jefe/gestion-tabla-jefe.component.html +25 -0
  122. package/templates/frontend/src/app/Paginas/gestion-tabla-jefe/gestion-tabla-jefe.component.ts +245 -0
  123. package/templates/frontend/src/app/analytics.module.ts +45 -0
  124. package/templates/frontend/src/app/app.component.css +0 -0
  125. package/templates/frontend/src/app/app.component.html +1 -0
  126. package/templates/frontend/src/app/app.component.ts +10 -0
  127. package/templates/frontend/src/app/app.config.server.ts +14 -0
  128. package/templates/frontend/src/app/app.config.ts +27 -0
  129. package/templates/frontend/src/app/app.routes.ts +16 -0
  130. package/templates/frontend/src/app/auth.interceptor.ts +26 -0
  131. package/templates/frontend/src/app/datos-globales.service.ts +45 -0
  132. package/templates/frontend/src/assets/Puntos.svg +94 -0
  133. package/templates/frontend/src/index.html +36 -0
  134. package/templates/frontend/src/main.server.ts +7 -0
  135. package/templates/frontend/src/main.ts +6 -0
  136. package/templates/frontend/src/styles.css +14 -0
  137. package/templates/frontend/tsconfig.app.json +15 -0
  138. package/templates/frontend/tsconfig.json +27 -0
  139. package/templates/frontend/tsconfig.spec.json +15 -0
  140. package/utils/index.js +105 -0
@@ -0,0 +1,79 @@
1
+ Error.stackTraceLimit = Infinity;
2
+ const express = require('express');
3
+ const helmet = require('helmet');
4
+ const cors = require('cors');
5
+ const Miscelaneo = require('./servicios/Nucleo/Miscelaneas.js');
6
+
7
+ const asignarRutasAExpress = require('./rutas/rutas.js');
8
+
9
+ const app = express();
10
+ app.use(express.json());
11
+ app.use(helmet());
12
+ app.use(async (solicitud, respuesta, next) => {
13
+ const safeReqData = {
14
+ timestamp: new Date().toISOString(),
15
+ httpVersion: solicitud.httpVersion,
16
+ method: solicitud.method,
17
+ protocol: solicitud.protocol,
18
+ secure: solicitud.secure,
19
+ ip: solicitud.ip,
20
+ ips: solicitud.ips,
21
+ hostname: solicitud.hostname,
22
+ originalUrl: solicitud.originalUrl,
23
+ baseUrl: solicitud.baseUrl,
24
+ path: solicitud.path,
25
+ url: solicitud.url,
26
+ headers: solicitud.headers,
27
+ query: solicitud.query,
28
+ params: solicitud.params,
29
+ body: solicitud.body,
30
+ cookies: solicitud.cookies,
31
+ signedCookies: solicitud.signedCookies,
32
+ userAgent: solicitud.get('User-Agent'),
33
+ authUser: solicitud.user ?? null,
34
+ };
35
+ try {
36
+ const { ejecutarConsultaSIGU } = require('./servicios/Nucleo/db.js');
37
+ const sql = 'INSERT IGNORE `SIGU`.`SIGU_BitacoraDeSolicitudes` (`Solicitud`) VALUES (?)';
38
+ await ejecutarConsultaSIGU(sql, [JSON.stringify(safeReqData)]);
39
+ } catch (error) {
40
+ console.error('Error al guardar el log de la solicitud:', error);
41
+ }
42
+ next();
43
+ });
44
+ app.use((solicitud, respuesta, next) => {
45
+ const origin = solicitud.get("Origin");
46
+ if (!origin) {
47
+ return respuesta.status(403).json({ error: "Acceso denegado: Origin no proporcionado" });
48
+ }
49
+ next();
50
+ });
51
+ app.use(cors({
52
+ credentials: true,
53
+ origin: [/localhost(:\d+)?$/, /\.181\.193\.85\.44\.nip\.io$/, /\.sigu\.utn\.ac\.cr.*$/]
54
+ }));
55
+
56
+ // Esta función se debe llamar cada vez que inicia el backend
57
+ // Ya que no sólo registra el módulo en el SIGU, sino que determina el rol y permisos a utilizar
58
+ Miscelaneo.registroDelModuloEnSIGU();
59
+
60
+ asignarRutasAExpress(app);
61
+
62
+ app.use((error, solicitud, respuesta, next) => {
63
+ const { envioDeCorreo } = require('./servicios/Nucleo/EnvioDeCorreos.js');
64
+ envioDeCorreo(process.env.DESTINATARIODEINFORMESDEERROR, 'Informe de error desde: ' + process.env.NOMBRECANONICODELMODULO, error.stack);
65
+ console.error(error.stack);
66
+ respuesta.status(500).send('Error interno del servidor, el detalle del mismo fue enviado a ' + process.env.DESTINATARIODEINFORMESDEERROR);
67
+ });
68
+ // process.on('uncaughtException', (err) => {
69
+ // console.error('Excepción no capturada:', err);
70
+ // });
71
+
72
+ // process.on('unhandledRejection', (reason, promise) => {
73
+ // console.error('Promesa no manejada:', reason);
74
+ // });
75
+
76
+ const servidor = app.listen(process.env.PORT || 80, () => {
77
+ process.env.HOST = servidor.address().address;
78
+ console.log('NOMBRE_DEL_REPOSITORIO_DE_BACKEND');
79
+ });
@@ -0,0 +1,101 @@
1
+ const Miscelaneo = require('./../servicios/Nucleo/Miscelaneas.js');
2
+
3
+ class API {
4
+
5
+ constructor() {
6
+
7
+ };
8
+
9
+ // async cursosPorPersonaAnioYPeriodo(Cuerpo) {
10
+ // let URL = undefined;
11
+ // switch (process.env.ENV) {
12
+ // case 'desarrollo':
13
+ // URL = 'http://dru-matri-s-backend-desarrollo.181.193.85.44.nip.io';
14
+ // break;
15
+ // case 'calidad':
16
+ // URL = 'http://dru-matri-s-backend-calidad.181.193.85.44.nip.io';
17
+ // break;
18
+ // case 'pruebas':
19
+ // URL = 'http://dru-matri-s-backend-pruebas.181.193.85.44.nip.io';
20
+ // break;
21
+ // case 'production':
22
+ // URL = 'https://dru-matri-s-backend.sigu.utn.ac.cr';
23
+ // break;
24
+ // default:
25
+ // URL = 'http://localhost:82';
26
+ // }
27
+ // URL += '/api/cursosPorPersonaAnioYPeriodo';
28
+ // return await Miscelaneo.consumirBackend(URL, Cuerpo);
29
+ // };
30
+
31
+ // async obtenerOfertaAcademica(PeriodoId) {
32
+ // let URL = undefined;
33
+ // switch (process.env.ENV) {
34
+ // case 'desarrollo':
35
+ // URL = 'http://vdoc-trabajoacademico-p-backend-desarrollo.181.193.85.44.nip.io';
36
+ // break;
37
+ // case 'calidad':
38
+ // URL = 'http://vdoc-trabajoacademico-p-backend-calidad.181.193.85.44.nip.io';
39
+ // break;
40
+ // case 'pruebas':
41
+ // URL = 'http://vdoc-trabajoacademico-p-backend-pruebas.181.193.85.44.nip.io';
42
+ // break;
43
+ // case 'production':
44
+ // URL = 'https://vdoc-trabajoacademico-p-backend.sigu.utn.ac.cr';
45
+ // break;
46
+ // default:
47
+ // URL = 'http://localhost:3120';
48
+ // }
49
+ // URL += '/api/obtenerOfertaAcademica/' + PeriodoId;
50
+
51
+ // let OfertaAcademica = await Miscelaneo.consumirBackend(URL);
52
+ // let Materias = await this.obtenerMaterias();
53
+ // return OfertaAcademica.map((item, i) => Object.assign({}, item, Materias[i]));
54
+ // };
55
+
56
+ // async obtenerMaterias() {
57
+ // let URL = undefined;
58
+ // switch (process.env.ENV) {
59
+ // case 'desarrollo':
60
+ // URL = 'http://dgdh-djur-s-backend-desarrollo.181.193.85.44.nip.io';
61
+ // break;
62
+ // case 'calidad':
63
+ // URL = 'http://dgdh-djur-s-backend-calidad.181.193.85.44.nip.io';
64
+ // break;
65
+ // case 'pruebas':
66
+ // URL = 'http://dgdh-djur-s-backend-pruebas.181.193.85.44.nip.io';
67
+ // break;
68
+ // case 'production':
69
+ // URL = 'https://dgdh-djur-s-backend.sigu.utn.ac.cr';
70
+ // break;
71
+ // default:
72
+ // URL = 'http://localhost:3119';
73
+ // }
74
+ // URL += '/api/obtenerMaterias';
75
+ // return await Miscelaneo.consumirBackend(URL);
76
+ // };
77
+
78
+ // async obtenerCarreras() {
79
+ // let URL = undefined;
80
+ // switch (process.env.ENV) {
81
+ // case 'desarrollo':
82
+ // URL = 'http://dgdh-djur-s-backend-desarrollo.181.193.85.44.nip.io';
83
+ // break;
84
+ // case 'calidad':
85
+ // URL = 'http://dgdh-djur-s-backend-calidad.181.193.85.44.nip.io';
86
+ // break;
87
+ // case 'pruebas':
88
+ // URL = 'http://dgdh-djur-s-backend-pruebas.181.193.85.44.nip.io';
89
+ // break;
90
+ // case 'production':
91
+ // URL = 'https://dgdh-djur-s-backend.sigu.utn.ac.cr';
92
+ // break;
93
+ // default:
94
+ // URL = 'http://localhost:3119';
95
+ // }
96
+ // URL += '/api/obtenerCarreras';
97
+ // return await Miscelaneo.consumirBackend(URL);
98
+ // };
99
+ }
100
+
101
+ module.exports = new API();
@@ -0,0 +1,70 @@
1
+ class InformacionDelModulo {
2
+
3
+ constructor() {
4
+ };
5
+
6
+ getNombreDelModulo() {
7
+ return 'NOMBRE_DEL_PROYECTO';
8
+ };
9
+ getDescripcionDelModulo() {
10
+ return 'DESCRIPCION_DEL_PROYECTO';
11
+ };
12
+ getDetalleDelModulo() {
13
+ return 'DETALLE_DEL_PROYECTO';
14
+ };
15
+ getNombreCanonicoDelModulo() {
16
+ return 'NOMBRE_DEL_CANONICO_DEL_PROYECTO';
17
+ };
18
+ getTipoDeCard() {
19
+ return 'TIPO_DE_TARJETA';
20
+ };
21
+ getNombreDelRol() {
22
+ return 'NOMBRE_DEL_ROL';
23
+ };
24
+ getNombreDelRepositorioDeLaBaseDeDatos() {
25
+ return 'NOMBRE_DEL_REPOSITORIO_DE_BASE_DE_DATOS';
26
+ };
27
+ getNombreDelRepositorioDelBackend() {
28
+ return 'NOMBRE_DEL_REPOSITORIO_DE_BACKEND';
29
+ };
30
+ getNombreDelRepositorioDelFrontend() {
31
+ return 'NOMBRE_DEL_REPOSITORIO_DE_FRONTEND';
32
+ };
33
+ getNombreDelPermiso() {
34
+ return 'NOMBRE_DEL_PERMISO';
35
+ };
36
+ getDescripcionDelPermiso() {
37
+ return 'DESCRIPCION_DEL_PERMISO';
38
+ };
39
+ getMenuPadre() {
40
+ // MenuPadre hace referencia al NombreCanonicoDelModulo del menú padre
41
+ // Éste debe existir de lo contrario el registro fallará
42
+ return 'MENU_PADRE';
43
+ };
44
+ getBackEndsQueConsumeEsteModulo() {
45
+ // BackEndsQueConsumeEsteModulo es un arreglo de strings de la forma ['dgf-presup-modifica-p-back', 'dpu-pide-p-back']
46
+ // Se debe poner el nombre del repositorio de backend que se necesita consumir
47
+ // Los repositorios ya deben estar registrados en SIGU o de lo contrario el proceso fallará
48
+ return [BACKENDS_QUE_CONSUME_ESTE_MODULO];
49
+ };
50
+ getPerfilGeneral() {
51
+ // Si no sabe qué poner, puede dejar Servidor
52
+ return 'Servidor';
53
+ };
54
+ getUsuariosConAccesoInicial() {
55
+ // UsuariosConAccesoInicial es un arreglo de strings de la forma ['111050570', '111050570']
56
+ // Este arreglo se usa para asignar acceso a este móudlo, suelen usarse la cédulas de los encargados del proyecto y el desarrollador
57
+ return ['111050570', '204540859', '602990078', '109840817', '206860639', '155821845336', 'CEDULA_DEL_DESARROLLADOR'];
58
+ };
59
+ getColorDelModulo() {
60
+ return 'COLOR_DEL_MODULO';
61
+ };
62
+ getCorreoParaReportes() {
63
+ return 'CORRECO_PARA_REPORTES';
64
+ };
65
+ getVersion() {
66
+ return 'VERSION';
67
+ };
68
+ }
69
+
70
+ module.exports = new InformacionDelModulo();
@@ -0,0 +1,45 @@
1
+ const nodemailer = require('nodemailer');
2
+
3
+ function envioDeCorreo(Destinatario, Asunto, MensajeEnHTML, rutasDelosAdjuntos = undefined) {
4
+
5
+ const Transportador = nodemailer.createTransport({
6
+ host: process.env.SERVIDORSMTP,
7
+ port: process.env.PUERTOSMTP,
8
+ secure: false,
9
+ auth: {
10
+ user: process.env.USUARIOSMTP,
11
+ pass: process.env.CLAVESMTP
12
+ },
13
+ tls: {
14
+ rejectUnauthorized: false,
15
+ }
16
+ });
17
+ const Correo = {
18
+ from: process.env.USUARIOSMTP,
19
+ to: Destinatario,
20
+ subject: Asunto,
21
+ html: MensajeEnHTML
22
+ };
23
+ Transportador.verify(function (error, success) {
24
+ if (error) {
25
+ console.error(`Error en el servicio de correo: ${error}`);
26
+ }
27
+ });
28
+ if (rutasDelosAdjuntos) {
29
+ const Adjuntos = [];
30
+ rutasDelosAdjuntos.forEach((archivo) => {
31
+ const Adjunto = {
32
+ "path": archivo
33
+ };
34
+ Adjuntos.push(Adjunto);
35
+ });
36
+ Correo.attachments = Adjuntos;
37
+ }
38
+ Transportador.sendMail(Correo, function(error, info){
39
+ if (error){
40
+ console.error(`No fue posible enviar el correo debido al error: ${error}`);
41
+ }
42
+ });
43
+ }
44
+
45
+ module.exports = { envioDeCorreo };
@@ -0,0 +1,54 @@
1
+ const { envioDeCorreo } = require('./EnvioDeCorreos.js');
2
+
3
+ class ManejadorDeErrores extends Error {
4
+
5
+ constructor(descripcionDelError, numeroDeLinea, informarError = true, informacionExtra = undefined) {
6
+ super(descripcionDelError);
7
+ Object.setPrototypeOf(this, new.target.prototype);
8
+ Error.captureStackTrace(this, this.constructor);
9
+ console.error(descripcionDelError + numeroDeLinea);
10
+ if (informarError && process.env.ENV === 'production') {
11
+ envioDeCorreo(process.env.DESTINATARIODEINFORMESDEERROR, 'Informe de error desde: ' + process.env.NOMBRECANONICODELMODULO
12
+ , descripcionDelError + ' ' + numeroDeLinea + '<BR /><BR />' + informacionExtra);
13
+ }
14
+ };
15
+
16
+ static obtenerNumeroDeLinea() {
17
+ const error = new Error();
18
+ return error.stack.split("\n")[2];
19
+ }
20
+
21
+ static mensajeDeError401() {
22
+ return "No está autorizado para consultar los datos";
23
+ }
24
+
25
+ static mensajeDeErrorAccesoAAPI(InformacionExtra = undefined) {
26
+ if (InformacionExtra) {
27
+ return `No fue posible obtener los datos del backend destino. ${InformacionExtra}`;
28
+ } else {
29
+ return "No fue posible obtener los datos del backend destino";
30
+ }
31
+ }
32
+
33
+ static mensajeDeErrorEncabezadoDeAutorizacion() {
34
+ return "No fue posible determinar el identificacdor o token en el encabezado de autorización";
35
+ }
36
+
37
+ static mensajeDeErrorVerificacionDeToken() {
38
+ return "No fue posible verificar el token";
39
+ }
40
+
41
+ static mensajeDeErrorTokenInvalido() {
42
+ return "Token inválido";
43
+ }
44
+
45
+ static mensajeDeErrorPermisosInsuficientes() {
46
+ return "No tiene permisos para acceder al recurso solicitado";
47
+ }
48
+
49
+ static mensajeDeErrorRepositorioOrigen() {
50
+ return "No fue posible determinar el nombre del repositorio origen o su identificador";
51
+ }
52
+ }
53
+
54
+ module.exports = ManejadorDeErrores;