From bd2713d83adfa1e7b019faad34b45da5d9d2abbb Mon Sep 17 00:00:00 2001 From: Ram Yalamanchili Date: Wed, 1 Jan 2020 22:51:41 -0800 Subject: [PATCH] OAuth2 testing node --- packages/nodes-base/nodes/OAuth.node.ts | 104 ++++++++++++++++++++++++ packages/nodes-base/package.json | 3 +- 2 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 packages/nodes-base/nodes/OAuth.node.ts diff --git a/packages/nodes-base/nodes/OAuth.node.ts b/packages/nodes-base/nodes/OAuth.node.ts new file mode 100644 index 0000000000..189ae9e408 --- /dev/null +++ b/packages/nodes-base/nodes/OAuth.node.ts @@ -0,0 +1,104 @@ +import { IExecuteFunctions } from 'n8n-core'; +import { + GenericValue, + IDataObject, + INodeExecutionData, + INodeType, + INodeTypeDescription, +} from 'n8n-workflow'; + +import { set } from 'lodash'; + +import * as util from 'util'; +import { connectionFields } from './ActiveCampaign/ConnectionDescription'; + +export class OAuth implements INodeType { + description: INodeTypeDescription = { + displayName: 'OAuth', + name: 'oauth', + icon: 'fa:code-branch', + group: ['input'], + version: 1, + description: 'Gets, sends data to Oauth API Endpoint and receives generic information.', + defaults: { + name: 'OAuth', + color: '#0033AA', + }, + inputs: ['main'], + outputs: ['main'], + credentials: [ + { + name: 'OAuth2Api', + required: true, + } + ], + properties: [ + { + displayName: 'Operation', + name: 'operation', + type: 'options', + options: [ + { + name: 'Get', + value: 'get', + description: 'Returns the value of a key from oauth.', + }, + ], + default: 'get', + description: 'The operation to perform.', + }, + + // ---------------------------------- + // get + // ---------------------------------- + { + displayName: 'Name', + name: 'propertyName', + type: 'string', + displayOptions: { + show: { + operation: [ + 'get' + ], + }, + }, + default: 'propertyName', + required: true, + description: 'Name of the property to write received data to.
Supports dot-notation.
Example: "data.person[0].name"', + }, + ] + }; + + async execute(this: IExecuteFunctions): Promise { + const credentials = this.getCredentials('OAuth2Api'); + if (credentials === undefined) { + throw new Error('No credentials got returned!'); + } + + if (credentials.oauthTokenData === undefined) { + throw new Error('OAuth credentials not connected'); + } + + const operation = this.getNodeParameter('operation', 0) as string; + if (operation === 'get') { + const items = this.getInputData(); + const returnItems: INodeExecutionData[] = []; + + let item: INodeExecutionData; + + // credentials.oauthTokenData has the refreshToken and accessToken available + // it would be nice to have credentials.getOAuthToken() which returns the accessToken + // and also handles an error case where if the token is to be refreshed, it does so + // without knowledge of the node. + console.log('Got OAuth credentials!', credentials.oauthTokenData); + + for (let itemIndex = 0; itemIndex < items.length; itemIndex++) { + item = { json: { itemIndex } }; + returnItems.push(item); + } + return [returnItems]; + } else { + throw new Error('Unknown operation'); + } + } +} diff --git a/packages/nodes-base/package.json b/packages/nodes-base/package.json index 3074251ef7..28c220136d 100644 --- a/packages/nodes-base/package.json +++ b/packages/nodes-base/package.json @@ -166,7 +166,8 @@ "dist/nodes/Xml.node.js", "dist/nodes/Mandrill/Mandrill.node.js", "dist/nodes/Todoist/Todoist.node.js", - "dist/nodes/Xml.node.js" + "dist/nodes/Xml.node.js", + "dist/nodes/OAuth.node.js" ] }, "devDependencies": {