const express = require("express")
const bodyParser = require("body-parser")
const axios = require("axios")
const Recaptcha = require("express-recaptcha").RecaptchaV2
const app = express()
const port = 3000
// In production, store credentials in environment variables
const ZENDESK_SUBDOMAIN = "YOUR_ZENDESK_SUBDOMAIN"
const ZENDESK_EMAIL = "YOUR_ZENDESK_EMAIL_ADDRESS"
const ZENDESK_PASSWORD = "YOUR_ZENDESK_PASSWORD"
const RECAPTCHA_SITE_KEY = "6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI"
const RECAPTCHA_SECRET_KEY = "6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe"
const recaptcha = new Recaptcha(RECAPTCHA_SITE_KEY, RECAPTCHA_SECRET_KEY)
app.use(bodyParser.urlencoded({ extended: true }))
app.get("/", recaptcha.middleware.render, (req, res) => {
const form = `
`
res.send(form)
})
app.post("/submit", recaptcha.middleware.verify, async (req, res) => {
if (!req.recaptcha.error) {
const options = {
method: "post",
url: `https://${ZENDESK_SUBDOMAIN}.zendesk.com/api/v2/requests.json`,
headers: {
"Content-Type": "application/json"
},
auth: {
username: ZENDESK_EMAIL,
password: ZENDESK_PASSWORD
},
data: {
request: {
subject: req.body.subject,
comment: {
body: req.body.description
},
requester: {
name: req.body.name,
email: req.body.email
}
}
}
}
try {
await axios(options)
res.status(200).send("Form submitted successfully")
} catch (error) {
res.status(500).send("Error")
}
} else {
res.status(400).send("reCAPTCHA verification failed")
}
})
app.listen(port, () => {
console.log(
`Server running on port ${port}. Visit http://localhost:${port}`
)
})