@itentialopensource/adapter-okta 0.1.1 → 0.3.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 (57) hide show
  1. package/AUTH.md +39 -0
  2. package/BROKER.md +199 -0
  3. package/CALLS.md +1735 -0
  4. package/CHANGELOG.md +17 -2
  5. package/CODE_OF_CONDUCT.md +12 -17
  6. package/CONTRIBUTING.md +3 -148
  7. package/ENHANCE.md +69 -0
  8. package/PROPERTIES.md +641 -0
  9. package/README.md +237 -574
  10. package/SUMMARY.md +9 -0
  11. package/SYSTEMINFO.md +11 -0
  12. package/TROUBLESHOOT.md +47 -0
  13. package/adapter.js +380 -261
  14. package/adapterBase.js +854 -408
  15. package/changelogs/changelog.md +16 -0
  16. package/entities/.generic/action.json +110 -5
  17. package/entities/.generic/schema.json +6 -1
  18. package/error.json +6 -0
  19. package/metadata.json +49 -0
  20. package/package.json +27 -24
  21. package/pronghorn.json +691 -88
  22. package/propertiesDecorators.json +14 -0
  23. package/propertiesSchema.json +843 -7
  24. package/refs?service=git-upload-pack +0 -0
  25. package/report/adapter-openapi.json +22861 -0
  26. package/report/adapter-openapi.yaml +15054 -0
  27. package/report/adapterInfo.json +10 -0
  28. package/report/updateReport1654086669778.json +120 -0
  29. package/report/updateReport1691508740078.json +120 -0
  30. package/report/updateReport1692203198064.json +120 -0
  31. package/report/updateReport1694468322367.json +120 -0
  32. package/report/updateReport1698422603278.json +120 -0
  33. package/sampleProperties.json +156 -3
  34. package/test/integration/adapterTestBasicGet.js +3 -5
  35. package/test/integration/adapterTestConnectivity.js +91 -42
  36. package/test/integration/adapterTestIntegration.js +155 -104
  37. package/test/unit/adapterBaseTestUnit.js +392 -309
  38. package/test/unit/adapterTestUnit.js +521 -273
  39. package/utils/adapterInfo.js +206 -0
  40. package/utils/addAuth.js +94 -0
  41. package/utils/artifactize.js +1 -1
  42. package/utils/basicGet.js +1 -14
  43. package/utils/checkMigrate.js +1 -1
  44. package/utils/entitiesToDB.js +179 -0
  45. package/utils/findPath.js +1 -1
  46. package/utils/methodDocumentor.js +273 -0
  47. package/utils/modify.js +14 -16
  48. package/utils/packModificationScript.js +1 -1
  49. package/utils/patches2bundledDeps.js +90 -0
  50. package/utils/pre-commit.sh +5 -0
  51. package/utils/removeHooks.js +20 -0
  52. package/utils/taskMover.js +309 -0
  53. package/utils/tbScript.js +129 -53
  54. package/utils/tbUtils.js +152 -35
  55. package/utils/testRunner.js +17 -17
  56. package/utils/troubleshootingAdapter.js +10 -31
  57. package/workflows/README.md +0 -3
package/adapter.js CHANGED
@@ -80,10 +80,15 @@ class Okta extends AdapterBaseCl {
80
80
  }
81
81
 
82
82
  /**
83
- * @getWorkflowFunctions
84
- */
85
- getWorkflowFunctions(inIgnore) {
86
- let myIgnore = [];
83
+ * @iapGetAdapterWorkflowFunctions
84
+ */
85
+ iapGetAdapterWorkflowFunctions(inIgnore) {
86
+ let myIgnore = [
87
+ 'healthCheck',
88
+ 'iapGetAdapterWorkflowFunctions',
89
+ 'hasEntities',
90
+ 'getAuthorization'
91
+ ];
87
92
  if (!inIgnore && Array.isArray(inIgnore)) {
88
93
  myIgnore = inIgnore;
89
94
  } else if (!inIgnore && typeof inIgnore === 'string') {
@@ -94,52 +99,44 @@ class Okta extends AdapterBaseCl {
94
99
  // you can add specific methods that you do not want to be workflow functions to ignore like below
95
100
  // myIgnore.push('myMethodNotInWorkflow');
96
101
 
97
- return super.getWorkflowFunctions(myIgnore);
102
+ return super.iapGetAdapterWorkflowFunctions(myIgnore);
98
103
  }
99
104
 
100
105
  /**
101
- * updateAdapterConfiguration is used to update any of the adapter configuration files. This
106
+ * iapUpdateAdapterConfiguration is used to update any of the adapter configuration files. This
102
107
  * allows customers to make changes to adapter configuration without having to be on the
103
108
  * file system.
104
109
  *
105
- * @function updateAdapterConfiguration
110
+ * @function iapUpdateAdapterConfiguration
106
111
  * @param {string} configFile - the name of the file being updated (required)
107
112
  * @param {Object} changes - an object containing all of the changes = formatted like the configuration file (required)
108
113
  * @param {string} entity - the entity to be changed, if an action, schema or mock data file (optional)
109
114
  * @param {string} type - the type of entity file to change, (action, schema, mock) (optional)
110
115
  * @param {string} action - the action to be changed, if an action, schema or mock data file (optional)
116
+ * @param {boolean} replace - true to replace entire mock data, false to merge/append
111
117
  * @param {Callback} callback - The results of the call
112
118
  */
113
- updateAdapterConfiguration(configFile, changes, entity, type, action, callback) {
114
- const origin = `${this.id}-adapter-updateAdapterConfiguration`;
119
+ iapUpdateAdapterConfiguration(configFile, changes, entity, type, action, replace, callback) {
120
+ const meth = 'adapter-iapUpdateAdapterConfiguration';
121
+ const origin = `${this.id}-${meth}`;
115
122
  log.trace(origin);
116
- super.updateAdapterConfiguration(configFile, changes, entity, type, action, callback);
117
- }
118
123
 
119
- /**
120
- * See if the API path provided is found in this adapter
121
- *
122
- * @function findPath
123
- * @param {string} apiPath - the api path to check on
124
- * @param {Callback} callback - The results of the call
125
- */
126
- findPath(apiPath, callback) {
127
- const origin = `${this.id}-adapter-findPath`;
128
- log.trace(origin);
129
- super.findPath(apiPath, callback);
124
+ super.iapUpdateAdapterConfiguration(configFile, changes, entity, type, action, replace, callback);
130
125
  }
131
126
 
132
127
  /**
133
128
  * @summary Suspends adapter
134
129
  *
135
- * @function suspend
130
+ * @function iapSuspendAdapter
136
131
  * @param {Callback} callback - callback function
137
132
  */
138
- suspend(mode, callback) {
139
- const origin = `${this.id}-adapter-suspend`;
133
+ iapSuspendAdapter(mode, callback) {
134
+ const meth = 'adapter-iapSuspendAdapter';
135
+ const origin = `${this.id}-${meth}`;
140
136
  log.trace(origin);
137
+
141
138
  try {
142
- return super.suspend(mode, callback);
139
+ return super.iapSuspendAdapter(mode, callback);
143
140
  } catch (error) {
144
141
  log.error(`${origin}: ${error}`);
145
142
  return callback(null, error);
@@ -149,14 +146,16 @@ class Okta extends AdapterBaseCl {
149
146
  /**
150
147
  * @summary Unsuspends adapter
151
148
  *
152
- * @function unsuspend
149
+ * @function iapUnsuspendAdapter
153
150
  * @param {Callback} callback - callback function
154
151
  */
155
- unsuspend(callback) {
156
- const origin = `${this.id}-adapter-unsuspend`;
152
+ iapUnsuspendAdapter(callback) {
153
+ const meth = 'adapter-iapUnsuspendAdapter';
154
+ const origin = `${this.id}-${meth}`;
157
155
  log.trace(origin);
156
+
158
157
  try {
159
- return super.unsuspend(callback);
158
+ return super.iapUnsuspendAdapter(callback);
160
159
  } catch (error) {
161
160
  log.error(`${origin}: ${error}`);
162
161
  return callback(null, error);
@@ -164,31 +163,51 @@ class Okta extends AdapterBaseCl {
164
163
  }
165
164
 
166
165
  /**
167
- * @summary Get the Adaoter Queue
166
+ * @summary Get the Adapter Queue
168
167
  *
169
- * @function getQueue
168
+ * @function iapGetAdapterQueue
170
169
  * @param {Callback} callback - callback function
171
170
  */
172
- getQueue(callback) {
173
- const origin = `${this.id}-adapter-getQueue`;
171
+ iapGetAdapterQueue(callback) {
172
+ const meth = 'adapter-iapGetAdapterQueue';
173
+ const origin = `${this.id}-${meth}`;
174
174
  log.trace(origin);
175
- return super.getQueue(callback);
175
+
176
+ return super.iapGetAdapterQueue(callback);
177
+ }
178
+
179
+ /* SCRIPT CALLS */
180
+ /**
181
+ * See if the API path provided is found in this adapter
182
+ *
183
+ * @function iapFindAdapterPath
184
+ * @param {string} apiPath - the api path to check on
185
+ * @param {Callback} callback - The results of the call
186
+ */
187
+ iapFindAdapterPath(apiPath, callback) {
188
+ const meth = 'adapter-iapFindAdapterPath';
189
+ const origin = `${this.id}-${meth}`;
190
+ log.trace(origin);
191
+
192
+ super.iapFindAdapterPath(apiPath, callback);
176
193
  }
177
194
 
178
195
  /**
179
196
  * @summary Runs troubleshoot scripts for adapter
180
197
  *
181
- * @function troubleshoot
198
+ * @function iapTroubleshootAdapter
182
199
  * @param {Object} props - the connection, healthcheck and authentication properties
183
200
  *
184
201
  * @param {boolean} persistFlag - whether the adapter properties should be updated
185
202
  * @param {Callback} callback - The results of the call
186
203
  */
187
- troubleshoot(props, persistFlag, callback) {
188
- const origin = `${this.id}-adapter-troubleshoot`;
204
+ iapTroubleshootAdapter(props, persistFlag, callback) {
205
+ const meth = 'adapter-iapTroubleshootAdapter';
206
+ const origin = `${this.id}-${meth}`;
189
207
  log.trace(origin);
208
+
190
209
  try {
191
- return super.troubleshoot(props, persistFlag, this, callback);
210
+ return super.iapTroubleshootAdapter(props, persistFlag, this, callback);
192
211
  } catch (error) {
193
212
  log.error(`${origin}: ${error}`);
194
213
  return callback(null, error);
@@ -198,15 +217,17 @@ class Okta extends AdapterBaseCl {
198
217
  /**
199
218
  * @summary runs healthcheck script for adapter
200
219
  *
201
- * @function runHealthcheck
220
+ * @function iapRunAdapterHealthcheck
202
221
  * @param {Adapter} adapter - adapter instance to troubleshoot
203
222
  * @param {Callback} callback - callback function
204
223
  */
205
- runHealthcheck(callback) {
206
- const origin = `${this.id}-adapter-runHealthcheck`;
224
+ iapRunAdapterHealthcheck(callback) {
225
+ const meth = 'adapter-iapRunAdapterHealthcheck';
226
+ const origin = `${this.id}-${meth}`;
207
227
  log.trace(origin);
228
+
208
229
  try {
209
- return super.runHealthcheck(this, callback);
230
+ return super.iapRunAdapterHealthcheck(this, callback);
210
231
  } catch (error) {
211
232
  log.error(`${origin}: ${error}`);
212
233
  return callback(null, error);
@@ -216,14 +237,16 @@ class Okta extends AdapterBaseCl {
216
237
  /**
217
238
  * @summary runs connectivity check script for adapter
218
239
  *
219
- * @function runConnectivity
240
+ * @function iapRunAdapterConnectivity
220
241
  * @param {Callback} callback - callback function
221
242
  */
222
- runConnectivity(callback) {
223
- const origin = `${this.id}-adapter-runConnectivity`;
243
+ iapRunAdapterConnectivity(callback) {
244
+ const meth = 'adapter-iapRunAdapterConnectivity';
245
+ const origin = `${this.id}-${meth}`;
224
246
  log.trace(origin);
247
+
225
248
  try {
226
- return super.runConnectivity(callback);
249
+ return super.iapRunAdapterConnectivity(callback);
227
250
  } catch (error) {
228
251
  log.error(`${origin}: ${error}`);
229
252
  return callback(null, error);
@@ -233,14 +256,16 @@ class Okta extends AdapterBaseCl {
233
256
  /**
234
257
  * @summary runs basicGet script for adapter
235
258
  *
236
- * @function runBasicGet
259
+ * @function iapRunAdapterBasicGet
237
260
  * @param {Callback} callback - callback function
238
261
  */
239
- runBasicGet(callback) {
240
- const origin = `${this.id}-adapter-runBasicGet`;
262
+ iapRunAdapterBasicGet(callback) {
263
+ const meth = 'adapter-iapRunAdapterBasicGet';
264
+ const origin = `${this.id}-${meth}`;
241
265
  log.trace(origin);
266
+
242
267
  try {
243
- return super.runBasicGet(callback);
268
+ return super.iapRunAdapterBasicGet(callback);
244
269
  } catch (error) {
245
270
  log.error(`${origin}: ${error}`);
246
271
  return callback(null, error);
@@ -248,171 +273,275 @@ class Okta extends AdapterBaseCl {
248
273
  }
249
274
 
250
275
  /**
251
- * @summary Determines if this adapter supports the specific entity
252
- *
253
- * @function hasEntity
254
- * @param {String} entityType - the entity type to check for
255
- * @param {String/Array} entityId - the specific entity we are looking for
276
+ * @summary moves entites into Mongo DB
256
277
  *
257
- * @param {Callback} callback - An array of whether the adapter can has the
258
- * desired capability or an error
278
+ * @function iapMoveAdapterEntitiesToDB
279
+ * @param {getCallback} callback - a callback function to return the result (Generics)
280
+ * or the error
259
281
  */
260
- hasEntity(entityType, entityId, callback) {
261
- const origin = `${this.id}-adapter-hasEntity`;
282
+ iapMoveAdapterEntitiesToDB(callback) {
283
+ const meth = 'adapter-iapMoveAdapterEntitiesToDB';
284
+ const origin = `${this.id}-${meth}`;
262
285
  log.trace(origin);
263
286
 
264
- // Make the call -
265
- // verifyCapability(entityType, actionType, entityId, callback)
266
- return this.verifyCapability(entityType, null, entityId, callback);
287
+ try {
288
+ return super.iapMoveAdapterEntitiesToDB(callback);
289
+ } catch (err) {
290
+ log.error(`${origin}: ${err}`);
291
+ return callback(null, err);
292
+ }
267
293
  }
268
294
 
269
295
  /**
270
- * @summary Provides a way for the adapter to tell north bound integrations
271
- * whether the adapter supports type, action and specific entity
296
+ * @summary Deactivate adapter tasks
272
297
  *
273
- * @function verifyCapability
274
- * @param {String} entityType - the entity type to check for
275
- * @param {String} actionType - the action type to check for
276
- * @param {String/Array} entityId - the specific entity we are looking for
277
- *
278
- * @param {Callback} callback - An array of whether the adapter can has the
279
- * desired capability or an error
280
- */
281
- verifyCapability(entityType, actionType, entityId, callback) {
282
- const meth = 'adapterBase-verifyCapability';
283
- const origin = `${this.id}-${meth}`;
284
- log.trace(origin);
285
-
286
- // if caching
287
- if (this.caching) {
288
- // Make the call - verifyCapability(entityType, actionType, entityId, callback)
289
- return this.requestHandlerInst.verifyCapability(entityType, actionType, entityId, (results, error) => {
290
- if (error) {
291
- return callback(null, error);
292
- }
298
+ * @function iapDeactivateTasks
299
+ *
300
+ * @param {Array} tasks - List of tasks to deactivate
301
+ * @param {Callback} callback
302
+ */
303
+ iapDeactivateTasks(tasks, callback) {
304
+ const meth = 'adapter-iapDeactivateTasks';
305
+ const origin = `${this.id}-${meth}`;
306
+ log.trace(origin);
293
307
 
294
- // if the cache needs to be updated, update and try again
295
- if (results && results[0] === 'needupdate') {
296
- switch (entityType) {
297
- case 'template_entity': {
298
- // if the cache is invalid, update the cache
299
- return this.getEntities(null, null, null, null, (data, err) => {
300
- if (err) {
301
- const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Could not update entity: $VARIABLE$, cache', [entityType], null, null, null);
302
- log.error(`${origin}: ${errorObj.IAPerror.displayString}`);
303
- return callback(null, errorObj);
304
- }
308
+ try {
309
+ return super.iapDeactivateTasks(tasks, callback);
310
+ } catch (err) {
311
+ log.error(`${origin}: ${err}`);
312
+ return callback(null, err);
313
+ }
314
+ }
305
315
 
306
- // need to check the cache again since it has been updated
307
- return this.requestHandlerInst.verifyCapability(entityType, actionType, entityId, (vcapable, verror) => {
308
- if (verror) {
309
- return callback(null, verror);
310
- }
316
+ /**
317
+ * @summary Activate adapter tasks that have previously been deactivated
318
+ *
319
+ * @function iapActivateTasks
320
+ *
321
+ * @param {Array} tasks - List of tasks to activate
322
+ * @param {Callback} callback
323
+ */
324
+ iapActivateTasks(tasks, callback) {
325
+ const meth = 'adapter-iapActivateTasks';
326
+ const origin = `${this.id}-${meth}`;
327
+ log.trace(origin);
311
328
 
312
- return this.capabilityResults(vcapable, callback);
313
- });
314
- });
315
- }
316
- default: {
317
- // unsupported entity type
318
- const result = [false];
329
+ try {
330
+ return super.iapActivateTasks(tasks, callback);
331
+ } catch (err) {
332
+ log.error(`${origin}: ${err}`);
333
+ return callback(null, err);
334
+ }
335
+ }
336
+
337
+ /* CACHE CALLS */
338
+ /**
339
+ * @summary Populate the cache for the given entities
340
+ *
341
+ * @function iapPopulateEntityCache
342
+ * @param {String/Array of Strings} entityType - the entity type(s) to populate
343
+ * @param {Callback} callback - whether the cache was updated or not for each entity type
344
+ *
345
+ * @returns status of the populate
346
+ */
347
+ iapPopulateEntityCache(entityTypes, callback) {
348
+ const meth = 'adapter-iapPopulateEntityCache';
349
+ const origin = `${this.id}-${meth}`;
350
+ log.trace(origin);
319
351
 
320
- // put false in array for all entities
321
- if (Array.isArray(entityId)) {
322
- for (let e = 1; e < entityId.length; e += 1) {
323
- result.push(false);
324
- }
325
- }
352
+ try {
353
+ return super.iapPopulateEntityCache(entityTypes, callback);
354
+ } catch (err) {
355
+ log.error(`${origin}: ${err}`);
356
+ return callback(null, err);
357
+ }
358
+ }
326
359
 
327
- return callback(result);
328
- }
329
- }
330
- }
360
+ /**
361
+ * @summary Retrieves data from cache for specified entity type
362
+ *
363
+ * @function iapRetrieveEntitiesCache
364
+ * @param {String} entityType - entity of which to retrieve
365
+ * @param {Object} options - settings of which data to return and how to return it
366
+ * @param {Callback} callback - the data if it was retrieved
367
+ */
368
+ iapRetrieveEntitiesCache(entityType, options, callback) {
369
+ const meth = 'adapter-iapCheckEiapRetrieveEntitiesCachentityCached';
370
+ const origin = `${this.id}-${meth}`;
371
+ log.trace(origin);
331
372
 
332
- // return the results
333
- return this.capabilityResults(results, callback);
334
- });
373
+ try {
374
+ return super.iapRetrieveEntitiesCache(entityType, options, callback);
375
+ } catch (err) {
376
+ log.error(`${origin}: ${err}`);
377
+ return callback(null, err);
335
378
  }
379
+ }
336
380
 
337
- // if no entity id
338
- if (!entityId) {
339
- // need to check the cache again since it has been updated
340
- return this.requestHandlerInst.verifyCapability(entityType, actionType, null, (vcapable, verror) => {
341
- if (verror) {
342
- return callback(null, verror);
343
- }
381
+ /* BROKER CALLS */
382
+ /**
383
+ * @summary Determines if this adapter supports any in a list of entities
384
+ *
385
+ * @function hasEntities
386
+ * @param {String} entityType - the entity type to check for
387
+ * @param {Array} entityList - the list of entities we are looking for
388
+ *
389
+ * @param {Callback} callback - A map where the entity is the key and the
390
+ * value is true or false
391
+ */
392
+ hasEntities(entityType, entityList, callback) {
393
+ const meth = 'adapter-hasEntities';
394
+ const origin = `${this.id}-${meth}`;
395
+ log.trace(origin);
344
396
 
345
- return this.capabilityResults(vcapable, callback);
346
- });
397
+ try {
398
+ return super.hasEntities(entityType, entityList, callback);
399
+ } catch (err) {
400
+ log.error(`${origin}: ${err}`);
401
+ return callback(null, err);
347
402
  }
403
+ }
348
404
 
349
- // if not caching
350
- switch (entityType) {
351
- case 'template_entity': {
352
- // need to get the entities to check
353
- return this.getEntities(null, null, null, null, (data, err) => {
354
- if (err) {
355
- const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Could not update entity: $VARIABLE$, cache', [entityType], null, null, null);
356
- log.error(`${origin}: ${errorObj.IAPerror.displayString}`);
357
- return callback(null, errorObj);
358
- }
405
+ /**
406
+ * @summary Get Appliance that match the deviceName
407
+ *
408
+ * @function getDevice
409
+ * @param {String} deviceName - the deviceName to find (required)
410
+ *
411
+ * @param {getCallback} callback - a callback function to return the result
412
+ * (appliance) or the error
413
+ */
414
+ getDevice(deviceName, callback) {
415
+ const meth = 'adapter-getDevice';
416
+ const origin = `${this.id}-${meth}`;
417
+ log.trace(origin);
359
418
 
360
- // need to check the cache again since it has been updated
361
- return this.requestHandlerInst.verifyCapability(entityType, actionType, null, (vcapable, verror) => {
362
- if (verror) {
363
- return callback(null, verror);
364
- }
419
+ try {
420
+ return super.getDevice(deviceName, callback);
421
+ } catch (err) {
422
+ log.error(`${origin}: ${err}`);
423
+ return callback(null, err);
424
+ }
425
+ }
365
426
 
366
- // is the entity in the list?
367
- const isEntity = this.entityInList(entityId, data.response, callback);
368
- const res = [];
427
+ /**
428
+ * @summary Get Appliances that match the filter
429
+ *
430
+ * @function getDevicesFiltered
431
+ * @param {Object} options - the data to use to filter the appliances (optional)
432
+ *
433
+ * @param {getCallback} callback - a callback function to return the result
434
+ * (appliances) or the error
435
+ */
436
+ getDevicesFiltered(options, callback) {
437
+ const meth = 'adapter-getDevicesFiltered';
438
+ const origin = `${this.id}-${meth}`;
439
+ log.trace(origin);
369
440
 
370
- // not found
371
- for (let i = 0; i < isEntity.length; i += 1) {
372
- if (vcapable) {
373
- res.push(isEntity[i]);
374
- } else {
375
- res.push(false);
376
- }
377
- }
441
+ try {
442
+ return super.getDevicesFiltered(options, callback);
443
+ } catch (err) {
444
+ log.error(`${origin}: ${err}`);
445
+ return callback(null, err);
446
+ }
447
+ }
378
448
 
379
- return callback(res);
380
- });
381
- });
382
- }
383
- default: {
384
- // unsupported entity type
385
- const result = [false];
449
+ /**
450
+ * @summary Gets the status for the provided appliance
451
+ *
452
+ * @function isAlive
453
+ * @param {String} deviceName - the deviceName of the appliance. (required)
454
+ *
455
+ * @param {configCallback} callback - callback function to return the result
456
+ * (appliance isAlive) or the error
457
+ */
458
+ isAlive(deviceName, callback) {
459
+ const meth = 'adapter-isAlive';
460
+ const origin = `${this.id}-${meth}`;
461
+ log.trace(origin);
386
462
 
387
- // put false in array for all entities
388
- if (Array.isArray(entityId)) {
389
- for (let e = 1; e < entityId.length; e += 1) {
390
- result.push(false);
391
- }
392
- }
463
+ try {
464
+ return super.isAlive(deviceName, callback);
465
+ } catch (err) {
466
+ log.error(`${origin}: ${err}`);
467
+ return callback(null, err);
468
+ }
469
+ }
393
470
 
394
- return callback(result);
395
- }
471
+ /**
472
+ * @summary Gets a config for the provided Appliance
473
+ *
474
+ * @function getConfig
475
+ * @param {String} deviceName - the deviceName of the appliance. (required)
476
+ * @param {String} format - the desired format of the config. (optional)
477
+ *
478
+ * @param {configCallback} callback - callback function to return the result
479
+ * (appliance config) or the error
480
+ */
481
+ getConfig(deviceName, format, callback) {
482
+ const meth = 'adapter-getConfig';
483
+ const origin = `${this.id}-${meth}`;
484
+ log.trace(origin);
485
+
486
+ try {
487
+ return super.getConfig(deviceName, format, callback);
488
+ } catch (err) {
489
+ log.error(`${origin}: ${err}`);
490
+ return callback(null, err);
396
491
  }
397
492
  }
398
493
 
399
494
  /**
400
- * @summary Updates the cache for all entities by call the get All entity method
495
+ * @summary Gets the device count from the system
401
496
  *
402
- * @function updateEntityCache
497
+ * @function iapGetDeviceCount
403
498
  *
499
+ * @param {getCallback} callback - callback function to return the result
500
+ * (count) or the error
404
501
  */
405
- updateEntityCache() {
406
- const origin = `${this.id}-adapter-updateEntityCache`;
502
+ iapGetDeviceCount(callback) {
503
+ const meth = 'adapter-iapGetDeviceCount';
504
+ const origin = `${this.id}-${meth}`;
407
505
  log.trace(origin);
408
506
 
409
- if (this.caching) {
410
- // if the cache is invalid, update the cache
411
- this.getEntities(null, null, null, null, (data, err) => {
412
- if (err) {
413
- log.trace(`${origin}: Could not load template_entity into cache - ${err}`);
414
- }
415
- });
507
+ try {
508
+ return super.iapGetDeviceCount(callback);
509
+ } catch (err) {
510
+ log.error(`${origin}: ${err}`);
511
+ return callback(null, err);
512
+ }
513
+ }
514
+
515
+ /* GENERIC ADAPTER REQUEST - allows extension of adapter without new calls being added */
516
+ /**
517
+ * Makes the requested generic call
518
+ *
519
+ * @function iapExpandedGenericAdapterRequest
520
+ * @param {Object} metadata - metadata for the call (optional).
521
+ * Can be a stringified Object.
522
+ * @param {String} uriPath - the path of the api call - do not include the host, port, base path or version (optional)
523
+ * @param {String} restMethod - the rest method (GET, POST, PUT, PATCH, DELETE) (optional)
524
+ * @param {Object} pathVars - the parameters to be put within the url path (optional).
525
+ * Can be a stringified Object.
526
+ * @param {Object} queryData - the parameters to be put on the url (optional).
527
+ * Can be a stringified Object.
528
+ * @param {Object} requestBody - the body to add to the request (optional).
529
+ * Can be a stringified Object.
530
+ * @param {Object} addlHeaders - additional headers to be put on the call (optional).
531
+ * Can be a stringified Object.
532
+ * @param {getCallback} callback - a callback function to return the result (Generics)
533
+ * or the error
534
+ */
535
+ iapExpandedGenericAdapterRequest(metadata, uriPath, restMethod, pathVars, queryData, requestBody, addlHeaders, callback) {
536
+ const meth = 'adapter-iapExpandedGenericAdapterRequest';
537
+ const origin = `${this.id}-${meth}`;
538
+ log.trace(origin);
539
+
540
+ try {
541
+ return super.iapExpandedGenericAdapterRequest(metadata, uriPath, restMethod, pathVars, queryData, requestBody, addlHeaders, callback);
542
+ } catch (err) {
543
+ log.error(`${origin}: ${err}`);
544
+ return callback(null, err);
416
545
  }
417
546
  }
418
547
 
@@ -436,94 +565,84 @@ class Okta extends AdapterBaseCl {
436
565
  const origin = `${this.id}-${meth}`;
437
566
  log.trace(origin);
438
567
 
439
- if (this.suspended && this.suspendMode === 'error') {
440
- const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'AD.600', [], null, null, null);
441
- log.error(`${origin}: ${errorObj.IAPerror.displayString}`);
442
- return callback(null, errorObj);
568
+ try {
569
+ return super.genericAdapterRequest(uriPath, restMethod, queryData, requestBody, addlHeaders, callback);
570
+ } catch (err) {
571
+ log.error(`${origin}: ${err}`);
572
+ return callback(null, err);
443
573
  }
574
+ }
444
575
 
445
- /* HERE IS WHERE YOU VALIDATE DATA */
446
- if (uriPath === undefined || uriPath === null || uriPath === '') {
447
- const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['uriPath'], null, null, null);
448
- log.error(`${origin}: ${errorObj.IAPerror.displayString}`);
449
- return callback(null, errorObj);
450
- }
451
- if (restMethod === undefined || restMethod === null || restMethod === '') {
452
- const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Missing Data', ['restMethod'], null, null, null);
453
- log.error(`${origin}: ${errorObj.IAPerror.displayString}`);
454
- return callback(null, errorObj);
455
- }
576
+ /**
577
+ * Makes the requested generic call with no base path or version
578
+ *
579
+ * @function genericAdapterRequestNoBasePath
580
+ * @param {String} uriPath - the path of the api call - do not include the host, port, base path or version (required)
581
+ * @param {String} restMethod - the rest method (GET, POST, PUT, PATCH, DELETE) (required)
582
+ * @param {Object} queryData - the parameters to be put on the url (optional).
583
+ * Can be a stringified Object.
584
+ * @param {Object} requestBody - the body to add to the request (optional).
585
+ * Can be a stringified Object.
586
+ * @param {Object} addlHeaders - additional headers to be put on the call (optional).
587
+ * Can be a stringified Object.
588
+ * @param {getCallback} callback - a callback function to return the result (Generics)
589
+ * or the error
590
+ */
591
+ genericAdapterRequestNoBasePath(uriPath, restMethod, queryData, requestBody, addlHeaders, callback) {
592
+ const meth = 'adapter-genericAdapterRequestNoBasePath';
593
+ const origin = `${this.id}-${meth}`;
594
+ log.trace(origin);
456
595
 
457
- /* HERE IS WHERE YOU SET THE DATA TO PASS INTO REQUEST */
458
- // remove any leading / and split the uripath into path variables
459
- let myPath = uriPath;
460
- while (myPath.indexOf('/') === 0) {
461
- myPath = myPath.substring(1);
596
+ try {
597
+ return super.genericAdapterRequestNoBasePath(uriPath, restMethod, queryData, requestBody, addlHeaders, callback);
598
+ } catch (err) {
599
+ log.error(`${origin}: ${err}`);
600
+ return callback(null, err);
462
601
  }
463
- const pathVars = myPath.split('/');
464
- const queryParamsAvailable = queryData;
465
- const queryParams = {};
466
- const bodyVars = requestBody;
602
+ }
467
603
 
468
- // loop in template. long callback arg name to avoid identifier conflicts
469
- Object.keys(queryParamsAvailable).forEach((thisKeyInQueryParamsAvailable) => {
470
- if (queryParamsAvailable[thisKeyInQueryParamsAvailable] !== undefined && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== null
471
- && queryParamsAvailable[thisKeyInQueryParamsAvailable] !== '') {
472
- queryParams[thisKeyInQueryParamsAvailable] = queryParamsAvailable[thisKeyInQueryParamsAvailable];
473
- }
474
- });
604
+ /* INVENTORY CALLS */
605
+ /**
606
+ * @summary run the adapter lint script to return the results.
607
+ *
608
+ * @function iapRunAdapterLint
609
+ * @param {Callback} callback - callback function
610
+ */
611
+ iapRunAdapterLint(callback) {
612
+ const meth = 'adapter-iapRunAdapterLint';
613
+ const origin = `${this.id}-${meth}`;
614
+ log.trace(origin);
475
615
 
476
- // set up the request object - payload, uriPathVars, uriQuery, uriOptions, addlHeaders
477
- const reqObj = {
478
- payload: bodyVars,
479
- uriPathVars: pathVars,
480
- uriQuery: queryParams,
481
- uriOptions: {}
482
- };
483
- // add headers if provided
484
- if (addlHeaders) {
485
- reqObj.addlHeaders = addlHeaders;
486
- }
616
+ return super.iapRunAdapterLint(callback);
617
+ }
487
618
 
488
- // determine the call and return flag
489
- let action = 'getGenerics';
490
- let returnF = true;
491
- if (restMethod.toUpperCase() === 'POST') {
492
- action = 'createGeneric';
493
- } else if (restMethod.toUpperCase() === 'PUT') {
494
- action = 'updateGeneric';
495
- } else if (restMethod.toUpperCase() === 'PATCH') {
496
- action = 'patchGeneric';
497
- } else if (restMethod.toUpperCase() === 'DELETE') {
498
- action = 'deleteGeneric';
499
- returnF = false;
500
- }
619
+ /**
620
+ * @summary run the adapter test scripts (baseunit and unit) to return the results.
621
+ * can not run integration as there can be implications with that.
622
+ *
623
+ * @function iapRunAdapterTests
624
+ * @param {Callback} callback - callback function
625
+ */
626
+ iapRunAdapterTests(callback) {
627
+ const meth = 'adapter-iapRunAdapterTests';
628
+ const origin = `${this.id}-${meth}`;
629
+ log.trace(origin);
501
630
 
502
- try {
503
- // Make the call -
504
- // identifyRequest(entity, action, requestObj, returnDataFlag, callback)
505
- return this.requestHandlerInst.identifyRequest('.generic', action, reqObj, returnF, (irReturnData, irReturnError) => {
506
- // if we received an error or their is no response on the results
507
- // return an error
508
- if (irReturnError) {
509
- /* HERE IS WHERE YOU CAN ALTER THE ERROR MESSAGE */
510
- return callback(null, irReturnError);
511
- }
512
- if (!Object.hasOwnProperty.call(irReturnData, 'response')) {
513
- const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Invalid Response', ['genericAdapterRequest'], null, null, null);
514
- log.error(`${origin}: ${errorObj.IAPerror.displayString}`);
515
- return callback(null, errorObj);
516
- }
631
+ return super.iapRunAdapterTests(callback);
632
+ }
517
633
 
518
- /* HERE IS WHERE YOU CAN ALTER THE RETURN DATA */
519
- // return the response
520
- return callback(irReturnData, null);
521
- });
522
- } catch (ex) {
523
- const errorObj = this.requestHandlerInst.formatErrorObject(this.id, meth, 'Caught Exception', null, null, null, ex);
524
- log.error(`${origin}: ${errorObj.IAPerror.displayString}`);
525
- return callback(null, errorObj);
526
- }
634
+ /**
635
+ * @summary provide inventory information abbout the adapter
636
+ *
637
+ * @function iapGetAdapterInventory
638
+ * @param {Callback} callback - callback function
639
+ */
640
+ iapGetAdapterInventory(callback) {
641
+ const meth = 'adapter-iapGetAdapterInventory';
642
+ const origin = `${this.id}-${meth}`;
643
+ log.trace(origin);
644
+
645
+ return super.iapGetAdapterInventory(callback);
527
646
  }
528
647
 
529
648
  /**