otherData.js 4.1 KB

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