export async function onRequestPost(context) {
try {
return await handleRequest(context);
} catch (e) {
console.error(e);
return new Response("Error sending message", { status: 500 });
}
}
async function handleRequest({ request }) {
try {
const ip = request.headers.get("CF-Connecting-IP");
const formData = await request.formData();
...
const token = formData.get("cf-turnstile-response");
const tokenValidated = await validateToken(ip, token);
if (!tokenValidated) {
return new Response("Token validation failed", { status: 403 });
}
await forwardMessage(
...
);
return new Response("OK", { status: 200 });
} catch (error) {
console.error("Error handling request:", error);
return new Response("Error handling request", { status: 500 });
}
}
async function validateToken(ip, token) {
const formData = new FormData();
formData.append("secret", env.TURNSTILE_SECRET);
formData.append("response", token);
formData.append("remoteip", ip);
const url = "https://challenges.cloudflare.com/turnstile/v0/siteverify";
const result = await fetch(url, {
body: formData,
method: "POST",
});
const outcome = await result.json();
console.log(outcome);
return outcome.success;
}
async function forwardMessage(
...
) {
console.log("Form Data:", {
...
});
try {
const sendGridApiKey = env.SENDGRID_CONTACT_API;
const sendGridEndpoint = "https://api.sendgrid.com/v3/mail/send";
....
export async function onRequestPost(context) {
try {
return await handleRequest(context);
} catch (e) {
console.error(e);
return new Response("Error sending message", { status: 500 });
}
}
async function handleRequest({ request }) {
try {
const ip = request.headers.get("CF-Connecting-IP");
const formData = await request.formData();
...
const token = formData.get("cf-turnstile-response");
const tokenValidated = await validateToken(ip, token);
if (!tokenValidated) {
return new Response("Token validation failed", { status: 403 });
}
await forwardMessage(
...
);
return new Response("OK", { status: 200 });
} catch (error) {
console.error("Error handling request:", error);
return new Response("Error handling request", { status: 500 });
}
}
async function validateToken(ip, token) {
const formData = new FormData();
formData.append("secret", env.TURNSTILE_SECRET);
formData.append("response", token);
formData.append("remoteip", ip);
const url = "https://challenges.cloudflare.com/turnstile/v0/siteverify";
const result = await fetch(url, {
body: formData,
method: "POST",
});
const outcome = await result.json();
console.log(outcome);
return outcome.success;
}
async function forwardMessage(
...
) {
console.log("Form Data:", {
...
});
try {
const sendGridApiKey = env.SENDGRID_CONTACT_API;
const sendGridEndpoint = "https://api.sendgrid.com/v3/mail/send";
....