From 1325cdfa7804e2241d1e44ea3267f17790047056 Mon Sep 17 00:00:00 2001 From: wanhose Date: Mon, 23 May 2022 18:13:55 +0200 Subject: [PATCH] feat(api): add entries endpoint --- packages/api/src/index.ts | 19 +++++++------------ packages/api/src/routes/v1/entries.ts | 18 ++++++++++++++++++ 2 files changed, 25 insertions(+), 12 deletions(-) create mode 100644 packages/api/src/routes/v1/entries.ts diff --git a/packages/api/src/index.ts b/packages/api/src/index.ts index f49c560..835eb3d 100644 --- a/packages/api/src/index.ts +++ b/packages/api/src/index.ts @@ -1,28 +1,23 @@ import fastify from 'fastify'; import cors from '@fastify/cors'; import rateLimit from '@fastify/rate-limit'; +import v1EntriesRoutes from 'routes/v1/entries'; import v1ReportRoutes from 'routes/v1/report'; import environment from 'services/environment'; const server = fastify({ logger: true }); server.register(cors, { - origin: (origin, callback) => { - const chrome = /chrome-extension:\/\/[a-z]{32}/g; - const moz = - /moz-extension:\/\/[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}/g; - - if (chrome.test(origin) || moz.test(origin)) { - callback(null, true); - return; - } - - callback(new Error('Not allowed'), false); - }, + origin: [ + /chrome-extension:\/\/[a-z]{32}/g, + /moz-extension:\/\/[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}/g, + 'https://www.cookie-dialog-monster.com', + ], }); server.register(rateLimit, { max: 1, timeWindow: 30000 }); +server.register(v1EntriesRoutes, { prefix: '/rest/v1' }); server.register(v1ReportRoutes, { prefix: '/rest/v1' }); server.listen(environment.port, '0.0.0.0', (error, address) => { diff --git a/packages/api/src/routes/v1/entries.ts b/packages/api/src/routes/v1/entries.ts new file mode 100644 index 0000000..dc0ccb2 --- /dev/null +++ b/packages/api/src/routes/v1/entries.ts @@ -0,0 +1,18 @@ +import { FastifyInstance, RouteShorthandOptions } from 'fastify'; +import fetch from 'node-fetch'; + +export default (server: FastifyInstance, options: RouteShorthandOptions, done: () => void) => { + server.get('/entries/', async (request, reply) => { + try { + const repositoryUrl = 'https://raw.githubusercontent.com/wanhose/cookie-dialog-monster/main'; + const dataUrl = `${repositoryUrl}/data/elements.txt`; + const entriesLength = (await (await fetch(dataUrl)).text()).split('\n').length; + + reply.send({ entries: entriesLength, success: true }); + } catch { + reply.send({ success: false }); + } + }); + + done(); +};