beech-api 3.5.12 → 3.7.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 (66) hide show
  1. package/README.md +400 -185
  2. package/index.js +2 -3
  3. package/package.json +9 -6
  4. package/packages/cli/beech +2 -2
  5. package/packages/cli/bin/{beech.js → beech-app.js} +86 -28
  6. package/packages/cli/bin/beech-service.js +40 -212
  7. package/packages/cli/core/auth/Credentials.js +76 -35
  8. package/packages/cli/core/auth/Passport.js +318 -188
  9. package/packages/cli/core/auth/_Request.js +12 -0
  10. package/packages/cli/core/configure/_gitignore +9 -1
  11. package/packages/cli/core/configure/app.config-basic.js +10 -10
  12. package/packages/cli/core/configure/app.config-sequelize.js +12 -12
  13. package/packages/cli/core/configure/beech.config.js +8 -0
  14. package/packages/cli/core/configure/global.config-basic.js +4 -4
  15. package/packages/cli/core/configure/global.config-sequelize.js +4 -4
  16. package/packages/cli/core/configure/passport.config.js +5 -15
  17. package/packages/cli/core/databases/mysql.js +53 -29
  18. package/packages/cli/core/databases/sequelize.js +135 -107
  19. package/packages/cli/core/databases/test.js +168 -0
  20. package/packages/cli/core/file-walk/file-walk.js +31 -14
  21. package/packages/cli/core/generator/_add-on +15 -2
  22. package/packages/cli/core/generator/_endpoints +15 -82
  23. package/packages/cli/core/generator/_endpoints_basic +39 -0
  24. package/packages/cli/core/generator/_help +12 -11
  25. package/packages/cli/core/generator/_help_create +11 -0
  26. package/packages/cli/core/generator/{_service → _help_service} +4 -1
  27. package/packages/cli/core/generator/_models +20 -15
  28. package/packages/cli/core/generator/{_basic-models → _models_basic} +0 -2
  29. package/packages/cli/core/generator/_package +4 -3
  30. package/packages/cli/core/generator/index.js +302 -95
  31. package/packages/cli/core/helpers/math.js +55 -0
  32. package/packages/cli/core/helpers/poolEntity.js +31 -0
  33. package/packages/cli/core/index.js +96 -28
  34. package/packages/cli/core/origin/index.js +2 -0
  35. package/packages/cli/core/origin/whitelist/cors.js +91 -0
  36. package/packages/cli/core/services/http.express.js +338 -203
  37. package/packages/cli/core/test/utils.js +5 -5
  38. package/packages/lib/index.js +4 -0
  39. package/packages/lib/src/endpoint.js +98 -0
  40. package/packages/lib/src/salt.js +3 -0
  41. package/packages/lib/src/schema.js +62 -0
  42. package/packages/lib/src/user.js +196 -0
  43. package/packages/package.json +4 -7
  44. package/packages/cli/core/generator/_create +0 -7
  45. package/packages/lib/beech.js +0 -136
  46. package/packages/lib/salt.js +0 -3
  47. package/packages/src-/Add-on.js +0 -9
  48. package/packages/src-/endpoints/hello-endpoints.js +0 -118
  49. package/packages/src-/endpoints/test2-endpoints.js +0 -75
  50. package/packages/src-/endpoints/testSequalize-endpoints.js +0 -23
  51. package/packages/src-/helpers/Test2.js +0 -11
  52. package/packages/src-/helpers/my/Test.js +0 -11
  53. package/packages/src-/helpers/my/Test2.js +0 -11
  54. package/packages/src-/helpers/my/Test3.js +0 -11
  55. package/packages/src-/helpers/my/Test4.js +0 -11
  56. package/packages/src-/models/Jubu.js +0 -29
  57. package/packages/src-/models/Jubu2.js +0 -20
  58. package/packages/src-/models/Map_master.js +0 -22
  59. package/packages/src-/models/Test.js +0 -29
  60. package/packages/src-/models/Test2.js +0 -29
  61. package/packages/src-/models/User2Sequelize.js +0 -23
  62. package/packages/src-/models/Users-sqlite.js +0 -21
  63. package/packages/src-/models/Users.js +0 -53
  64. package/packages/src-/models/Uuuuuxxx.js +0 -23
  65. package/packages/src-/models/xxx/Uuuuuxxx.js +0 -23
  66. /package/packages/cli/core/generator/{_basic-helpers → _helpers_basic} +0 -0
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  const logUpdate = require("log-update");
3
3
  const inquirer = require('inquirer');
4
+ const walk = require("walk");
4
5
 
5
6
  class Generator {
6
7
  constructor() {
@@ -36,45 +37,134 @@ class Generator {
36
37
  this.make()
37
38
  .then(make => resolve(make))
38
39
  .catch(err => reject(err));
39
- } else if (this.special.length > 10) {
40
- if (this.special.substring(0, 10) == '--require=') {
41
- // check space
42
- if (this.extra) {
43
- resolve("\n Warning  Please remove a space(s) in special text `" + this.special + " " + this.extra + "...`");
44
- return;
45
- }
46
- let myRequire = this.special.substring(10);
47
- myRequire = myRequire.split(',');
40
+ } else if (this.special == '--require' || this.special == '-R') {
41
+ // walking model files
42
+ const walkModelPromise = new Promise((resolve) => {
43
+ let walker = walk.walk("./src/models", { followLinks: false });
44
+ let modelFiles = [];
45
+ walker.on("file", (root, stat, next) => {
46
+ let subFolderModel = root.split("src/models\\")[1];
47
+ modelFiles.push((subFolderModel ? subFolderModel + "/" : "") + stat.name.split('.')[0]);
48
+ next();
49
+ });
50
+ walker.on("end", () => {
51
+ if(modelFiles.length) {
52
+ inquirer.prompt([ {
53
+ type: "checkbox",
54
+ name: "selectModel",
55
+ message: "Please select Models:",
56
+ choices: modelFiles.map(e => e.replace(/\\/g, "/")),
57
+ } ]).then(selected => {
58
+ resolve(selected.selectModel);
59
+ });
60
+ } else {
61
+ // model file not found, Only create endpoint
62
+ resolve();
63
+ }
64
+ });
65
+ });
66
+ Promise.all([walkModelPromise]).then((modelSelected) => {
67
+ let myModel = modelSelected[0];
48
68
  // check require model exists
49
- this.isModelFound(myRequire)
50
- .then(notExistsModel => {
51
- if (notExistsModel == true) {
52
- // generate & require
53
- if (!this.special) {
54
- resolve("\n Warning  Please specify require file(s).");
55
- } else {
56
- // declare require model file
57
- let rqr = myRequire.map(data => {
58
- let modelName = data.split('/');
59
- modelName = modelName.pop();
60
- modelName = modelName.charAt(0).toUpperCase() + modelName.slice(1);
61
- return `const ${modelName} = require(\"@/models/${data.substring(0, data.lastIndexOf('/') + 1) + modelName}\");\n`;
69
+ const modelExistsPromise = new Promise((resolve, reject) => {
70
+ this.isModelFound(myModel)
71
+ .then(existsModel => {
72
+ // check exists model
73
+ if (existsModel == false) {
74
+ inquirer.prompt([ {
75
+ type: "confirm",
76
+ name: "confirmModelNF",
77
+ message: "Model is not found, Do you only create Endpoint ?:",
78
+ } ]).then(confirm => {
79
+ if(confirm.confirmModelNF) {
80
+ resolve([true, []]);
81
+ } else {
82
+ resolve([false, []]);
83
+ }
62
84
  });
63
- // make with require model file
64
- this.make(rqr)
65
- .then(make => resolve(make))
66
- .catch(err => reject(err));
85
+ } else {
86
+ resolve([true, myModel]);
67
87
  }
68
- } else {
69
- resolve("\n Warning  The model `" + notExistsModel + "` it's not found.");
70
- return;
71
- }
72
- })
73
- .catch(err => { throw err });
74
- } else {
75
- resolve("\n Faltal  commnad it's not available.");
76
- }
77
- } else if (this.special == '--model') {
88
+ })
89
+ .catch(err => reject(err));
90
+ });
91
+ // promise all check choose model(s)
92
+ Promise.all([modelExistsPromise]).then((modelRes) => {
93
+ // Say Yes, Making...
94
+ if(modelRes[0][0]) {
95
+ const poolBasePromise = new Promise((resolve) => {
96
+ // Check global config for prepare tmp endpoint
97
+ this.fs.readFile("./global.config.js", 'utf8', (err, data) => {
98
+ if (err) {
99
+ console.log("\n Faltal  Can't read `global.config.js` file.\n", err);
100
+ return; // break;
101
+ } else {
102
+ let buffer = Buffer.from(data);
103
+ let buf2str = buffer.toString();
104
+ let buf2json = JSON.parse(JSON.stringify(buf2str));
105
+ let pool_base = /global.pool_base\s+=\s+(?:"|')([^"]+)(?:"|')(?:\r|\n|$|;|\r)/i.exec(buf2json);
106
+ if (pool_base) {
107
+ let myRequire = modelRes[0][1];
108
+ if (pool_base[ 1 ] == "basic") {
109
+ if(myRequire.length) {
110
+ // declare basic require model file
111
+ let rqr = "";
112
+ myRequire.map((data, key) => {
113
+ let modelName = data.split('/');
114
+ let modelFolder = "";
115
+ modelName = modelName.pop();
116
+ modelName = modelName.charAt(0).toUpperCase() + modelName.slice(1);
117
+ modelFolder = data.substring(0, data.lastIndexOf('/') + 1).replace(/\\/g, "/");
118
+ rqr += `const ${modelName} = require(\"@/models/${modelFolder + modelName}\");\n`;
119
+ if(myRequire.length == key+1) {
120
+ resolve([[rqr], myRequire]);
121
+ }
122
+ });
123
+ } else {
124
+ resolve([[]]);
125
+ }
126
+ } else if (pool_base[ 1 ] == "sequelize") {
127
+ // check null require resolve it
128
+ if(myRequire.length) {
129
+ // declare basic require model file
130
+ let rqr = "";
131
+ myRequire.map((data, key) => {
132
+ let modelName = data.split('/');
133
+ let modelFolder = "";
134
+ modelName = modelName.pop();
135
+ modelName = modelName.charAt(0).toUpperCase() + modelName.slice(1);
136
+ modelFolder = data.substring(0, data.lastIndexOf('/') + 1).replace(/\\/g, "/");
137
+ rqr += `const { ${modelName}, exampleFindOne${modelName}ById } = require(\"@/models/${modelFolder + modelName}\");\n`;
138
+ if(myRequire.length == key+1) {
139
+ resolve([[rqr], myRequire]);
140
+ }
141
+ });
142
+ } else {
143
+ resolve([[]]);
144
+ }
145
+ } else {
146
+ console.log("\n Faltal  The pool_base in `global.config.js` file does not match the specific.");
147
+ }
148
+ } else {
149
+ console.log("\n Faltal  The pool_base in `global.config.js` file is not found.");
150
+ }
151
+ }
152
+ });
153
+ });
154
+ // Final promise for make
155
+ Promise.all([poolBasePromise]).then((rqrRes) => {
156
+ // make with require model file
157
+ this.make(rqrRes[0])
158
+ .then(make => resolve(make))
159
+ .catch(err => reject(err));
160
+ });
161
+ } else {
162
+ // Say No, Nothing...
163
+ resolve(": Say no.");
164
+ }
165
+ });
166
+ });
167
+ } else if (this.special == '--model' || this.special == '-M') {
78
168
  this.makeModel()
79
169
  .then(make => resolve(make))
80
170
  .catch(err => reject(err));
@@ -94,10 +184,26 @@ class Generator {
94
184
  } else {
95
185
  resolve("\n Warning  Using `passport init` for initiate passport-jwt.");
96
186
  }
97
- } else if (this.option == "key:generate") {
187
+ } else if (this.option == "key:generate" || this.option == "key:gen") {
98
188
  this.generateKeyConfigFile()
99
189
  .then(resGenKey => resolve(resGenKey))
100
190
  .catch(err => reject(err));
191
+ } else if (this.option && this.option.slice(0, 5) == 'hash:') {
192
+ if(this.option.length > 5) {
193
+ const { HashIt, Z } = require(__dirname + "/../helpers/math");
194
+ Z((err, ak) => {
195
+ if(err) {
196
+ logUpdate(err);
197
+ } else {
198
+ let txt = this.option.split(":");
199
+ HashIt(txt, ak, null, (5).toString().length, (hashed) => {
200
+ logUpdate(hashed);
201
+ });
202
+ }
203
+ });
204
+ } else {
205
+ resolve("\n Info.  No text to hash.");
206
+ }
101
207
  } else if (this.option == "add-on") {
102
208
  if (this.argument == "init") {
103
209
  this.makeAddOnInit()
@@ -107,7 +213,10 @@ class Generator {
107
213
  resolve("\n Warning  Using `add-on init` for initiate add-on.");
108
214
  }
109
215
  } else {
110
- resolve("\n Faltal  commnad it's not available.");
216
+ // help for see avaliable command
217
+ this.help()
218
+ .then(help => resolve(help))
219
+ .catch(err => reject(err));
111
220
  }
112
221
  } catch (error) {
113
222
  reject(error);
@@ -118,7 +227,8 @@ class Generator {
118
227
  make(rq = null) {
119
228
  return new Promise((resolve, reject) => {
120
229
  try {
121
- let tmpEndpointsPath = __dirname + '/_endpoints';
230
+ // prepare data
231
+ let tmpEndpointsPath = __dirname;
122
232
  let tmpSpecPath = __dirname + '/_spec';
123
233
  let endpointsPath = './src/endpoints/';
124
234
  let testPath = './__tests__/unit/endpoints/';
@@ -127,42 +237,129 @@ class Generator {
127
237
  arg = arg.split('/');
128
238
  let endpoints = arg.pop();
129
239
  let subFolder = arg.join('/');
130
- // endpoints
240
+ // endpoints file
131
241
  let fullEndpoints = endpointsPath + subFolder.concat('/') + endpoints.concat('-endpoints.js');
132
242
  let routeEndpoints = ((arg.length > 0) ? '/' : '') + subFolder.concat('/') + endpoints;
133
- // test
243
+ // test file
134
244
  let fullTest = testPath + subFolder + '/' + endpoints.concat('-endpoints.spec.js');
245
+
246
+ // Check exists endpoint file
135
247
  if (!this.fs.existsSync(fullEndpoints)) {
136
- // prepare state require file if `rq` not exists
137
- let rqFile = '// You can require something \n';
138
- // check exists requrie files
139
- if (rq) {
140
- rqFile = '';
141
- // make require multiples line
142
- rq.map((data) => {
143
- rqFile += data;
144
- })
145
- }
146
- // generater endpoint
147
- this.makeFolder(endpointsPath + subFolder)
148
- .then(this.copy.bind(this, tmpEndpointsPath, fullEndpoints))
149
- .then(this.contentReplace.bind(this, fullEndpoints, {
150
- 'endpoint': routeEndpoints,
151
- 'endpointName': endpoints,
152
- 'rq': rqFile
153
- }))
154
- // generater test
155
- .then(this.makeFolder.bind(this, testPath + subFolder))
156
- .then(this.copy.bind(this, tmpSpecPath, fullTest))
157
- .then(this.contentReplace.bind(this, fullTest, {
158
- 'endpoint': routeEndpoints,
159
- 'endpointName': endpoints
160
- }))
161
- .then(logUpdate("\n Processing  The endpoint `" + endpoints + "` it's generating..."))
162
- .then(generated => logUpdate(generated))
163
- .catch(err => {
164
- throw err;
248
+ // STEP 0 : Check global config for prepare tmp endpoint
249
+ const promise0 = new Promise((resolve) => {
250
+ this.fs.readFile("./global.config.js", 'utf8', (err, data) => {
251
+ if (err) {
252
+ console.log("\n Faltal  Can't read `global.config.js` file.", err);
253
+ resolve([false, null, null]);
254
+ } else {
255
+ let buffer = Buffer.from(data);
256
+ let buf2str = buffer.toString();
257
+ let buf2json = JSON.parse(JSON.stringify(buf2str));
258
+ let pool_base = /global.pool_base\s+=\s+(?:"|')([^"]+)(?:"|')(?:\r|\n|$|;|\r)/i.exec(buf2json);
259
+ if (pool_base) {
260
+ if (pool_base[ 1 ] == "basic") {
261
+ resolve([true, tmpEndpointsPath += '/_endpoints_basic', pool_base[ 1 ]]);
262
+ } else if (pool_base[ 1 ] == "sequelize") {
263
+ resolve([true, tmpEndpointsPath += '/_endpoints', pool_base[ 1 ]]);
264
+ } else {
265
+ console.log("\n Faltal  The pool_base in `global.config.js` file does not match the specific.");
266
+ resolve([false, null, null]);
267
+ }
268
+ } else {
269
+ console.log("\n Faltal  The pool_base in `global.config.js` file is not found.");
270
+ resolve([false, null, null]);
271
+ }
272
+ }
165
273
  });
274
+ });
275
+
276
+ // STEP 1 : format Model for base use [Users, Xxx, ...]
277
+ const promise1 = new Promise((resolve) => {
278
+ if(rq) {
279
+ if(rq[1]) {
280
+ let finalUseModel = [];
281
+ rq[1].map((data, key) => {
282
+ let lastModel = data.split("/");
283
+ finalUseModel.push(lastModel.pop());
284
+ if(rq[1].length == key+1) {
285
+ resolve(finalUseModel);
286
+ }
287
+ });
288
+ } else {
289
+ resolve([]);
290
+ }
291
+ } else {
292
+ resolve([]);
293
+ }
294
+ });
295
+
296
+ // STEP 2 : Format Require model file
297
+ const promise2 = new Promise((resolve) => {
298
+ // prepare state require file if `rq[0]` not exists
299
+ let requireFile = '// You can require something \n';
300
+ // check exists requrie files
301
+ if(rq) {
302
+ if (rq[0].length) {
303
+ requireFile = '';
304
+ // make require multiples line
305
+ rq[0].map((data, key) => {
306
+ requireFile += data;
307
+ if(rq[0].length == key+1) {
308
+ //setTimeout(() => {
309
+ resolve(requireFile);
310
+ //}, 2000);
311
+ }
312
+ })
313
+ } else {
314
+ resolve(requireFile);
315
+ }
316
+ } else {
317
+ resolve(requireFile);
318
+ }
319
+ });
320
+ // promise all generate endpoint with require(s)
321
+ Promise.all([promise0, promise1, promise2]).then((rqFileRes) => {
322
+ /**
323
+ * @return
324
+ *
325
+ * rqFileRes[0] : Array[0 = global file true, 1 = tmp endpoint file, 2 = pool_base type ]
326
+ * rqFileRes[1] : Array[Users, ...] array tables
327
+ * rqFileRes[2] : Text require file
328
+ *
329
+ */
330
+ // check global file exists.
331
+ if(rqFileRes[0][0]) {
332
+ logUpdate(": Initialize...");
333
+ // check for remove / slash from route endpoint
334
+ if(rqFileRes[0][2] == 'sequelize') {
335
+ routeEndpoints = routeEndpoints.replace(/\\|\//g,'');
336
+ }
337
+ // timeout generate endpoint and replace content
338
+ setTimeout(() => {
339
+ // generater endpoint
340
+ this.makeFolder(endpointsPath + subFolder)
341
+ .then(this.copy.bind(this, tmpEndpointsPath, fullEndpoints))
342
+ .then(this.contentReplace.bind(this, fullEndpoints, {
343
+ 'endpoint': routeEndpoints,
344
+ 'endpointName': endpoints,
345
+ 'rq': rqFileRes[2],
346
+ 'tables': rqFileRes[1],
347
+ }))
348
+ // generater test
349
+ .then(this.makeFolder.bind(this, testPath + subFolder))
350
+ .then(this.copy.bind(this, tmpSpecPath, fullTest))
351
+ .then(this.contentReplace.bind(this, fullTest, {
352
+ 'endpoint': routeEndpoints,
353
+ 'endpointName': endpoints
354
+ }))
355
+ .then(logUpdate("\n Processing   The endpoint `" + endpoints + "` it's generating..."))
356
+ .then(generated => logUpdate(generated))
357
+ .catch(err => {
358
+ throw err;
359
+ });
360
+ }, 2000);
361
+ }
362
+ });
166
363
  } else {
167
364
  resolve("\n Warning  The endpoint `" + endpoints + "` it's duplicated.");
168
365
  }
@@ -175,16 +372,22 @@ class Generator {
175
372
  isModelFound(modelArr) {
176
373
  return new Promise((resolve, reject) => {
177
374
  try {
178
- let n = 1;
179
- modelArr.map((data) => {
180
- if (!this.fs.existsSync('./src/models/' + data.concat('.js'))) {
181
- resolve(data);
182
- }
183
- if (modelArr.length == n) {
184
- resolve(true);
375
+ if(modelArr !== undefined) {
376
+ if(modelArr.length) {
377
+ modelArr.map((data, key) => {
378
+ if (!this.fs.existsSync('./src/models/' + data.concat('.js'))) {
379
+ resolve(data);
380
+ }
381
+ if (modelArr.length == key+1) {
382
+ resolve(true);
383
+ }
384
+ });
385
+ } else {
386
+ resolve(false);
185
387
  }
186
- n++;
187
- })
388
+ } else {
389
+ resolve(false);
390
+ }
188
391
  } catch (error) {
189
392
  reject(error);
190
393
  }
@@ -199,7 +402,7 @@ class Generator {
199
402
  // read global.config.js file for check pool_base for generate model file
200
403
  this.fs.readFile("./global.config.js", 'utf8', (err, data) => {
201
404
  if (err) {
202
- throw err;
405
+ resolve("\n Faltal  Can't read `global.config.js` file.", err);
203
406
  } else {
204
407
  let buffer = Buffer.from(data);
205
408
  let buf2str = buffer.toString();
@@ -209,7 +412,7 @@ class Generator {
209
412
  // read app.config.js file for get db connect name
210
413
  this.fs.readFile("./app.config.js", 'utf8', (appErr, appData) => {
211
414
  if (appErr) {
212
- throw appErr;
415
+ resolve("\n Faltal  Can't read `app.config.js` file.", appErr);
213
416
  } else {
214
417
  let appBuffer = Buffer.from(appData);
215
418
  let appBuf2str = appBuffer.toString();
@@ -224,7 +427,7 @@ class Generator {
224
427
  } ]).then(dbSelected => {
225
428
  // check pool_base
226
429
  if (pool_base[ 1 ] == "basic") {
227
- tmpModelsPath += '/_basic-models';
430
+ tmpModelsPath += '/_models_basic';
228
431
  this.generateModel(tmpModelsPath, dbSelected.selectDbConnect)
229
432
  .then(console.log)
230
433
  .catch(console.log);
@@ -234,13 +437,13 @@ class Generator {
234
437
  .then(console.log)
235
438
  .catch(console.log);
236
439
  } else {
237
- resolve("\n Faltal  The pool_base does not match the specific.");
440
+ resolve("\n Faltal  The pool_base in `global.config.js` file does not match the specific.");
238
441
  }
239
442
  });
240
443
  }
241
444
  });
242
445
  } else {
243
- resolve("\n Faltal  The pool_base not found.");
446
+ resolve("\n Faltal  The pool_base in `global.config.js` file is not found.");
244
447
  }
245
448
  }
246
449
  });
@@ -386,7 +589,7 @@ class Generator {
386
589
  return new Promise((resolve, reject) => {
387
590
  try {
388
591
  if (!this.fs.existsSync(to)) {
389
- if (this.fs.createReadStream(path).pipe(this.fs.createWriteStream(to))) {
592
+ if (this.fs.ReadStream(path).pipe(this.fs.createWriteStream(to))) {
390
593
  resolve(to);
391
594
  } else {
392
595
  throw err;
@@ -407,6 +610,7 @@ class Generator {
407
610
  let endpointName = textCondition.endpointName;
408
611
  let rq = textCondition.rq;
409
612
  let modelName = textCondition.modelName;
613
+ let tables = textCondition.tables;
410
614
  // delay for generator
411
615
  setTimeout(() => {
412
616
  this.fs.readFile(pathFile, 'utf8', (err, data) => {
@@ -418,14 +622,17 @@ class Generator {
418
622
  text = text.replace(new RegExp('{{endpointName}}', 'g'), endpointName);
419
623
  text = text.replace(new RegExp('{{requireSomething}}', 'g'), rq);
420
624
  text = text.replace(new RegExp('{{modelName}}', 'g'), modelName);
421
- // writing the file
422
- this.fs.writeFile(pathFile, text, 'utf8', (err) => {
423
- if (err) {
424
- throw err;
425
- } else {
426
- resolve("\n Passed  The endpoint `" + endpointName + "` it's generated.");
427
- }
428
- });
625
+ text = text.replace(new RegExp('{{tables}}', 'g'), tables ? tables : "// You can use Base([Tables, ...])");
626
+ setTimeout(() => {
627
+ // writing the file
628
+ this.fs.writeFile(pathFile, text, 'utf8', (err) => {
629
+ if (err) {
630
+ throw err;
631
+ } else {
632
+ resolve("\n Passed  The endpoint `" + endpointName + "` it's generated.");
633
+ }
634
+ });
635
+ }, 1000);
429
636
  }
430
637
  })
431
638
  }, 1000);
@@ -473,7 +680,7 @@ class Generator {
473
680
  return new Promise((resolve, reject) => {
474
681
  try {
475
682
  let md5 = require("md5");
476
- let secret = require(__dirname + "/../../../lib/salt").salt;
683
+ let secret = require(__dirname + "/../../../lib/src/salt").salt;
477
684
  let result = '';
478
685
  let characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
479
686
  let charactersLength = characters.length;
@@ -499,7 +706,7 @@ class Generator {
499
706
  let buf2str = buffer.toString();
500
707
  let buf2json = JSON.parse(JSON.stringify(buf2str));
501
708
  let buf2eval = eval(buf2json);
502
- let oldSecret = buf2eval.main_config.app_secret;
709
+ let oldSecret = buf2eval.main_config.app_key;
503
710
  // generate new key secret
504
711
  this.appKeyGenerator(8).then(newAppSecret => {
505
712
  // content replace
@@ -0,0 +1,55 @@
1
+ const secret = require("../../../lib/src/salt").salt;
2
+ const Cryptr = require("cryptr");
3
+ const md5 = require("md5");
4
+ const fs = require("fs");
5
+ const appRoot = require("app-root-path");
6
+
7
+ function Rand(length) {
8
+ let result = "";
9
+ const characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".concat(Math.floor(Math.random() * 1000000000));
10
+ const charactersLength = characters.length;
11
+ let counter = 0;
12
+ while (counter < length) {
13
+ result += characters.charAt(Math.floor(Math.random() * charactersLength));
14
+ counter += 1;
15
+ }
16
+ return result;
17
+ }
18
+
19
+ function HashIt(txt, app_key, iteration = 10000, len = 10, cb) {
20
+ const crypIt = new Cryptr(secret.toString().concat(app_key.toString()), { encoding: "base64url", pbkdf2Iterations: iteration, saltLength: len, });
21
+ cb(crypIt.encrypt(txt.concat(md5(secret).toString().slice(0,len+1))));
22
+ }
23
+
24
+ function getAppKey(cb) {
25
+ // chcek app.config file for Dev. || Prd.
26
+ if(fs.existsSync(appRoot + "/app.config.js")) {
27
+ cb(null, require(appRoot + "/app.config.js").main_config.app_key);
28
+ } else {
29
+ fs.readFile("./app.config.js", 'utf8', (err, e) => {
30
+ if(err) {
31
+ cb(err, null);
32
+ } else {
33
+ cb(null, eval(e).main_config.app_key);
34
+ }
35
+ });
36
+ }
37
+ }
38
+
39
+ function DeHashIt(txtHashed, iteration = 10000, len = 10, cb) {
40
+ try {
41
+ getAppKey((err, app_key) => {
42
+ if(err) {
43
+ cb(err, null);
44
+ } else {
45
+ const crypIt = new Cryptr(secret.toString().concat(app_key.toString()), { encoding: "base64url", pbkdf2Iterations: iteration, saltLength: len, });
46
+ let decryped = crypIt.decrypt(txtHashed);
47
+ cb(false, decryped.concat(md5(secret).toString()));
48
+ }
49
+ });
50
+ } catch (error) {
51
+ cb(error, null);
52
+ }
53
+ }
54
+
55
+ module.exports = { Rand, HashIt, DeHashIt, X:secret, M:md5, Z:getAppKey };
@@ -0,0 +1,31 @@
1
+ function findPassportPk(pool_base, pool, passportTable, passportConfigField, cb) {
2
+ try {
3
+ if(passportConfigField.length) {
4
+ cb(null, passportConfigField);
5
+ } else {
6
+ if(pool_base == "basic") {
7
+ // pool base is Basic
8
+ pool.query("SHOW KEYS FROM " + passportTable + " WHERE Key_name = 'PRIMARY'", (err, pk) => {
9
+ if(err) {
10
+ throw "Authentication table: " + err;
11
+ } else {
12
+ cb(null, [pk[0].Column_name]);
13
+ }
14
+ });
15
+ } else if (pool_base == "sequelize") {
16
+ // pool base is Sequelize
17
+ pool.query("SHOW KEYS FROM " + passportTable + " WHERE Key_name = 'PRIMARY'", { type: QueryTypes.SELECT }).then((pk) => {
18
+ cb(null, [pk[0].Column_name]);
19
+ }).catch((err) => {
20
+ throw "Authentication table: " + err;
21
+ });
22
+ } else {
23
+ throw "The Base pool error. UNKNOWN pool_base = '"+ pool_base +"'";
24
+ }
25
+ }
26
+ } catch (error) {
27
+ cb(error, null);
28
+ }
29
+ }
30
+
31
+ module.exports = { findPassportPk }