otherData.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. const Owner = require("../models/owner.js");
  2. const Feedback = require("../models/feedback.js");
  3. const bcrypt = require("bcryptjs");
  4. module.exports = {
  5. /*
  6. POST - logs the user in
  7. req.body = {
  8. email: email of the user,
  9. password: password of the user
  10. }
  11. Redirects to /dashboard
  12. */
  13. login: function(req, res){
  14. Owner.findOne({email: req.body.email.toLowerCase()})
  15. .then((owner)=>{
  16. console.log(owner);
  17. if(owner !== null){
  18. bcrypt.compare(req.body.password, owner.password, async (err, result)=>{
  19. if(result === true){
  20. //Check if email has not been verified
  21. if(owner.status.includes("unverified")){
  22. req.session.error = "PLEASE VERIFY YOUR EMAIL ADDRESS";
  23. return res.redirect(`/verify/email/${owner._id}`);
  24. }
  25. //Check for suspended account
  26. if(owner.status.includes("suspended")){
  27. req.session.error = "ACCOUNT SUSPENDED. PLEASE CONTACT SUPPORT IF THIS IS IN ERROR";
  28. return res.redirect("/");
  29. }
  30. //Check for out of date access token
  31. let cutoff = new Date();
  32. cutoff.setDate(cutoff.getDate() + 1);
  33. if(owner.square !== undefined && owner.square.expires < cutoff){
  34. let data = await axios.post(`${process.env.SQUARE_ADDRESS}/oauth2/token`, {
  35. client_id: process.env.SUBLINE_SQUARE_APPID,
  36. client_secret: process.env.SUBLINE_SQUARE_APPSECRET,
  37. grant_type: "refresh_token",
  38. refresh_token: merchant.square.refreshToken
  39. });
  40. owner.square.accessToken = data.data.access_token;
  41. owner.square.expires = new Date(data.data.expires_at);
  42. await owner.save();
  43. }
  44. req.session.owner = owner.session.sessionId;
  45. return res.redirect("/dashboard");
  46. }else{
  47. req.session.error = "INVALID EMAIL OR PASSWORD";
  48. return res.redirect("/login");
  49. }
  50. });
  51. }else{
  52. req.session.error = "INVALID EMAIL OR PASSWORD";
  53. return res.redirect("/login");
  54. }
  55. })
  56. .catch((err)=>{
  57. req.session.error = "ERROR: UNABLE TO RETRIEVE DATA";
  58. return res.redirect("/");
  59. });
  60. },
  61. /*
  62. GET - logs the user out
  63. Redirects to /
  64. */
  65. logout: function(req, res){
  66. req.session.owner = undefined;
  67. return res.redirect("/");
  68. },
  69. /*
  70. POST: create user feedback
  71. req.body = {
  72. title: String,
  73. content: String,
  74. date: String (Number, unix time)
  75. }
  76. response = {}
  77. */
  78. feedback: function(req, res){
  79. let feedback = new Feedback({
  80. merchant: res.locals.merchant._id,
  81. title: req.body.title,
  82. content: req.body.content,
  83. date: new Date(req.body.date)
  84. });
  85. feedback.save()
  86. .then((feedback)=>{
  87. return res.json({});
  88. })
  89. .catch((err)=>{
  90. return res.json("ERROR: UNABLE TO SAVE DATA");
  91. });
  92. }
  93. }