@ejfdelgado/ejflab-common 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 (88) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +2 -0
  3. package/package.json +29 -0
  4. package/src/CollisionsEngine.js +252 -0
  5. package/src/CsvFormatter.js +54 -0
  6. package/src/CsvFormatter.test.js +119 -0
  7. package/src/CsvFormatterFilters.js +79 -0
  8. package/src/CsvParser.js +51 -0
  9. package/src/CsvParser.test.js +41 -0
  10. package/src/CsvWithFilters.js +114 -0
  11. package/src/FaceEncoder.js +64 -0
  12. package/src/FlowChartDiagram.js +503 -0
  13. package/src/IdGen.js +211 -0
  14. package/src/ModuloDatoSeguro.js +142 -0
  15. package/src/ModuloDatoSeguro.test.js +29 -0
  16. package/src/ModuloDatoSeguro.test.mjs +45 -0
  17. package/src/ModuloDatoSeguroBack.mjs +55 -0
  18. package/src/ModuloDatoSeguroFront.js +73 -0
  19. package/src/ModuloSonido.js +83 -0
  20. package/src/ModuloVideos.js +51 -0
  21. package/src/MyColor.js +136 -0
  22. package/src/MyColor.test.js +37 -0
  23. package/src/MyConstants.js +147 -0
  24. package/src/MyCookies.js +34 -0
  25. package/src/MyDates.js +412 -0
  26. package/src/MyDates.test.js +26 -0
  27. package/src/MyDatesBack.mjs +21 -0
  28. package/src/MyDatesFront.js +41 -0
  29. package/src/MyJsPdf.js +52 -0
  30. package/src/MyRoutes.js +29 -0
  31. package/src/MyTemplate.js +272 -0
  32. package/src/MyTemplate.test.js +90 -0
  33. package/src/MyTensorflow.js +248 -0
  34. package/src/MyTensorflow.test.js +19 -0
  35. package/src/MyTensorflowBack.mjs +33 -0
  36. package/src/MyThrottle.js +80 -0
  37. package/src/MyTuples.js +445 -0
  38. package/src/MyTuples.test.js +330 -0
  39. package/src/MyUtilities.js +137 -0
  40. package/src/SimpleObj.js +153 -0
  41. package/src/SimpleObj.test.js +58 -0
  42. package/src/TriangulacionGeometric.js +335 -0
  43. package/src/changePath.js +38 -0
  44. package/src/data/case0.csv +3 -0
  45. package/src/data/case0.json +24 -0
  46. package/src/data/case1.csv +2 -0
  47. package/src/data/case1.json +24 -0
  48. package/src/data/case2.csv +3 -0
  49. package/src/data/case2.json +24 -0
  50. package/src/data/case3.csv +3 -0
  51. package/src/data/case3.json +24 -0
  52. package/src/data/format0.json +0 -0
  53. package/src/data/format0.txt +1 -0
  54. package/src/data/tensordata.csv +10 -0
  55. package/src/data/tensordata.json +37 -0
  56. package/src/data/tensordata.test.csv +10 -0
  57. package/src/data/tensormodel.json +113 -0
  58. package/src/fft.js +224 -0
  59. package/src/flowchart/FlowChartExec.js +763 -0
  60. package/src/flowchart/steps/CommandBasic.js +32 -0
  61. package/src/flowchart/steps/CommandInc.js +19 -0
  62. package/src/flowchart/steps/CommandMilvus.js +47 -0
  63. package/src/flowchart/steps/CommandMinio.js +28 -0
  64. package/src/flowchart/steps/CommandMongo.js +59 -0
  65. package/src/flowchart/steps/CommandPrint.js +12 -0
  66. package/src/flowchart/steps/CommandSet.js +14 -0
  67. package/src/flowchart/steps/CommandTimeline.js +21 -0
  68. package/src/flowchart/steps/CommandTimelineNext.js +28 -0
  69. package/src/flowchart/steps/StepBasic.js +184 -0
  70. package/src/flowchart/steps/StepCheckProcessor.js +26 -0
  71. package/src/flowchart/steps/StepCheckSrc.js +42 -0
  72. package/src/flowchart/steps/StepIsTrue.js +12 -0
  73. package/src/flowchart/steps/StepOneTime.js +21 -0
  74. package/src/flowchart/steps/StepProcess.js +163 -0
  75. package/src/flowchart/steps/StepReadSrc.js +66 -0
  76. package/src/flowchart/steps/StepSleep.js +22 -0
  77. package/src/flowchart/steps/StepTimeLineEnds.js +21 -0
  78. package/src/flowchart/steps/StepTimeLineHasMore.js +16 -0
  79. package/src/gif/index.d.ts +20 -0
  80. package/src/gif/index.mjs +85 -0
  81. package/src/gif/utils/checkTypes.d.ts +2 -0
  82. package/src/gif/utils/checkTypes.mjs +11 -0
  83. package/src/js-colormaps.js +19484 -0
  84. package/src/sortify.js +75 -0
  85. package/src/sqlmodelparser/SqlModelParser.js +22 -0
  86. package/src/test/csv/test_1000_20230429204538700.csv +1001 -0
  87. package/src/test/csv/test_5_20230429204525930.csv +6 -0
  88. package/src/test/svg/test.html +5 -0
package/src/IdGen.js ADDED
@@ -0,0 +1,211 @@
1
+ const { MyConstants } = require("./MyConstants");
2
+
3
+ class IdGen {
4
+ static RANDOM_SPACE = 3;
5
+ static MAX_LENGTH_ORD_TEXT = 11 + Math.ceil(IdGen.RANDOM_SPACE * 0.63);
6
+ static RANDOM_SPACE_MULT = Math.pow(10, IdGen.RANDOM_SPACE);
7
+ static URL_GET_DATE = "srv/date";
8
+
9
+ //Retorna un diferido con la fecha
10
+ static diferenciaFechaServidor = null;
11
+ static diferidoInvocacion = null;
12
+
13
+ static async ahora() {
14
+ return new Promise((resolve) => {
15
+ const sincronizar = async function () {
16
+ const response = await fetch(`${MyConstants.SRV_ROOT}${IdGen.URL_GET_DATE}`, {
17
+ method: "GET",
18
+ });
19
+ const rta = await response.json();
20
+ var temp = rta.unixtime;
21
+ IdGen.diferenciaFechaServidor = new Date().getTime() - temp;
22
+ resolve(temp);
23
+ return;
24
+ };
25
+
26
+ const usarDiferencia = function () {
27
+ var temp = new Date().getTime();
28
+ resolve(temp - IdGen.diferenciaFechaServidor);
29
+ };
30
+
31
+ if (IdGen.diferenciaFechaServidor == null) {
32
+ if (IdGen.diferidoInvocacion == null) {
33
+ IdGen.diferidoInvocacion = sincronizar();
34
+ } else {
35
+ IdGen.diferidoInvocacion.then(function () {
36
+ //Ya se puede usar la diferencia
37
+ usarDiferencia();
38
+ });
39
+ }
40
+ } else {
41
+ usarDiferencia();
42
+ }
43
+ });
44
+ }
45
+
46
+ static async edad(birthday) {
47
+ // birthday is a date
48
+ const fecha = await ahora();
49
+ var ageDifMs = fecha - birthday.getTime();
50
+ var ageDate = new Date(ageDifMs); // miliseconds from epoch
51
+ var ans = Math.abs(ageDate.getUTCFullYear() - 1970);
52
+ return ans;
53
+ }
54
+
55
+ static darInicioDia(epoch) {
56
+ var start = new Date(epoch);
57
+ start.setHours(0, 0, 0, 0);
58
+ return start.getTime();
59
+ }
60
+
61
+ static darFinDia(epoch) {
62
+ var end = new Date(epoch);
63
+ end.setHours(23, 59, 59, 999);
64
+ return end.getTime();
65
+ }
66
+
67
+ static darInicioMes(epoch) {
68
+ var start = new Date(epoch);
69
+ var firstDay = new Date(start.getFullYear(), start.getMonth(), 1);
70
+ return firstDay.getTime();
71
+ }
72
+
73
+ static darFinMes(epoch) {
74
+ var start = new Date(epoch);
75
+ var lastDay = new Date(start.getFullYear(), start.getMonth() + 1, 0);
76
+ lastDay.setHours(23, 59, 59, 999);
77
+ return lastDay.getTime();
78
+ }
79
+
80
+ //Solo año/mes/día
81
+ static epoch2Text(tiempo) {
82
+ if (typeof tiempo == "number") {
83
+ var fecha = new Date(tiempo);
84
+ return (
85
+ fecha.getFullYear() +
86
+ "/" +
87
+ (fecha.getMonth() + 1) +
88
+ "/" +
89
+ fecha.getDate()
90
+ );
91
+ } else {
92
+ return "";
93
+ }
94
+ }
95
+
96
+ static getDateParts(tiempo) {
97
+ var fecha = new Date(tiempo);
98
+ const remplazos = {
99
+ YYYY: fecha.getFullYear(),
100
+ MM: IdGen.addZero(fecha.getMonth() + 1),
101
+ DD: IdGen.addZero(fecha.getDate()),
102
+ HH: IdGen.addZero(fecha.getHours()),
103
+ mm: IdGen.addZero(fecha.getMinutes()),
104
+ ss: IdGen.addZero(fecha.getSeconds()),
105
+ zz: IdGen.addZero(fecha.getMilliseconds()),
106
+ EPOCH: fecha.getTime(),
107
+ };
108
+ remplazos.yyyy = remplazos.YYYY;
109
+ remplazos.dd = remplazos.DD;
110
+ return remplazos;
111
+ }
112
+
113
+ //Año/mes/día hora:mm:ss
114
+ static epoch2Text2(tiempo) {
115
+ if (typeof tiempo == "number") {
116
+ var partes = IdGen.getDateParts(tiempo);
117
+ return (
118
+ partes.YYYY +
119
+ "/" +
120
+ partes.MM +
121
+ "/" +
122
+ partes.DD +
123
+ " " +
124
+ partes.HH +
125
+ ":" +
126
+ partes.mm +
127
+ ":" +
128
+ partes.ss
129
+ );
130
+ } else {
131
+ return "";
132
+ }
133
+ }
134
+
135
+ static addZero(i) {
136
+ if (i < 10) {
137
+ i = "0" + i;
138
+ }
139
+ return i;
140
+ }
141
+
142
+ static async nuevo(epoch, useDayBounds) {
143
+ if (typeof epoch == "number") {
144
+ if (typeof useDayBounds == "boolean") {
145
+ if (useDayBounds === true) {
146
+ epoch = IdGen.darInicioDia(epoch);
147
+ } else {
148
+ epoch = IdGen.darFinDia(epoch);
149
+ }
150
+ return IdGen.num2ord(epoch, useDayBounds);
151
+ } else {
152
+ return IdGen.num2ord(epoch);
153
+ }
154
+ } else {
155
+ const fecha = await IdGen.ahora();
156
+ return IdGen.num2ord(fecha, useDayBounds);
157
+ }
158
+ }
159
+
160
+ static async nuevoIni(epoch = null) {
161
+ return await nuevo(epoch, true);
162
+ }
163
+
164
+ static async nuevoFin(epoch) {
165
+ return await nuevo(epoch, false);
166
+ }
167
+
168
+ static ord2num(id) {
169
+ var temp = parseInt(id, 36);
170
+ temp = temp / IdGen.RANDOM_SPACE_MULT;
171
+ return temp;
172
+ }
173
+
174
+ static num2ord(num, esInicio) {
175
+ if (typeof num == "number") {
176
+ let nuevo;
177
+ if (typeof esInicio == "boolean") {
178
+ if (esInicio === true) {
179
+ nuevo = num * IdGen.RANDOM_SPACE_MULT;
180
+ } else {
181
+ nuevo = num * IdGen.RANDOM_SPACE_MULT + (IdGen.RANDOM_SPACE_MULT - 1);
182
+ }
183
+ } else {
184
+ nuevo =
185
+ num * IdGen.RANDOM_SPACE_MULT +
186
+ Math.floor(Math.random() * IdGen.RANDOM_SPACE_MULT);
187
+ }
188
+ //console.log(num, nuevo);
189
+ let temp = nuevo.toString(36);
190
+ const diff = IdGen.MAX_LENGTH_ORD_TEXT - temp.length;
191
+ if (diff > 0) {
192
+ temp = new Array(diff).join("0") + temp;
193
+ }
194
+ //Intencionalmente, se cambia el último aleatorio por una 'a'
195
+ return temp.slice(0, -1) + "a";
196
+ }
197
+ return null;
198
+ }
199
+
200
+ static num2ordIni(num) {
201
+ return num2ord(num, true);
202
+ }
203
+
204
+ static num2ordFin(num) {
205
+ return num2ord(num, false);
206
+ }
207
+ }
208
+
209
+ module.exports = {
210
+ IdGen
211
+ };
@@ -0,0 +1,142 @@
1
+
2
+ // ¿Cómo generar las llaves públicas y privadas?
3
+
4
+ //1. Se genera el par:
5
+ //openssl genrsa -out local_par.pem 256
6
+ //2. Se genera la llave pública:
7
+ //openssl rsa -in local_par.pem -pubout -out local_publica.crt
8
+ //3. Se genera la llave privada:
9
+ //openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in local_par.pem -out local_privada.key
10
+
11
+ //openssl genrsa -out local_par.pem 256 && openssl rsa -in local_par.pem -pubout -out local_publica.crt && openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in local_par.pem -out local_privada.key
12
+ //openssl genrsa -out local_par.pem 2048 && openssl rsa -in local_par.pem -pubout -out local_publica.crt && openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in local_par.pem -out local_privada.key
13
+ //openssl req -new -x509 -key local_privada.key -out local_publica.cer
14
+ //openssl x509 -in local_publica.crt -out local_publica.pem -outform PEM
15
+
16
+ //const AES = require("crypto-js/aes");
17
+ //const Utf8 = require("crypto-js/enc-utf8");
18
+
19
+ class ModuloDatoSeguro {
20
+ // create a key for symmetric encryption
21
+ // pass in the desired length of your key
22
+ static generateKey(keyLength = 10) {
23
+ // define the characters to pick from
24
+ const chars =
25
+ "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz*&-%/!?*+=()";
26
+ let randomstring = "";
27
+ for (let i = 0; i < keyLength; i++) {
28
+ const rnum = Math.floor(Math.random() * chars.length);
29
+ randomstring += chars.substring(rnum, rnum + 1);
30
+ }
31
+ return randomstring;
32
+ };
33
+
34
+ static cifrarSimple(objeto, llave, AES) {
35
+ const texto = JSON.stringify(objeto);
36
+ const encriptado = AES.encrypt(texto, llave);
37
+ return encriptado.toString();
38
+ }
39
+ static decifrarSimple(texto, llave, AES, Utf8) {
40
+ const desencriptado = AES.decrypt(texto, llave).toString(Utf8);
41
+ return JSON.parse(desencriptado);
42
+ }
43
+ static decifrarConListaDeLlavesInterno(texto, llaves, AES, Utf8) {
44
+ for (let i = 0; i < llaves.length; i++) {
45
+ try {
46
+ const llave = llaves[i];
47
+ const temp = ModuloDatoSeguro.decifrarSimple(texto, llave, AES, Utf8);
48
+ return temp;
49
+ } catch (err) { }
50
+ }
51
+ return undefined;
52
+ }
53
+ static ofuscarTexto(txt, switchOrder = true, switchLettersWithNumbers = true, useSpace = " ") {
54
+ let salida = "";
55
+ const REMAPPING = {
56
+ "i": "1",
57
+ "I": "1",
58
+ "a": "4",
59
+ "A": "4",
60
+ "e": "3",
61
+ "E": "3",
62
+ "s": "5",
63
+ "S": "5",
64
+ "t": "7",
65
+ "T": "7",
66
+ "o": "0",
67
+ "O": "0",
68
+ };
69
+ const remapLet = (some) => {
70
+ if (!switchLettersWithNumbers) {
71
+ return some;
72
+ }
73
+ const nueva = REMAPPING[some];
74
+ if (!nueva) {
75
+ return some;
76
+ }
77
+ return nueva;
78
+ };
79
+ const remapArray = (some) => {
80
+ let nuevo = "";
81
+ for (let j = 0; j < some.length; j++) {
82
+ nuevo += remapLet(some[j]);
83
+ }
84
+ return nuevo;
85
+ };
86
+ const REGEX = /[a-zA-ZáéíóúüÁÉÍÓÚñÑ]/;
87
+ let pal = [];
88
+ let copy = null;
89
+ const mapFun = (character, i) => {
90
+ let aleatorio = Math.floor(Math.random() * (copy.length - 1));
91
+ if (aleatorio == i && copy.length > 1) {
92
+ aleatorio += 1;
93
+ }
94
+ const actual = copy.splice(aleatorio, 1)[0];
95
+ return actual;
96
+
97
+ };
98
+ const procesarPalabra = () => {
99
+ if (pal.length > 0) {
100
+ if (pal.length <= 3) {
101
+ salida += remapArray(pal.join(''));
102
+ } else {
103
+ const ini = remapLet(pal.splice(0, 1)[0]);
104
+ const fin = remapLet(pal.splice(pal.length - 1, 1)[0]);
105
+ salida += ini;
106
+
107
+ if (switchOrder) {
108
+ copy = [].concat(pal);
109
+ pal = pal.map(mapFun);
110
+ salida += remapArray(pal.join(''));
111
+ } else {
112
+ salida += remapArray(pal.join(''));
113
+ }
114
+ salida += fin;
115
+ }
116
+ pal = [];
117
+ }
118
+ };
119
+ for (let i = 0; i < txt.length; i++) {
120
+ const act = txt[i];
121
+ if (REGEX.test(act)) {
122
+ // Busco la palabra completa
123
+ pal.push(act);
124
+ } else {
125
+ // Se revisa si hay una palabra antes
126
+ procesarPalabra();
127
+ // Pasa derecho
128
+ if (act == " ") {
129
+ salida += useSpace;
130
+ } else {
131
+ salida += act;
132
+ }
133
+ }
134
+ }
135
+ procesarPalabra();
136
+ return salida;
137
+ }
138
+ }
139
+
140
+ module.exports = {
141
+ ModuloDatoSeguro
142
+ };
@@ -0,0 +1,29 @@
1
+ const { ModuloDatoSeguro } = require('./ModuloDatoSeguro.js');
2
+ const NodeRSA = require('node-rsa');
3
+ const fs = require('fs');
4
+ const { ModuloDatoSeguroFront } = require('./ModuloDatoSeguroFront.js');
5
+
6
+ const test = () => {
7
+ //https://stackoverflow.com/questions/12524994/encrypt-decrypt-using-pycrypto-aes-256
8
+ const dato = "edgar jose fernando";
9
+ const clave = ModuloDatoSeguroFront.generateKey(4);
10
+ const encriptado = ModuloDatoSeguroFront.cifrarSimple(dato, clave);
11
+ console.log(encriptado);
12
+ const desencriptado = ModuloDatoSeguroFront.decifrarSimple(encriptado, clave);
13
+ console.log(dato + "=>" + encriptado + '=>' + desencriptado);
14
+ }
15
+
16
+ const test2 = () => {
17
+ const par = ModuloDatoSeguroFront.generateKeyPair();
18
+ const prueba = { valor: "LaPdRu17bzZxOaguGU1Q" };
19
+ const cifrado = ModuloDatoSeguroFront.cifrar(prueba, par.public);
20
+ console.log(cifrado);
21
+ const decifrado = ModuloDatoSeguroFront.decifrar(cifrado, par.private);
22
+ console.log(decifrado);
23
+ }
24
+
25
+ //
26
+
27
+ //test();
28
+
29
+ test2();
@@ -0,0 +1,45 @@
1
+ //const { ModuloDatoSeguro } = require('./ModuloDatoSeguro.js');
2
+ //const NodeRSA = require('node-rsa');
3
+ //const fs = require('fs');
4
+
5
+ import { ModuloDatoSeguroBack } from "./ModuloDatoSeguroBack.mjs";
6
+
7
+ //const { ModuloDatoSeguroBack } = require('./ModuloDatoSeguroBack');
8
+
9
+ const test = () => {
10
+ //https://stackoverflow.com/questions/12524994/encrypt-decrypt-using-pycrypto-aes-256
11
+ const rand = ModuloDatoSeguroBack.generateKey(4);
12
+ const dato = `LaPdRu17bzZxOaguGU1Q_${rand}`;
13
+ const clave = ModuloDatoSeguroBack.generateKey(4);
14
+ const encriptado = ModuloDatoSeguroBack.cifrarSimple(dato, clave);
15
+ console.log(encriptado);
16
+ const desencriptado = ModuloDatoSeguroBack.decifrarSimple(encriptado, clave);
17
+ console.log(dato + " => " + ` ${clave} ` + encriptado + ' => ' + desencriptado);
18
+ }
19
+
20
+ const test2 = () => {
21
+ const par = ModuloDatoSeguroBack.generateKeyPair();
22
+ const prueba = { valor: "LaPdRu17bzZxOaguGU1Q" };
23
+ const cifrado = ModuloDatoSeguroBack.cifrar(prueba, par.public);
24
+ console.log(cifrado);
25
+ const decifrado = ModuloDatoSeguroBack.decifrar(cifrado, par.private);
26
+ console.log(decifrado);
27
+ }
28
+
29
+ test();
30
+ //test2();
31
+
32
+ /*
33
+ const texto = "Una calurosa mañana, se encontraba Tío Conejo recolectando zanahorias para el almuerzo. De repente, escuchó un rugido aterrador: ¡era Tío Tigre! \
34
+ —¡Ajá, Tío Conejo! —dijo el felino—. No tienes escapatoria, pronto te convertirás en un delicioso bocadillo. \
35
+ En ese instante, Tío Conejo notó unas piedras muy grandes en lo alto de la colina e ideó un plan. \
36
+ —Puede que yo sea un delicioso bocadillo, pero estoy muy flaquito —dijo Tío Conejo—. Mira hacia la cima de la colina, ahí tengo mis vacas y te puedo traer una. ¿Por qué conformarte con un pequeño bocadillo, cuando puedes darte un gran banquete? \
37
+ Como Tío Tigre se encontraba de cara al sol, no podía ver con claridad y aceptó la propuesta. Entonces le permitió a Tío Conejo ir colina arriba mientras él esperaba abajo. \
38
+ Al llegar a la cima de la colina, Tío Conejo gritó: \
39
+ —Abre bien los brazos Tío Tigre, estoy arreando la vaca más gordita. \
40
+ Entonces, Tío Conejo se acercó a la piedra más grande y la empujó con todas sus fuerzas. La piedra rodó rápidamente. \
41
+ Tío Tigre estaba tan emocionado que no vio la enorme piedra que lo aplastó, dejándolo adolorido por meses. \
42
+ Tío Conejo huyó saltando de alegría.";
43
+ console.log(ModuloDatoSeguroBack.ofuscarTexto(texto, true, true, "/"));
44
+ console.log(ModuloDatoSeguroBack.ofuscarTexto("Un computador no puede procesar una imagen que tenga esto", true, true, "/")):
45
+ */
@@ -0,0 +1,55 @@
1
+ import NodeRSA from "node-rsa";
2
+ import pkgCriptoJs from 'crypto-js';
3
+ const { AES } = pkgCriptoJs;
4
+ import Utf8 from "crypto-js/enc-utf8.js";
5
+ import { ModuloDatoSeguro } from "./ModuloDatoSeguro.js";
6
+
7
+ export class ModuloDatoSeguroBack extends ModuloDatoSeguro {
8
+ static SCHEMES = ["pkcs1", "pkcs8", "openssh"];
9
+ static KEY_TYPES = ["public", "private"];
10
+ static scheme_default = ModuloDatoSeguroBack.SCHEMES[0];
11
+
12
+ static cifrarSimple(objeto, llave) {
13
+ return super.cifrarSimple(objeto, llave, AES)
14
+ }
15
+
16
+ static decifrarSimple(texto, llave) {
17
+ return super.decifrarSimple(texto, llave, AES, Utf8);
18
+ }
19
+
20
+ static generateKeyPair = (tamanio = 512) => {
21
+ const key = new NodeRSA({ b: tamanio });
22
+ key.setOptions({ encryptionScheme: ModuloDatoSeguroBack.scheme_default });
23
+ const respose = {
24
+ public: key.exportKey(`${ModuloDatoSeguroBack.SCHEMES[0]}-${ModuloDatoSeguroBack.KEY_TYPES[0]}-pem`),
25
+ private: key.exportKey(`${ModuloDatoSeguroBack.SCHEMES[0]}-${ModuloDatoSeguroBack.KEY_TYPES[1]}-pem`),
26
+ };
27
+ return respose;
28
+ };
29
+ static cifrar(objeto, llavePublica) {
30
+ llavePublica = llavePublica.replace('\n', '');
31
+ const miniKey = ModuloDatoSeguro.generateKey(10);
32
+ const format = `${ModuloDatoSeguroBack.scheme_default}-${ModuloDatoSeguroBack.KEY_TYPES[0]}-pem`;
33
+ const key = new NodeRSA(llavePublica, format);
34
+ const encryptedKey = key.encrypt(miniKey, 'base64');
35
+ const texto = JSON.stringify(objeto);
36
+ const aesEncrypted = AES.encrypt(texto, miniKey);
37
+ const encryptedMessage = aesEncrypted.toString();
38
+ return Buffer.from(JSON.stringify({
39
+ llave: encryptedKey,
40
+ mensaje: encryptedMessage,
41
+ })).toString("base64");
42
+
43
+ }
44
+ static decifrar(texto, llavePrivada) {
45
+ llavePrivada = llavePrivada.replace('\n', '');
46
+ const parametroSinBase64 = JSON.parse(Buffer.from(texto, "base64"));
47
+ const key = new NodeRSA(llavePrivada, `${ModuloDatoSeguroBack.scheme_default}-${ModuloDatoSeguroBack.KEY_TYPES[1]}-pem`);
48
+ const llaveDesencriptada = key.decrypt(parametroSinBase64["llave"], 'utf8');
49
+ var desencriptado = AES.decrypt(
50
+ parametroSinBase64["mensaje"],
51
+ llaveDesencriptada
52
+ ).toString(Utf8);
53
+ return JSON.parse(desencriptado);
54
+ }
55
+ }
@@ -0,0 +1,73 @@
1
+
2
+ // ¿Cómo generar las llaves públicas y privadas?
3
+
4
+ //1. Se genera el par:
5
+ //openssl genrsa -out local_par.pem 256
6
+ //2. Se genera la llave pública:
7
+ //openssl rsa -in local_par.pem -pubout -out local_publica.crt
8
+ //3. Se genera la llave privada:
9
+ //openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in local_par.pem -out local_privada.key
10
+
11
+ //openssl genrsa -out local_par.pem 256 && openssl rsa -in local_par.pem -pubout -out local_publica.crt && openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in local_par.pem -out local_privada.key
12
+ //openssl genrsa -out local_par.pem 2048 && openssl rsa -in local_par.pem -pubout -out local_publica.crt && openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in local_par.pem -out local_privada.key
13
+ //openssl req -new -x509 -key local_privada.key -out local_publica.cer
14
+ //openssl x509 -in local_publica.crt -out local_publica.pem -outform PEM
15
+ const { Buffer } = require('buffer');
16
+ const { JSEncrypt } = require("jsencrypt");
17
+ const AES = require("crypto-js/aes");
18
+ const Utf8 = require("crypto-js/enc-utf8");
19
+ const { ModuloDatoSeguro } = require("./ModuloDatoSeguro.js");
20
+
21
+ class ModuloDatoSeguroFront extends ModuloDatoSeguro {
22
+ // create a key for symmetric encryption
23
+ // pass in the desired length of your key
24
+
25
+ static cifrarSimple(objeto, llave) {
26
+ return super.cifrarSimple(objeto, llave, AES)
27
+ }
28
+
29
+ static decifrarSimple(texto, llave) {
30
+ return super.decifrarSimple(texto, llave, AES, Utf8);
31
+ }
32
+
33
+ static decifrarConListaDeLlaves(texto, llaves) {
34
+ return super.decifrarConListaDeLlavesInterno(texto, llaves, AES, Utf8);
35
+ }
36
+
37
+ static cifrar = function (objeto, llavePublica) {
38
+ llavePublica = llavePublica.replace('\n', '');
39
+ const key = ModuloDatoSeguro.generateKey(10);
40
+ const texto = JSON.stringify(objeto); //JSON
41
+ const aesEncrypted = AES.encrypt(texto, key);
42
+ const encryptedMessage = aesEncrypted.toString();
43
+ // we create a new JSEncrypt object for rsa encryption
44
+ const rsaEncrypt = new JSEncrypt();
45
+ // we set the public key (which we passed into the function)
46
+ rsaEncrypt.setPublicKey(llavePublica);
47
+ // now we encrypt the key & iv with our public key
48
+ const encryptedKey = rsaEncrypt.encrypt(key);
49
+ //Se codifica en base 64 para que pueda viajar en la url
50
+
51
+ return Buffer.from(JSON.stringify({
52
+ llave: encryptedKey,
53
+ mensaje: encryptedMessage,
54
+ })).toString("base64");
55
+ };
56
+
57
+ static decifrar = function (texto, llavePrivada) {
58
+ llavePrivada = llavePrivada.replace('\n', '');
59
+ const decrypt = new JSEncrypt();
60
+ decrypt.setPrivateKey(llavePrivada);
61
+ const parametroSinBase64 = JSON.parse(Buffer.from(texto, "base64"));
62
+ const llaveDesencriptada = decrypt.decrypt(parametroSinBase64["llave"]);
63
+ var desencriptado = AES.decrypt(
64
+ parametroSinBase64["mensaje"],
65
+ llaveDesencriptada
66
+ ).toString(Utf8);
67
+ return JSON.parse(desencriptado);
68
+ };
69
+ }
70
+
71
+ module.exports = {
72
+ ModuloDatoSeguroFront
73
+ };
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+
3
+ /*
4
+ const response = await ModuloSonido.preload([
5
+ '/assets/sounds/finish.mp3',
6
+ ]);
7
+ await ModuloSonido.play('/assets/sounds/finish.mp3');
8
+ */
9
+
10
+ class ModuloSonido {
11
+ static sonidos = {};
12
+ static createAudio({ source, volume = 100, loop = false }) {
13
+ return new Promise((resolve, reject) => {
14
+ const audio = new Audio();
15
+ audio.volume = volume / 100;
16
+ audio.loop = loop;
17
+ audio.addEventListener("error", (err) => {
18
+ reject(new Error(`Error leyendo el audio ${source}`));
19
+ });
20
+ audio.addEventListener("loadeddata", () => {
21
+ let duration = audio.duration;
22
+ console.log(`duration:${duration}`);
23
+ resolve(audio);
24
+ });
25
+ audio.src = source;
26
+ });
27
+ }
28
+
29
+ static async preload(lista = []) {
30
+ const promesas = [];
31
+ lista.forEach((llave) => {
32
+ if (llave in ModuloSonido.sonidos) {
33
+ promesas.push(Promise.resolve(ModuloSonido.sonidos[llave]));
34
+ } else {
35
+ const promesa = ModuloSonido.createAudio({ source: llave });
36
+ promesa.then((audio) => {
37
+ ModuloSonido.sonidos[llave] = audio;
38
+ });
39
+ promesas.push(promesa);
40
+ }
41
+ });
42
+ return await Promise.all(promesas);
43
+ };
44
+
45
+
46
+ static async play(llave, loop = false, volume = 1) {
47
+ let ref = null;
48
+ if (llave in ModuloSonido.sonidos) {
49
+ ref = ModuloSonido.sonidos[llave];
50
+ } else {
51
+ ref = (await ModuloSonido.preload([llave]))[0];
52
+ }
53
+ ref.volume = volume;
54
+ let isPlaying = ref.currentTime > 0 && !ref.paused && !ref.ended
55
+ && ref.readyState > 2;
56
+ if (!isPlaying) {
57
+ ref.loop = loop;
58
+ ref.play();
59
+ }
60
+ };
61
+
62
+ static stop(llave) {
63
+ const sonido = ModuloSonido.sonidos[llave];
64
+ if (sonido) {
65
+ sonido.pause();
66
+ sonido.currentTime = 0;
67
+ }
68
+ }
69
+
70
+ static stopAll() {
71
+ const llaves = Object.keys(ModuloSonido.sonidos);
72
+ for (let i = 0; i < llaves.length; i++) {
73
+ const llave = llaves[i];
74
+ const sonido = ModuloSonido.sonidos[llave];
75
+ sonido.pause();
76
+ sonido.currentTime = 0;
77
+ }
78
+ }
79
+ }
80
+
81
+ module.exports = {
82
+ ModuloSonido
83
+ };
@@ -0,0 +1,51 @@
1
+
2
+ class ModuloVideos {
3
+ static videos = {};
4
+ static createVideo({ source }) {
5
+ return new Promise((resolve, reject) => {
6
+ const video = document.createElement("video");
7
+ video.addEventListener("error", (err) => {
8
+ reject(new Error(`Error leyendo el video ${source}`));
9
+ });
10
+ video.addEventListener("loadeddata", () => {
11
+ const width = video.videoWidth;
12
+ const height = video.videoHeight;
13
+ console.log(`Loaded video ${width} x ${height}!`);
14
+ resolve(video);
15
+ });
16
+ video.setAttribute("src", source);
17
+ video.load();
18
+ });
19
+ }
20
+
21
+ static destroyVideo(llave) {
22
+ if (llave in ModuloVideos.videos) {
23
+ const video = ModuloVideos.videos[llave];
24
+ video.pause();
25
+ video.removeAttribute('src');
26
+ video.load();
27
+ video.removeAllListeners('seeked');
28
+ delete ModuloVideos.videos[llave];
29
+ }
30
+ }
31
+
32
+ static async preload(lista = []) {
33
+ const promesas = [];
34
+ lista.forEach((llave) => {
35
+ if (llave in ModuloVideos.videos) {
36
+ promesas.push(Promise.resolve(ModuloVideos.videos[llave]));
37
+ } else {
38
+ const promesa = ModuloVideos.createVideo({ source: llave });
39
+ promesa.then((video) => {
40
+ ModuloVideos.videos[llave] = video;
41
+ });
42
+ promesas.push(promesa);
43
+ }
44
+ });
45
+ return await Promise.all(promesas);
46
+ };
47
+ }
48
+
49
+ module.exports = {
50
+ ModuloVideos
51
+ };