feat(Shopify Node): Add OAuth support (#3389)

*  wip

*  Add includeAccessTokenInHeader option to OAuth2

* 🔨 fixed build error, fixed trigger node when using token auth

* 🔨 fixed trigger when using oauth2

* 🔨 changed default auth method to access token

*  Improvements

*  Improvements

*  Improvements

*  Rename includeAccessTokenInHeader to keyToIncludeInAccessTokenHeader

*  Assign values to only header property

* 🔥 Remove unreachable code

*  Add keyToIncludeInAccessTokenHeader when isN8nRequest

*  Add CC grant type when isN8nRequest

Co-authored-by: Ricardo Espinoza <ricardo@n8n.io>
Co-authored-by: ricardo <ricardoespinoza105@gmail.com>
Co-authored-by: Jan Oberhauser <janober@users.noreply.github.com>
This commit is contained in:
Michael Kret
2022-07-15 11:36:01 +03:00
committed by GitHub
parent 74064325c8
commit 945e25a77c
9 changed files with 333 additions and 12 deletions

View File

@@ -0,0 +1,51 @@
import {
IAuthenticateGeneric,
ICredentialTestRequest,
ICredentialType,
INodeProperties,
} from 'n8n-workflow';
export class ShopifyAccessTokenApi implements ICredentialType {
name = 'shopifyAccessTokenApi';
displayName = 'Shopify Access Token API';
documentationUrl = 'shopify';
properties: INodeProperties[] = [
{
displayName: 'Shop Subdomain',
name: 'shopSubdomain',
required: true,
type: 'string',
default: '',
description: 'Only the subdomain without .myshopify.com',
},
{
displayName: 'Access Token',
name: 'accessToken',
required: true,
type: 'string',
default: '',
},
{
displayName: 'APP Secret Key',
name: 'appSecretKey',
required: true,
type: 'string',
default: '',
description: 'Secret key needed to verify the webhook when using Shopify Trigger node',
},
];
authenticate: IAuthenticateGeneric = {
type: 'generic',
properties: {
headers: {
'X-Shopify-Access-Token': '={{$credentials?.accessToken}}',
},
},
};
test: ICredentialTestRequest = {
request: {
baseURL: '=https://{{$credentials?.shopSubdomain}}.myshopify.com/admin/api/2019-10',
url: '/products.json',
},
};
}

View File

@@ -0,0 +1,86 @@
import {
ICredentialType,
INodeProperties,
} from 'n8n-workflow';
export class ShopifyOAuth2Api implements ICredentialType {
name = 'shopifyOAuth2Api';
extends = [
'oAuth2Api',
];
displayName = 'Shopify OAuth2 API';
documentationUrl = 'shopify';
properties: INodeProperties[] = [
{
displayName: 'Shop Subdomain',
name: 'shopSubdomain',
required: true,
type: 'string',
default: '',
description: 'Only the subdomain without .myshopify.com',
},
{
displayName: 'Grant Type',
name: 'grantType',
type: 'hidden',
default: 'authorizationCode',
},
{
displayName: 'Client ID',
name: 'clientId',
type: 'string',
default: '',
required: true,
hint: 'Be aware that Shopify refers to the Client ID as API Key',
},
{
displayName: 'Client Secret',
name: 'clientSecret',
type: 'string',
typeOptions: {
password: true,
},
default: '',
required: true,
hint: 'Be aware that Shopify refers to the Client Secret as API Secret Key',
},
{
displayName: 'Grant Type',
name: 'grantType',
type: 'hidden',
default: 'authorizationCode',
},
{
displayName: 'Authorization URL',
name: 'authUrl',
type: 'hidden',
default: '=https://{{$self["shopSubdomain"]}}.myshopify.com/admin/oauth/authorize',
required: true,
},
{
displayName: 'Access Token URL',
name: 'accessTokenUrl',
type: 'hidden',
default: '=https://{{$self["shopSubdomain"]}}.myshopify.com/admin/oauth/access_token',
required: true,
},
{
displayName: 'Scope',
name: 'scope',
type: 'hidden',
default: 'write_orders read_orders write_products read_products',
},
{
displayName: 'Auth URI Query Parameters',
name: 'authQueryParameters',
type: 'hidden',
default: 'access_mode=value',
},
{
displayName: 'Authentication',
name: 'authentication',
type: 'hidden',
default: 'body',
},
];
}