mirror of
https://github.com/n8n-io/n8n.git
synced 2025-03-05 20:50:17 -08:00
fix(HTTP Request Node): fix oauth credentials not working properly for some predefined credentials (#4277)
This commit is contained in:
parent
a2a397e980
commit
aa6c786041
|
@ -1,4 +1,4 @@
|
||||||
import { INodeExecutionData } from 'n8n-workflow';
|
import { INodeExecutionData, IOAuth2Options } from 'n8n-workflow';
|
||||||
|
|
||||||
export const replaceNullValues = (item: INodeExecutionData) => {
|
export const replaceNullValues = (item: INodeExecutionData) => {
|
||||||
if (item.json === null) {
|
if (item.json === null) {
|
||||||
|
@ -6,3 +6,65 @@ export const replaceNullValues = (item: INodeExecutionData) => {
|
||||||
}
|
}
|
||||||
return item;
|
return item;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const getOAuth2AdditionalParameters = (nodeCredentialType: string) => {
|
||||||
|
const oAuth2Options: { [credentialType: string]: IOAuth2Options } = {
|
||||||
|
bitlyOAuth2Api: {
|
||||||
|
tokenType: 'Bearer',
|
||||||
|
},
|
||||||
|
boxOAuth2Api: {
|
||||||
|
includeCredentialsOnRefreshOnBody: true,
|
||||||
|
},
|
||||||
|
ciscoWebexOAuth2Api: {
|
||||||
|
tokenType: 'Bearer',
|
||||||
|
},
|
||||||
|
clickUpOAuth2Api: {
|
||||||
|
keepBearer: false,
|
||||||
|
tokenType: 'Bearer',
|
||||||
|
},
|
||||||
|
goToWebinarOAuth2Api: {
|
||||||
|
tokenExpiredStatusCode: 403,
|
||||||
|
},
|
||||||
|
hubspotDeveloperApi: {
|
||||||
|
tokenType: 'Bearer',
|
||||||
|
includeCredentialsOnRefreshOnBody: true,
|
||||||
|
},
|
||||||
|
hubspotOAuth2Api: {
|
||||||
|
tokenType: 'Bearer',
|
||||||
|
includeCredentialsOnRefreshOnBody: true,
|
||||||
|
},
|
||||||
|
lineNotifyOAuth2Api: {
|
||||||
|
tokenType: 'Bearer',
|
||||||
|
},
|
||||||
|
linkedInOAuth2Api: {
|
||||||
|
tokenType: 'Bearer',
|
||||||
|
},
|
||||||
|
mailchimpOAuth2Api: {
|
||||||
|
tokenType: 'Bearer',
|
||||||
|
},
|
||||||
|
mauticOAuth2Api: {
|
||||||
|
includeCredentialsOnRefreshOnBody: true,
|
||||||
|
},
|
||||||
|
microsoftDynamicsOAuth2Api: {
|
||||||
|
property: 'id_token',
|
||||||
|
},
|
||||||
|
philipsHueOAuth2Api: {
|
||||||
|
tokenType: 'Bearer',
|
||||||
|
},
|
||||||
|
raindropOAuth2Api: {
|
||||||
|
includeCredentialsOnRefreshOnBody: true,
|
||||||
|
},
|
||||||
|
shopifyOAuth2Api: {
|
||||||
|
tokenType: 'Bearer',
|
||||||
|
keyToIncludeInAccessTokenHeader: 'X-Shopify-Access-Token',
|
||||||
|
},
|
||||||
|
slackOAuth2Api: {
|
||||||
|
tokenType: 'Bearer',
|
||||||
|
property: 'authed_user.access_token',
|
||||||
|
},
|
||||||
|
stravaOAuth2Api: {
|
||||||
|
includeCredentialsOnRefreshOnBody: true,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
return oAuth2Options[nodeCredentialType];
|
||||||
|
};
|
||||||
|
|
|
@ -6,13 +6,12 @@ import {
|
||||||
INodeType,
|
INodeType,
|
||||||
INodeTypeBaseDescription,
|
INodeTypeBaseDescription,
|
||||||
INodeTypeDescription,
|
INodeTypeDescription,
|
||||||
IOAuth2Options,
|
|
||||||
NodeApiError,
|
NodeApiError,
|
||||||
NodeOperationError,
|
NodeOperationError,
|
||||||
} from 'n8n-workflow';
|
} from 'n8n-workflow';
|
||||||
|
|
||||||
import { OptionsWithUri } from 'request';
|
import { OptionsWithUri } from 'request';
|
||||||
import { replaceNullValues } from '../GenericFunctions';
|
import { getOAuth2AdditionalParameters, replaceNullValues } from '../GenericFunctions';
|
||||||
|
|
||||||
interface OptionData {
|
interface OptionData {
|
||||||
name: string;
|
name: string;
|
||||||
|
@ -1010,25 +1009,7 @@ export class HttpRequestV2 implements INodeType {
|
||||||
requestPromises.push(request);
|
requestPromises.push(request);
|
||||||
}
|
}
|
||||||
} else if (authentication === 'predefinedCredentialType' && nodeCredentialType) {
|
} else if (authentication === 'predefinedCredentialType' && nodeCredentialType) {
|
||||||
const oAuth2Options: { [credentialType: string]: IOAuth2Options } = {
|
const additionalOAuth2Options = getOAuth2AdditionalParameters(nodeCredentialType);
|
||||||
clickUpOAuth2Api: {
|
|
||||||
keepBearer: false,
|
|
||||||
tokenType: 'Bearer',
|
|
||||||
},
|
|
||||||
slackOAuth2Api: {
|
|
||||||
tokenType: 'Bearer',
|
|
||||||
property: 'authed_user.access_token',
|
|
||||||
},
|
|
||||||
boxOAuth2Api: {
|
|
||||||
includeCredentialsOnRefreshOnBody: true,
|
|
||||||
},
|
|
||||||
shopifyOAuth2Api: {
|
|
||||||
tokenType: 'Bearer',
|
|
||||||
keyToIncludeInAccessTokenHeader: 'X-Shopify-Access-Token',
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
const additionalOAuth2Options = oAuth2Options[nodeCredentialType];
|
|
||||||
|
|
||||||
// service-specific cred: OAuth1, OAuth2, plain
|
// service-specific cred: OAuth1, OAuth2, plain
|
||||||
const requestWithAuthentication = this.helpers.requestWithAuthentication.call(
|
const requestWithAuthentication = this.helpers.requestWithAuthentication.call(
|
||||||
|
|
|
@ -6,14 +6,13 @@ import {
|
||||||
INodeType,
|
INodeType,
|
||||||
INodeTypeBaseDescription,
|
INodeTypeBaseDescription,
|
||||||
INodeTypeDescription,
|
INodeTypeDescription,
|
||||||
IOAuth2Options,
|
|
||||||
NodeApiError,
|
NodeApiError,
|
||||||
NodeOperationError,
|
NodeOperationError,
|
||||||
} from 'n8n-workflow';
|
} from 'n8n-workflow';
|
||||||
|
|
||||||
import { OptionsWithUri } from 'request-promise-native';
|
import { OptionsWithUri } from 'request-promise-native';
|
||||||
|
|
||||||
import { replaceNullValues } from '../GenericFunctions';
|
import { getOAuth2AdditionalParameters, replaceNullValues } from '../GenericFunctions';
|
||||||
export class HttpRequestV3 implements INodeType {
|
export class HttpRequestV3 implements INodeType {
|
||||||
description: INodeTypeDescription;
|
description: INodeTypeDescription;
|
||||||
|
|
||||||
|
@ -1145,25 +1144,7 @@ export class HttpRequestV3 implements INodeType {
|
||||||
requestPromises.push(request);
|
requestPromises.push(request);
|
||||||
}
|
}
|
||||||
} else if (authentication === 'predefinedCredentialType' && nodeCredentialType) {
|
} else if (authentication === 'predefinedCredentialType' && nodeCredentialType) {
|
||||||
const oAuth2Options: { [credentialType: string]: IOAuth2Options } = {
|
const additionalOAuth2Options = getOAuth2AdditionalParameters(nodeCredentialType);
|
||||||
clickUpOAuth2Api: {
|
|
||||||
keepBearer: false,
|
|
||||||
tokenType: 'Bearer',
|
|
||||||
},
|
|
||||||
slackOAuth2Api: {
|
|
||||||
tokenType: 'Bearer',
|
|
||||||
property: 'authed_user.access_token',
|
|
||||||
},
|
|
||||||
boxOAuth2Api: {
|
|
||||||
includeCredentialsOnRefreshOnBody: true,
|
|
||||||
},
|
|
||||||
shopifyOAuth2Api: {
|
|
||||||
tokenType: 'Bearer',
|
|
||||||
keyToIncludeInAccessTokenHeader: 'X-Shopify-Access-Token',
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
const additionalOAuth2Options = oAuth2Options[nodeCredentialType];
|
|
||||||
|
|
||||||
// service-specific cred: OAuth1, OAuth2, plain
|
// service-specific cred: OAuth1, OAuth2, plain
|
||||||
|
|
||||||
|
@ -1232,7 +1213,7 @@ export class HttpRequestV3 implements INodeType {
|
||||||
} else {
|
} else {
|
||||||
responseFormat = 'text';
|
responseFormat = 'text';
|
||||||
const data = Buffer.from(response.body).toString();
|
const data = Buffer.from(response.body).toString();
|
||||||
response.body = (!data) ? undefined : data;
|
response.body = !data ? undefined : data;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue