From c632f7982f5c3d40213c3ca8790a9f65bdad40e1 Mon Sep 17 00:00:00 2001 From: Ricardo Espinoza Date: Wed, 12 May 2021 00:20:40 -0400 Subject: [PATCH] :zap: Add parameter to include credentials in querystring (Woocommerce) (#1756) --- .../credentials/WooCommerceApi.credentials.ts | 9 +++++++++ .../nodes-base/nodes/WooCommerce/GenericFunctions.ts | 9 ++++++++- .../nodes-base/nodes/WooCommerce/WooCommerce.node.ts | 10 +++++----- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/packages/nodes-base/credentials/WooCommerceApi.credentials.ts b/packages/nodes-base/credentials/WooCommerceApi.credentials.ts index aa3809f05c..9a95411cbf 100644 --- a/packages/nodes-base/credentials/WooCommerceApi.credentials.ts +++ b/packages/nodes-base/credentials/WooCommerceApi.credentials.ts @@ -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
+ (if you see a “Consumer key is missing” error when authenticating over SSL, you have a server issue).
+ In this case, you may provide the consumer key/secret as query string parameters instead.`, + }, ]; } diff --git a/packages/nodes-base/nodes/WooCommerce/GenericFunctions.ts b/packages/nodes-base/nodes/WooCommerce/GenericFunctions.ts index f08f6e272e..3e42c88505 100644 --- a/packages/nodes-base/nodes/WooCommerce/GenericFunctions.ts +++ b/packages/nodes-base/nodes/WooCommerce/GenericFunctions.ts @@ -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) { diff --git a/packages/nodes-base/nodes/WooCommerce/WooCommerce.node.ts b/packages/nodes-base/nodes/WooCommerce/WooCommerce.node.ts index 04c76fd4d0..025318bdcf 100644 --- a/packages/nodes-base/nodes/WooCommerce/WooCommerce.node.ts +++ b/packages/nodes-base/nodes/WooCommerce/WooCommerce.node.ts @@ -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)) {