refactor: Enforce expanded sensitive inputs rules (no-changelog) (#6815)

* refactor: Enforce expanded sensitive inputs rules (no-changelog)

* refactor: Add extra exemption

* fix: Add setting to `sessionToken` fields

* fix: Restore for `hidden` fields

* fix: More edge case exemptions

* fix: One more
This commit is contained in:
Iván Ovejero
2023-08-01 13:08:25 +02:00
committed by GitHub
parent f5134adde5
commit dec19585bc
79 changed files with 101 additions and 91 deletions

View File

@@ -50,7 +50,7 @@ module.exports = {
'n8n-nodes-base/cred-class-field-name-missing-oauth2': 'error',
'n8n-nodes-base/cred-class-field-name-unsuffixed': 'error',
'n8n-nodes-base/cred-class-field-name-uppercase-first-char': 'error',
'n8n-nodes-base/cred-class-field-unobscured-sensitive-input': 'error',
'n8n-nodes-base/cred-class-field-type-options-password-missing': 'error',
'n8n-nodes-base/cred-class-name-missing-oauth2-suffix': 'error',
'n8n-nodes-base/cred-class-name-unsuffixed': 'error',
'n8n-nodes-base/cred-filename-against-convention': 'error',
@@ -146,7 +146,7 @@ module.exports = {
'n8n-nodes-base/node-param-resource-with-plural-option': 'error',
'n8n-nodes-base/node-param-resource-without-no-data-expression': 'error',
'n8n-nodes-base/node-param-type-options-missing-from-limit': 'error',
'n8n-nodes-base/node-param-type-options-missing-from-password': 'error',
'n8n-nodes-base/node-param-type-options-password-missing': 'error',
},
},
],

View File

@@ -21,6 +21,7 @@ export class Auth0ManagementApi implements ICredentialType {
type: 'hidden',
typeOptions: {
expirable: true,
password: true,
},
default: '',
},

View File

@@ -12,6 +12,7 @@ export class AutomizyApi implements ICredentialType {
displayName: 'API Token',
name: 'apiToken',
type: 'string',
typeOptions: { password: true },
default: '',
},
];

View File

@@ -23,6 +23,7 @@ export class BeeminderApi implements ICredentialType {
displayName: 'Auth Token',
name: 'authToken',
type: 'string',
typeOptions: { password: true },
default: '',
},
];

View File

@@ -18,6 +18,7 @@ export class BitbucketApi implements ICredentialType {
displayName: 'App Password',
name: 'appPassword',
type: 'string',
typeOptions: { password: true },
default: '',
},
];

View File

@@ -20,6 +20,7 @@ export class BitwardenApi implements ICredentialType {
displayName: 'Client Secret',
name: 'clientSecret',
type: 'string',
typeOptions: { password: true },
default: '',
},
{

View File

@@ -12,6 +12,7 @@ export class BubbleApi implements ICredentialType {
displayName: 'API Token',
name: 'apiToken',
type: 'string',
typeOptions: { password: true },
default: '',
},
{

View File

@@ -19,6 +19,7 @@ export class CiscoUmbrellaApi implements ICredentialType {
displayName: 'Session Token',
name: 'sessionToken',
type: 'hidden',
// eslint-disable-next-line n8n-nodes-base/cred-class-field-type-options-password-missing
typeOptions: {
expirable: true,
},
@@ -27,8 +28,8 @@ export class CiscoUmbrellaApi implements ICredentialType {
{
displayName: 'API Key',
name: 'apiKey',
// eslint-disable-next-line n8n-nodes-base/cred-class-field-unobscured-sensitive-input
type: 'string',
typeOptions: { password: true },
required: true,
default: '',
},

View File

@@ -17,6 +17,7 @@ export class CloudflareApi implements ICredentialType {
displayName: 'API Token',
name: 'apiToken',
type: 'string',
typeOptions: { password: true },
default: '',
},
];

View File

@@ -21,6 +21,7 @@ export class ContentfulApi implements ICredentialType {
displayName: 'Content Delivery API Access Token',
name: 'ContentDeliveryaccessToken',
type: 'string',
typeOptions: { password: true },
default: '',
description:
'Access token that has access to the space. Can be left empty if only Delivery API should be used.',
@@ -29,6 +30,7 @@ export class ContentfulApi implements ICredentialType {
displayName: 'Content Preview API Access Token',
name: 'ContentPreviewaccessToken',
type: 'string',
typeOptions: { password: true },
default: '',
description:
'Access token that has access to the space. Can be left empty if only Preview API should be used.',

View File

@@ -17,6 +17,7 @@ export class CortexApi implements ICredentialType {
displayName: 'API Key',
name: 'cortexApiKey',
type: 'string',
typeOptions: { password: true },
default: '',
},
{

View File

@@ -19,6 +19,7 @@ export class CrowdStrikeOAuth2Api implements ICredentialType {
displayName: 'Session Token',
name: 'sessionToken',
type: 'hidden',
// eslint-disable-next-line n8n-nodes-base/cred-class-field-type-options-password-missing
typeOptions: {
expirable: true,
},

View File

@@ -17,6 +17,7 @@ export class CustomerIoApi implements ICredentialType {
displayName: 'Tracking API Key',
name: 'trackingApiKey',
type: 'string',
typeOptions: { password: true },
default: '',
description: 'Required for tracking API',
required: true,
@@ -51,6 +52,7 @@ export class CustomerIoApi implements ICredentialType {
displayName: 'App API Key',
name: 'appApiKey',
type: 'string',
typeOptions: { password: true },
default: '',
description: 'Required for App API',
},

View File

@@ -19,6 +19,7 @@ export class DemioApi implements ICredentialType {
displayName: 'API Secret',
name: 'apiSecret',
type: 'string',
typeOptions: { password: true },
default: '',
},
];

View File

@@ -24,6 +24,7 @@ export class ERPNextApi implements ICredentialType {
displayName: 'API Secret',
name: 'apiSecret',
type: 'string',
typeOptions: { password: true },
default: '',
},
{

View File

@@ -14,6 +14,7 @@ export class FacebookGraphAppApi implements ICredentialType {
displayName: 'App Secret',
name: 'appSecret',
type: 'string',
typeOptions: { password: true },
default: '',
description:
'(Optional) When the app secret is set the node will verify this signature to validate the integrity and origin of the payload',

View File

@@ -16,6 +16,7 @@ export class GoogleAdsOAuth2Api implements ICredentialType {
displayName: 'Developer Token',
name: 'developerToken',
type: 'string',
typeOptions: { password: true },
default: '',
required: true,
},

View File

@@ -51,6 +51,7 @@ export class HaloPSAApi implements ICredentialType {
displayName: 'Client Secret',
name: 'client_secret',
type: 'string',
typeOptions: { password: true },
default: '',
required: true,
description: 'Must be your application client secret',

View File

@@ -17,6 +17,7 @@ export class HubspotAppToken implements ICredentialType {
displayName: 'APP Token',
name: 'appToken',
type: 'string',
typeOptions: { password: true },
default: '',
},
];

View File

@@ -25,12 +25,14 @@ export class InvoiceNinjaApi implements ICredentialType {
displayName: 'API Token',
name: 'apiToken',
type: 'string',
typeOptions: { password: true },
default: '',
},
{
displayName: 'Secret',
name: 'secret',
type: 'string',
typeOptions: { password: true },
default: '',
hint: 'This is optional, enter only if you did set a secret in your app and only if you are using v5',
},

View File

@@ -24,6 +24,7 @@ export class JiraSoftwareCloudApi implements ICredentialType {
displayName: 'API Token',
name: 'apiToken',
type: 'string',
typeOptions: { password: true },
default: '',
},
{

View File

@@ -12,6 +12,7 @@ export class KitemakerApi implements ICredentialType {
displayName: 'Personal Access Token',
name: 'personalAccessToken',
type: 'string',
typeOptions: { password: true },
default: '',
},
];

View File

@@ -24,6 +24,7 @@ export class MailjetEmailApi implements ICredentialType {
displayName: 'Secret Key',
name: 'secretKey',
type: 'string',
typeOptions: { password: true },
default: '',
},
{

View File

@@ -17,6 +17,7 @@ export class MailjetSmsApi implements ICredentialType {
displayName: 'Token',
name: 'token',
type: 'string',
typeOptions: { password: true },
default: '',
},
];

View File

@@ -47,6 +47,7 @@ export class MediumOAuth2Api implements ICredentialType {
displayName: 'Client Secret',
name: 'clientSecret',
type: 'string',
typeOptions: { password: true },
default: '',
required: true,
},

View File

@@ -12,6 +12,7 @@ export class MessageBirdApi implements ICredentialType {
displayName: 'API Key',
name: 'accessKey',
type: 'string',
typeOptions: { password: true },
default: '',
},
];

View File

@@ -19,6 +19,7 @@ export class MetabaseApi implements ICredentialType {
displayName: 'Session Token',
name: 'sessionToken',
type: 'hidden',
// eslint-disable-next-line n8n-nodes-base/cred-class-field-type-options-password-missing
typeOptions: {
expirable: true,
},

View File

@@ -15,12 +15,14 @@ export class MoceanApi implements ICredentialType {
displayName: 'API Key',
name: 'mocean-api-key',
type: 'string',
typeOptions: { password: true },
default: '',
},
{
displayName: 'API Secret',
name: 'mocean-api-secret',
type: 'string',
typeOptions: { password: true },
default: '',
},
];

View File

@@ -12,6 +12,7 @@ export class MondayComApi implements ICredentialType {
displayName: 'Token V2',
name: 'apiToken',
type: 'string',
typeOptions: { password: true },
default: '',
},
];

View File

@@ -40,6 +40,7 @@ export class MonicaCrmApi implements ICredentialType {
displayName: 'API Token',
name: 'apiToken',
type: 'string',
typeOptions: { password: true },
default: '',
},
];

View File

@@ -13,6 +13,7 @@ export class Msg91Api implements ICredentialType {
displayName: 'Authentication Key',
name: 'authkey',
type: 'string',
typeOptions: { password: true },
default: '',
},
];

View File

@@ -12,6 +12,7 @@ export class NasaApi implements ICredentialType {
displayName: 'API Key',
name: 'api_key',
type: 'string',
typeOptions: { password: true },
default: '',
},
];

View File

@@ -12,6 +12,7 @@ export class NocoDb implements ICredentialType {
displayName: 'User Token',
name: 'apiToken',
type: 'string',
typeOptions: { password: true },
default: '',
},
{

View File

@@ -17,6 +17,7 @@ export class NocoDbApiToken implements ICredentialType {
displayName: 'API Token',
name: 'apiToken',
type: 'string',
typeOptions: { password: true },
default: '',
},
{

View File

@@ -28,6 +28,7 @@ export class OAuth1Api implements ICredentialType {
displayName: 'Consumer Key',
name: 'consumerKey',
type: 'string',
typeOptions: { password: true },
default: '',
required: true,
},
@@ -35,6 +36,7 @@ export class OAuth1Api implements ICredentialType {
displayName: 'Consumer Secret',
name: 'consumerSecret',
type: 'string',
typeOptions: { password: true },
default: '',
required: true,
},

View File

@@ -12,6 +12,7 @@ export class OneSimpleApi implements ICredentialType {
displayName: 'API Token',
name: 'apiToken',
type: 'string',
typeOptions: { password: true },
default: '',
},
];

View File

@@ -12,6 +12,7 @@ export class PagerDutyApi implements ICredentialType {
displayName: 'API Token',
name: 'apiToken',
type: 'string',
typeOptions: { password: true },
default: '',
},
];

View File

@@ -18,6 +18,7 @@ export class PayPalApi implements ICredentialType {
displayName: 'Secret',
name: 'secret',
type: 'string',
typeOptions: { password: true },
default: '',
},
{

View File

@@ -12,6 +12,7 @@ export class PipedriveApi implements ICredentialType {
displayName: 'API Token',
name: 'apiToken',
type: 'string',
typeOptions: { password: true },
default: '',
},
];

View File

@@ -18,6 +18,7 @@ export class PlivoApi implements ICredentialType {
displayName: 'Auth Token',
name: 'authToken',
type: 'string',
typeOptions: { password: true },
default: '',
},
];

View File

@@ -17,6 +17,7 @@ export class PostmarkApi implements ICredentialType {
displayName: 'Server API Token',
name: 'serverToken',
type: 'string',
typeOptions: { password: true },
default: '',
},
];

View File

@@ -20,6 +20,7 @@ export class QuickBaseApi implements ICredentialType {
displayName: 'User Token',
name: 'userToken',
type: 'string',
typeOptions: { password: true },
default: '',
required: true,
},

View File

@@ -23,6 +23,7 @@ export class RocketchatApi implements ICredentialType {
displayName: 'Auth Key',
name: 'authKey',
type: 'string',
typeOptions: { password: true },
default: '',
},
{

View File

@@ -24,6 +24,7 @@ export class RundeckApi implements ICredentialType {
displayName: 'Token',
name: 'token',
type: 'string',
typeOptions: { password: true },
default: '',
},
];

View File

@@ -12,6 +12,7 @@ export class SalesmateApi implements ICredentialType {
displayName: 'Session Token',
name: 'sessionToken',
type: 'string',
typeOptions: { password: true },
default: '',
},
{

View File

@@ -52,6 +52,7 @@ export class SeaTableApi implements ICredentialType {
displayName: 'API Token (of a Base)',
name: 'token',
type: 'string',
typeOptions: { password: true },
default: '',
},
{

View File

@@ -17,6 +17,7 @@ export class SegmentApi implements ICredentialType {
displayName: 'Write Key',
name: 'writekey',
type: 'string',
typeOptions: { password: true },
default: '',
},
];

View File

@@ -12,6 +12,7 @@ export class SentryIoApi implements ICredentialType {
displayName: 'Token',
name: 'token',
type: 'string',
typeOptions: { password: true },
default: '',
},
];

View File

@@ -12,6 +12,7 @@ export class SentryIoServerApi implements ICredentialType {
displayName: 'Token',
name: 'token',
type: 'string',
typeOptions: { password: true },
default: '',
},
{

View File

@@ -42,6 +42,7 @@ export class Sftp implements ICredentialType {
displayName: 'Private Key',
name: 'privateKey',
type: 'string',
typeOptions: { password: true },
default: '',
description:
'String that contains a private key for either key-based or hostbased user authentication (OpenSSH format)',

View File

@@ -34,6 +34,7 @@ export class ShopifyAccessTokenApi implements ICredentialType {
name: 'appSecretKey',
required: true,
type: 'string',
typeOptions: { password: true },
default: '',
description: 'Secret key needed to verify the webhook when using Shopify Trigger node',
},

View File

@@ -43,6 +43,7 @@ export class ShopifyApi implements ICredentialType {
displayName: 'Shared Secret',
name: 'sharedSecret',
type: 'string',
typeOptions: { password: true },
default: '',
},
];

View File

@@ -12,6 +12,7 @@ export class Signl4Api implements ICredentialType {
displayName: 'Team Secret',
name: 'teamSecret',
type: 'string',
typeOptions: { password: true },
default: '',
description: 'The team secret is the last part of your SIGNL4 webhook URL',
},

View File

@@ -12,6 +12,7 @@ export class SplunkApi implements ICredentialType {
displayName: 'Auth Token',
name: 'authToken',
type: 'string',
typeOptions: { password: true },
default: '',
},
{

View File

@@ -17,6 +17,7 @@ export class StripeApi implements ICredentialType {
displayName: 'Secret Key',
name: 'secretKey',
type: 'string',
typeOptions: { password: true },
default: '',
},
];

View File

@@ -34,6 +34,7 @@ export class SurveyMonkeyApi implements ICredentialType {
displayName: 'Client Secret',
name: 'clientSecret',
type: 'string',
typeOptions: { password: true },
default: '',
},
];

View File

@@ -12,6 +12,7 @@ export class TravisCiApi implements ICredentialType {
displayName: 'API Token',
name: 'apiToken',
type: 'string',
typeOptions: { password: true },
default: '',
},
];

View File

@@ -26,6 +26,7 @@ export class TrelloApi implements ICredentialType {
displayName: 'API Token',
name: 'apiToken',
type: 'string',
typeOptions: { password: true },
required: true,
default: '',
},
@@ -33,6 +34,7 @@ export class TrelloApi implements ICredentialType {
displayName: 'OAuth Secret',
name: 'oauthSecret',
type: 'hidden',
typeOptions: { password: true },
default: '',
},
];

View File

@@ -17,6 +17,7 @@ export class TwakeCloudApi implements ICredentialType {
displayName: 'Workspace Key',
name: 'workspaceKey',
type: 'string',
typeOptions: { password: true },
default: '',
},
];

View File

@@ -24,6 +24,7 @@ export class TwakeServerApi implements ICredentialType {
displayName: 'Private API Key',
name: 'privateApiKey',
type: 'string',
typeOptions: { password: true },
default: '',
},
];

View File

@@ -34,6 +34,7 @@ export class TwilioApi implements ICredentialType {
displayName: 'Auth Token',
name: 'authToken',
type: 'string',
typeOptions: { password: true },
default: '',
displayOptions: {
show: {
@@ -45,6 +46,7 @@ export class TwilioApi implements ICredentialType {
displayName: 'API Key SID',
name: 'apiKeySid',
type: 'string',
typeOptions: { password: true },
default: '',
displayOptions: {
show: {

View File

@@ -53,6 +53,7 @@ export class VenafiTlsProtectDatacenterApi implements ICredentialType {
displayName: 'Access Token',
name: 'token',
type: 'hidden',
// eslint-disable-next-line n8n-nodes-base/cred-class-field-type-options-password-missing
typeOptions: {
expirable: true,
},

View File

@@ -12,6 +12,7 @@ export class VeroApi implements ICredentialType {
displayName: 'Auth Token',
name: 'authToken',
type: 'string',
typeOptions: { password: true },
default: '',
},
];

View File

@@ -19,6 +19,7 @@ export class VonageApi implements ICredentialType {
displayName: 'API Secret',
name: 'apiSecret',
type: 'string',
typeOptions: { password: true },
default: '',
},
];

View File

@@ -41,6 +41,7 @@ export class WekanApi implements ICredentialType {
displayName: 'Session Token',
name: 'token',
type: 'hidden',
// eslint-disable-next-line n8n-nodes-base/cred-class-field-type-options-password-missing
typeOptions: {
expirable: true,
},

View File

@@ -12,6 +12,7 @@ export class WiseApi implements ICredentialType {
displayName: 'API Token',
name: 'apiToken',
type: 'string',
typeOptions: { password: true },
default: '',
},
{
@@ -34,6 +35,7 @@ export class WiseApi implements ICredentialType {
displayName: 'Private Key (Optional)',
name: 'privateKey',
type: 'string',
typeOptions: { password: true },
default: '',
description:
'Optional private key used for Strong Customer Authentication (SCA). Only needed to retrieve statements, and execute transfers.',

View File

@@ -18,12 +18,14 @@ export class WooCommerceApi implements ICredentialType {
displayName: 'Consumer Key',
name: 'consumerKey',
type: 'string',
typeOptions: { password: true },
default: '',
},
{
displayName: 'Consumer Secret',
name: 'consumerSecret',
type: 'string',
typeOptions: { password: true },
default: '',
},
{

View File

@@ -54,6 +54,7 @@ export class ZendeskOAuth2Api implements ICredentialType {
displayName: 'Client Secret',
name: 'clientSecret',
type: 'string',
typeOptions: { password: true },
default: '',
required: true,
},

View File

@@ -167,6 +167,7 @@ export const meetingFields: INodeProperties[] = [
{
displayName: 'Exclude Password',
name: 'excludePassword',
// eslint-disable-next-line n8n-nodes-base/node-param-type-options-password-missing
type: 'boolean',
default: false,
description: 'Whether or not to exclude password from the meeting email invitation',
@@ -746,6 +747,7 @@ export const meetingFields: INodeProperties[] = [
{
displayName: 'Exclude Password',
name: 'excludePassword',
// eslint-disable-next-line n8n-nodes-base/node-param-type-options-password-missing
type: 'boolean',
default: false,
description: 'Whether or not to exclude password from the meeting email invitation',

View File

@@ -277,6 +277,7 @@ export class Crypto implements INodeType {
},
},
type: 'string',
typeOptions: { password: true },
default: '',
required: true,
},

View File

@@ -104,6 +104,7 @@ export const connectorFields: INodeProperties[] = [
name: 'apiToken',
description: 'Jira API token',
type: 'string',
typeOptions: { password: true },
required: true,
default: '',
displayOptions: {
@@ -165,6 +166,7 @@ export const connectorFields: INodeProperties[] = [
name: 'apiKeyId',
description: 'IBM Resilient API key ID',
type: 'string',
typeOptions: { password: true },
required: true,
default: '',
displayOptions: {
@@ -180,6 +182,7 @@ export const connectorFields: INodeProperties[] = [
name: 'apiKeySecret',
description: 'IBM Resilient API key secret',
type: 'string',
typeOptions: { password: true },
required: true,
default: '',
displayOptions: {

View File

@@ -145,6 +145,7 @@ export const webinarFields: INodeProperties[] = [
{
displayName: 'Is Password Protected',
name: 'isPasswordProtected',
// eslint-disable-next-line n8n-nodes-base/node-param-type-options-password-missing
type: 'boolean',
default: false,
},
@@ -406,6 +407,7 @@ export const webinarFields: INodeProperties[] = [
{
displayName: 'Is Password Protected',
name: 'isPasswordProtected',
// eslint-disable-next-line n8n-nodes-base/node-param-type-options-password-missing
type: 'boolean',
default: false,
description: 'Whether the webinar requires a password for attendees to join',

View File

@@ -157,6 +157,7 @@ export const userFields: INodeProperties[] = [
{
displayName: 'Change Password At Next Login',
name: 'changePasswordAtNextLogin',
// eslint-disable-next-line n8n-nodes-base/node-param-type-options-password-missing
type: 'boolean',
default: false,
description: 'Whether the user is forced to change their password at next login',
@@ -682,6 +683,7 @@ export const userFields: INodeProperties[] = [
{
displayName: 'Change Password At Next Login',
name: 'changePasswordAtNextLogin',
// eslint-disable-next-line n8n-nodes-base/node-param-type-options-password-missing
type: 'boolean',
default: false,
description: 'Whether the user is forced to change their password at next login',

View File

@@ -184,6 +184,7 @@ export const userFields: INodeProperties[] = [
displayName: 'Password',
name: 'user_password',
type: 'string',
typeOptions: { password: true },
default: '',
description: "The user's password",
},
@@ -617,6 +618,7 @@ export const userFields: INodeProperties[] = [
displayName: 'Password',
name: 'user_password',
type: 'string',
typeOptions: { password: true },
default: '',
description: "The user's password",
},

View File

@@ -57,6 +57,7 @@ export const customerCardFields: INodeProperties[] = [
displayName: 'Card Token',
name: 'token',
type: 'string',
typeOptions: { password: true },
required: true,
default: '',
placeholder: 'tok_1IMfKdJhRTnqS5TKQVG1LI9o',

View File

@@ -385,6 +385,7 @@ export const monitorFields: INodeProperties[] = [
displayName: 'HTTP Password',
name: 'http_password',
type: 'string',
typeOptions: { password: true },
default: '',
description: 'The password used for password-protected web pages',
},

View File

@@ -654,6 +654,7 @@ export const certificateFields: INodeProperties[] = [
displayName: 'Keystore Password',
name: 'KeystorePassword',
type: 'string',
typeOptions: { password: true },
default: '',
},
],

View File

@@ -803,7 +803,7 @@
"@types/tmp": "^0.2.0",
"@types/uuid": "^8.3.2",
"@types/xml2js": "^0.4.11",
"eslint-plugin-n8n-nodes-base": "^1.12.0",
"eslint-plugin-n8n-nodes-base": "^1.15.0",
"gulp": "^4.0.0",
"n8n-core": "workspace:*"
},