diff --git a/app/kontakt/actions.ts b/app/kontakt/actions.ts index 47ad527..b482751 100644 --- a/app/kontakt/actions.ts +++ b/app/kontakt/actions.ts @@ -1,8 +1,8 @@ "use server"; import { z } from "zod"; - import { Resend } from "resend"; +import { verifyRecaptcha } from "@/lib/recaptcha"; const resend = new Resend(process.env.RESEND_API_KEY); @@ -19,6 +19,17 @@ const contactFormSchema = z.object({ export async function submitContactForm(prevState: any, formData: FormData) { try { + if (process.env.NEXT_PUBLIC_RECAPTCHA_SITE_KEY && process.env.RECAPTCHA_SECRET_KEY) { + const token = formData.get('recaptchaToken') as string; + if (!token) { + return { success: false, message: "Weryfikacja bezpieczeństwa nie powiodła się. Odśwież stronę i spróbuj ponownie." }; + } + const { success } = await verifyRecaptcha(token); + if (!success) { + return { success: false, message: "Weryfikacja bezpieczeństwa nie powiodła się. Odśwież stronę i spróbuj ponownie." }; + } + } + // 1. Walidacja danych z formularza const rawData = { name: formData.get("name"), diff --git a/app/layout.tsx b/app/layout.tsx index f89bd69..7468915 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -4,6 +4,7 @@ import { Header } from "@/components/layout/Header"; import { TrustBar } from "@/components/layout/TrustBar"; import { Footer } from "@/components/layout/Footer"; import CookieBanner from '@/components/CookieBanner'; +import Script from 'next/script'; import { CompareBar } from '@/components/shop/CompareBar'; import { AnalyticsWrapper } from "@/components/ui/AnalyticsWrapper"; import { CookieSettingsFloatingIcon } from "@/components/ui/CookieSettingsFloatingIcon"; @@ -67,6 +68,12 @@ export default function RootLayout({ + {process.env.NEXT_PUBLIC_RECAPTCHA_SITE_KEY && ( +