feat: pagina contatti e api email con validazione testata

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-02 01:26:49 +02:00
parent be4d933ca3
commit e9840105a3
5 changed files with 170 additions and 0 deletions
+26
View File
@@ -0,0 +1,26 @@
import type { APIRoute } from 'astro';
import { validateContact } from '../../lib/contact';
import { sendContactEmail } from '../../lib/mailer';
import { rateLimit } from '../../lib/rate-limit';
export const prerender = false;
const json = (status: number, body: object) =>
new Response(JSON.stringify(body), { status, headers: { 'Content-Type': 'application/json' } });
export const POST: APIRoute = async ({ request, clientAddress }) => {
if (!rateLimit(`contact:${clientAddress}`, 5, 60 * 60 * 1000)) {
return json(429, { error: 'Troppe richieste, riprova più tardi.' });
}
let data: unknown;
try { data = await request.json(); } catch { return json(400, { error: 'Dati non validi.' }); }
const result = validateContact(data);
if (!result.ok) return json(400, { error: result.error });
try {
await sendContactEmail(result.value);
} catch (err) {
console.error('Invio email fallito:', err);
return json(502, { error: 'Invio non riuscito, riprova più tardi o scrivici direttamente.' });
}
return json(200, { ok: true });
};