emailVerification.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. const Owner = require("../models/owner.js");
  2. const axios = require("axios");
  3. const verifyEmail = require("../emails/verifyEmail.js");
  4. const queryString = require("querystring")
  5. module.exports = {
  6. sendVerifyEmail: function(req, res){
  7. let saveOwner = {};
  8. Owner.findOne({_id: req.params.id})
  9. .then((owner)=>{
  10. saveOwner = owner;
  11. return axios({
  12. method: "post",
  13. url: `https://api.mailgun.net/v3/mail.thesubline.net/messages`,
  14. headers: {
  15. "Content-Type": "application/x-www-form-urlencoded"
  16. },
  17. auth: {
  18. username: "api",
  19. password: process.env.MG_SUBLINE_APIKEY
  20. },
  21. data: queryString.stringify({
  22. from: "The Subline <clientsupport@thesubline.net>",
  23. to: owner.email,
  24. subject: "The Subline Email Verification",
  25. html: verifyEmail({
  26. name: owner.name,
  27. link: `${process.env.SITE}/verify/${owner._id}/${owner.session.sessionId}`
  28. })
  29. })
  30. });
  31. })
  32. .then((response)=>{
  33. return res.render(`verifyPage/verify`, {id: saveOwner._id, email: saveOwner.email, banner: res.locals.merchant});
  34. })
  35. .catch((err)=>{
  36. req.session.error = "ERROR: UNABLE TO SEND VERIFICATION EMAIL";
  37. return res.redirect("/");
  38. });
  39. },
  40. resendEmail: function(req, res){
  41. Owner.findOne({email: req.body.email.toLowerCase()})
  42. .then((owner)=>{
  43. if(owner) throw "USER WITH THIS EMAIL ADDRESS ALREADY EXISTS";
  44. return owner.findOne({_id: req.body.id});
  45. })
  46. .then((owner)=>{
  47. owner.email = req.body.email.toLowerCase();
  48. return owner.save();
  49. })
  50. .then((owner)=>{
  51. return res.redirect(`/verify/email/${owner._id}`);
  52. })
  53. .catch((err)=>{
  54. if(typeof(err) === "string"){
  55. req.session.error = err;
  56. }else if(err.name === "ValidationError"){
  57. req.session.error = err.errors[Object.keys(err.errors)[0]].properties.message;
  58. }else{
  59. req.session.error = "ERROR: UNABLE TO CHANGE YOUR EMAIL ADDRESS";
  60. }
  61. return res.redirect("/");
  62. });
  63. },
  64. verify: function(req, res){
  65. Owner.findOne({_id: req.params.id})
  66. .then((owner)=>{
  67. if(req.params.code !== owner.session.sessionId) throw "UNABLE TO VERIFY EMAIL ADDRESS. INCORRECT LINK";
  68. owner.status.splice(owner.status.indexOf("unverified"), 1);
  69. axios({
  70. method: "post",
  71. url: "https://api.mailgun.net/v3/lists/clientsupport@mail.thesubline.com/members",
  72. headers: {
  73. "Content-Type": "application/x-www-form-urlencoded"
  74. },
  75. auth: {
  76. username: "api",
  77. password: process.env.MG_SUBLINE_APIKEY
  78. },
  79. data: queryString.stringify({
  80. address: owner.email,
  81. name: owner.name
  82. })
  83. });
  84. return owner.save();
  85. })
  86. .then((owner)=>{
  87. req.session.owner = owner.session.sessionId;
  88. req.session.merchant = owner.merchants[0].toString();
  89. return res.redirect("/dashboard");
  90. })
  91. .catch((err)=>{
  92. if(typeof(err) === "string"){
  93. req.session.error = err;
  94. }else{
  95. req.session.error = "ERROR: UNABLE TO VERIFY EMAIL ADDRESS"
  96. }
  97. return res.redirect("/");
  98. });
  99. }
  100. }