chore: normalize formatting for workers

This commit is contained in:
Cory Dransfeldt 2024-10-19 19:53:31 -07:00
parent 2f6cfbe7ae
commit 2cd835d31b
No known key found for this signature in database
14 changed files with 879 additions and 604 deletions

View file

@ -1,84 +1,101 @@
import { createClient } from '@supabase/supabase-js'
import { createClient } from "@supabase/supabase-js";
const RATE_LIMIT = 5
const TIME_FRAME = 60 * 60 * 1000
const ipSubmissions = new Map()
const RATE_LIMIT = 5;
const TIME_FRAME = 60 * 60 * 1000;
const ipSubmissions = new Map();
export default {
async fetch(request, env) {
if (request.method === 'POST') {
const ip = request.headers.get('CF-Connecting-IP') || request.headers.get('X-Forwarded-For') || request.headers.get('Remote-Addr')
const currentTime = Date.now()
if (request.method === "POST") {
const ip =
request.headers.get("CF-Connecting-IP") ||
request.headers.get("X-Forwarded-For") ||
request.headers.get("Remote-Addr");
const currentTime = Date.now();
if (!ipSubmissions.has(ip)) ipSubmissions.set(ip, [])
if (!ipSubmissions.has(ip)) ipSubmissions.set(ip, []);
const submissions = ipSubmissions.get(ip).filter(time => currentTime - time < TIME_FRAME)
const submissions = ipSubmissions
.get(ip)
.filter((time) => currentTime - time < TIME_FRAME);
if (submissions.length >= RATE_LIMIT) return Response.redirect('https://coryd.dev/rate-limit', 301)
if (submissions.length >= RATE_LIMIT)
return Response.redirect("https://coryd.dev/rate-limit", 301);
submissions.push(currentTime)
ipSubmissions.set(ip, submissions)
submissions.push(currentTime);
ipSubmissions.set(ip, submissions);
try {
const formData = await request.formData()
const name = formData.get('name')
const email = formData.get('email')
const message = formData.get('message')
const hpName = formData.get('hp_name')
if (hpName) return new Response('Spam detected', { status: 400 })
if (!name || !email || !message) return new Response('Invalid input', { status: 400 })
const formData = await request.formData();
const name = formData.get("name");
const email = formData.get("email");
const message = formData.get("message");
const hpName = formData.get("hp_name");
if (hpName) return new Response("Spam detected", { status: 400 });
if (!name || !email || !message)
return new Response("Invalid input", { status: 400 });
const emailDomain = email.split('@')[1].toLowerCase()
const supabaseUrl = env.SUPABASE_URL || process.env.SUPABASE_URL
const supabaseKey = env.SUPABASE_KEY || process.env.SUPABASE_KEY
const supabase = createClient(supabaseUrl, supabaseKey)
const emailDomain = email.split("@")[1].toLowerCase();
const supabaseUrl = env.SUPABASE_URL || process.env.SUPABASE_URL;
const supabaseKey = env.SUPABASE_KEY || process.env.SUPABASE_KEY;
const supabase = createClient(supabaseUrl, supabaseKey);
const { data: blockedDomains, error: domainError } = await supabase
.from('blocked_domains')
.select('domain_name')
.from("blocked_domains")
.select("domain_name");
if (domainError) throw new Error(`Failed to fetch blocked domains: ${domainError.message}`)
if (domainError)
throw new Error(
`Failed to fetch blocked domains: ${domainError.message}`
);
const domainList = blockedDomains.map(item => item['domain_name'].toLowerCase())
const domainList = blockedDomains.map((item) =>
item["domain_name"].toLowerCase()
);
if (domainList.includes(emailDomain)) return new Response('Email domain is blocked.', { status: 400 })
if (domainList.includes(emailDomain))
return new Response("Email domain is blocked.", { status: 400 });
const { error } = await supabase.from('contacts').insert([
{ name, email, message, replied: false }
])
const { error } = await supabase
.from("contacts")
.insert([{ name, email, message, replied: false }]);
if (error) throw error
if (error) throw error;
const forwardEmailApiKey = env.FORWARDEMAIL_API_KEY
const authHeader = 'Basic ' + btoa(`${forwardEmailApiKey}:`)
const forwardEmailApiKey = env.FORWARDEMAIL_API_KEY;
const authHeader = "Basic " + btoa(`${forwardEmailApiKey}:`);
const emailData = new URLSearchParams({
from: `${name} <hi@admin.coryd.dev>`,
to: 'hi@coryd.dev',
to: "hi@coryd.dev",
subject: `${message}`,
text: `Name: ${name}\nEmail: ${email}\nMessage: ${message}`,
replyTo: email
}).toString()
const response = await fetch('https://api.forwardemail.net/v1/emails', {
method: 'POST',
replyTo: email,
}).toString();
const response = await fetch("https://api.forwardemail.net/v1/emails", {
method: "POST",
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Authorization': authHeader
"Content-Type": "application/x-www-form-urlencoded",
Authorization: authHeader,
},
body: emailData
})
body: emailData,
});
if (!response.ok) {
const errorText = await response.text()
console.error('Email API response error:', response.status, errorText)
throw new Error(`Failed to send email: ${errorText}`)
const errorText = await response.text();
console.error(
"Email API response error:",
response.status,
errorText
);
throw new Error(`Failed to send email: ${errorText}`);
}
return Response.redirect('https://coryd.dev/contact/success', 301)
return Response.redirect("https://coryd.dev/contact/success", 301);
} catch (error) {
console.error('Error:', error.message)
return Response.redirect('https://coryd.dev/broken', 301)
console.error("Error:", error.message);
return Response.redirect("https://coryd.dev/broken", 301);
}
} else {
return Response.redirect('https://coryd.dev/not-allowed', 301)
return Response.redirect("https://coryd.dev/not-allowed", 301);
}
}
}
},
};