From 11567f946be411f081b2ba25c2ac60d5dcf56835 Mon Sep 17 00:00:00 2001 From: Michael Kret <88898367+michael-radency@users.noreply.github.com> Date: Mon, 31 Jul 2023 11:26:38 +0300 Subject: [PATCH] feat(core): Credentials for popular SecOps services, Part 1 (#6775) --- .../credentials/AlienVaultApi.credentials.ts | 41 ++++++ .../Auth0ManagementApi.credentials.ts | 85 +++++++++++ .../nodes-base/credentials/Aws.credentials.ts | 2 +- .../credentials/CarbonBlackApi.credentials.ts | 45 ++++++ .../credentials/CiscoMerakiApi.credentials.ts | 36 +++++ .../CiscoSecureEndpointApi.credentials.ts | 115 +++++++++++++++ .../CiscoUmbrellaApi.credentials.ts | 80 ++++++++++ .../CiscoWebexOAuth2Api.credentials.ts | 2 + .../CrowdStrikeOAuth2Api.credentials.ts | 82 +++++++++++ .../credentials/F5BigIpApi.credentials.ts | 37 +++++ .../credentials/FortiGateApi.credentials.ts | 29 ++++ .../credentials/GoogleApi.credentials.ts | 2 +- .../GoogleOAuth2Api.credentials.ts | 2 +- .../HybridAnalysisApi.credentials.ts | 29 ++++ .../credentials/ImpervaWafApi.credentials.ts | 37 +++++ .../credentials/KibanaApi.credentials.ts | 60 ++++++++ .../MicrosoftEntraOAuth2Api.credentials.ts | 23 +++ .../MicrosoftOAuth2Api.credentials.ts | 2 +- .../credentials/MistApi.credentials.ts | 60 ++++++++ .../credentials/OktaApi.credentials.ts | 49 +++++++ .../credentials/OpenCTIApi.credentials.ts | 29 ++++ .../credentials/QRadarApi.credentials.ts | 31 ++++ .../credentials/QualysApi.credentials.ts | 56 +++++++ .../RecordedFutureApi.credentials.ts | 38 +++++ .../credentials/SekoiaApi.credentials.ts | 31 ++++ .../credentials/ShufflerApi.credentials.ts | 44 ++++++ .../credentials/TrellixEpoApi.credentials.ts | 37 +++++ .../credentials/VirusTotalApi.credentials.ts | 41 ++++++ .../credentials/ZscalerZiaApi.credentials.ts | 137 ++++++++++++++++++ .../credentials/{ => icons}/AWS.svg | 0 .../credentials/icons/AlienVault.png | Bin 0 -> 2705 bytes .../nodes-base/credentials/icons/Auth0.svg | 3 + .../nodes-base/credentials/icons/Azure.svg | 27 ++++ .../nodes-base/credentials/icons/Cisco.svg | 35 +++++ .../credentials/icons/CrowdStrike.svg | 1 + packages/nodes-base/credentials/icons/F5.svg | 11 ++ .../nodes-base/credentials/icons/Fortinet.svg | 7 + .../credentials/{ => icons}/Google.svg | 0 .../nodes-base/credentials/icons/Hybrid.png | Bin 0 -> 22622 bytes packages/nodes-base/credentials/icons/IBM.svg | 54 +++++++ .../nodes-base/credentials/icons/Imperva.svg | 51 +++++++ .../nodes-base/credentials/icons/Kibana.svg | 9 ++ .../credentials/{ => icons}/Microsoft.svg | 0 .../nodes-base/credentials/icons/Mist.svg | 111 ++++++++++++++ .../nodes-base/credentials/icons/Okta.svg | 7 + .../nodes-base/credentials/icons/OpenCTI.png | Bin 0 -> 25426 bytes .../nodes-base/credentials/icons/Qualys.svg | 9 ++ .../credentials/icons/RecordedFuture.svg | 42 ++++++ .../nodes-base/credentials/icons/Sekoia.svg | 44 ++++++ .../nodes-base/credentials/icons/Shuffler.svg | 5 + .../nodes-base/credentials/icons/Trellix.svg | 1 + .../credentials/icons/VirusTotal.svg | 4 + .../nodes-base/credentials/icons/Wazuh.png | Bin 0 -> 3494 bytes .../nodes-base/credentials/icons/Zscaler.svg | 9 ++ .../nodes-base/credentials/icons/vmware.svg | 12 ++ packages/nodes-base/package.json | 24 +++ 56 files changed, 1724 insertions(+), 4 deletions(-) create mode 100644 packages/nodes-base/credentials/AlienVaultApi.credentials.ts create mode 100644 packages/nodes-base/credentials/Auth0ManagementApi.credentials.ts create mode 100644 packages/nodes-base/credentials/CarbonBlackApi.credentials.ts create mode 100644 packages/nodes-base/credentials/CiscoMerakiApi.credentials.ts create mode 100644 packages/nodes-base/credentials/CiscoSecureEndpointApi.credentials.ts create mode 100644 packages/nodes-base/credentials/CiscoUmbrellaApi.credentials.ts create mode 100644 packages/nodes-base/credentials/CrowdStrikeOAuth2Api.credentials.ts create mode 100644 packages/nodes-base/credentials/F5BigIpApi.credentials.ts create mode 100644 packages/nodes-base/credentials/FortiGateApi.credentials.ts create mode 100644 packages/nodes-base/credentials/HybridAnalysisApi.credentials.ts create mode 100644 packages/nodes-base/credentials/ImpervaWafApi.credentials.ts create mode 100644 packages/nodes-base/credentials/KibanaApi.credentials.ts create mode 100644 packages/nodes-base/credentials/MicrosoftEntraOAuth2Api.credentials.ts create mode 100644 packages/nodes-base/credentials/MistApi.credentials.ts create mode 100644 packages/nodes-base/credentials/OktaApi.credentials.ts create mode 100644 packages/nodes-base/credentials/OpenCTIApi.credentials.ts create mode 100644 packages/nodes-base/credentials/QRadarApi.credentials.ts create mode 100644 packages/nodes-base/credentials/QualysApi.credentials.ts create mode 100644 packages/nodes-base/credentials/RecordedFutureApi.credentials.ts create mode 100644 packages/nodes-base/credentials/SekoiaApi.credentials.ts create mode 100644 packages/nodes-base/credentials/ShufflerApi.credentials.ts create mode 100644 packages/nodes-base/credentials/TrellixEpoApi.credentials.ts create mode 100644 packages/nodes-base/credentials/VirusTotalApi.credentials.ts create mode 100644 packages/nodes-base/credentials/ZscalerZiaApi.credentials.ts rename packages/nodes-base/credentials/{ => icons}/AWS.svg (100%) create mode 100644 packages/nodes-base/credentials/icons/AlienVault.png create mode 100644 packages/nodes-base/credentials/icons/Auth0.svg create mode 100644 packages/nodes-base/credentials/icons/Azure.svg create mode 100644 packages/nodes-base/credentials/icons/Cisco.svg create mode 100644 packages/nodes-base/credentials/icons/CrowdStrike.svg create mode 100644 packages/nodes-base/credentials/icons/F5.svg create mode 100644 packages/nodes-base/credentials/icons/Fortinet.svg rename packages/nodes-base/credentials/{ => icons}/Google.svg (100%) create mode 100644 packages/nodes-base/credentials/icons/Hybrid.png create mode 100644 packages/nodes-base/credentials/icons/IBM.svg create mode 100644 packages/nodes-base/credentials/icons/Imperva.svg create mode 100644 packages/nodes-base/credentials/icons/Kibana.svg rename packages/nodes-base/credentials/{ => icons}/Microsoft.svg (100%) create mode 100644 packages/nodes-base/credentials/icons/Mist.svg create mode 100644 packages/nodes-base/credentials/icons/Okta.svg create mode 100644 packages/nodes-base/credentials/icons/OpenCTI.png create mode 100644 packages/nodes-base/credentials/icons/Qualys.svg create mode 100644 packages/nodes-base/credentials/icons/RecordedFuture.svg create mode 100644 packages/nodes-base/credentials/icons/Sekoia.svg create mode 100644 packages/nodes-base/credentials/icons/Shuffler.svg create mode 100644 packages/nodes-base/credentials/icons/Trellix.svg create mode 100644 packages/nodes-base/credentials/icons/VirusTotal.svg create mode 100644 packages/nodes-base/credentials/icons/Wazuh.png create mode 100644 packages/nodes-base/credentials/icons/Zscaler.svg create mode 100644 packages/nodes-base/credentials/icons/vmware.svg diff --git a/packages/nodes-base/credentials/AlienVaultApi.credentials.ts b/packages/nodes-base/credentials/AlienVaultApi.credentials.ts new file mode 100644 index 000000000..90c8d3277 --- /dev/null +++ b/packages/nodes-base/credentials/AlienVaultApi.credentials.ts @@ -0,0 +1,41 @@ +import type { + IAuthenticateGeneric, + ICredentialTestRequest, + ICredentialType, + INodeProperties, +} from 'n8n-workflow'; + +export class AlienVaultApi implements ICredentialType { + name = 'alienVaultApi'; + + displayName = 'AlienVault API'; + + icon = 'file:icons/AlienVault.png'; + + properties: INodeProperties[] = [ + { + displayName: 'OTX Key', + name: 'accessToken', + type: 'string', + typeOptions: { password: true }, + required: true, + default: '', + }, + ]; + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + headers: { + 'X-OTX-API-KEY': '={{$credentials.accessToken}}', + }, + }, + }; + + test: ICredentialTestRequest = { + request: { + baseURL: 'https://otx.alienvault.com', + url: '/api/v1/user/me', + }, + }; +} diff --git a/packages/nodes-base/credentials/Auth0ManagementApi.credentials.ts b/packages/nodes-base/credentials/Auth0ManagementApi.credentials.ts new file mode 100644 index 000000000..705c5c5f5 --- /dev/null +++ b/packages/nodes-base/credentials/Auth0ManagementApi.credentials.ts @@ -0,0 +1,85 @@ +import type { + IAuthenticateGeneric, + ICredentialDataDecryptedObject, + ICredentialTestRequest, + ICredentialType, + IHttpRequestHelper, + INodeProperties, +} from 'n8n-workflow'; + +export class Auth0ManagementApi implements ICredentialType { + name = 'auth0ManagementApi'; + + displayName = 'Auth0 Management API'; + + icon = 'file:icons/Auth0.svg'; + + properties: INodeProperties[] = [ + { + displayName: 'Session Token', + name: 'sessionToken', + type: 'hidden', + typeOptions: { + expirable: true, + }, + default: '', + }, + { + displayName: 'Auth0 Domain', + name: 'domain', + type: 'string', + required: true, + default: 'your-domain.eu.auth0.com', + }, + { + displayName: 'Client ID', + name: 'clientId', + type: 'string', + required: true, + default: '', + }, + { + displayName: 'Client Secret', + name: 'clientSecret', + type: 'string', + typeOptions: { + password: true, + }, + required: true, + default: '', + }, + ]; + + async preAuthentication(this: IHttpRequestHelper, credentials: ICredentialDataDecryptedObject) { + const { access_token } = (await this.helpers.httpRequest({ + method: 'POST', + url: `https://${credentials.domain}/oauth/token`, + body: { + client_id: credentials.clientId, + client_secret: credentials.clientSecret, + audience: `https://${credentials.domain}/api/v2/`, + grant_type: 'client_credentials', + }, + headers: { + 'Content-Type': 'application/json', + }, + })) as { access_token: string }; + return { sessionToken: access_token }; + } + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + headers: { + Authorization: '=Bearer {{$credentials.sessionToken}}', + }, + }, + }; + + test: ICredentialTestRequest = { + request: { + baseURL: '=https://{{$credentials.domain}}', + url: '/api/v2/clients', + }, + }; +} diff --git a/packages/nodes-base/credentials/Aws.credentials.ts b/packages/nodes-base/credentials/Aws.credentials.ts index b7e8067d1..73638b762 100644 --- a/packages/nodes-base/credentials/Aws.credentials.ts +++ b/packages/nodes-base/credentials/Aws.credentials.ts @@ -134,7 +134,7 @@ export class Aws implements ICredentialType { documentationUrl = 'aws'; - icon = 'file:AWS.svg'; + icon = 'file:icons/AWS.svg'; properties: INodeProperties[] = [ { diff --git a/packages/nodes-base/credentials/CarbonBlackApi.credentials.ts b/packages/nodes-base/credentials/CarbonBlackApi.credentials.ts new file mode 100644 index 000000000..8994375e8 --- /dev/null +++ b/packages/nodes-base/credentials/CarbonBlackApi.credentials.ts @@ -0,0 +1,45 @@ +import type { IAuthenticateGeneric, ICredentialType, INodeProperties } from 'n8n-workflow'; + +export class CarbonBlackApi implements ICredentialType { + name = 'carbonBlackApi'; + + displayName = 'Carbon Black API'; + + icon = 'file:icons/vmware.svg'; + + documentationUrl = 'carbonblack'; + + properties: INodeProperties[] = [ + { + displayName: 'URL', + name: 'apiUrl', + type: 'string', + placeholder: 'https://defense.conferdeploy.net/', + default: '', + }, + { + displayName: 'Access Token', + name: 'accessToken', + type: 'string', + typeOptions: { password: true }, + required: true, + default: '', + }, + ]; + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + headers: { + 'X-Auth-Token': '={{$credentials.accessToken}}', + }, + }, + }; + + // test: ICredentialTestRequest = { + // request: { + // baseURL: '={{$credentials.apiUrl}}', + // url: 'integrationServices/v3/auditlogs', + // }, + // }; +} diff --git a/packages/nodes-base/credentials/CiscoMerakiApi.credentials.ts b/packages/nodes-base/credentials/CiscoMerakiApi.credentials.ts new file mode 100644 index 000000000..570dd43c6 --- /dev/null +++ b/packages/nodes-base/credentials/CiscoMerakiApi.credentials.ts @@ -0,0 +1,36 @@ +import type { IAuthenticateGeneric, ICredentialType, INodeProperties } from 'n8n-workflow'; + +export class CiscoMerakiApi implements ICredentialType { + name = 'ciscoMerakiApi'; + + displayName = 'Cisco Meraki API'; + + icon = 'file:icons/Cisco.svg'; + + properties: INodeProperties[] = [ + { + displayName: 'API Key', + name: 'apiKey', + type: 'string', + typeOptions: { password: true }, + required: true, + default: '', + }, + ]; + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + headers: { + 'X-Cisco-Meraki-API-Key': '={{$credentials.apiKey}}', + }, + }, + }; + + // test: ICredentialTestRequest = { + // request: { + // baseURL: 'https://api.meraki.com/api/v1', + // url: '/organizations', + // }, + // }; +} diff --git a/packages/nodes-base/credentials/CiscoSecureEndpointApi.credentials.ts b/packages/nodes-base/credentials/CiscoSecureEndpointApi.credentials.ts new file mode 100644 index 000000000..e0400097d --- /dev/null +++ b/packages/nodes-base/credentials/CiscoSecureEndpointApi.credentials.ts @@ -0,0 +1,115 @@ +import type { + ICredentialDataDecryptedObject, + ICredentialTestRequest, + ICredentialType, + IHttpRequestOptions, + INodeProperties, +} from 'n8n-workflow'; + +import axios from 'axios'; + +export class CiscoSecureEndpointApi implements ICredentialType { + name = 'ciscoSecureEndpointApi'; + + displayName = 'Cisco Secure Endpoint (AMP) API'; + + icon = 'file:icons/Cisco.svg'; + + properties: INodeProperties[] = [ + { + displayName: 'Region', + name: 'region', + type: 'options', + options: [ + { + name: 'Asia Pacific, Japan, and China', + value: 'apjc.amp', + }, + { + name: 'Europe', + value: 'eu.amp', + }, + { + name: 'North America', + value: 'amp', + }, + ], + default: 'amp', + }, + { + displayName: 'Client ID', + name: 'clientId', + type: 'string', + default: '', + required: true, + }, + { + displayName: 'Client Secret', + name: 'clientSecret', + type: 'string', + typeOptions: { + password: true, + }, + default: '', + required: true, + }, + ]; + + async authenticate( + credentials: ICredentialDataDecryptedObject, + requestOptions: IHttpRequestOptions, + ): Promise { + const clientId = credentials.clientId as string; + const clientSecret = credentials.clientSecret as string; + const region = credentials.region as string; + + const secureXToken = await axios({ + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + Accept: 'application/json', + }, + auth: { + username: clientId, + password: clientSecret, + }, + method: 'POST', + data: new URLSearchParams({ + grant_type: 'client_credentials', + }).toString(), + url: `https://visibility.${region}.cisco.com/iroh/oauth2/token`, + }); + + const secureEndpointToken = await axios({ + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + Accept: 'application/json', + Authorization: `Bearer ${secureXToken.data.access_token}`, + }, + method: 'POST', + data: new URLSearchParams({ + grant_type: 'client_credentials', + }).toString(), + url: `https://api.${region}.cisco.com/v3/access_tokens`, + }); + + const requestOptionsWithAuth: IHttpRequestOptions = { + ...requestOptions, + headers: { + ...requestOptions.headers, + Authorization: `Bearer ${secureEndpointToken.data.access_token}`, + }, + }; + + return requestOptionsWithAuth; + } + + test: ICredentialTestRequest = { + request: { + baseURL: '=https://api.{{$credentials.region}}.cisco.com', + url: '/v3/organizations', + qs: { + size: 10, + }, + }, + }; +} diff --git a/packages/nodes-base/credentials/CiscoUmbrellaApi.credentials.ts b/packages/nodes-base/credentials/CiscoUmbrellaApi.credentials.ts new file mode 100644 index 000000000..9c70defa0 --- /dev/null +++ b/packages/nodes-base/credentials/CiscoUmbrellaApi.credentials.ts @@ -0,0 +1,80 @@ +import type { + IAuthenticateGeneric, + ICredentialDataDecryptedObject, + ICredentialTestRequest, + ICredentialType, + IHttpRequestHelper, + INodeProperties, +} from 'n8n-workflow'; + +export class CiscoUmbrellaApi implements ICredentialType { + name = 'ciscoUmbrellaApi'; + + displayName = 'Cisco Umbrella API'; + + icon = 'file:icons/Cisco.svg'; + + properties: INodeProperties[] = [ + { + displayName: 'Session Token', + name: 'sessionToken', + type: 'hidden', + typeOptions: { + expirable: true, + }, + default: '', + }, + { + displayName: 'API Key', + name: 'apiKey', + // eslint-disable-next-line n8n-nodes-base/cred-class-field-unobscured-sensitive-input + type: 'string', + required: true, + default: '', + }, + { + displayName: 'Secret', + name: 'secret', + type: 'string', + typeOptions: { + password: true, + }, + required: true, + default: '', + }, + ]; + + async preAuthentication(this: IHttpRequestHelper, credentials: ICredentialDataDecryptedObject) { + const url = 'https://api.umbrella.com'; + const { access_token } = (await this.helpers.httpRequest({ + method: 'POST', + url: `${ + url.endsWith('/') ? url.slice(0, -1) : url + }/auth/v2/token?grant_type=client_credentials`, + auth: { + username: credentials.apiKey as string, + password: credentials.secret as string, + }, + headers: { + 'Content-Type': 'x-www-form-urlencoded', + }, + })) as { access_token: string }; + return { sessionToken: access_token }; + } + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + headers: { + Authorization: '=Bearer {{$credentials.sessionToken}}', + }, + }, + }; + + test: ICredentialTestRequest = { + request: { + baseURL: 'https://api.umbrella.com', + url: '/users', + }, + }; +} diff --git a/packages/nodes-base/credentials/CiscoWebexOAuth2Api.credentials.ts b/packages/nodes-base/credentials/CiscoWebexOAuth2Api.credentials.ts index aa2b9ed6c..3784f7f6a 100644 --- a/packages/nodes-base/credentials/CiscoWebexOAuth2Api.credentials.ts +++ b/packages/nodes-base/credentials/CiscoWebexOAuth2Api.credentials.ts @@ -9,6 +9,8 @@ export class CiscoWebexOAuth2Api implements ICredentialType { documentationUrl = 'ciscowebex'; + icon = 'file:icons/Cisco.svg'; + properties: INodeProperties[] = [ { displayName: 'Grant Type', diff --git a/packages/nodes-base/credentials/CrowdStrikeOAuth2Api.credentials.ts b/packages/nodes-base/credentials/CrowdStrikeOAuth2Api.credentials.ts new file mode 100644 index 000000000..69786820a --- /dev/null +++ b/packages/nodes-base/credentials/CrowdStrikeOAuth2Api.credentials.ts @@ -0,0 +1,82 @@ +import type { + IAuthenticateGeneric, + ICredentialDataDecryptedObject, + ICredentialTestRequest, + ICredentialType, + IHttpRequestHelper, + INodeProperties, +} from 'n8n-workflow'; + +export class CrowdStrikeOAuth2Api implements ICredentialType { + name = 'crowdStrikeOAuth2Api'; + + displayName = 'CrowdStrike OAuth2 API'; + + icon = 'file:icons/CrowdStrike.svg'; + + properties: INodeProperties[] = [ + { + displayName: 'Session Token', + name: 'sessionToken', + type: 'hidden', + typeOptions: { + expirable: true, + }, + default: '', + }, + { + displayName: 'URL', + name: 'url', + type: 'string', + required: true, + default: '', + }, + { + displayName: 'Client ID', + name: 'clientId', + type: 'string', + required: true, + default: '', + }, + { + displayName: 'Client Secret', + name: 'clientSecret', + type: 'string', + typeOptions: { + password: true, + }, + required: true, + default: '', + }, + ]; + + async preAuthentication(this: IHttpRequestHelper, credentials: ICredentialDataDecryptedObject) { + const url = credentials.url as string; + const { access_token } = (await this.helpers.httpRequest({ + method: 'POST', + url: `${url.endsWith('/') ? url.slice(0, -1) : url}/oauth2/token?client_id=${ + credentials.clientId + }&client_secret=${credentials.clientSecret}`, + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + }, + })) as { access_token: string }; + return { sessionToken: access_token }; + } + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + headers: { + Authorization: '=Bearer {{$credentials.sessionToken}}', + }, + }, + }; + + test: ICredentialTestRequest = { + request: { + baseURL: '={{$credentials?.url}}', + url: 'user-management/queries/users/v1', + }, + }; +} diff --git a/packages/nodes-base/credentials/F5BigIpApi.credentials.ts b/packages/nodes-base/credentials/F5BigIpApi.credentials.ts new file mode 100644 index 000000000..34ff08afd --- /dev/null +++ b/packages/nodes-base/credentials/F5BigIpApi.credentials.ts @@ -0,0 +1,37 @@ +import type { IAuthenticateGeneric, ICredentialType, INodeProperties } from 'n8n-workflow'; + +export class F5BigIpApi implements ICredentialType { + name = 'f5BigIpApi'; + + displayName = 'F5 Big-IP API'; + + icon = 'file:icons/F5.svg'; + + properties: INodeProperties[] = [ + { + displayName: 'Username', + name: 'username', + type: 'string', + default: '', + required: true, + }, + { + displayName: 'Password', + name: 'password', + type: 'string', + typeOptions: { password: true }, + default: '', + required: true, + }, + ]; + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + auth: { + username: '={{$credentials.username}}', + password: '={{$credentials.password}}', + }, + }, + }; +} diff --git a/packages/nodes-base/credentials/FortiGateApi.credentials.ts b/packages/nodes-base/credentials/FortiGateApi.credentials.ts new file mode 100644 index 000000000..3ed7d6d67 --- /dev/null +++ b/packages/nodes-base/credentials/FortiGateApi.credentials.ts @@ -0,0 +1,29 @@ +import type { IAuthenticateGeneric, ICredentialType, INodeProperties } from 'n8n-workflow'; + +export class FortiGateApi implements ICredentialType { + name = 'fortiGateApi'; + + displayName = 'Fortinet FortiGate API'; + + icon = 'file:icons/Fortinet.svg'; + + properties: INodeProperties[] = [ + { + displayName: 'Access Token', + name: 'accessToken', + type: 'string', + typeOptions: { password: true }, + default: '', + required: true, + }, + ]; + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + qs: { + access_token: '={{$credentials.accessToken}}', + }, + }, + }; +} diff --git a/packages/nodes-base/credentials/GoogleApi.credentials.ts b/packages/nodes-base/credentials/GoogleApi.credentials.ts index 2ecf1ec67..90db20c9d 100644 --- a/packages/nodes-base/credentials/GoogleApi.credentials.ts +++ b/packages/nodes-base/credentials/GoogleApi.credentials.ts @@ -20,7 +20,7 @@ export class GoogleApi implements ICredentialType { documentationUrl = 'google/service-account'; - icon = 'file:Google.svg'; + icon = 'file:icons/Google.svg'; properties: INodeProperties[] = [ { diff --git a/packages/nodes-base/credentials/GoogleOAuth2Api.credentials.ts b/packages/nodes-base/credentials/GoogleOAuth2Api.credentials.ts index a99877e33..821bf6e77 100644 --- a/packages/nodes-base/credentials/GoogleOAuth2Api.credentials.ts +++ b/packages/nodes-base/credentials/GoogleOAuth2Api.credentials.ts @@ -9,7 +9,7 @@ export class GoogleOAuth2Api implements ICredentialType { documentationUrl = 'google/oauth-generic'; - icon = 'file:Google.svg'; + icon = 'file:icons/Google.svg'; properties: INodeProperties[] = [ { diff --git a/packages/nodes-base/credentials/HybridAnalysisApi.credentials.ts b/packages/nodes-base/credentials/HybridAnalysisApi.credentials.ts new file mode 100644 index 000000000..da2029602 --- /dev/null +++ b/packages/nodes-base/credentials/HybridAnalysisApi.credentials.ts @@ -0,0 +1,29 @@ +import type { IAuthenticateGeneric, ICredentialType, INodeProperties } from 'n8n-workflow'; + +export class HybridAnalysisApi implements ICredentialType { + name = 'hybridAnalysisApi'; + + displayName = 'Hybrid Analysis API'; + + icon = 'file:icons/Hybrid.png'; + + properties: INodeProperties[] = [ + { + displayName: 'API Key', + name: 'apiKey', + type: 'string', + typeOptions: { password: true }, + required: true, + default: '', + }, + ]; + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + headers: { + 'api-key': '={{$credentials.apiKey}}', + }, + }, + }; +} diff --git a/packages/nodes-base/credentials/ImpervaWafApi.credentials.ts b/packages/nodes-base/credentials/ImpervaWafApi.credentials.ts new file mode 100644 index 000000000..51e4396a6 --- /dev/null +++ b/packages/nodes-base/credentials/ImpervaWafApi.credentials.ts @@ -0,0 +1,37 @@ +import type { IAuthenticateGeneric, ICredentialType, INodeProperties } from 'n8n-workflow'; + +export class ImpervaWafApi implements ICredentialType { + name = 'impervaWafApi'; + + displayName = 'Imperva WAF API'; + + icon = 'file:icons/Imperva.svg'; + + properties: INodeProperties[] = [ + { + displayName: 'API ID', + name: 'apiID', + type: 'string', + default: '', + required: true, + }, + { + displayName: 'API Key', + name: 'apiKey', + type: 'string', + typeOptions: { password: true }, + default: '', + required: true, + }, + ]; + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + headers: { + 'x-API-Id': '={{$credentials.apiID}}', + 'x-API-Key': '={{$credentials.apiKey}}', + }, + }, + }; +} diff --git a/packages/nodes-base/credentials/KibanaApi.credentials.ts b/packages/nodes-base/credentials/KibanaApi.credentials.ts new file mode 100644 index 000000000..8839b274f --- /dev/null +++ b/packages/nodes-base/credentials/KibanaApi.credentials.ts @@ -0,0 +1,60 @@ +import type { + IAuthenticateGeneric, + ICredentialTestRequest, + ICredentialType, + INodeProperties, +} from 'n8n-workflow'; + +export class KibanaApi implements ICredentialType { + name = 'kibanaApi'; + + displayName = 'Kibana API'; + + icon = 'file:icons/Kibana.svg'; + + properties: INodeProperties[] = [ + { + displayName: 'URL', + name: 'url', + type: 'string', + required: true, + default: '', + placeholder: 'http://localhost:5601', + }, + { + displayName: 'Username', + name: 'username', + type: 'string', + required: true, + default: '', + }, + { + displayName: 'Password', + name: 'password', + type: 'string', + typeOptions: { password: true }, + required: true, + default: '', + }, + ]; + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + headers: { + 'kbn-xsrf': true, + }, + auth: { + username: '={{$credentials.username}}', + password: '={{$credentials.password}}', + }, + }, + }; + + test: ICredentialTestRequest = { + request: { + baseURL: '={{$credentials.url}}', + url: '/api/features', + }, + }; +} diff --git a/packages/nodes-base/credentials/MicrosoftEntraOAuth2Api.credentials.ts b/packages/nodes-base/credentials/MicrosoftEntraOAuth2Api.credentials.ts new file mode 100644 index 000000000..018179e9e --- /dev/null +++ b/packages/nodes-base/credentials/MicrosoftEntraOAuth2Api.credentials.ts @@ -0,0 +1,23 @@ +import type { ICredentialType, INodeProperties } from 'n8n-workflow'; + +export class MicrosoftEntraOAuth2Api implements ICredentialType { + name = 'microsoftEntraOAuth2Api'; + + displayName = 'Microsoft Entra ID (Azure Active Directory) API'; + + extends = ['microsoftOAuth2Api']; + + icon = 'file:icons/Azure.svg'; + + documentationUrl = 'microsoft'; + + properties: INodeProperties[] = [ + { + displayName: 'Scope', + name: 'scope', + type: 'hidden', + default: + 'openid offline_access AccessReview.ReadWrite.All Directory.ReadWrite.All NetworkAccessPolicy.ReadWrite.All DelegatedAdminRelationship.ReadWrite.All EntitlementManagement.ReadWrite.All', + }, + ]; +} diff --git a/packages/nodes-base/credentials/MicrosoftOAuth2Api.credentials.ts b/packages/nodes-base/credentials/MicrosoftOAuth2Api.credentials.ts index 1dcdf116d..58425dbe3 100644 --- a/packages/nodes-base/credentials/MicrosoftOAuth2Api.credentials.ts +++ b/packages/nodes-base/credentials/MicrosoftOAuth2Api.credentials.ts @@ -5,7 +5,7 @@ export class MicrosoftOAuth2Api implements ICredentialType { extends = ['oAuth2Api']; - icon = 'file:Microsoft.svg'; + icon = 'file:icons/Microsoft.svg'; displayName = 'Microsoft OAuth2 API'; diff --git a/packages/nodes-base/credentials/MistApi.credentials.ts b/packages/nodes-base/credentials/MistApi.credentials.ts new file mode 100644 index 000000000..af3db226d --- /dev/null +++ b/packages/nodes-base/credentials/MistApi.credentials.ts @@ -0,0 +1,60 @@ +import type { + IAuthenticateGeneric, + ICredentialTestRequest, + ICredentialType, + INodeProperties, +} from 'n8n-workflow'; + +export class MistApi implements ICredentialType { + name = 'mistApi'; + + displayName = 'Mist API'; + + icon = 'file:icons/Mist.svg'; + + documentationUrl = 'mist'; + + properties: INodeProperties[] = [ + { + displayName: 'API Token', + name: 'token', + type: 'string', + typeOptions: { password: true }, + required: true, + default: '', + }, + { + displayName: 'Region', + name: 'region', + type: 'options', + options: [ + { + name: 'Europe', + value: 'eu', + }, + { + name: 'Global', + value: 'global', + }, + ], + default: 'eu', + }, + ]; + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + headers: { + Authorization: '=Token {{$credentials.token}}', + }, + }, + }; + + test: ICredentialTestRequest = { + request: { + baseURL: '=https://api{{$credentials.region === "eu" ? ".eu" : ""}}.mist.com', + url: '/api/v1/self', + method: 'GET', + }, + }; +} diff --git a/packages/nodes-base/credentials/OktaApi.credentials.ts b/packages/nodes-base/credentials/OktaApi.credentials.ts new file mode 100644 index 000000000..0f826d6d8 --- /dev/null +++ b/packages/nodes-base/credentials/OktaApi.credentials.ts @@ -0,0 +1,49 @@ +import type { + IAuthenticateGeneric, + ICredentialTestRequest, + ICredentialType, + INodeProperties, +} from 'n8n-workflow'; + +export class OktaApi implements ICredentialType { + name = 'oktaApi'; + + displayName = 'Okta API'; + + icon = 'file:icons/Okta.svg'; + + properties: INodeProperties[] = [ + { + displayName: 'URL', + name: 'url', + type: 'string', + required: true, + default: '', + placeholder: 'https://dev-123456.okta.com', + }, + { + displayName: 'SSWS Access Token', + name: 'accessToken', + type: 'string', + typeOptions: { password: true }, + required: true, + default: '', + }, + ]; + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + headers: { + Authorization: '=SSWS {{$credentials.accessToken}}', + }, + }, + }; + + test: ICredentialTestRequest = { + request: { + baseURL: '={{$credentials.url}}', + url: '/api/v1/api-tokens', + }, + }; +} diff --git a/packages/nodes-base/credentials/OpenCTIApi.credentials.ts b/packages/nodes-base/credentials/OpenCTIApi.credentials.ts new file mode 100644 index 000000000..661d30a95 --- /dev/null +++ b/packages/nodes-base/credentials/OpenCTIApi.credentials.ts @@ -0,0 +1,29 @@ +import type { IAuthenticateGeneric, ICredentialType, INodeProperties } from 'n8n-workflow'; + +export class OpenCTIApi implements ICredentialType { + name = 'openCtiApi'; + + displayName = 'OpenCTI API'; + + icon = 'file:icons/OpenCTI.png'; + + properties: INodeProperties[] = [ + { + displayName: 'API Key', + name: 'apiKey', + type: 'string', + typeOptions: { password: true }, + default: '', + required: true, + }, + ]; + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + headers: { + Authorization: '=Bearer {{$credentials.apiKey}}', + }, + }, + }; +} diff --git a/packages/nodes-base/credentials/QRadarApi.credentials.ts b/packages/nodes-base/credentials/QRadarApi.credentials.ts new file mode 100644 index 000000000..5301f8116 --- /dev/null +++ b/packages/nodes-base/credentials/QRadarApi.credentials.ts @@ -0,0 +1,31 @@ +import type { IAuthenticateGeneric, ICredentialType, INodeProperties } from 'n8n-workflow'; + +export class QRadarApi implements ICredentialType { + name = 'qRadarApi'; + + displayName = 'QRadar API'; + + icon = 'file:icons/IBM.svg'; + + documentationUrl = 'qradar'; + + properties: INodeProperties[] = [ + { + displayName: 'API Key', + name: 'apiKey', + type: 'string', + typeOptions: { password: true }, + required: true, + default: '', + }, + ]; + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + headers: { + SEC: '={{$credentials.apiKey}}', + }, + }, + }; +} diff --git a/packages/nodes-base/credentials/QualysApi.credentials.ts b/packages/nodes-base/credentials/QualysApi.credentials.ts new file mode 100644 index 000000000..001a1d4dd --- /dev/null +++ b/packages/nodes-base/credentials/QualysApi.credentials.ts @@ -0,0 +1,56 @@ +import type { IAuthenticateGeneric, ICredentialType, INodeProperties } from 'n8n-workflow'; + +export class QualysApi implements ICredentialType { + name = 'qualysApi'; + + displayName = 'Qualys API'; + + icon = 'file:icons/Qualys.svg'; + + documentationUrl = 'qualys'; + + properties: INodeProperties[] = [ + { + displayName: 'Username', + name: 'username', + type: 'string', + default: '', + required: true, + }, + { + displayName: 'Password', + name: 'password', + type: 'string', + typeOptions: { password: true }, + default: '', + required: true, + }, + { + displayName: 'Requested With', + name: 'requestedWith', + type: 'string', + default: 'n8n application', + description: 'User description, like a user agent', + }, + ]; + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + headers: { + 'X-Requested-With': '={{$credentials.requestedWith}}', + }, + auth: { + username: '={{$credentials.username}}', + password: '={{$credentials.password}}', + }, + }, + }; + + // test: ICredentialTestRequest = { + // request: { + // baseURL: 'https://qualysapi.qualys.com', + // url: '/api/2.0/fo/asset/host/?action=list', + // }, + // }; +} diff --git a/packages/nodes-base/credentials/RecordedFutureApi.credentials.ts b/packages/nodes-base/credentials/RecordedFutureApi.credentials.ts new file mode 100644 index 000000000..bca6c952a --- /dev/null +++ b/packages/nodes-base/credentials/RecordedFutureApi.credentials.ts @@ -0,0 +1,38 @@ +import type { IAuthenticateGeneric, ICredentialType, INodeProperties } from 'n8n-workflow'; + +export class RecordedFutureApi implements ICredentialType { + name = 'recordedFutureApi'; + + displayName = 'Recorded Future API'; + + documentationUrl = 'recordedfuture'; + + icon = 'file:icons/RecordedFuture.svg'; + + properties: INodeProperties[] = [ + { + displayName: 'Access Token', + name: 'apiKey', + type: 'string', + typeOptions: { password: true }, + required: true, + default: '', + }, + ]; + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + headers: { + 'X-RFToken': '={{$credentials.accessToken}}', + }, + }, + }; + + // test: ICredentialTestRequest = { + // request: { + // baseURL: 'https://api.recordedfuture.com/v2', + // url: '/alert/search?limit=1', + // }, + // }; +} diff --git a/packages/nodes-base/credentials/SekoiaApi.credentials.ts b/packages/nodes-base/credentials/SekoiaApi.credentials.ts new file mode 100644 index 000000000..33b8fb3be --- /dev/null +++ b/packages/nodes-base/credentials/SekoiaApi.credentials.ts @@ -0,0 +1,31 @@ +import type { IAuthenticateGeneric, ICredentialType, INodeProperties } from 'n8n-workflow'; + +export class SekoiaApi implements ICredentialType { + name = 'sekoiaApi'; + + displayName = 'Sekoia API'; + + icon = 'file:icons/Sekoia.svg'; + + documentationUrl = 'sekoia'; + + properties: INodeProperties[] = [ + { + displayName: 'API Key', + name: 'apiKey', + type: 'string', + typeOptions: { password: true }, + required: true, + default: '', + }, + ]; + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + headers: { + Authorization: '=Bearer {{$credentials.apiKey}}', + }, + }, + }; +} diff --git a/packages/nodes-base/credentials/ShufflerApi.credentials.ts b/packages/nodes-base/credentials/ShufflerApi.credentials.ts new file mode 100644 index 000000000..0c4014ee5 --- /dev/null +++ b/packages/nodes-base/credentials/ShufflerApi.credentials.ts @@ -0,0 +1,44 @@ +import type { + IAuthenticateGeneric, + ICredentialTestRequest, + ICredentialType, + INodeProperties, +} from 'n8n-workflow'; + +export class ShufflerApi implements ICredentialType { + name = 'shufflerApi'; + + displayName = 'Shuffler API'; + + icon = 'file:icons/Shuffler.svg'; + + documentationUrl = 'shuffler'; + + properties: INodeProperties[] = [ + { + displayName: 'API Key', + name: 'apiKey', + type: 'string', + typeOptions: { password: true }, + required: true, + default: '', + }, + ]; + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + headers: { + Authorization: '=Bearer {{$credentials.apiKey}}', + }, + }, + }; + + test: ICredentialTestRequest = { + request: { + baseURL: 'https://shuffler.io/api', + url: '/v1/users/getusers', + method: 'GET', + }, + }; +} diff --git a/packages/nodes-base/credentials/TrellixEpoApi.credentials.ts b/packages/nodes-base/credentials/TrellixEpoApi.credentials.ts new file mode 100644 index 000000000..4048bca44 --- /dev/null +++ b/packages/nodes-base/credentials/TrellixEpoApi.credentials.ts @@ -0,0 +1,37 @@ +import type { IAuthenticateGeneric, ICredentialType, INodeProperties } from 'n8n-workflow'; + +export class TrellixEpoApi implements ICredentialType { + name = 'trellixEpoApi'; + + displayName = 'Trellix (McAfee) ePolicy Orchestrator API'; + + icon = 'file:icons/Trellix.svg'; + + properties: INodeProperties[] = [ + { + displayName: 'Username', + name: 'username', + type: 'string', + default: '', + required: true, + }, + { + displayName: 'Password', + name: 'password', + type: 'string', + typeOptions: { password: true }, + default: '', + required: true, + }, + ]; + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + auth: { + username: '={{$credentials.username}}', + password: '={{$credentials.password}}', + }, + }, + }; +} diff --git a/packages/nodes-base/credentials/VirusTotalApi.credentials.ts b/packages/nodes-base/credentials/VirusTotalApi.credentials.ts new file mode 100644 index 000000000..5c42221f3 --- /dev/null +++ b/packages/nodes-base/credentials/VirusTotalApi.credentials.ts @@ -0,0 +1,41 @@ +import type { + IAuthenticateGeneric, + ICredentialTestRequest, + ICredentialType, + INodeProperties, +} from 'n8n-workflow'; + +export class VirusTotalApi implements ICredentialType { + name = 'virusTotalApi'; + + displayName = 'Virus Total API'; + + icon = 'file:icons/VirusTotal.svg'; + + properties: INodeProperties[] = [ + { + displayName: 'API Token', + name: 'accessToken', + type: 'string', + typeOptions: { password: true }, + required: true, + default: '', + }, + ]; + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + headers: { + 'x-apikey': '={{$credentials.accessToken}}', + }, + }, + }; + + test: ICredentialTestRequest = { + request: { + baseURL: 'https://www.virustotal.com/api/v3', + url: '/popular_threat_categories', + }, + }; +} diff --git a/packages/nodes-base/credentials/ZscalerZiaApi.credentials.ts b/packages/nodes-base/credentials/ZscalerZiaApi.credentials.ts new file mode 100644 index 000000000..5fa2efed2 --- /dev/null +++ b/packages/nodes-base/credentials/ZscalerZiaApi.credentials.ts @@ -0,0 +1,137 @@ +import type { + IAuthenticateGeneric, + ICredentialDataDecryptedObject, + ICredentialTestRequest, + ICredentialType, + IHttpRequestHelper, + INodeProperties, +} from 'n8n-workflow'; + +export class ZscalerZiaApi implements ICredentialType { + name = 'zscalerZiaApi'; + + displayName = 'Zscaler ZIA API'; + + documentationUrl = 'zscaler'; + + icon = 'file:icons/Zscaler.svg'; + + properties: INodeProperties[] = [ + { + displayName: 'Cookie', + name: 'cookie', + type: 'hidden', + typeOptions: { + expirable: true, + }, + default: '', + }, + { + displayName: 'Base URL', + name: 'baseUrl', + type: 'string', + default: '', + placeholder: 'e.g. zsapi.zscalerthree.net', + required: true, + }, + { + displayName: 'Username', + name: 'username', + type: 'string', + default: '', + required: true, + }, + { + displayName: 'Password', + name: 'password', + type: 'string', + typeOptions: { password: true }, + default: '', + required: true, + }, + { + displayName: 'Api Key', + name: 'apiKey', + type: 'string', + typeOptions: { + password: true, + }, + default: '', + required: true, + }, + ]; + + async preAuthentication(this: IHttpRequestHelper, credentials: ICredentialDataDecryptedObject) { + const { baseUrl, username, password, apiKey } = credentials; + + const url = (baseUrl as string).endsWith('/') + ? (baseUrl as string).slice(0, -1) + : (baseUrl as string); + + const now = Date.now().toString(); + + const obfuscate = (key: string, timestamp: string) => { + const high = timestamp.substring(timestamp.length - 6); + let low = (parseInt(high) >> 1).toString(); + + let obfuscatedApiKey = ''; + while (low.length < 6) { + low = '0' + low; + } + + for (let i = 0; i < high.length; i++) { + obfuscatedApiKey += key.charAt(parseInt(high.charAt(i))); + } + for (let j = 0; j < low.length; j++) { + obfuscatedApiKey += key.charAt(parseInt(low.charAt(j)) + 2); + } + + return obfuscatedApiKey; + }; + + const response = await this.helpers.httpRequest({ + method: 'POST', + baseURL: `https://${url}`, + url: '/api/v1/authenticatedSession', + headers: { + 'Content-Type': 'application/json', + 'Cache-Control': 'no-cache', + }, + body: { + apiKey: obfuscate(apiKey as string, now), + username, + password, + timestamp: now, + }, + returnFullResponse: true, + }); + + const headers = response.headers; + + const cookie = (headers['set-cookie'] as string[]) + ?.find((entrt) => entrt.includes('JSESSIONID')) + ?.split(';') + ?.find((entry) => entry.includes('JSESSIONID')); + + if (!cookie) { + throw new Error('No cookie returned. Please check your credentials.'); + } + + return { cookie }; + } + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + headers: { + Cookie: '={{$credentials.cookie}}', + }, + }, + }; + + test: ICredentialTestRequest = { + request: { + url: '=https://{{$credentials.baseUrl}}/api/v1/authSettings/exemptedUrls', + }, + }; +} diff --git a/packages/nodes-base/credentials/AWS.svg b/packages/nodes-base/credentials/icons/AWS.svg similarity index 100% rename from packages/nodes-base/credentials/AWS.svg rename to packages/nodes-base/credentials/icons/AWS.svg diff --git a/packages/nodes-base/credentials/icons/AlienVault.png b/packages/nodes-base/credentials/icons/AlienVault.png new file mode 100644 index 0000000000000000000000000000000000000000..c3982d6bf2ed7aecdae0eacca26d7eb5909637fa GIT binary patch literal 2705 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 + + diff --git a/packages/nodes-base/credentials/icons/Azure.svg b/packages/nodes-base/credentials/icons/Azure.svg new file mode 100644 index 000000000..e24e2189c --- /dev/null +++ b/packages/nodes-base/credentials/icons/Azure.svg @@ -0,0 +1,27 @@ + + + Azure + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/nodes-base/credentials/icons/Cisco.svg b/packages/nodes-base/credentials/icons/Cisco.svg new file mode 100644 index 000000000..b1f6ae27b --- /dev/null +++ b/packages/nodes-base/credentials/icons/Cisco.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + diff --git a/packages/nodes-base/credentials/icons/CrowdStrike.svg b/packages/nodes-base/credentials/icons/CrowdStrike.svg new file mode 100644 index 000000000..1b2195a22 --- /dev/null +++ b/packages/nodes-base/credentials/icons/CrowdStrike.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/nodes-base/credentials/icons/F5.svg b/packages/nodes-base/credentials/icons/F5.svg new file mode 100644 index 000000000..46c1a095d --- /dev/null +++ b/packages/nodes-base/credentials/icons/F5.svg @@ -0,0 +1,11 @@ + + + F5 Logo + + \ No newline at end of file diff --git a/packages/nodes-base/credentials/icons/Fortinet.svg b/packages/nodes-base/credentials/icons/Fortinet.svg new file mode 100644 index 000000000..6224b4c6b --- /dev/null +++ b/packages/nodes-base/credentials/icons/Fortinet.svg @@ -0,0 +1,7 @@ + + fortinet-logo-svg + + + \ No newline at end of file diff --git a/packages/nodes-base/credentials/Google.svg b/packages/nodes-base/credentials/icons/Google.svg similarity index 100% rename from packages/nodes-base/credentials/Google.svg rename to packages/nodes-base/credentials/icons/Google.svg diff --git a/packages/nodes-base/credentials/icons/Hybrid.png b/packages/nodes-base/credentials/icons/Hybrid.png new file mode 100644 index 0000000000000000000000000000000000000000..f7d4695e4b7af86722d3861715c71416ac8fe3b3 GIT binary patch literal 22622 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/nodes-base/credentials/icons/Imperva.svg b/packages/nodes-base/credentials/icons/Imperva.svg new file mode 100644 index 000000000..73f19ccaf --- /dev/null +++ b/packages/nodes-base/credentials/icons/Imperva.svg @@ -0,0 +1,51 @@ + + diff --git a/packages/nodes-base/credentials/icons/Kibana.svg b/packages/nodes-base/credentials/icons/Kibana.svg new file mode 100644 index 000000000..a81cff70d --- /dev/null +++ b/packages/nodes-base/credentials/icons/Kibana.svg @@ -0,0 +1,9 @@ + + + Kibana + + + + + + diff --git a/packages/nodes-base/credentials/Microsoft.svg b/packages/nodes-base/credentials/icons/Microsoft.svg similarity index 100% rename from packages/nodes-base/credentials/Microsoft.svg rename to packages/nodes-base/credentials/icons/Microsoft.svg diff --git a/packages/nodes-base/credentials/icons/Mist.svg b/packages/nodes-base/credentials/icons/Mist.svg new file mode 100644 index 000000000..a0b9fcbe8 --- /dev/null +++ b/packages/nodes-base/credentials/icons/Mist.svg @@ -0,0 +1,111 @@ + + + + diff --git a/packages/nodes-base/credentials/icons/Okta.svg b/packages/nodes-base/credentials/icons/Okta.svg new file mode 100644 index 000000000..0653992a7 --- /dev/null +++ b/packages/nodes-base/credentials/icons/Okta.svg @@ -0,0 +1,7 @@ + + + okta + + + + diff --git a/packages/nodes-base/credentials/icons/OpenCTI.png b/packages/nodes-base/credentials/icons/OpenCTI.png new file mode 100644 index 0000000000000000000000000000000000000000..0a85e2ff10d86e5e2e7b36de5d669674d5d4924b GIT binary patch literal 25426 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 literal 0 HcmV?d00001 diff --git a/packages/nodes-base/credentials/icons/Qualys.svg b/packages/nodes-base/credentials/icons/Qualys.svg new file mode 100644 index 000000000..cccb850db --- /dev/null +++ b/packages/nodes-base/credentials/icons/Qualys.svg @@ -0,0 +1,9 @@ + + qualys-svg + + + + \ No newline at end of file diff --git a/packages/nodes-base/credentials/icons/RecordedFuture.svg b/packages/nodes-base/credentials/icons/RecordedFuture.svg new file mode 100644 index 000000000..65e5c7606 --- /dev/null +++ b/packages/nodes-base/credentials/icons/RecordedFuture.svg @@ -0,0 +1,42 @@ + + + + diff --git a/packages/nodes-base/credentials/icons/Sekoia.svg b/packages/nodes-base/credentials/icons/Sekoia.svg new file mode 100644 index 000000000..5e5776aba --- /dev/null +++ b/packages/nodes-base/credentials/icons/Sekoia.svg @@ -0,0 +1,44 @@ + + + + + + diff --git a/packages/nodes-base/credentials/icons/Shuffler.svg b/packages/nodes-base/credentials/icons/Shuffler.svg new file mode 100644 index 000000000..1024dd6a8 --- /dev/null +++ b/packages/nodes-base/credentials/icons/Shuffler.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/nodes-base/credentials/icons/Trellix.svg b/packages/nodes-base/credentials/icons/Trellix.svg new file mode 100644 index 000000000..e7be58a81 --- /dev/null +++ b/packages/nodes-base/credentials/icons/Trellix.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/nodes-base/credentials/icons/VirusTotal.svg b/packages/nodes-base/credentials/icons/VirusTotal.svg new file mode 100644 index 000000000..3449afe23 --- /dev/null +++ b/packages/nodes-base/credentials/icons/VirusTotal.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/nodes-base/credentials/icons/Wazuh.png b/packages/nodes-base/credentials/icons/Wazuh.png new file mode 100644 index 0000000000000000000000000000000000000000..1254166bab570fc9c3e1ee29a9332f3253b4d167 GIT binary patch literal 3494 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 KL504{%l`mY9k!_e literal 0 HcmV?d00001 diff --git a/packages/nodes-base/credentials/icons/Zscaler.svg b/packages/nodes-base/credentials/icons/Zscaler.svg new file mode 100644 index 000000000..cb38a9bc0 --- /dev/null +++ b/packages/nodes-base/credentials/icons/Zscaler.svg @@ -0,0 +1,9 @@ + + logo (34)-svg + + + + + \ No newline at end of file diff --git a/packages/nodes-base/credentials/icons/vmware.svg b/packages/nodes-base/credentials/icons/vmware.svg new file mode 100644 index 000000000..2996b461a --- /dev/null +++ b/packages/nodes-base/credentials/icons/vmware.svg @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/packages/nodes-base/package.json b/packages/nodes-base/package.json index b1f75df8a..71985ce85 100644 --- a/packages/nodes-base/package.json +++ b/packages/nodes-base/package.json @@ -41,10 +41,12 @@ "dist/credentials/AirtableApi.credentials.js", "dist/credentials/AirtableOAuth2Api.credentials.js", "dist/credentials/AirtableTokenApi.credentials.js", + "dist/credentials/AlienVaultApi.credentials.js", "dist/credentials/Amqp.credentials.js", "dist/credentials/ApiTemplateIoApi.credentials.js", "dist/credentials/AsanaApi.credentials.js", "dist/credentials/AsanaOAuth2Api.credentials.js", + "dist/credentials/Auth0ManagementApi.credentials.js", "dist/credentials/AutomizyApi.credentials.js", "dist/credentials/AutopilotApi.credentials.js", "dist/credentials/Aws.credentials.js", @@ -61,9 +63,13 @@ "dist/credentials/BubbleApi.credentials.js", "dist/credentials/CalApi.credentials.js", "dist/credentials/CalendlyApi.credentials.js", + "dist/credentials/CarbonBlackApi.credentials.js", "dist/credentials/ChargebeeApi.credentials.js", "dist/credentials/CircleCiApi.credentials.js", + "dist/credentials/CiscoMerakiApi.credentials.js", + "dist/credentials/CiscoSecureEndpointApi.credentials.js", "dist/credentials/CiscoWebexOAuth2Api.credentials.js", + "dist/credentials/CiscoUmbrellaApi.credentials.js", "dist/credentials/CitrixAdcApi.credentials.js", "dist/credentials/CloudflareApi.credentials.js", "dist/credentials/ClearbitApi.credentials.js", @@ -77,6 +83,7 @@ "dist/credentials/CopperApi.credentials.js", "dist/credentials/CortexApi.credentials.js", "dist/credentials/CrateDb.credentials.js", + "dist/credentials/CrowdStrikeOAuth2Api.credentials.js", "dist/credentials/CrowdDevApi.credentials.js", "dist/credentials/CustomerIoApi.credentials.js", "dist/credentials/DeepLApi.credentials.js", @@ -96,6 +103,7 @@ "dist/credentials/ERPNextApi.credentials.js", "dist/credentials/EventbriteApi.credentials.js", "dist/credentials/EventbriteOAuth2Api.credentials.js", + "dist/credentials/F5BigIpApi.credentials.js", "dist/credentials/FacebookGraphApi.credentials.js", "dist/credentials/FacebookGraphAppApi.credentials.js", "dist/credentials/FigmaApi.credentials.js", @@ -104,6 +112,7 @@ "dist/credentials/FormIoApi.credentials.js", "dist/credentials/FormstackApi.credentials.js", "dist/credentials/FormstackOAuth2Api.credentials.js", + "dist/credentials/FortiGateApi.credentials.js", "dist/credentials/FreshdeskApi.credentials.js", "dist/credentials/FreshserviceApi.credentials.js", "dist/credentials/FreshworksCrmApi.credentials.js", @@ -161,7 +170,9 @@ "dist/credentials/HubspotOAuth2Api.credentials.js", "dist/credentials/HumanticAiApi.credentials.js", "dist/credentials/HunterApi.credentials.js", + "dist/credentials/HybridAnalysisApi.credentials.js", "dist/credentials/Imap.credentials.js", + "dist/credentials/ImpervaWafApi.credentials.js", "dist/credentials/IntercomApi.credentials.js", "dist/credentials/InvoiceNinjaApi.credentials.js", "dist/credentials/IterableApi.credentials.js", @@ -171,6 +182,7 @@ "dist/credentials/JotFormApi.credentials.js", "dist/credentials/Kafka.credentials.js", "dist/credentials/KeapOAuth2Api.credentials.js", + "dist/credentials/KibanaApi.credentials.js", "dist/credentials/KitemakerApi.credentials.js", "dist/credentials/KoBoToolboxApi.credentials.js", "dist/credentials/Ldap.credentials.js", @@ -200,6 +212,7 @@ "dist/credentials/MessageBirdApi.credentials.js", "dist/credentials/MetabaseApi.credentials.js", "dist/credentials/MicrosoftDynamicsOAuth2Api.credentials.js", + "dist/credentials/MicrosoftEntraOAuth2Api.credentials.js", "dist/credentials/MicrosoftExcelOAuth2Api.credentials.js", "dist/credentials/MicrosoftGraphSecurityOAuth2Api.credentials.js", "dist/credentials/MicrosoftOAuth2Api.credentials.js", @@ -211,6 +224,7 @@ "dist/credentials/MindeeInvoiceApi.credentials.js", "dist/credentials/MindeeReceiptApi.credentials.js", "dist/credentials/MispApi.credentials.js", + "dist/credentials/MistApi.credentials.js", "dist/credentials/MoceanApi.credentials.js", "dist/credentials/MondayComApi.credentials.js", "dist/credentials/MondayComOAuth2Api.credentials.js", @@ -232,9 +246,11 @@ "dist/credentials/OAuth1Api.credentials.js", "dist/credentials/OAuth2Api.credentials.js", "dist/credentials/OdooApi.credentials.js", + "dist/credentials/OktaApi.credentials.js", "dist/credentials/OneSimpleApi.credentials.js", "dist/credentials/OnfleetApi.credentials.js", "dist/credentials/OpenAiApi.credentials.js", + "dist/credentials/OpenCTIApi.credentials.js", "dist/credentials/OpenWeatherMapApi.credentials.js", "dist/credentials/OrbitApi.credentials.js", "dist/credentials/OuraApi.credentials.js", @@ -255,11 +271,14 @@ "dist/credentials/PushbulletOAuth2Api.credentials.js", "dist/credentials/PushcutApi.credentials.js", "dist/credentials/PushoverApi.credentials.js", + "dist/credentials/QRadarApi.credentials.js", + "dist/credentials/QualysApi.credentials.js", "dist/credentials/QuestDb.credentials.js", "dist/credentials/QuickBaseApi.credentials.js", "dist/credentials/QuickBooksOAuth2Api.credentials.js", "dist/credentials/RabbitMQ.credentials.js", "dist/credentials/RaindropOAuth2Api.credentials.js", + "dist/credentials/RecordedFutureApi.credentials.js", "dist/credentials/RedditOAuth2Api.credentials.js", "dist/credentials/Redis.credentials.js", "dist/credentials/RocketchatApi.credentials.js", @@ -271,6 +290,7 @@ "dist/credentials/SeaTableApi.credentials.js", "dist/credentials/SecurityScorecardApi.credentials.js", "dist/credentials/SegmentApi.credentials.js", + "dist/credentials/SekoiaApi.credentials.js", "dist/credentials/SendGridApi.credentials.js", "dist/credentials/BrevoApi.credentials.js", "dist/credentials/SendyApi.credentials.js", @@ -292,6 +312,7 @@ "dist/credentials/SplunkApi.credentials.js", "dist/credentials/SpontitApi.credentials.js", "dist/credentials/SpotifyOAuth2Api.credentials.js", + "dist/credentials/ShufflerApi.credentials.js", "dist/credentials/SshPassword.credentials.js", "dist/credentials/SshPrivateKey.credentials.js", "dist/credentials/StackbyApi.credentials.js", @@ -314,6 +335,7 @@ "dist/credentials/TogglApi.credentials.js", "dist/credentials/TotpApi.credentials.js", "dist/credentials/TravisCiApi.credentials.js", + "dist/credentials/TrellixEpoApi.credentials.js", "dist/credentials/TrelloApi.credentials.js", "dist/credentials/TwakeCloudApi.credentials.js", "dist/credentials/TwakeServerApi.credentials.js", @@ -329,6 +351,7 @@ "dist/credentials/UptimeRobotApi.credentials.js", "dist/credentials/UrlScanIoApi.credentials.js", "dist/credentials/VeroApi.credentials.js", + "dist/credentials/VirusTotalApi.credentials.js", "dist/credentials/VonageApi.credentials.js", "dist/credentials/VenafiTlsProtectCloudApi.credentials.js", "dist/credentials/VenafiTlsProtectDatacenterApi.credentials.js", @@ -351,6 +374,7 @@ "dist/credentials/ZohoOAuth2Api.credentials.js", "dist/credentials/ZoomApi.credentials.js", "dist/credentials/ZoomOAuth2Api.credentials.js", + "dist/credentials/ZscalerZiaApi.credentials.js", "dist/credentials/ZulipApi.credentials.js" ], "nodes": [