@socradar/n8n-nodes-socradar
Version:
Production-ready n8n integration for SOCRadar Extended Threat Intelligence platform
215 lines • 8.2 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.handleDigitalFootprintOperations = handleDigitalFootprintOperations;
const n8n_workflow_1 = require("n8n-workflow");
const axios_1 = __importDefault(require("axios"));
async function handleDigitalFootprintOperations(baseUrl, headers, i) {
var _a;
const operation = this.getNodeParameter('operation', i);
const companyId = this.getNodeParameter('companyId', i);
try {
if (operation === 'getDigitalAssets') {
return await handleGetDigitalAssets.call(this, baseUrl, headers, companyId, i);
}
else if (operation === 'addAsset') {
return await handleAddAsset.call(this, baseUrl, headers, companyId, i);
}
else if (operation === 'markFalsePositive') {
return await handleMarkFalsePositive.call(this, baseUrl, headers, companyId, i);
}
else if (operation === 'toggleMonitoring') {
return await handleToggleMonitoring.call(this, baseUrl, headers, companyId, i);
}
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `The operation "${operation}" is not supported for resource "digitalFootprint"!`);
}
catch (error) {
if (this.continueOnFail()) {
return {
json: {
error: error.message,
details: ((_a = error.response) === null || _a === void 0 ? void 0 : _a.data) || 'No additional error details',
},
pairedItem: { item: i },
};
}
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Digital Footprint Error: ${error.message}`, { itemIndex: i });
}
}
async function handleGetDigitalAssets(baseUrl, headers, companyId, i) {
const endpoint = `${baseUrl}/company/${companyId}/asm`;
const assetType = this.getNodeParameter('assetType', i);
const additionalFields = this.getNodeParameter('additionalFields', i, {});
const queryParams = {
assetType,
};
if (additionalFields.pageNumber !== undefined) {
queryParams.pageNumber = additionalFields.pageNumber;
}
if (additionalFields.pageLimit !== undefined) {
queryParams.pageLimit = additionalFields.pageLimit;
}
if (additionalFields.sortBy) {
queryParams.sortBy = additionalFields.sortBy;
}
if (additionalFields.sortDesc !== undefined) {
queryParams.sortDesc = additionalFields.sortDesc;
}
const options = {
method: 'GET',
url: endpoint,
headers,
params: queryParams,
};
const response = await (0, axios_1.default)(options);
return {
json: response.data,
pairedItem: { item: i },
};
}
async function handleAddAsset(baseUrl, headers, companyId, i) {
const assetType = this.getNodeParameter('assetType', i);
const assetName = this.getNodeParameter('assetName', i);
const endpoint = `${baseUrl}/company/${companyId}/asm/add/${assetType}`;
const body = {
asset_name: assetName,
source: 'manual',
};
switch (assetType) {
case 'domain':
body.domain = this.getNodeParameter('domain', i);
body.domain_type = this.getNodeParameter('domainType', i);
break;
case 'cloudBuckets':
body.cloud_platform_name = this.getNodeParameter('cloudPlatformName', i);
body.access_state = this.getNodeParameter('accessState', i);
body.service_name = 'manual_entry';
break;
case 'ipAddress':
body.ip_address = this.getNodeParameter('ipAddress', i);
break;
case 'website':
body.url = assetName;
break;
case 'loginPage':
body.url = assetName;
break;
case 'dnsRecord':
body.record_type = 'A';
break;
case 'sslCertificate':
body.hostname = assetName;
break;
case 'ipBlock':
body.cidr = assetName;
break;
case 'mobileApplication':
body.platform = 'android';
break;
case 'technology':
body.category = 'web';
break;
case 'socialAccounts':
body.platform = 'twitter';
break;
case 'sourceCodeRepo':
body.platform = 'github';
break;
default:
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Asset type '${assetType}' is not supported for the addAsset operation!`);
}
const options = {
method: 'POST',
url: endpoint,
headers,
data: body,
};
const response = await (0, axios_1.default)(options);
return {
json: response.data,
pairedItem: { item: i },
};
}
async function handleMarkFalsePositive(baseUrl, headers, companyId, i) {
const endpoint = `${baseUrl}/company/${companyId}/asm/fp`;
const assetId = this.getNodeParameter('assetId', i);
const assetType = this.getNodeParameter('assetType', i);
const subType = this.getNodeParameter('subType', i);
const notes = this.getNodeParameter('notes', i, '');
const validAssetTypes = [
'domain', 'ipAddress', 'website', 'loginPage', 'dnsRecord',
'sslCertificate', 'ipBlock', 'mobileApplication', 'technology',
'cloudBuckets', 'socialAccounts', 'sourceCodeRepo'
];
if (!validAssetTypes.includes(assetType)) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Asset type '${assetType}' is not supported for the markFalsePositive operation!`);
}
const assetIdNum = parseInt(assetId, 10);
if (isNaN(assetIdNum)) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Invalid asset ID: '${assetId}'. Asset ID must be a number.`);
}
const body = {
asset_id: assetIdNum,
asset_type: assetType,
sub_type: subType,
notes,
};
const options = {
method: 'POST',
url: endpoint,
headers,
data: body,
};
try {
const response = await (0, axios_1.default)(options);
return {
json: response.data,
pairedItem: { item: i },
};
}
catch (error) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Error marking asset as false positive: ${error.message}`, { itemIndex: i });
}
}
async function handleToggleMonitoring(baseUrl, headers, companyId, i) {
const endpoint = `${baseUrl}/company/${companyId}/asm/monitor`;
const assetId = this.getNodeParameter('assetId', i);
const assetType = this.getNodeParameter('assetType', i);
const monitor = this.getNodeParameter('monitor', i);
const validAssetTypes = [
'domain', 'ipAddress', 'website', 'loginPage', 'dnsRecord',
'sslCertificate', 'ipBlock', 'mobileApplication', 'technology',
'cloudBuckets', 'socialAccounts', 'sourceCodeRepo'
];
if (!validAssetTypes.includes(assetType)) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Asset type '${assetType}' is not supported for the toggleMonitoring operation!`);
}
const assetIdNum = parseInt(assetId, 10);
if (isNaN(assetIdNum)) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Invalid asset ID: '${assetId}'. Asset ID must be a number.`);
}
const body = {
asset_id: assetIdNum,
asset_type: assetType,
is_monitor_on: monitor,
};
const options = {
method: 'POST',
url: endpoint,
headers,
data: body,
};
try {
const response = await (0, axios_1.default)(options);
return {
json: response.data,
pairedItem: { item: i },
};
}
catch (error) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Error toggling monitoring for asset: ${error.message}`, { itemIndex: i });
}
}
//# sourceMappingURL=digitalFootprint.js.map