'use strict' require('dotenv').config() const express = require('express') const app = express() const {verify} = require('hcaptcha') const PORT = process.env.PORT || 8080 const mailer = require('nodemailer').createTransport({ host: process.env.MAIL_SERVER, port: 587, auth: { user: process.env.MAIL_USER, pass: process.env.MAIL_PASS, }, tls: { rejectUnauthorized: false, }, }) app.use(express.json()) app.post('/', async (req, res) => { // console.log(`Received token: ${req.body['token']}`) // Check token let data try { data = await verify(process.env.HCAPTCHA_SECRET, req.body['token']) } catch (err) { console.error(`Failed to check hcaptcha\n${err}`) return res.sendStatus(500) } if (data.success === true) { // Parse from address let from if (req.body['name'] && req.body['email']) from = `${req.body['name']} <${req.body['email']}>` else if (req.body['name']) from = req.body['name'] else if (req.body['email']) from = req.body['email'] else from = 'Anonymous' // Send email let mail_res; try { console.log(`Sending email from ${from} to ${process.env.MAIL_TO}...`) mail_res = await mailer.sendMail({ from: process.env.MAIL_FROM, replyTo: from, to: process.env.MAIL_TO, subject: req.body['subj'], text: req.body['msg'], }) } catch (err) { console.error(err) return res.sendStatus(500) } console.log(`Sent email ${mail_res.messageId}`) return res.sendStatus(200) // hcaptcha failed } else { console.log(`Failed hCaptcha with errors: ${data['error-codes']}`) return res.sendStatus(403) } }) app.listen(PORT, () => { console.log(`API listening on ${PORT}`) })