summaryrefslogtreecommitdiff
path: root/src/routes/contact/submit.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/routes/contact/submit.js')
-rw-r--r--src/routes/contact/submit.js69
1 files changed, 69 insertions, 0 deletions
diff --git a/src/routes/contact/submit.js b/src/routes/contact/submit.js
new file mode 100644
index 0000000..cf0d65c
--- /dev/null
+++ b/src/routes/contact/submit.js
@@ -0,0 +1,69 @@
+import 'dotenv/config';
+import sgMail from '@sendgrid/mail';
+sgMail.setApiKey(process.env.SENDGRID_API_KEY);
+
+export async function get() {
+ const items = [
+ {a: 1, b: 2},
+ {a: 3, b: 4},
+ {a: 5, b: 6},
+ ];
+ return {
+ body: items
+ };
+}
+
+export async function post({ request }) {
+ const body = await request.json();
+ const { HCAPTCHA_SECRET, FORM_FROM_EMAIL, FORM_TO_EMAIL } = process.env;
+
+ const captchaVerified = await fetch(`https://hcaptcha.com/siteverify?response=${body.captchaToken}&secret=${HCAPTCHA_SECRET}`, {
+ method: 'POST',
+ })
+ .then((res) => res.json())
+ .then((json) => json.success)
+ .catch(() => false);
+
+ if (!captchaVerified) {
+ return {
+ statusCode: 400,
+ body: {
+ error: 'Captcha verification failed',
+ },
+ };
+ }
+
+ const msg = {
+ to: FORM_TO_EMAIL,
+ from: FORM_FROM_EMAIL,
+ subject: `Form Submission from ${body.name}`,
+ text: `
+ Name: ${body.name}
+ Email: ${body.email}
+ Message: ${body.message}
+ `,
+ };
+
+ const messageSent = await sgMail
+ .send(msg)
+ .then(() => true)
+ .catch((error) => {
+ console.error(error);
+ return false;
+ });
+
+ if (!messageSent) {
+ return {
+ statusCode: 500,
+ body: {
+ error: 'Message could not be sent',
+ },
+ };
+ }
+
+ return {
+ body: {
+ success: true,
+ },
+ };
+}