n8n-nodes-tenable-community
Version:
n8n node for the Tenable One platform
128 lines (127 loc) • 5.96 kB
JavaScript
"use strict";
/**
* @file Node definition for Tenable Vulnerability Management.
* This node provides access to the Tenable Vulnerability Management API, allowing users to manage
* assets, scans, policies, and vulnerabilities. It is a product-specific node refactored from
* the monolithic Tenable node.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.TenableVulnerabilityManagement = void 0;
const n8n_workflow_1 = require("n8n-workflow");
const GenericFunctions_1 = require("./GenericFunctions");
const VulnerabilityManagement_node_options_1 = require("./VulnerabilityManagement.node.options");
/**
* @class TenableVulnerabilityManagement
* @implements {INodeType}
* @description The main class for the n8n Tenable Vulnerability Management node.
*/
class TenableVulnerabilityManagement {
constructor() {
this.description = {
displayName: 'Tenable Vulnerability Management',
name: 'tenableVulnerabilityManagement',
icon: 'file:../icons/Tenable.svg',
group: ['transform'],
version: 1,
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
description: 'Interact with the Tenable Vulnerability Management API',
defaults: {
name: 'Tenable VM',
},
inputs: ["main" /* NodeConnectionType.Main */],
outputs: ["main" /* NodeConnectionType.Main */],
credentials: [
{
name: 'tenableApi',
required: true,
},
],
properties: [
{
displayName: 'Resource',
name: 'resource',
type: 'options',
noDataExpression: true,
options: VulnerabilityManagement_node_options_1.resourceOptions,
default: '',
},
{
displayName: 'Operation',
name: 'operation',
type: 'options',
noDataExpression: true,
displayOptions: {
show: {
resource: ['assets'],
},
},
options: VulnerabilityManagement_node_options_1.operationOptions.assets,
default: '',
},
...VulnerabilityManagement_node_options_1.vulnerabilityManagementFields,
{
displayName: 'Return All',
name: 'returnAll',
type: 'boolean',
default: false,
displayOptions: { show: { operation: VulnerabilityManagement_node_options_1.paginableOperations } },
description: 'Whether to return all results or only up to a given limit',
},
],
};
}
async execute() {
const items = this.getInputData();
let responseData;
const returnData = [];
for (let i = 0; i < items.length; i++) {
try {
const resource = this.getNodeParameter('resource', i, '');
const operation = this.getNodeParameter('operation', i, '');
const body = {};
const qs = {};
if (resource === 'assets') {
if (operation === 'getAssetDetails') {
qs.assetUuid = this.getNodeParameter('assetUuid', i, '');
}
else if (operation === 'importAssets') {
body.assets = this.getNodeParameter('assets', i, []);
body.source = this.getNodeParameter('source', i, '');
}
else if (operation === 'getImportJobStatus') {
qs.assetImportJobUuid = this.getNodeParameter('assetImportJobUuid', i, '');
}
else if (operation === 'bulkUpdateAcr') {
body.acr_score = this.getNodeParameter('acrScore', i, 0);
body.reason = this.getNodeParameter('reason', i, []);
body.note = this.getNodeParameter('note', i, '');
body.asset = this.getNodeParameter('asset', i, {});
}
else if (operation === 'moveAssets') {
body.source = this.getNodeParameter('source', i, '');
body.destination = this.getNodeParameter('destination', i, '');
body.targets = this.getNodeParameter('targets', i, '');
}
else if (operation === 'bulkDeleteAssets') {
body.query = this.getNodeParameter('query', i, {});
body.hard_delete = this.getNodeParameter('hardDelete', i, false);
}
}
// TODO: Add pagination handling for 'returnAll'
responseData = await GenericFunctions_1.vulnerabiltyManagementApiRequest.call(this, resource, operation, body, qs);
const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(responseData), { itemData: { item: i } });
returnData.push(...executionData);
}
catch (error) {
if (this.continueOnFail()) {
const nodeError = new n8n_workflow_1.NodeOperationError(this.getNode(), error, { itemIndex: i });
returnData.push({ json: { error: nodeError.message }, error: nodeError });
continue;
}
throw error;
}
}
return [this.helpers.returnJsonArray(returnData)];
}
}
exports.TenableVulnerabilityManagement = TenableVulnerabilityManagement;