From afcb0ecba6a5226c86a1364b433b8499c597bc02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samy=20Pess=C3=A9?= Date: Sun, 17 Dec 2023 00:25:07 +0100 Subject: [PATCH] Load integration scripts and secure the app with CSP (#39) * Set colorSchema metadata * Try CSP * Move colorScheme to generateViewport * Bun install * Use wildcard for img-src and connect-src * Allow all unsafe-inline for now for style * Remove nonce for style * Remove nonce for style * Optimize data fetching with parallel requests * Try to reuse memory cache between middleware and rendering in CF * Comment * Fetch document in parallel of collections * Cleanup * Log if redis is enabled for caching * Fix memory cache before redis one * Optimize alternatives being tested --- bun.lockb | Bin 325363 -> 326199 bytes package.json | 1 + src/app/[spaceId]/[[...pathname]]/layout.tsx | 21 ++- src/app/[spaceId]/[[...pathname]]/page.tsx | 29 +++- src/app/[spaceId]/fetch.ts | 22 +-- src/lib/api.ts | 63 ++++++- src/lib/cache.ts | 72 +++++--- src/lib/csp.ts | 58 +++++++ src/middleware.ts | 171 +++++++++++-------- types/content-security-policy-merger.ts | 3 + 10 files changed, 321 insertions(+), 119 deletions(-) create mode 100644 src/lib/csp.ts create mode 100644 types/content-security-policy-merger.ts diff --git a/bun.lockb b/bun.lockb index 9430d9741d17ca4c1fa1c50ec62b01ea12a2d5fa..16280d20b744dd23b52e23f3368d4061fa224c39 100755 GIT binary patch delta 60921 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 B?vDTf diff --git a/package.json b/package.json index bb0e2c15d..276fef651 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "ajv": "^8.12.0", "assert-never": "^1.2.1", "bun-types": "^1.0.7", + "content-security-policy-merger": "^1.0.0", "framer-motion": "^10.16.14", "js-cookie": "^3.0.5", "jsontoxml": "^1.0.1", diff --git a/src/app/[spaceId]/[[...pathname]]/layout.tsx b/src/app/[spaceId]/[[...pathname]]/layout.tsx index 2cbe1f505..c9556fb67 100644 --- a/src/app/[spaceId]/[[...pathname]]/layout.tsx +++ b/src/app/[spaceId]/[[...pathname]]/layout.tsx @@ -1,12 +1,15 @@ import { CustomizationHeaderPreset, CustomizationSettings } from '@gitbook/api'; import assertNever from 'assert-never'; +import Script from 'next/script'; import colors from 'tailwindcss/colors'; import { fonts } from '@/fonts'; +import { getSpaceContent } from '@/lib/api'; import { hexToRgb, shadesOfColor } from '@/lib/colors'; +import { getContentSecurityPolicyNonce } from '@/lib/csp'; import { tcls } from '@/lib/tailwind'; -import { PagePathParams, fetchPageData } from '../fetch'; +import { PagePathParams } from '../fetch'; export default async function SpaceRootLayout(props: { children: React.ReactNode; @@ -14,13 +17,21 @@ export default async function SpaceRootLayout(props: { }) { const { params, children } = props; - const { customization } = await fetchPageData(params); + const { customization, scripts } = await getSpaceContent({ + spaceId: params.spaceId, + }); const headerTheme = generateHeaderTheme(customization); + const nonce = getContentSecurityPolicyNonce(); return ( -