Add parameter to include credentials in querystring (Woocommerce) (#1756)

This commit is contained in:
Ricardo Espinoza 2021-05-12 00:20:40 -04:00 committed by GitHub
parent 7bc79c879d
commit c632f7982f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 22 additions and 6 deletions

View file

@ -27,5 +27,14 @@ export class WooCommerceApi implements ICredentialType {
default: '',
placeholder: 'https://example.com',
},
{
displayName: 'Include Credentials in Query',
name: 'includeCredentialsInQuery',
type: 'boolean' as NodePropertyTypes,
default: false,
description: `Occasionally, some servers may not parse the Authorization header correctly</br>
(if you see a Consumer key is missing error when authenticating over SSL, you have a server issue).</br>
In this case, you may provide the consumer key/secret as query string parameters instead.`,
},
];
}

View file

@ -9,6 +9,7 @@ import {
ILoadOptionsFunctions,
IWebhookFunctions,
} from 'n8n-core';
import {
ICredentialDataDecryptedObject,
IDataObject,
@ -36,6 +37,7 @@ export async function woocommerceApiRequest(this: IHookFunctions | IExecuteFunct
if (credentials === undefined) {
throw new NodeOperationError(this.getNode(), 'No credentials got returned!');
}
let options: OptionsWithUri = {
auth: {
user: credentials.consumerKey as string,
@ -47,11 +49,16 @@ export async function woocommerceApiRequest(this: IHookFunctions | IExecuteFunct
uri: uri || `${credentials.url}/wp-json/wc/v3${resource}`,
json: true,
};
if (credentials.includeCredentialsInQuery === true) {
delete options.auth;
Object.assign(qs, { consumer_key: credentials.consumerKey, consumer_secret: credentials.consumerSecret });
}
if (!Object.keys(body).length) {
delete options.form;
}
options = Object.assign({}, options, option);
try {
return await this.helpers.request!(options);
} catch (error) {

View file

@ -367,7 +367,7 @@ export class WooCommerce implements INodeType {
//https://woocommerce.github.io/woocommerce-rest-api-docs/#retrieve-a-product
if (operation === 'get') {
const productId = this.getNodeParameter('productId', i) as string;
responseData = await woocommerceApiRequest.call(this,'GET', `/products/${productId}`, {}, qs);
responseData = await woocommerceApiRequest.call(this, 'GET', `/products/${productId}`, {}, qs);
}
//https://woocommerce.github.io/woocommerce-rest-api-docs/#list-all-products
if (operation === 'getAll') {
@ -413,7 +413,7 @@ export class WooCommerce implements INodeType {
qs.status = options.status as string;
}
if (options.stockStatus) {
qs.stock_status = options.stockStatus as string;
qs.stock_status = options.stockStatus as string;
}
if (options.tag) {
qs.tag = options.tag as string;
@ -434,7 +434,7 @@ export class WooCommerce implements INodeType {
//https://woocommerce.github.io/woocommerce-rest-api-docs/#delete-a-product
if (operation === 'delete') {
const productId = this.getNodeParameter('productId', i) as string;
responseData = await woocommerceApiRequest.call(this,'DELETE', `/products/${productId}`, {}, { force: true });
responseData = await woocommerceApiRequest.call(this, 'DELETE', `/products/${productId}`, {}, { force: true });
}
}
if (resource === 'order') {
@ -583,7 +583,7 @@ export class WooCommerce implements INodeType {
//https://woocommerce.github.io/woocommerce-rest-api-docs/#retrieve-an-order
if (operation === 'get') {
const orderId = this.getNodeParameter('orderId', i) as string;
responseData = await woocommerceApiRequest.call(this,'GET', `/orders/${orderId}`, {}, qs);
responseData = await woocommerceApiRequest.call(this, 'GET', `/orders/${orderId}`, {}, qs);
}
//https://woocommerce.github.io/woocommerce-rest-api-docs/#list-all-orders
if (operation === 'getAll') {
@ -629,7 +629,7 @@ export class WooCommerce implements INodeType {
//https://woocommerce.github.io/woocommerce-rest-api-docs/#delete-an-order
if (operation === 'delete') {
const orderId = this.getNodeParameter('orderId', i) as string;
responseData = await woocommerceApiRequest.call(this,'DELETE', `/orders/${orderId}`, {}, { force: true });
responseData = await woocommerceApiRequest.call(this, 'DELETE', `/orders/${orderId}`, {}, { force: true });
}
}
if (Array.isArray(responseData)) {