diff --git a/website/.env b/website/.env index 65d8b88e..4bbfe001 100644 --- a/website/.env +++ b/website/.env @@ -14,3 +14,5 @@ NEXTAUTH_SECRET=O/M2uIbGj+lDD2oyNa8ax4jEOJqCPJzO53UbWShmq98= EMAIL_SERVER_HOST=localhost EMAIL_SERVER_PORT=1025 EMAIL_FROM=info@example.com + +NEXT_PUBLIC_CLOUDFARE_CAPTCHA_SITE_KEY=1x0000000000000000000000000000000AA diff --git a/website/package-lock.json b/website/package-lock.json index 348d9fad..12e69cba 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -17,6 +17,7 @@ "@emotion/styled": "^11.10.5", "@headlessui/react": "^1.7.7", "@heroicons/react": "^2.0.13", + "@marsidev/react-turnstile": "^0.0.7", "@next-auth/prisma-adapter": "^1.0.5", "@next/font": "^13.1.0", "@prisma/client": "^4.7.1", @@ -5541,6 +5542,15 @@ "@jridgewell/sourcemap-codec": "1.4.14" } }, + "node_modules/@marsidev/react-turnstile": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@marsidev/react-turnstile/-/react-turnstile-0.0.7.tgz", + "integrity": "sha512-BWXZ6/ddE96cP/U3jkLO8wbJi6qOpE4wH67h6EkD57TRy4RSauBBYKRZkuUEpfgm2wdWoPukPz4LfnoV5KJGrQ==", + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, "node_modules/@mdx-js/mdx": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", @@ -41629,6 +41639,12 @@ "@jridgewell/sourcemap-codec": "1.4.14" } }, + "@marsidev/react-turnstile": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@marsidev/react-turnstile/-/react-turnstile-0.0.7.tgz", + "integrity": "sha512-BWXZ6/ddE96cP/U3jkLO8wbJi6qOpE4wH67h6EkD57TRy4RSauBBYKRZkuUEpfgm2wdWoPukPz4LfnoV5KJGrQ==", + "requires": {} + }, "@mdx-js/mdx": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", diff --git a/website/package.json b/website/package.json index 40d279fe..a0112756 100644 --- a/website/package.json +++ b/website/package.json @@ -34,6 +34,7 @@ "@emotion/styled": "^11.10.5", "@headlessui/react": "^1.7.7", "@heroicons/react": "^2.0.13", + "@marsidev/react-turnstile": "^0.0.7", "@next-auth/prisma-adapter": "^1.0.5", "@next/font": "^13.1.0", "@prisma/client": "^4.7.1", diff --git a/website/src/components/CloudfareCaptcha.tsx b/website/src/components/CloudfareCaptcha.tsx new file mode 100644 index 00000000..d4d827f4 --- /dev/null +++ b/website/src/components/CloudfareCaptcha.tsx @@ -0,0 +1,8 @@ +import { Turnstile } from "@marsidev/react-turnstile"; +import { forwardRef } from "react"; + +export const CloudFareCatpcha = forwardRef((ref, props) => { + return ; +}); + +CloudFareCatpcha.displayName = "CloudFareCatpcha"; diff --git a/website/types/env.d.ts b/website/types/env.d.ts new file mode 100644 index 00000000..959662db --- /dev/null +++ b/website/types/env.d.ts @@ -0,0 +1,8 @@ +declare global { + namespace NodeJS { + interface ProcessEnv { + NODE_ENV: "development" | "production"; + NEXT_PUBLIC_CLOUDFARE_CAPTCHA_SITE_KEY: string; + } + } +}