🎉 F5 Node Initial Setup

This commit is contained in:
ricardo 2020-11-23 19:39:13 -05:00
parent 3c843f5c74
commit 6fd4895d7a
3 changed files with 466 additions and 0 deletions

View file

@ -0,0 +1,446 @@
import {
IExecuteFunctions,
} from 'n8n-core';
import {
IDataObject,
ILoadOptionsFunctions,
INodeExecutionData,
INodePropertyOptions,
INodeType,
INodeTypeDescription,
} from 'n8n-workflow';
// import {
// googleApiRequest,
// googleApiRequestAllItems,
// } from './GenericFunctions';
export class F5 implements INodeType {
description: INodeTypeDescription = {
displayName: 'F5',
name: 'f5',
icon: 'file:f5.svg',
group: ['input'],
version: 1,
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
description: 'Consume F5 API',
defaults: {
name: 'F5',
color: '#e31735',
},
inputs: ['main'],
outputs: ['main'],
credentials: [
{
name: 'f5Api',
required: true,
},
],
properties: [
{
displayName: 'Resource',
name: 'resource',
type: 'options',
options: [
{
name: 'Certificate',
value: 'certificate',
},
],
default: 'certificate',
description: 'The resource to operate on.',
},
// ...groupOperations,
// ...groupFields,
// ...userOperations,
// ...userFields,
],
};
// methods = {
// loadOptions: {
// // Get all the domains to display them to user so that he can
// // select them easily
// async getDomains(
// this: ILoadOptionsFunctions,
// ): Promise<INodePropertyOptions[]> {
// const returnData: INodePropertyOptions[] = [];
// const domains = await googleApiRequestAllItems.call(
// this,
// 'domains',
// 'GET',
// '/directory/v1/customer/my_customer/domains',
// );
// for (const domain of domains) {
// const domainName = domain.domainName;
// const domainId = domain.domainName;
// returnData.push({
// name: domainName,
// value: domainId,
// });
// }
// return returnData;
// },
// // Get all the schemas to display them to user so that he can
// // select them easily
// async getSchemas(
// this: ILoadOptionsFunctions,
// ): Promise<INodePropertyOptions[]> {
// const returnData: INodePropertyOptions[] = [];
// const schemas = await googleApiRequestAllItems.call(
// this,
// 'schemas',
// 'GET',
// '/directory/v1/customer/my_customer/schemas',
// );
// for (const schema of schemas) {
// const schemaName = schema.displayName;
// const schemaId = schema.schemaName;
// returnData.push({
// name: schemaName,
// value: schemaId,
// });
// }
// return returnData;
// },
// },
// };
async execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]> {
const items = this.getInputData();
const returnData: IDataObject[] = [];
const length = (items.length as unknown) as number;
const qs: IDataObject = {};
let responseData;
const resource = this.getNodeParameter('resource', 0) as string;
const operation = this.getNodeParameter('operation', 0) as string;
// for (let i = 0; i < length; i++) {
// if (resource === 'group') {
// //https://developers.google.com/admin-sdk/directory/v1/reference/groups/insert
// if (operation === 'create') {
// const email = this.getNodeParameter('email', i) as string;
// const additionalFields = this.getNodeParameter('additionalFields', i) as IDataObject;
// const body: IDataObject = {
// email,
// };
// Object.assign(body, additionalFields);
// responseData = await googleApiRequest.call(
// this,
// 'POST',
// `/directory/v1/groups`,
// body,
// );
// }
// //https://developers.google.com/admin-sdk/directory/v1/reference/groups/delete
// if (operation === 'delete') {
// const groupId = this.getNodeParameter('groupId', i) as string;
// responseData = await googleApiRequest.call(
// this,
// 'DELETE',
// `/directory/v1/groups/${groupId}`,
// {},
// );
// responseData = { success: true };
// }
// //https://developers.google.com/admin-sdk/directory/v1/reference/groups/get
// if (operation === 'get') {
// const groupId = this.getNodeParameter('groupId', i) as string;
// responseData = await googleApiRequest.call(
// this,
// 'GET',
// `/directory/v1/groups/${groupId}`,
// {},
// );
// }
// //https://developers.google.com/admin-sdk/directory/v1/reference/groups/list
// if (operation === 'getAll') {
// const returnAll = this.getNodeParameter('returnAll', i) as boolean;
// const options = this.getNodeParameter('options', i) as IDataObject;
// Object.assign(qs, options);
// if (qs.customer === undefined) {
// qs.customer = 'my_customer';
// }
// if (returnAll) {
// responseData = await googleApiRequestAllItems.call(
// this,
// 'groups',
// 'GET',
// `/directory/v1/groups`,
// {},
// qs,
// );
// } else {
// qs.maxResults = this.getNodeParameter('limit', i) as number;
// responseData = await googleApiRequest.call(
// this,
// 'GET',
// `/directory/v1/groups`,
// {},
// qs,
// );
// responseData = responseData.groups;
// }
// }
// //https://developers.google.com/admin-sdk/directory/v1/reference/groups/update
// if (operation === 'update') {
// const groupId = this.getNodeParameter('groupId', i) as string;
// const updateFields = this.getNodeParameter('updateFields', i) as IDataObject;
// const body: IDataObject = {};
// Object.assign(body, updateFields);
// responseData = await googleApiRequest.call(
// this,
// 'PUT',
// `/directory/v1/groups/${groupId}`,
// body,
// );
// }
// }
// if (resource === 'user') {
// //https://developers.google.com/admin-sdk/directory/v1/reference/users/insert
// if (operation === 'create') {
// const domain = this.getNodeParameter('domain', i) as string;
// const firstName = this.getNodeParameter('firstName', i) as string;
// const lastName = this.getNodeParameter('lastName', i) as string;
// const password = this.getNodeParameter('password', i) as string;
// const username = this.getNodeParameter('username', i) as string;
// const makeAdmin = this.getNodeParameter('makeAdmin', i) as boolean;
// const additionalFields = this.getNodeParameter('additionalFields', i) as IDataObject;
// const body: IDataObject = {
// name: {
// familyName: lastName,
// givenName: firstName,
// },
// password,
// primaryEmail: `${username}@${domain}`,
// };
// Object.assign(body, additionalFields);
// if (additionalFields.phoneUi) {
// const phones = (additionalFields.phoneUi as IDataObject).phoneValues as IDataObject[];
// body.phones = phones;
// delete body.phoneUi;
// }
// if (additionalFields.emailUi) {
// const emails = (additionalFields.emailUi as IDataObject).emailValues as IDataObject[];
// body.emails = emails;
// delete body.emailUi;
// }
// responseData = await googleApiRequest.call(
// this,
// 'POST',
// `/directory/v1/users`,
// body,
// qs,
// );
// if (makeAdmin) {
// await googleApiRequest.call(
// this,
// 'POST',
// `/directory/v1/users/${responseData.id}/makeAdmin`,
// { status: true },
// );
// responseData.isAdmin = true;
// }
// }
// //https://developers.google.com/admin-sdk/directory/v1/reference/users/delete
// if (operation === 'delete') {
// const userId = this.getNodeParameter('userId', i) as string;
// responseData = await googleApiRequest.call(
// this,
// 'DELETE',
// `/directory/v1/users/${userId}`,
// {},
// );
// responseData = { success: true };
// }
// //https://developers.google.com/admin-sdk/directory/v1/reference/users/get
// if (operation === 'get') {
// const userId = this.getNodeParameter('userId', i) as string;
// const projection = this.getNodeParameter('projection', i) as string;
// const options = this.getNodeParameter('options', i) as IDataObject;
// qs.projection = projection;
// Object.assign(qs, options);
// if (qs.customFieldMask) {
// qs.customFieldMask = (qs.customFieldMask as string[]).join(' ');
// }
// if (qs.projection === 'custom' && qs.customFieldMask === undefined) {
// throw new Error('When projection is set to custom, the custom schemas field must be defined');
// }
// responseData = await googleApiRequest.call(
// this,
// 'GET',
// `/directory/v1/users/${userId}`,
// {},
// qs,
// );
// }
// //https://developers.google.com/admin-sdk/directory/v1/reference/users/list
// if (operation === 'getAll') {
// const returnAll = this.getNodeParameter('returnAll', i) as boolean;
// const projection = this.getNodeParameter('projection', i) as string;
// const options = this.getNodeParameter('options', i) as IDataObject;
// qs.projection = projection;
// Object.assign(qs, options);
// if (qs.customer === undefined) {
// qs.customer = 'my_customer';
// }
// if (qs.customFieldMask) {
// qs.customFieldMask = (qs.customFieldMask as string[]).join(' ');
// }
// if (qs.projection === 'custom' && qs.customFieldMask === undefined) {
// throw new Error('When projection is set to custom, the custom schemas field must be defined');
// }
// if (returnAll) {
// responseData = await googleApiRequestAllItems.call(
// this,
// 'users',
// 'GET',
// `/directory/v1/users`,
// {},
// qs,
// );
// } else {
// qs.maxResults = this.getNodeParameter('limit', i) as number;
// responseData = await googleApiRequest.call(
// this,
// 'GET',
// `/directory/v1/users`,
// {},
// qs,
// );
// responseData = responseData.users;
// }
// }
// //https://developers.google.com/admin-sdk/directory/v1/reference/users/update
// if (operation === 'update') {
// const userId = this.getNodeParameter('userId', i) as string;
// const updateFields = this.getNodeParameter('updateFields', i) as IDataObject;
// const body: { name: { givenName?: string, familyName?: string }, emails?: IDataObject[], phones?: IDataObject[] } = { name: {} };
// Object.assign(body, updateFields);
// if (updateFields.firstName) {
// body.name.givenName = updateFields.firstName as string;
// //@ts-ignore
// delete body.firstName;
// }
// if (updateFields.lastName) {
// body.name.familyName = updateFields.lastName as string;
// //@ts-ignore
// delete body.lastName;
// }
// if (Object.keys(body.name).length === 0) {
// //@ts-ignore
// delete body.name;
// }
// if (updateFields.phoneUi) {
// const phones = (updateFields.phoneUi as IDataObject).phoneValues as IDataObject[];
// body.phones = phones;
// //@ts-ignore
// delete body.phoneUi;
// }
// if (updateFields.emailUi) {
// const emails = (updateFields.emailUi as IDataObject).emailValues as IDataObject[];
// body.emails = emails;
// //@ts-ignore
// delete body.emailUi;
// }
// //@ts-ignore
// body['customSchemas'] = { testing: { hasdog: true } };
// responseData = await googleApiRequest.call(
// this,
// 'PUT',
// `/directory/v1/users/${userId}`,
// body,
// qs,
// );
// }
// }
// }
// if (Array.isArray(responseData)) {
// returnData.push.apply(returnData, responseData as IDataObject[]);
// } else if (responseData !== undefined) {
// returnData.push(responseData as IDataObject);
// }
return [this.helpers.returnJsonArray(returnData)];
}
}

View file

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" id="f5logo" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="48.5px" height="44.5px" viewBox="0 0 48.5 44.5" enable-background="new 0 0 48.5 44.5" xml:space="preserve">
<circle id="bg" fill="#E21D38" cx="22.5" cy="22.3" r="22.2"/>
<path fill="#FFFFFF" d="M21.99,24.49c10.9,0.9,15.1,3.9,14.9,8c-0.2,2.2-2.3,4.3-5,4.5c-3.2,0.2-4.7-1.1-5.6-2.5
c-0.8-1.3-1.7-2.6-2.6-4c-0.2-0.4-0.6-0.1-0.9,0.1c-0.7,0.6-1.3,1.3-1.9,1.9c-0.4,0.4-0.3,0.7-0.2,1c0.6,1.4,1.2,2.8,1.8,4.1
c1,0.6,5.5,1.4,8.8,1.1c2.3-0.2,5.1-1.1,7.5-2.8c2.3-1.8,4-4.2,4.3-8.1c0.1-2.4-0.3-4.9-2.4-7.2c-2.1-2.3-5.7-4.2-13-4.7
c0.4-1.2,0.7-2.3,1.1-3.4c4.4,0.2,8.3,0.5,11.6,0.9c0.3-1.3,0.4-2.5,0.7-3.7l-0.9-1.1c-1.7-0.2-3.3-0.6-5.1-0.8
c-2.3-0.3-4.7-0.5-7.3-0.6C26.09,11.99,24.09,18.09,21.99,24.49 M19.09,5.79c-0.8,0-1.9,0.2-3.7,0.6c-3.9,1.1-8.7,3.8-9.2,8.3
c-0.1,0.7-0.1,1.5-0.2,2.2c-1.1,0.1-2.1,0.2-3.1,0.3c-0.1,0.9-0.1,1.7-0.2,2.6c1-0.1,2-0.1,3.1-0.2c-0.2,4.7,0,9.4,0.4,13.8
c0.1,0.7,0.1,1.3,0.1,1.7c-0.1,0.4-0.8,0.6-1.8,0.6l1.3,1.6c3.8,0.7,8.6,1.2,13.7,1.3c0-0.5,0-1,0-1.5c-3-0.2-4.4-0.6-4.6-1.2
c-0.2-0.5-0.2-1.2-0.3-1.9c-0.2-4.6-0.3-9.6-0.2-14.7c1.7,0,3.4,0,5.1-0.1c0.9-0.4,1.7-0.8,2.5-1.2c0-0.6,0-1.2,0-1.7
c-2.6,0-5.1,0.1-7.6,0.1c0.1-2.1,0.2-4.1,0.3-6c0.1-1.3,1-2.2,1.8-2.2c1.4-0.1,2.7,0.5,4,1.1c0.7,0.3,1.4,0.7,2.1,1
c0.3,0.1,0.7,0.2,1-0.1c0.4-0.5,0.8-1,1.2-1.4c0.2-0.3,0.1-0.5,0-0.6c-0.9-0.7-1.7-1.3-2.6-2c-0.5-0.4-1.4-0.4-2.2-0.4
C19.69,5.69,19.39,5.79,19.09,5.79"/>
<text transform="matrix(1 0 0 1 45.4951 36.8469)" fill="#E21D38" font-family="'Arial'" font-size="2.2">R</text>
<circle fill="none" stroke="#E21D38" stroke-width="0.2742" stroke-miterlimit="10" cx="46.23" cy="36.07" r="1.53"/>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View file

@ -285,6 +285,7 @@
"dist/nodes/Flow/FlowTrigger.node.js",
"dist/nodes/Function.node.js",
"dist/nodes/FunctionItem.node.js",
"dist/nodes/F5/F5.node.js",
"dist/nodes/GetResponse/GetResponse.node.js",
"dist/nodes/Github/Github.node.js",
"dist/nodes/Github/GithubTrigger.node.js",