passwordReset.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. const Owner = require("../models/owner.js");
  2. const passwordReset = require("../emails/passwordReset.js");
  3. const queryString = require("querystring");
  4. const axios = require("axios");
  5. const bcrypt = require("bcryptjs");
  6. module.exports = {
  7. enterEmail: function(req, res){
  8. return res.render("passwordResetPages/email");
  9. },
  10. generateCode: function(req, res){
  11. Owner.findOne({email: req.body.email.toLowerCase()})
  12. .then((owner)=>{
  13. if(owner === null){
  14. req.session.error = "USER WITH THIS EMAIL DOES NOT EXIST";
  15. return res.redirect("/");
  16. }
  17. // const mailgunData = {
  18. // from: "The Subline <clientsupport@thesubline.net>",
  19. // to: owner.email,
  20. // subject: "Password Reset",
  21. // html: passwordReset({
  22. // name: owner.name,
  23. // link: `${process.env.SITE}/reset/${owner._id}/${owner.session.sessionId}`
  24. // })
  25. // };
  26. // mailgun.messages().send(mailgunData, (err, body)=>{});
  27. axios({
  28. method: "post",
  29. url: "https://api.mailgun.net/v3/mail.thesubline.net/messages",
  30. headers: {
  31. "Content-Type": "application/x-www-form-urlencoded"
  32. },
  33. auth: {
  34. username: "api",
  35. password: process.env.MG_SUBLINE_APIKEY
  36. },
  37. data: queryString.stringify({
  38. from: "The Subline <clientsupport@thesubline.net>",
  39. to: owner.email,
  40. subject: "Password Reset for The Subline",
  41. html: passwordReset({
  42. name: owner.name,
  43. link: `${process.env.SITE}/reset/${owner._id}/${owner.session.sessionId}`
  44. })
  45. })
  46. });
  47. req.session.success = "PASSWORD RESET EMAIL SENT";
  48. return res.redirect("/");
  49. })
  50. .catch((err)=>{
  51. req.session.error = "ERROR: UNABLE TO RESET PASSWORD AT THIS TIME";
  52. return res.redirect("/");
  53. });
  54. },
  55. enterPassword: function(req, res){
  56. return res.render("passwordResetPages/password", {id: req.params.id, code: req.params.code, banner: res.locals.banner});
  57. },
  58. resetPassword: function(req, res){
  59. Owner.findOne({_id: req.body.id})
  60. .then((owner)=>{
  61. if(owner.session.sessionId !== req.body.code){
  62. req.session.error = "YOUR ACCOUNT COULD NOT BE VERIFIED. PLEASE CONTACT US IF THE PROBLEM PERSISTS.";
  63. return res.redirect("/");
  64. }
  65. if(req.body.password !== req.body.confirmPassword){
  66. req.session.error = "PASSWORDS DO NOT MATCH";
  67. return res.redirect(`/reset/${owner._id}/${owner.session.sessionId}`);
  68. }
  69. if(req.body.password.length < 10){
  70. req.session.error = "PASSWORD MUST CONTAIN AT LEAST 10 CHARACTERS";
  71. return res.redirect(`/reset/${owner._id}/${owner.session.sessionId}`);
  72. }
  73. const salt = bcrypt.genSaltSync(10);
  74. const hash = bcrypt.hashSync(req.body.password, salt);
  75. owner.password = hash;
  76. return owner.save();
  77. })
  78. .then((owner)=>{
  79. if(owner !== undefined){
  80. req.session.success = "PASSWORD SUCCESSFULLY UPDATED. PLEASE LOG IN";
  81. return res.redirect("/login");
  82. }
  83. })
  84. .catch((err)=>{
  85. if(typeof(err) === "string"){
  86. req.session.error = err;
  87. }else if(err.name === "ValidationError"){
  88. req.session.error = err.errors[Object.keys(err.errors)[0]].properties.message;
  89. }else{
  90. req.session.error = "ERROR: UNABLE TO UPDATE YOUR PASSWORD";
  91. }
  92. return res.redirect("/");
  93. });
  94. }
  95. }