Add option to ignore requests from bots

This commit is contained in:
pemontto 2021-12-09 13:28:14 +00:00
parent 6453996de3
commit 3128cbf874
No known key found for this signature in database
GPG key ID: EDCB93C3DA1B5DA9
3 changed files with 28 additions and 0 deletions

View file

@ -21,6 +21,7 @@ import * as fs from 'fs';
import * as formidable from 'formidable';
import * as isbot from 'isbot';
function authorizationError(resp: Response, realm: string, responseCode: number, message?: string) {
if (message === undefined) {
@ -627,6 +628,13 @@ export class Wait implements INodeType {
placeholder: 'webhook',
description: 'This suffix path will be appended to the restart URL. Helpful when using multiple wait nodes. Note: Does not support expressions.',
},
{
displayName: 'Ignore Bots',
name: 'ignoreBots',
type: 'boolean',
default: false,
description: 'Set to true to ignore requests from bots like link previewers and web crawlers',
},
// {
// displayName: 'Raw Body',
// name: 'rawBody',
@ -656,6 +664,11 @@ export class Wait implements INodeType {
const headers = this.getHeaderData();
const realm = 'Webhook';
const ignoreBots = options.ignoreBots as boolean;
if (ignoreBots && isbot((headers as IDataObject)['user-agent'] as string)) {
return authorizationError(resp, realm, 403);
}
if (incomingAuthentication === 'basicAuth') {
// Basic authorization is needed to call webhook
const httpBasicAuth = await this.getCredentials('httpBasicAuth');

View file

@ -20,6 +20,8 @@ import * as fs from 'fs';
import * as formidable from 'formidable';
import * as isbot from 'isbot';
function authorizationError(resp: Response, realm: string, responseCode: number, message?: string) {
if (message === undefined) {
message = 'Authorization problem!';
@ -379,6 +381,13 @@ export class Webhook implements INodeType {
default: false,
description: 'Raw body (binary)',
},
{
displayName: 'Ignore Bots',
name: 'ignoreBots',
type: 'boolean',
default: false,
description: 'Set to true to ignore requests from bots like link previewers and web crawlers',
},
],
},
],
@ -392,6 +401,11 @@ export class Webhook implements INodeType {
const headers = this.getHeaderData();
const realm = 'Webhook';
const ignoreBots = options.ignoreBots as boolean;
if (ignoreBots && isbot((headers as IDataObject)['user-agent'] as string)) {
return authorizationError(resp, realm, 403);
}
if (authentication === 'basicAuth') {
// Basic authorization is needed to call webhook
const httpBasicAuth = await this.getCredentials('httpBasicAuth');

View file

@ -702,6 +702,7 @@
"iconv-lite": "^0.6.2",
"ics": "^2.27.0",
"imap-simple": "^4.3.0",
"isbot": "^3.3.4",
"iso-639-1": "^2.1.3",
"jsonwebtoken": "^8.5.1",
"kafkajs": "^1.14.0",