Source: contact/index.js

  1. /**
  2. * @module contact
  3. */
  4. const mail = require("../mail");
  5. const admin = require("../admin");
  6. const octokit = require("../octokit");
  7. /**
  8. * Process contact request submitted by a user
  9. * on the /contact route: Send the contact request
  10. * email to admin, log the request via the admin module
  11. * and create an anonymised issue on Github if the
  12. * reason of request is either a bugreport or a
  13. * feature request.
  14. * @param {String} ip
  15. * @param {Object} data form data
  16. */
  17. const processContactRequest = async (ip, data) => {
  18. const contactRequest = {...data};
  19. contactRequest.timestamp = (new Date()).toUTCString();
  20. contactRequest.ip = ip;
  21. await sendContactRequest(contactRequest);
  22. admin.logContactRequest(contactRequest);
  23. switch (contactRequest.reason) {
  24. case "bugreport":
  25. octokit.createBugreportIssue(contactRequest);
  26. break;
  27. case "feature_request":
  28. octokit.createFeatureRequestIssue(contactRequest);
  29. break;
  30. default:
  31. break;
  32. }
  33. };
  34. /**
  35. * Send a contact request email to the admin email address
  36. * specified in .env. This sets the sender of the email
  37. * to be the server email address, but the user's email
  38. * is specified in the body of the email.
  39. * @param {Object} contactRequest
  40. */
  41. const sendContactRequest = async (contactRequest) => {
  42. await mail.sendEmail(
  43. process.env.CONTACT_EMAIL_ADDRESS,
  44. process.env.CONTACT_EMAIL_ADDRESS,
  45. `[rdfmapped.com] Contact form: ${contactRequest.subject}`,
  46. `Contact request [${contactRequest.reason}] from ${contactRequest.email} - ${contactRequest.name}:\n${contactRequest.message}`,
  47. `<h2>Contact request</h2><p>reason: ${contactRequest.reason}</p><p>subject: ${contactRequest.subject}</p>` +
  48. `<p>email: ${contactRequest.email}</p><p>name: ${contactRequest.email}</p><p>message: ${contactRequest.message}</p>`,
  49. );
  50. };
  51. module.exports = {
  52. processContactRequest,
  53. };