diff --git a/packages/nodes-base/credentials/GithubApi.credentials.ts b/packages/nodes-base/credentials/GithubApi.credentials.ts index 83c5c5f9d4..e54c02dd37 100644 --- a/packages/nodes-base/credentials/GithubApi.credentials.ts +++ b/packages/nodes-base/credentials/GithubApi.credentials.ts @@ -1,4 +1,6 @@ import { + IAuthenticateHeaderAuth, + ICredentialTestRequest, ICredentialType, INodeProperties, } from 'n8n-workflow'; @@ -28,4 +30,18 @@ export class GithubApi implements ICredentialType { default: '', }, ]; + authenticate: IAuthenticateHeaderAuth = { + type: 'headerAuth', + properties: { + name: 'Authorization', + value: '=token {{$credentials?.accessToken}}', + }, + }; + test: ICredentialTestRequest = { + request: { + baseURL: '={{$credentials?.server}}', + url: '/user', + method: 'GET', + }, + }; } diff --git a/packages/nodes-base/nodes/Github/GenericFunctions.ts b/packages/nodes-base/nodes/Github/GenericFunctions.ts index 12e97da9c7..3a9c534bd7 100644 --- a/packages/nodes-base/nodes/Github/GenericFunctions.ts +++ b/packages/nodes-base/nodes/Github/GenericFunctions.ts @@ -37,23 +37,23 @@ export async function githubApiRequest(this: IHookFunctions | IExecuteFunctions, try { const authenticationMethod = this.getNodeParameter('authentication', 0, 'accessToken') as string; + let credentialType = ''; if (authenticationMethod === 'accessToken') { const credentials = await this.getCredentials('githubApi'); + credentialType = 'githubApi'; const baseUrl = credentials!.server || 'https://api.github.com'; options.uri = `${baseUrl}${endpoint}`; - - options.headers!.Authorization = `token ${credentials.accessToken}`; - return await this.helpers.request(options); } else { const credentials = await this.getCredentials('githubOAuth2Api'); + credentialType = 'githubOAuth2Api'; const baseUrl = credentials.server || 'https://api.github.com'; options.uri = `${baseUrl}${endpoint}`; - //@ts-ignore - return await this.helpers.requestOAuth2.call(this, 'githubOAuth2Api', options); } + + return await this.helpers.requestWithAuthentication.call(this, credentialType, options); } catch (error) { throw new NodeApiError(this.getNode(), error); } diff --git a/packages/nodes-base/nodes/Github/Github.node.ts b/packages/nodes-base/nodes/Github/Github.node.ts index cea151cc05..6989ee9efc 100644 --- a/packages/nodes-base/nodes/Github/Github.node.ts +++ b/packages/nodes-base/nodes/Github/Github.node.ts @@ -1,16 +1,9 @@ -import { - OptionsWithUri, -} from 'request'; - import { IExecuteFunctions, } from 'n8n-core'; import { - ICredentialsDecrypted, - ICredentialTestFunctions, IDataObject, - INodeCredentialTestResult, INodeExecutionData, INodeType, INodeTypeDescription, @@ -45,7 +38,6 @@ export class Github implements INodeType { { name: 'githubApi', required: true, - testedBy: 'githubApiTest', displayOptions: { show: { authentication: ['accessToken'], @@ -1594,47 +1586,6 @@ export class Github implements INodeType { ], }; - methods = { - credentialTest: { - async githubApiTest( - this: ICredentialTestFunctions, - credential: ICredentialsDecrypted, - ): Promise { - const credentials = credential.data; - const baseUrl = (credentials!.server as string) || 'https://api.github.com'; - - const options: OptionsWithUri = { - method: 'GET', - headers: { - 'User-Agent': 'n8n', - Authorization: `token ${credentials!.accessToken}`, - }, - uri: baseUrl.endsWith('/') ? baseUrl + 'user' : baseUrl + '/user', - json: true, - timeout: 5000, - }; - try { - const response = await this.helpers.request(options); - if (!response.id) { - return { - status: 'Error', - message: `Token is not valid: ${response.error}`, - }; - } - } catch (error) { - return { - status: 'Error', - message: `Settings are not valid: ${error}`, - }; - } - return { - status: 'OK', - message: 'Authentication successful!', - }; - }, - }, - }; - async execute(this: IExecuteFunctions): Promise { const items = this.getInputData(); const returnData: IDataObject[] = [];