feat(ERPNext Node): Add credential test and add support for unauthorized certs (#3732)

*  Add cred injection, cred testing, allow unauthorized certs

* Add support for skipping SSL for cred testing

* 📘 Add partial override for request options types (#3739)

* Change field names and fix error handling

* Fix typo

Co-authored-by: Omar Ajoue <krynble@gmail.com>
Co-authored-by: Iván Ovejero <ivov.src@gmail.com>
This commit is contained in:
agobrech
2022-07-20 13:50:16 +02:00
committed by GitHub
parent 1965407030
commit a02b206170
6 changed files with 71 additions and 39 deletions

View File

@@ -1,4 +1,6 @@
import {
IAuthenticateGeneric,
ICredentialTestRequest,
ICredentialType,
INodeProperties,
} from 'n8n-workflow';
@@ -66,5 +68,27 @@ export class ERPNextApi implements ICredentialType {
},
},
},
{
displayName: 'Ignore SSL Issues',
name: 'allowUnauthorizedCerts',
type: 'boolean',
description: 'Whether to connect even if SSL certificate validation is not possible',
default: false,
},
];
authenticate: IAuthenticateGeneric = {
type: 'generic',
properties: {
headers: {
Authorization: '=token {{$credentials.apiKey}}:{{$credentials.apiSecret}}',
},
},
};
test: ICredentialTestRequest = {
request: {
baseURL: '={{$credentials.environment === "cloudHosted" ? "https://" + $credentials.subdomain + ".erpnext.com" : $credentials.domain}}',
url: '/api/resource/Doctype',
skipSslCertificateValidation: '={{ $credentials.allowUnauthorizedCerts }}',
},
};
}

View File

@@ -12,7 +12,6 @@ import {
IHookFunctions,
IWebhookFunctions,
NodeApiError,
NodeOperationError
} from 'n8n-workflow';
export async function erpNextApiRequest(
@@ -31,13 +30,13 @@ export async function erpNextApiRequest(
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
Authorization: `token ${credentials.apiKey}:${credentials.apiSecret}`,
},
method,
body,
qs: query,
uri: uri || `${baseUrl}${resource}`,
json: true,
rejectUnauthorized: !credentials.allowUnauthorizedCerts as boolean,
};
options = Object.assign({}, options, option);
@@ -50,7 +49,7 @@ export async function erpNextApiRequest(
delete options.qs;
}
try {
return await this.helpers.request!(options);
return await this.helpers.requestWithAuthentication.call(this, 'erpNextApi',options);
} catch (error) {
if (error.statusCode === 403) {
throw new NodeApiError(this.getNode(), { message: 'DocType unavailable.' });
@@ -105,4 +104,5 @@ type ERPNextApiCredentials = {
environment: 'cloudHosted' | 'selfHosted';
subdomain?: string;
domain?: string;
allowUnauthorizedCerts?: boolean;
};