@itentialopensource/adapter-meraki 0.8.1 → 0.8.4

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/utils/tbUtils.js CHANGED
@@ -3,6 +3,7 @@
3
3
  /* eslint import/no-extraneous-dependencies: warn */
4
4
  /* eslint global-require: warn */
5
5
  /* eslint import/no-dynamic-require: warn */
6
+ /* eslint-disable no-console */
6
7
 
7
8
  const path = require('path');
8
9
  const fs = require('fs-extra');
@@ -305,9 +306,9 @@ module.exports = {
305
306
  * @param {Object} sampleProperties - './sampleProperties.json' in adapter dir
306
307
  */
307
308
  createAdapter: function createAdapter(pronghornProps, profileItem, sampleProperties, adapterPronghorn) {
308
- const dirname = this.getDirname();
309
- const packagePath = `${dirname.split('node_modules')[0]}package.json`;
310
- const info = JSON.parse(fs.readFileSync(packagePath));
309
+ const iapDir = this.getIAPHome();
310
+ const packageFile = path.join(iapDir, 'package.json');
311
+ const info = JSON.parse(fs.readFileSync(packageFile));
311
312
  const version = parseInt(info.version.split('.')[0], 10);
312
313
 
313
314
  let adapter = {};
@@ -352,13 +353,7 @@ module.exports = {
352
353
 
353
354
  // get database connection and existing adapter config
354
355
  getAdapterConfig: async function getAdapterConfig() {
355
- const newDirname = this.getDirname();
356
- let iapDir;
357
- if (this.withinIAP(newDirname)) { // when this script is called from IAP
358
- iapDir = newDirname;
359
- } else {
360
- iapDir = path.join(this.getDirname(), 'utils', '../../../../');
361
- }
356
+ const iapDir = this.getIAPHome();
362
357
  const pronghornProps = this.getPronghornProps(iapDir);
363
358
  console.log('Connecting to Database...');
364
359
  const database = await this.connect(iapDir, pronghornProps);
@@ -405,35 +400,44 @@ module.exports = {
405
400
  },
406
401
 
407
402
  /**
408
- * @summary Check whether adapter is located within IAP node_modules
409
- * by loading properties.json. If not, return false.
410
- * @function withinIAP
411
- * @param {String} iapDir root directory of IAP
403
+ * @summary Obtain the IAP installation directory depending on how adapter is used:
404
+ * by IAP, or by npm run CLI interface
405
+ * @returns IAP installation directory or null if adapter running without IAP
406
+ * @function getIAPHome
412
407
  */
413
- withinIAP: (iapDir) => {
414
- try {
415
- const rawProps = require(path.join(iapDir, 'properties.json'));
416
- return rawProps;
417
- } catch (error) {
418
- return false;
408
+ getIAPHome: function getIAPHome() {
409
+ let IAPHomePath = null;
410
+ // check if adapter started via IAP, use path injected by core
411
+ if (process.env.iap_home) IAPHomePath = process.env.iap_home;
412
+ // check if adapter started via CLI `npm run <command>` so we have to be located under
413
+ // <IAP_HOME>/node_modules/@itentialopensource/<adapter_name>/ directory
414
+ const currentExecutionPath = this.getCurrentExecutionPath();
415
+ if (currentExecutionPath.indexOf('/node_modules') >= 0) {
416
+ [IAPHomePath] = currentExecutionPath.split('/node_modules');
419
417
  }
418
+ return IAPHomePath;
420
419
  },
421
420
 
422
421
  /**
423
- * @summary Used to determine the proper dirname to return in case adapter reference is
424
- * symlinked withink IAP
425
- * @returns the symlinked path (using pwd command) of the adapter in case properties.json
426
- * is not found in the original path
427
- * @function getDirname
422
+ * @summary get current execution path without resolving symbolic links,
423
+ * use `pwd` command wihout '-P' option (resolving symlinks) https://linux.die.net/man/1/pwd
424
+ * @returns
425
+ * @function getCurrentExecutionPAth
428
426
  */
429
- getDirname: function getDirname() {
430
- if (this.withinIAP(path.join(__dirname, '../../../../'))) {
431
- return __dirname;
432
- }
427
+ getCurrentExecutionPath: function getCurrentExecutionPAth() {
433
428
  const { stdout } = this.systemSync('pwd', true);
434
429
  return stdout.trim();
435
430
  },
436
431
 
432
+ /**
433
+ * @summary checks if command executed from <IAP_HOME>/node_modules/@itentialopensource/<adapter_name>/ location
434
+ * @returns true if command executed under <IAP_HOME>/node_modules/@itentialopensource/<adapter_name>/ path
435
+ * @function areWeUnderIAPinstallationDirectory
436
+ */
437
+ areWeUnderIAPinstallationDirectory: function areWeUnderIAPinstallationDirectory() {
438
+ return path.join(this.getCurrentExecutionPath(), '../../..') === this.getIAPHome();
439
+ },
440
+
437
441
  /**
438
442
  * @summary connect to mongodb
439
443
  *
@@ -441,9 +445,23 @@ module.exports = {
441
445
  * @param {Object} properties - pronghornProps
442
446
  */
443
447
  connect: async function connect(iapDir, properties) {
444
- // Connect to Mongo
448
+ let dbConnectionProperties = {};
449
+ if (properties.mongoProps) {
450
+ dbConnectionProperties = properties.mongoProps;
451
+ } else if (properties.mongo) {
452
+ if (properties.mongo.url) {
453
+ dbConnectionProperties.url = properties.mongo.url;
454
+ } else {
455
+ dbConnectionProperties.url = `mongodb://${properties.mongo.host}:${properties.mongo.port}`;
456
+ }
457
+ dbConnectionProperties.db = properties.mongo.database;
458
+ }
459
+ if (!dbConnectionProperties.url || !dbConnectionProperties.db) {
460
+ throw new Error('Mongo properties are not specified in IAP configuration!');
461
+ }
462
+
445
463
  const { MongoDBConnection } = require(path.join(iapDir, 'node_modules/@itential/database'));
446
- const connection = new MongoDBConnection(properties.mongoProps);
464
+ const connection = new MongoDBConnection(dbConnectionProperties);
447
465
  const database = await connection.connect(true);
448
466
  return database;
449
467
  }
@@ -47,11 +47,11 @@ function replaceTestVars(test) {
47
47
  let intTest = fs.readFileSync(test, 'utf8');
48
48
 
49
49
  // replace stub variable but check if it exists first
50
- let sindex = intTest.indexOf('const stub');
50
+ let sindex = intTest.indexOf('samProps.stub');
51
51
  let eindex = intTest.indexOf(';', sindex);
52
52
  let replStr = intTest.substring(sindex, eindex + 1);
53
53
  if (sindex > -1) {
54
- intTest = intTest.replace(replStr, `const stub = ${stub};`);
54
+ intTest = intTest.replace(replStr, `samProps.stub = ${stub};`);
55
55
  }
56
56
 
57
57
  // replace isRapidFail variable but check if it exists first
@@ -71,46 +71,46 @@ function replaceTestVars(test) {
71
71
  }
72
72
 
73
73
  // replace host variable
74
- sindex = intTest.indexOf('const host');
74
+ sindex = intTest.indexOf('samProps.host');
75
75
  eindex = intTest.indexOf(';', sindex);
76
76
  replStr = intTest.substring(sindex, eindex + 1);
77
- intTest = intTest.replace(replStr, `const host = '${host}';`);
77
+ intTest = intTest.replace(replStr, `samProps.host = '${host}';`);
78
78
 
79
79
  // replace username variable
80
- sindex = intTest.indexOf('const username');
80
+ sindex = intTest.indexOf('samProps.authentication.username');
81
81
  eindex = intTest.indexOf(';', sindex);
82
82
  replStr = intTest.substring(sindex, eindex + 1);
83
- intTest = intTest.replace(replStr, `const username = '${username}';`);
83
+ intTest = intTest.replace(replStr, `samProps.authentication.username = '${username}';`);
84
84
 
85
85
  // replace password variable
86
- sindex = intTest.indexOf('const password');
86
+ sindex = intTest.indexOf('samProps.authentication.password');
87
87
  eindex = intTest.indexOf(';', sindex);
88
88
  replStr = intTest.substring(sindex, eindex + 1);
89
- intTest = intTest.replace(replStr, `const password = '${password}';`);
89
+ intTest = intTest.replace(replStr, `samProps.authentication.password = '${password}';`);
90
90
 
91
91
  // replace protocol variable
92
- sindex = intTest.indexOf('const protocol');
92
+ sindex = intTest.indexOf('samProps.protocol');
93
93
  eindex = intTest.indexOf(';', sindex);
94
94
  replStr = intTest.substring(sindex, eindex + 1);
95
- intTest = intTest.replace(replStr, `const protocol = '${protocol}';`);
95
+ intTest = intTest.replace(replStr, `samProps.protocol = '${protocol}';`);
96
96
 
97
97
  // replace port variable
98
- sindex = intTest.indexOf('const port');
98
+ sindex = intTest.indexOf('samProps.port');
99
99
  eindex = intTest.indexOf(';', sindex);
100
100
  replStr = intTest.substring(sindex, eindex + 1);
101
- intTest = intTest.replace(replStr, `const port = ${port};`);
101
+ intTest = intTest.replace(replStr, `samProps.port = ${port};`);
102
102
 
103
103
  // replace sslenable variable
104
- sindex = intTest.indexOf('const sslenable');
104
+ sindex = intTest.indexOf('samProps.ssl.enabled');
105
105
  eindex = intTest.indexOf(';', sindex);
106
106
  replStr = intTest.substring(sindex, eindex + 1);
107
- intTest = intTest.replace(replStr, `const sslenable = ${sslenable};`);
107
+ intTest = intTest.replace(replStr, `samProps.ssl.enabled = ${sslenable};`);
108
108
 
109
109
  // replace sslinvalid variable
110
- sindex = intTest.indexOf('const sslinvalid');
110
+ sindex = intTest.indexOf('samProps.ssl.accept_invalid_cert');
111
111
  eindex = intTest.indexOf(';', sindex);
112
112
  replStr = intTest.substring(sindex, eindex + 1);
113
- intTest = intTest.replace(replStr, `const sslinvalid = ${sslinvalid};`);
113
+ intTest = intTest.replace(replStr, `samProps.ssl.accept_invalid_cert = ${sslinvalid};`);
114
114
 
115
115
  console.log(`Updates to ${test} complete`);
116
116
  fs.writeFileSync(test, intTest);