// app/api/submit/route.js import nodemailer from 'nodemailer'; export async function POST(request) { try { const formData = await request.formData(); // 1. Extract form data (Matching your PHP POST variables) const turnstileToken = formData.get('cf-turnstile-response'); const email = formData.get('email'); const name = formData.get('name'); const team = formData.get('team'); const tel = formData.get('tel'); const count = formData.get('count'); const level = formData.get('level'); const message = formData.get('message'); const honeypot = formData.get('website'); // 2. Security Checks (Honeypot & Turnstile) if (honeypot) { return Response.json({ success: false, message: 'Spam detekterat.' }, { status: 400 }); } // Verify Turnstile const turnstileRes = await fetch('https://challenges.cloudflare.com/turnstile/v0/siteverify', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: new URLSearchParams({ secret: process.env.TURNSTILE_SECRET || '', // Pulls from .env.local response: turnstileToken?.toString() || '', }), }); const turnstileData = await turnstileRes.json(); if (!turnstileData.success) { return Response.json({ success: false, message: 'Säkerhetsverifiering misslyckades (Turnstile).' }, { status: 400 }); } let formattedTel = tel.replace(/\D/g, ''); if (formattedTel.startsWith('46')) formattedTel = formattedTel.substring(2); else if (formattedTel.startsWith('0')) formattedTel = formattedTel.substring(1); if (formattedTel.length === 9) { formattedTel = `+46 (0)${formattedTel.substring(0, 2)}-${formattedTel.substring(2, 5)} ${formattedTel.substring(5, 7)} ${formattedTel.substring(7, 9)}`; } else { formattedTel = tel; } // 4. Send Email via Nodemailer (Replicating PHPMailer) const transporter = nodemailer.createTransport({ host: '10.10.0.113', // Your internal SMTP Host port: 25, secure: false, tls: { rejectUnauthorized: false } }); const cleanMessage = message ? message.replace(/[\r\n;]/g, " ") : ""; const dateStr = new Date().toISOString().replace('T', ' ').substring(0, 19); const emailHtml = `

Beach-anmälan

Lagnamn:${team}
Kontakt:${name}
E-post:${email}
Telefon:${formattedTel}
Spelare:${count}
Nivå:${level}

Meddelande:
${message ? message.replace(/\n/g, '
') : ''}


${team} ${count} ${level} ${name} ${formattedTel} ${email} ${dateStr} ${cleanMessage}
`; // 1. Send the data to the Club await transporter.sendMail({ from: `"Anmälan: ${name}" `, to: 'beach@lerbergetsvolleyboll.se', replyTo: email?.toString(), subject: `Beach turnering: ${team}`, html: emailHtml, }); // 2. Send the friendly auto-reply to the Applicant await transporter.sendMail({ from: `"Lerbergets Volleybollsällskap" `, to: email?.toString(), subject: `Bekräftelse på anmälan: ${team}`, html: `

Hej ${name}!

Tack för din anmälan vi återkommer så fort vi kan.


Med vänliga hälsningar,
Lerbergets Volleybollsällskap

`, }); return Response.json({ success: true, message: 'Tack så mycket för anmälan! Vi svarar med en bekräftelse så fort vi kan.' }); } catch (error) { console.error(error); return Response.json({ success: false, message: 'Ett tekniskt fel uppstod. Försök igen senare.' }, { status: 500 }); } }