From f2b825ba28146cde0d112c03529fb87671d73e34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20Guichard?= Date: Tue, 23 Jan 2024 18:51:18 +0100 Subject: [PATCH 01/28] Update DataDome module --- .../bot-protection-datadome/lib/datadome.ts | 71 ++++++++++++------- 1 file changed, 47 insertions(+), 24 deletions(-) diff --git a/edge-middleware/bot-protection-datadome/lib/datadome.ts b/edge-middleware/bot-protection-datadome/lib/datadome.ts index e91f11581..1c28cc017 100644 --- a/edge-middleware/bot-protection-datadome/lib/datadome.ts +++ b/edge-middleware/bot-protection-datadome/lib/datadome.ts @@ -10,11 +10,11 @@ export default async function datadome(req: NextRequest) { if (DATADOME_URI_REGEX_EXCLUSION.test(pathname)) { return } - + let { clientId, cookiesLength } = getCookieData(req.cookies) const requestData = { Key: process.env.DATADOME_SERVER_KEY, RequestModuleName: 'Next.js', - ModuleVersion: '0.1', + ModuleVersion: '0.2.0', ServerName: 'vercel', // this should be `x-real-ip` but it doesn't currently work on Edge Middleware IP: req.headers.get('x-forwarded-for') @@ -32,36 +32,51 @@ export default async function datadome(req: NextRequest) { Host: req.headers.get('host'), UserAgent: req.headers.get('user-agent'), Referer: req.headers.get('referer'), - // Make sure Datadome always returns a JSON response in case of a 403 - Accept: 'application/json', + Accept: req.headers.get('accept'), AcceptEncoding: req.headers.get('accept-encoding'), AcceptLanguage: req.headers.get('accept-language'), AcceptCharset: req.headers.get('accept-charset'), Origin: req.headers.get('origin'), - XForwaredForIP: req.headers.get('x-forwarded-for'), + XForwardedForIP: req.headers.get('x-forwarded-for'), Connection: req.headers.get('connection'), Pragma: req.headers.get('pragma'), CacheControl: req.headers.get('cache-control'), ContentType: req.headers.get('content-type'), From: req.headers.get('from'), Via: req.headers.get('via'), - CookiesLen: getCookiesLength(req.cookies), + CookiesLen: cookiesLength, AuthorizationLen: getAuthorizationLength(req), PostParamLen: req.headers.get('content-length'), - ClientID: req.cookies.get('datadome')?.value, + ClientID: clientId, ServerRegion: 'sfo1', + SecCHDeviceMemory: req.headers.get('sec-ch-device-memory'), + SecCHUA: req.headers.get('sec-ch-ua'), + SecCHUAArch: req.headers.get('sec-ch-ua-arch'), + SecCHUAFullVersionList: req.headers.get('sec-ch-ua-full-version-list'), + SecCHUAMobile: req.headers.get('sec-ch-ua-mobile'), + SecCHUAModel: req.headers.get('sec-ch-ua-model'), + SecCHUAPlatform: req.headers.get('sec-ch-ua-platform'), + SecFetchDest: req.headers.get('sec-fetch-dest'), + SecFetchMode: req.headers.get('sec-fetch-mode'), + SecFetchSite: req.headers.get('sec-fetch-site'), + SecFetchUser: req.headers.get('sec-fetch-user'), + 'X-Real-IP': req.headers.get('x-real-ip'), + 'X-Requested-With': req.headers.get('x-requested-with'), } - const dataDomeReq = fetch( - 'http://api-cloudflare.datadome.co/validate-request/', - { - method: 'POST', - headers: { - 'Content-Type': 'application/x-www-form-urlencoded', - 'User-Agent': 'DataDome', - }, - body: stringify(requestData), - } - ) + + const options = { + method: 'POST', + body: stringify(requestData), + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + 'User-Agent': 'DataDome', + }, + } + if (req.headers.get('x-datadome-clientid')?.length) { + options.headers['X-DataDome-X-Set-Cookie'] = true + requestData.ClientID = req.headers.get('x-datadome-clientid') + } + const dataDomeReq = fetch('http://api.datadome.co/validate-request/', options) const timeoutPromise = new Promise((resolve, reject) => { setTimeout(() => { @@ -105,6 +120,7 @@ export default async function datadome(req: NextRequest) { if (dataDomeRes.status !== 200) { // blocked! + res = dataDomeRes const isBot = dataDomeRes.headers.get('x-datadome-isbot') if (isBot) { console.log( @@ -114,9 +130,6 @@ export default async function datadome(req: NextRequest) { dataDomeRes.headers.get('x-datadome-botfamily') ) } - - const data = await dataDomeRes.json() - res = NextResponse.rewrite(data.url) } // Add Datadome headers to the response @@ -200,11 +213,21 @@ function stringify(obj: Record) { .join('&') : '' } - -function getCookiesLength(cookies: NextRequest['cookies']) { +/** + * Returns a simple object with two properties: + * - The client ID from the `datadome` cookie. + * - The total length of the `Cookie` request header. + * @param {NextRequest['cookies']} cookies - Incoming client request cookie header + * @returns {{ clientId: string, cookiesLength: number }} + */ +function getCookieData(cookies: NextRequest['cookies']) { + let clientId = '' let cookiesLength = 0 for (const [, cookie] of cookies) { cookiesLength += cookie.value.length + if (clientId == '' && cookie.name == 'datadome') { + clientId = cookie.value + } } - return cookiesLength + return { clientId, cookiesLength } } From d0ff4eb556e05a22192ceece85bda09ef2e4de23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20Guichard?= Date: Tue, 23 Jan 2024 18:55:26 +0100 Subject: [PATCH 02/28] Update DataDome module --- edge-middleware/bot-protection-datadome/lib/datadome.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/edge-middleware/bot-protection-datadome/lib/datadome.ts b/edge-middleware/bot-protection-datadome/lib/datadome.ts index 1c28cc017..0783cdf22 100644 --- a/edge-middleware/bot-protection-datadome/lib/datadome.ts +++ b/edge-middleware/bot-protection-datadome/lib/datadome.ts @@ -73,7 +73,7 @@ export default async function datadome(req: NextRequest) { }, } if (req.headers.get('x-datadome-clientid')?.length) { - options.headers['X-DataDome-X-Set-Cookie'] = true + options.headers['X-DataDome-X-Set-Cookie'] = 'true' requestData.ClientID = req.headers.get('x-datadome-clientid') } const dataDomeReq = fetch('http://api.datadome.co/validate-request/', options) From 0227d35eba26113a9fce3aa3687dcb05f1d05603 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20Guichard?= Date: Wed, 24 Jan 2024 09:28:36 +0100 Subject: [PATCH 03/28] Fix type issue --- edge-middleware/bot-protection-datadome/lib/datadome.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/edge-middleware/bot-protection-datadome/lib/datadome.ts b/edge-middleware/bot-protection-datadome/lib/datadome.ts index 0783cdf22..f51cf561b 100644 --- a/edge-middleware/bot-protection-datadome/lib/datadome.ts +++ b/edge-middleware/bot-protection-datadome/lib/datadome.ts @@ -70,11 +70,12 @@ export default async function datadome(req: NextRequest) { headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'User-Agent': 'DataDome', + 'X-DataDome-X-Set-Cookie': 'false', }, } if (req.headers.get('x-datadome-clientid')?.length) { options.headers['X-DataDome-X-Set-Cookie'] = 'true' - requestData.ClientID = req.headers.get('x-datadome-clientid') + requestData.ClientID = req.headers.get('x-datadome-clientid') as string } const dataDomeReq = fetch('http://api.datadome.co/validate-request/', options) From 55365f7c118f6df423a0ad6a28aa1ae23235998a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20Guichard?= Date: Wed, 24 Jan 2024 09:43:05 +0100 Subject: [PATCH 04/28] Fix NextResponse type for response --- edge-middleware/bot-protection-datadome/lib/datadome.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/edge-middleware/bot-protection-datadome/lib/datadome.ts b/edge-middleware/bot-protection-datadome/lib/datadome.ts index f51cf561b..ecb4c4bdc 100644 --- a/edge-middleware/bot-protection-datadome/lib/datadome.ts +++ b/edge-middleware/bot-protection-datadome/lib/datadome.ts @@ -85,14 +85,14 @@ export default async function datadome(req: NextRequest) { }, DATADOME_TIMEOUT) }) - let dataDomeRes: Response + let dataDomeRes: NextResponse const dataDomeStart = Date.now() try { dataDomeRes = (await Promise.race([ dataDomeReq, timeoutPromise, - ])) as Response + ])) as NextResponse } catch (err: any) { console.error('Datadome failed with:', err.stack) return From 06435d70cc8073afe2efcbdb41a24f0dbc40773f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20Guichard?= Date: Wed, 24 Jan 2024 09:58:41 +0100 Subject: [PATCH 05/28] Fix variable name --- edge-middleware/bot-protection-datadome/.env.example | 2 +- edge-middleware/bot-protection-datadome/lib/datadome.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/edge-middleware/bot-protection-datadome/.env.example b/edge-middleware/bot-protection-datadome/.env.example index e141e88b3..b42940d73 100644 --- a/edge-middleware/bot-protection-datadome/.env.example +++ b/edge-middleware/bot-protection-datadome/.env.example @@ -1,2 +1,2 @@ NEXT_PUBLIC_DATADOME_CLIENT_KEY = -DATADOME_SERVER_KEY = \ No newline at end of file +DATADOME_SERVER_SIDE_KEY = \ No newline at end of file diff --git a/edge-middleware/bot-protection-datadome/lib/datadome.ts b/edge-middleware/bot-protection-datadome/lib/datadome.ts index ecb4c4bdc..584a1de05 100644 --- a/edge-middleware/bot-protection-datadome/lib/datadome.ts +++ b/edge-middleware/bot-protection-datadome/lib/datadome.ts @@ -12,7 +12,7 @@ export default async function datadome(req: NextRequest) { } let { clientId, cookiesLength } = getCookieData(req.cookies) const requestData = { - Key: process.env.DATADOME_SERVER_KEY, + Key: process.env.DATADOME_SERVER_SIDE_KEY, RequestModuleName: 'Next.js', ModuleVersion: '0.2.0', ServerName: 'vercel', @@ -107,7 +107,7 @@ export default async function datadome(req: NextRequest) { switch (dataDomeRes.status) { case 400: // Something is wrong with our authentication - console.log('DataDome returned 400', dataDomeRes.statusText) + console.log('DataDome returned 400', dataDomeRes.statusText, await dataDomeRes.text()) return case 200: From f167daf3a762343e2b254c5e23fc3e51c0df2bb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20Guichard?= Date: Tue, 6 Feb 2024 18:49:06 +0100 Subject: [PATCH 06/28] remove strict in tsconfig.json --- edge-middleware/bot-protection-datadome/lib/datadome.ts | 7 +++++-- edge-middleware/bot-protection-datadome/tsconfig.json | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/edge-middleware/bot-protection-datadome/lib/datadome.ts b/edge-middleware/bot-protection-datadome/lib/datadome.ts index 584a1de05..345e069bb 100644 --- a/edge-middleware/bot-protection-datadome/lib/datadome.ts +++ b/edge-middleware/bot-protection-datadome/lib/datadome.ts @@ -69,8 +69,7 @@ export default async function datadome(req: NextRequest) { body: stringify(requestData), headers: { 'Content-Type': 'application/x-www-form-urlencoded', - 'User-Agent': 'DataDome', - 'X-DataDome-X-Set-Cookie': 'false', + 'User-Agent': 'DataDome' }, } if (req.headers.get('x-datadome-clientid')?.length) { @@ -121,7 +120,11 @@ export default async function datadome(req: NextRequest) { if (dataDomeRes.status !== 200) { // blocked! + // res.cookies.set('datadome', dataDomeRes.cookies.get('datadome')?.value) + // res = NextResponse.next(dataDomeRes) + // dataDomeRes.headers.set('x-datadome-headers', ' ') res = dataDomeRes + // res.headers.delete('x-datadome-headers') const isBot = dataDomeRes.headers.get('x-datadome-isbot') if (isBot) { console.log( diff --git a/edge-middleware/bot-protection-datadome/tsconfig.json b/edge-middleware/bot-protection-datadome/tsconfig.json index a04e1f076..5a53edcf1 100644 --- a/edge-middleware/bot-protection-datadome/tsconfig.json +++ b/edge-middleware/bot-protection-datadome/tsconfig.json @@ -5,7 +5,7 @@ "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "skipLibCheck": true, - "strict": true, + "strict": false, "forceConsistentCasingInFileNames": true, "noEmit": true, "esModuleInterop": true, From bacb5ac48099e92a746fbbdfba4b692976bb4419 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20Guichard?= Date: Wed, 7 Feb 2024 16:28:23 +0100 Subject: [PATCH 07/28] fix: renamed variables, reorder payload fields --- .../bot-protection-datadome/.env.example | 6 ++- .../bot-protection-datadome/lib/datadome.ts | 52 +++++++++---------- 2 files changed, 30 insertions(+), 28 deletions(-) diff --git a/edge-middleware/bot-protection-datadome/.env.example b/edge-middleware/bot-protection-datadome/.env.example index b42940d73..c5f30844f 100644 --- a/edge-middleware/bot-protection-datadome/.env.example +++ b/edge-middleware/bot-protection-datadome/.env.example @@ -1,2 +1,4 @@ -NEXT_PUBLIC_DATADOME_CLIENT_KEY = -DATADOME_SERVER_SIDE_KEY = \ No newline at end of file +DATADOME_SERVER_SIDE_KEY = +# DATADOME_CLIENT_SIDE_KEY = +# DATADOME_ENDPOINT = +# DATADOME_TIMEOUT = \ No newline at end of file diff --git a/edge-middleware/bot-protection-datadome/lib/datadome.ts b/edge-middleware/bot-protection-datadome/lib/datadome.ts index 345e069bb..0bedee20c 100644 --- a/edge-middleware/bot-protection-datadome/lib/datadome.ts +++ b/edge-middleware/bot-protection-datadome/lib/datadome.ts @@ -1,8 +1,8 @@ import { NextRequest, NextResponse } from 'next/server' -const DATADOME_TIMEOUT = 500 +const DATADOME_TIMEOUT = parseInt(process.env.DATADOME_TIMEOUT??"300") const DATADOME_URI_REGEX_EXCLUSION = - /\.(avi|flv|mka|mkv|mov|mp4|mpeg|mpg|mp3|flac|ogg|ogm|opus|wav|webm|webp|bmp|gif|ico|jpeg|jpg|png|svg|svgz|swf|eot|otf|ttf|woff|woff2|css|less|js)$/i + /\.(avi|flv|mka|mkv|mov|mp4|mpeg|mpg|mp3|flac|ogg|ogm|opus|wav|webm|webp|bmp|gif|ico|jpeg|jpg|png|svg|svgz|swf|eot|otf|ttf|woff|woff2|css|less|js|map)$/i export default async function datadome(req: NextRequest) { const { pathname } = req.nextUrl @@ -13,42 +13,42 @@ export default async function datadome(req: NextRequest) { let { clientId, cookiesLength } = getCookieData(req.cookies) const requestData = { Key: process.env.DATADOME_SERVER_SIDE_KEY, - RequestModuleName: 'Next.js', - ModuleVersion: '0.2.0', - ServerName: 'vercel', // this should be `x-real-ip` but it doesn't currently work on Edge Middleware + // localhost won't likely be blocked by Datadome unless you use your real IP + // IP: 'YOUR IP', IP: req.headers.get('x-forwarded-for') ? req.headers.get('x-forwarded-for')!.split(',')[0] : '127.0.0.1', - // localhost won't likely be blocked by Datadome unless you use your real IP - // IP: 'YOUR IP', - Port: 0, - TimeRequest: new Date().getTime() * 1000, - Protocol: req.headers.get('x-forwarded-proto'), - Method: req.method, - ServerHostname: req.headers.get('host'), - Request: pathname + encode(Object.fromEntries(req.nextUrl.searchParams)), - HeadersList: getHeadersList(req), - Host: req.headers.get('host'), - UserAgent: req.headers.get('user-agent'), - Referer: req.headers.get('referer'), + RequestModuleName: 'Next.js', + ModuleVersion: '0.2.0', + AuthorizationLen: getAuthorizationLength(req), Accept: req.headers.get('accept'), AcceptEncoding: req.headers.get('accept-encoding'), AcceptLanguage: req.headers.get('accept-language'), AcceptCharset: req.headers.get('accept-charset'), - Origin: req.headers.get('origin'), - XForwardedForIP: req.headers.get('x-forwarded-for'), - Connection: req.headers.get('connection'), - Pragma: req.headers.get('pragma'), CacheControl: req.headers.get('cache-control'), + ClientID: clientId, + Connection: req.headers.get('connection'), ContentType: req.headers.get('content-type'), - From: req.headers.get('from'), - Via: req.headers.get('via'), CookiesLen: cookiesLength, - AuthorizationLen: getAuthorizationLength(req), + From: req.headers.get('from'), + HeadersList: getHeadersList(req), + Host: req.headers.get('host'), + Method: req.method, + Origin: req.headers.get('origin'), + Port: 0, + Pragma: req.headers.get('pragma'), PostParamLen: req.headers.get('content-length'), - ClientID: clientId, + Protocol: req.headers.get('x-forwarded-proto'), + Referer: req.headers.get('referer'), + Request: pathname + encode(Object.fromEntries(req.nextUrl.searchParams)), + ServerHostname: req.headers.get('host'), + ServerName: 'vercel', ServerRegion: 'sfo1', + TimeRequest: new Date().getTime() * 1000, + UserAgent: req.headers.get('user-agent'), + Via: req.headers.get('via'), + XForwardedForIP: req.headers.get('x-forwarded-for'), SecCHDeviceMemory: req.headers.get('sec-ch-device-memory'), SecCHUA: req.headers.get('sec-ch-ua'), SecCHUAArch: req.headers.get('sec-ch-ua-arch'), @@ -123,7 +123,7 @@ export default async function datadome(req: NextRequest) { // res.cookies.set('datadome', dataDomeRes.cookies.get('datadome')?.value) // res = NextResponse.next(dataDomeRes) // dataDomeRes.headers.set('x-datadome-headers', ' ') - res = dataDomeRes + res = dataDomeRes as NextResponse; // res.headers.delete('x-datadome-headers') const isBot = dataDomeRes.headers.get('x-datadome-isbot') if (isBot) { From b90dae5d162b1c9d7371953ed439e7820f71c014 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20Guichard?= Date: Wed, 7 Feb 2024 16:40:40 +0100 Subject: [PATCH 08/28] try to clone the DD response --- edge-middleware/bot-protection-datadome/lib/datadome.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/edge-middleware/bot-protection-datadome/lib/datadome.ts b/edge-middleware/bot-protection-datadome/lib/datadome.ts index 0bedee20c..60fba9e0b 100644 --- a/edge-middleware/bot-protection-datadome/lib/datadome.ts +++ b/edge-middleware/bot-protection-datadome/lib/datadome.ts @@ -123,7 +123,7 @@ export default async function datadome(req: NextRequest) { // res.cookies.set('datadome', dataDomeRes.cookies.get('datadome')?.value) // res = NextResponse.next(dataDomeRes) // dataDomeRes.headers.set('x-datadome-headers', ' ') - res = dataDomeRes as NextResponse; + res = dataDomeRes.clone() as NextResponse; // res.headers.delete('x-datadome-headers') const isBot = dataDomeRes.headers.get('x-datadome-isbot') if (isBot) { From cdf9a7acffe1b551e218fea39b24652ef5c8f483 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20Guichard?= Date: Wed, 7 Feb 2024 17:13:23 +0100 Subject: [PATCH 09/28] test with try --- .../bot-protection-datadome/lib/datadome.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/edge-middleware/bot-protection-datadome/lib/datadome.ts b/edge-middleware/bot-protection-datadome/lib/datadome.ts index 60fba9e0b..424c3968f 100644 --- a/edge-middleware/bot-protection-datadome/lib/datadome.ts +++ b/edge-middleware/bot-protection-datadome/lib/datadome.ts @@ -121,9 +121,9 @@ export default async function datadome(req: NextRequest) { if (dataDomeRes.status !== 200) { // blocked! // res.cookies.set('datadome', dataDomeRes.cookies.get('datadome')?.value) - // res = NextResponse.next(dataDomeRes) + res = NextResponse.next(dataDomeRes) // dataDomeRes.headers.set('x-datadome-headers', ' ') - res = dataDomeRes.clone() as NextResponse; + // res = dataDomeRes.clone() as NextResponse; // res.headers.delete('x-datadome-headers') const isBot = dataDomeRes.headers.get('x-datadome-isbot') if (isBot) { @@ -136,10 +136,16 @@ export default async function datadome(req: NextRequest) { } } + // const respHeaders = new Headers(); // Add Datadome headers to the response toHeaders(req.headers, dataDomeRes.headers, 'x-datadome-headers').forEach( (v, k) => { - res.headers.set(k, v) + console.log('k:' + k + ', v:' + v); + try { + res.headers.set(k, v) + } catch (error) { + console.log(error); + } } ) From 69d3c1361a4bccfaf07abe360397d9604b479247 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20Guichard?= Date: Wed, 7 Feb 2024 18:03:34 +0100 Subject: [PATCH 10/28] test with Response constructor --- .../bot-protection-datadome/lib/datadome.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/edge-middleware/bot-protection-datadome/lib/datadome.ts b/edge-middleware/bot-protection-datadome/lib/datadome.ts index 424c3968f..aa9cde475 100644 --- a/edge-middleware/bot-protection-datadome/lib/datadome.ts +++ b/edge-middleware/bot-protection-datadome/lib/datadome.ts @@ -121,7 +121,8 @@ export default async function datadome(req: NextRequest) { if (dataDomeRes.status !== 200) { // blocked! // res.cookies.set('datadome', dataDomeRes.cookies.get('datadome')?.value) - res = NextResponse.next(dataDomeRes) + res = new Response(dataDomeRes.body, {status: dataDomeRes.status}) as NextResponse + // res.body = dataDomeRes.body; // dataDomeRes.headers.set('x-datadome-headers', ' ') // res = dataDomeRes.clone() as NextResponse; // res.headers.delete('x-datadome-headers') @@ -140,14 +141,19 @@ export default async function datadome(req: NextRequest) { // Add Datadome headers to the response toHeaders(req.headers, dataDomeRes.headers, 'x-datadome-headers').forEach( (v, k) => { - console.log('k:' + k + ', v:' + v); try { res.headers.set(k, v) } catch (error) { + console.log('failed for k:' + k + ', v:' + v); console.log(error); } } ) + console.log( + 'Datadome response debug', + res.status, + JSON.stringify(Object.fromEntries(res.headers.entries()), null, 2) + ) // We're sending the latency for demo purposes, this is not something you need to do res.headers.set('x-datadome-latency', `${Date.now() - dataDomeStart}`) From ebf54d00466b06ada672ebef8fc93af85b203581 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20Guichard?= Date: Wed, 7 Feb 2024 19:00:56 +0100 Subject: [PATCH 11/28] Clean up --- .../bot-protection-datadome/lib/datadome.ts | 16 ++-------------- .../bot-protection-datadome/pages/_app.tsx | 4 ++-- 2 files changed, 4 insertions(+), 16 deletions(-) diff --git a/edge-middleware/bot-protection-datadome/lib/datadome.ts b/edge-middleware/bot-protection-datadome/lib/datadome.ts index aa9cde475..c260283b5 100644 --- a/edge-middleware/bot-protection-datadome/lib/datadome.ts +++ b/edge-middleware/bot-protection-datadome/lib/datadome.ts @@ -120,33 +120,22 @@ export default async function datadome(req: NextRequest) { if (dataDomeRes.status !== 200) { // blocked! - // res.cookies.set('datadome', dataDomeRes.cookies.get('datadome')?.value) res = new Response(dataDomeRes.body, {status: dataDomeRes.status}) as NextResponse - // res.body = dataDomeRes.body; - // dataDomeRes.headers.set('x-datadome-headers', ' ') - // res = dataDomeRes.clone() as NextResponse; - // res.headers.delete('x-datadome-headers') const isBot = dataDomeRes.headers.get('x-datadome-isbot') if (isBot) { console.log( 'Bot detected. Name:', dataDomeRes.headers.get('x-datadome-botname'), '– Kind:', - dataDomeRes.headers.get('x-datadome-botfamily') + dataDomeRes.headers.get('x-datadome-ruletype') ) } } - // const respHeaders = new Headers(); // Add Datadome headers to the response toHeaders(req.headers, dataDomeRes.headers, 'x-datadome-headers').forEach( (v, k) => { - try { - res.headers.set(k, v) - } catch (error) { - console.log('failed for k:' + k + ', v:' + v); - console.log(error); - } + res.headers.set(k, v) } ) console.log( @@ -154,7 +143,6 @@ export default async function datadome(req: NextRequest) { res.status, JSON.stringify(Object.fromEntries(res.headers.entries()), null, 2) ) - // We're sending the latency for demo purposes, this is not something you need to do res.headers.set('x-datadome-latency', `${Date.now() - dataDomeStart}`) diff --git a/edge-middleware/bot-protection-datadome/pages/_app.tsx b/edge-middleware/bot-protection-datadome/pages/_app.tsx index 059171667..81d3e3ff5 100644 --- a/edge-middleware/bot-protection-datadome/pages/_app.tsx +++ b/edge-middleware/bot-protection-datadome/pages/_app.tsx @@ -13,14 +13,14 @@ function MyApp({ Component, pageProps }: AppProps) { title="Bot Protection with DataDome" path="edge-middleware/bot-protection-datadome" deployButton={{ - env: ['NEXT_PUBLIC_DATADOME_CLIENT_KEY', 'DATADOME_SERVER_KEY'], + env: ['DATADOME_CLIENT_SIDE_KEY', 'DATADOME_SERVER_KEY'], }} > {/* datadome bot protection */}