otherData.js 3.7 KB

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