n8n-nodes-netdevices
Version:
n8n node to interact with network devices (Cisco, Juniper, Palo Alto PAN-OS, Ciena SAOS, Linux, etc.)
210 lines • 8.41 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ConnectionDispatcher = void 0;
exports.ConnectHandler = ConnectHandler;
exports.ConnectHandlerWithAutoDetect = ConnectHandlerWithAutoDetect;
const base_connection_1 = require("./base-connection");
const cisco_1 = require("./cisco");
const juniper_1 = require("./juniper");
const linux_1 = require("./linux");
const paloalto_1 = require("./paloalto");
const ciena_1 = require("./ciena");
const fortinet_1 = require("./fortinet");
const device_specific_jump_host_connection_1 = require("./device-specific-jump-host-connection");
const CONNECTION_CLASS_MAPPING = {
'cisco_ios': cisco_1.CiscoConnection,
'cisco_ios_xe': cisco_1.CiscoConnection,
'cisco_ios_xr': cisco_1.CiscoIOSXRConnection,
'cisco_nxos': cisco_1.CiscoConnection,
'cisco_asa': cisco_1.CiscoConnection,
'cisco_sg300': cisco_1.CiscoSG300Connection,
'juniper_junos': juniper_1.JuniperConnection,
'juniper_srx': juniper_1.JuniperConnection,
'paloalto_panos': paloalto_1.PaloAltoConnection,
'ciena_saos': ciena_1.CienaSaosConnection,
'fortinet_fortios': fortinet_1.FortinetConnection,
'linux': linux_1.LinuxConnection,
'generic': base_connection_1.BaseConnection
};
class ConnectionDispatcher {
static createConnection(credentials) {
const deviceType = credentials.deviceType.toLowerCase();
const ConnectionClass = CONNECTION_CLASS_MAPPING[deviceType];
if (!ConnectionClass) {
throw new Error(`Unsupported device type: ${deviceType}. Supported types: ${Object.keys(CONNECTION_CLASS_MAPPING).join(', ')}`);
}
const deviceConnection = new ConnectionClass(credentials);
if (credentials.useJumpHost && credentials.jumpHostHost && credentials.jumpHostPort && credentials.jumpHostUsername && credentials.jumpHostAuthMethod) {
return new device_specific_jump_host_connection_1.DeviceSpecificJumpHostConnection(credentials, deviceConnection);
}
return deviceConnection;
}
static getSupportedDeviceTypes() {
return Object.keys(CONNECTION_CLASS_MAPPING);
}
static isDeviceTypeSupported(deviceType) {
return Object.keys(CONNECTION_CLASS_MAPPING).includes(deviceType.toLowerCase());
}
static getDeviceTypeDisplayName(deviceType) {
const displayNames = {
'cisco_ios': 'Cisco IOS',
'cisco_ios_xe': 'Cisco IOS-XE',
'cisco_ios_xr': 'Cisco IOS-XR',
'cisco_nxos': 'Cisco NX-OS',
'cisco_asa': 'Cisco ASA',
'cisco_sg300': 'Cisco SG300',
'juniper_junos': 'Juniper JunOS',
'juniper_srx': 'Juniper SRX',
'paloalto_panos': 'Palo Alto PAN-OS',
'ciena_saos': 'Ciena SAOS',
'fortinet_fortios': 'Fortinet FortiOS',
'linux': 'Linux Server',
'generic': 'Generic SSH'
};
return displayNames[deviceType.toLowerCase()] || deviceType;
}
static getDeviceTypeOptions() {
return [
{
name: 'Cisco IOS',
value: 'cisco_ios',
description: 'Cisco IOS routers and switches'
},
{
name: 'Cisco IOS-XE',
value: 'cisco_ios_xe',
description: 'Cisco IOS-XE devices'
},
{
name: 'Cisco IOS-XR',
value: 'cisco_ios_xr',
description: 'Cisco IOS-XR routers (service provider)'
},
{
name: 'Cisco NX-OS',
value: 'cisco_nxos',
description: 'Cisco Nexus switches'
},
{
name: 'Cisco ASA',
value: 'cisco_asa',
description: 'Cisco ASA firewalls'
},
{
name: 'Cisco SG300',
value: 'cisco_sg300',
description: 'Cisco SG300 series switches'
},
{
name: 'Juniper JunOS',
value: 'juniper_junos',
description: 'Juniper routers and switches'
},
{
name: 'Juniper SRX',
value: 'juniper_srx',
description: 'Juniper SRX firewalls'
},
{
name: 'Palo Alto PAN-OS',
value: 'paloalto_panos',
description: 'Palo Alto Networks firewalls'
},
{
name: 'Ciena SAOS',
value: 'ciena_saos',
description: 'Ciena SAOS switches and platforms'
},
{
name: 'Fortinet FortiOS',
value: 'fortinet_fortios',
description: 'Fortinet FortiOS firewalls and security appliances'
},
{
name: 'Linux Server',
value: 'linux',
description: 'Linux servers and appliances'
},
{
name: 'Generic SSH',
value: 'generic',
description: 'Generic SSH connection'
}
];
}
static async autoDetectDeviceType(credentials) {
const tempCredentials = { ...credentials, deviceType: 'generic' };
const connection = new base_connection_1.BaseConnection(tempCredentials);
try {
await connection.connect();
const response = await connection.sendCommand('');
const output = response.output.toLowerCase();
if (output.includes('cisco') || output.includes('ios') || output.includes('nx-os')) {
if (output.includes('nx-os') || output.includes('nexus')) {
return 'cisco_nxos';
}
else if (output.includes('asa')) {
return 'cisco_asa';
}
else if (output.includes('ios-xr') || output.includes('iosxr')) {
return 'cisco_ios_xr';
}
else if (output.includes('ios-xe')) {
return 'cisco_ios_xe';
}
else if (output.includes('sg300') || output.includes('small business')) {
return 'cisco_sg300';
}
else {
return 'cisco_ios';
}
}
if (output.includes('junos') || output.includes('juniper')) {
if (output.includes('srx')) {
return 'juniper_srx';
}
else {
return 'juniper_junos';
}
}
if (output.includes('ciena') || output.includes('saos')) {
return 'ciena_saos';
}
if (output.includes('fortinet') || output.includes('fortios') ||
output.includes('fortigate')) {
return 'fortinet_fortios';
}
if (output.includes('palo alto') || output.includes('pan-os') ||
output.includes('panos') || output.includes('paloalto')) {
return 'paloalto_panos';
}
if (output.includes('linux') || output.includes('ubuntu') ||
output.includes('centos') || output.includes('redhat') ||
output.includes('debian') || output.includes('bash') ||
output.includes('$') || output.includes('~')) {
return 'linux';
}
return null;
}
catch (error) {
return null;
}
finally {
await connection.disconnect();
}
}
}
exports.ConnectionDispatcher = ConnectionDispatcher;
function ConnectHandler(credentials) {
return ConnectionDispatcher.createConnection(credentials);
}
async function ConnectHandlerWithAutoDetect(credentials) {
const tempCredentials = { ...credentials, deviceType: 'generic' };
const detectedType = await ConnectionDispatcher.autoDetectDeviceType(tempCredentials);
if (!detectedType) {
throw new Error('Could not auto-detect device type');
}
const finalCredentials = { ...credentials, deviceType: detectedType };
return ConnectionDispatcher.createConnection(finalCredentials);
}
//# sourceMappingURL=connection-dispatcher.js.map