29 lines
940 B
TypeScript
29 lines
940 B
TypeScript
'use server';
|
|
|
|
import { headers } from 'next/headers';
|
|
import { redirect } from 'next/navigation';
|
|
import { sendContactMessageNotification } from '@/lib/mail';
|
|
import { verifyTurnstileToken } from '@/lib/turnstile';
|
|
import { getClientIp } from '@/lib/rateLimit';
|
|
|
|
export async function sendContactMessage(formData: FormData) {
|
|
const name = String(formData.get('name') ?? '').trim();
|
|
const email = String(formData.get('email') ?? '').trim();
|
|
const message = String(formData.get('message') ?? '').trim();
|
|
|
|
if (!name || !email || !message) {
|
|
redirect('/contact?error=missing');
|
|
}
|
|
|
|
const ip = getClientIp(headers());
|
|
const turnstileToken = String(formData.get('cf-turnstile-response') ?? '');
|
|
const { success } = await verifyTurnstileToken(turnstileToken, ip);
|
|
if (!success) {
|
|
redirect('/contact?error=captcha');
|
|
}
|
|
|
|
await sendContactMessageNotification({ name, email, message });
|
|
|
|
redirect('/contact?sent=1');
|
|
}
|