add bot detection

This commit is contained in:
Carl-Gerhard Lindesvärd
2024-02-14 00:41:47 +01:00
parent 1d3d688901
commit 176ddc410b
4 changed files with 4935 additions and 2 deletions

View File

@@ -0,0 +1,6 @@
# Device Detector - The Universal Device Detection library for parsing User Agents
> @link https://matomo.org
> @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or lat
[bots.ts](./bots.ts) is based on matomo bots.yml file. You can see the original version here [here](https://raw.githubusercontent.com/matomo-org/device-detector/master/regexes/bots.yml).

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,19 @@
import bots from './bots';
export function isBot(ua: string) {
const res = bots.find((bot) => {
if (new RegExp(bot.regex).test(ua)) {
return true;
}
return false;
});
if (!res) {
return null;
}
return {
name: res.name,
type: res.category,
};
}

View File

@@ -1,17 +1,24 @@
import { isBot as isGetBot } from '@/bots';
import * as controller from '@/controllers/event.controller';
import { validateSdkRequest } from '@/utils/auth';
import type { FastifyPluginCallback } from 'fastify';
const eventRouter: FastifyPluginCallback = (fastify, opts, done) => {
fastify.addHook('preHandler', (req, reply, done) => {
const isBot = req.headers['user-agent']
? isGetBot(req.headers['user-agent'])
: false;
if (isBot) {
reply.log.warn({ ...req.headers, bot: isBot }, 'Bot detected');
reply.status(202).send('OK');
}
validateSdkRequest(req.headers)
.then((projectId) => {
req.projectId = projectId;
done();
})
.catch((e) => {
console.log(e);
reply.status(401).send();
});
});