Skip to content

Commit

Permalink
✨ Add SecurityScorecard node (#1371)
Browse files Browse the repository at this point in the history
* ✨Add SecurityScorecard node

* Move portfolio:edit fields to the main view.

The API request uses PUT so it will replace undefined fields if they are not set.

* Style improvements

* ⚡ Improvements to #1247

* ⚡ Improvements

* ⚡ Minor improvements on SecurityScorecard Node

Co-authored-by: Mika Luhta <12100880+mluhta@users.noreply.github.com>
Co-authored-by: Jan Oberhauser <jan.oberhauser@gmail.com>
  • Loading branch information
3 people authored Jan 28, 2021
1 parent 8764171 commit d0b896d
Show file tree
Hide file tree
Showing 11 changed files with 2,024 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import {
ICredentialType,
NodePropertyTypes,
} from 'n8n-workflow';

export class SecurityScorecardApi implements ICredentialType {
name = 'securityScorecardApi';
displayName = 'SecurityScorecard API';
properties = [
{
displayName: 'API Key',
name: 'apiKey',
type: 'string' as NodePropertyTypes,
default: '',
required: true,
},
];
}
64 changes: 64 additions & 0 deletions packages/nodes-base/nodes/SecurityScorecard/GenericFunctions.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
import {
OptionsWithUri,
} from 'request';

import {
IExecuteFunctions,
IHookFunctions,
ILoadOptionsFunctions,
} from 'n8n-core';

import {
IDataObject,
} from 'n8n-workflow';

export async function scorecardApiRequest(this: IHookFunctions | IExecuteFunctions | ILoadOptionsFunctions, method: string, resource: string, body: any = {}, query: IDataObject = {}, uri?: string, option: IDataObject = {}): Promise<any> { // tslint:disable-line:no-any
const credentials = this.getCredentials('securityScorecardApi');

if (credentials === undefined) {
throw new Error('No credentials got returned!');
}

const headerWithAuthentication = { Authorization: `Token ${credentials.apiKey}` };

let options: OptionsWithUri = {
headers: headerWithAuthentication,
method,
qs: query,
uri: uri || `https://api.securityscorecard.io/${resource}`,
body,
json: true,
};

if (Object.keys(option).length !== 0) {
options = Object.assign({}, options, option);
}

if (Object.keys(body).length === 0) {
delete options.body;
}

if (Object.keys(query).length === 0) {
delete options.qs;
}
try {
return await this.helpers.request!(options);
} catch (error) {
if (error.error) {
const errorMessage = `SecurityScorecard error response [${error.statusCode}]: ${error.error.error ? error.error.error.message : error.error}`;
throw new Error(errorMessage);
} else throw error;
}
}

export function simplify(data: IDataObject[]) {
const results = [];
for (const record of data) {
const newRecord: IDataObject = { date: record.date };
for (const factor of record.factors as IDataObject[]) {
newRecord[factor.name as string] = factor.score;
}
results.push(newRecord);
}
return results;
}
Loading

0 comments on commit d0b896d

Please sign in to comment.