otherData.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. const bcrypt = require("bcryptjs");
  2. const axios = require("axios");
  3. const Merchant = require("../models/merchant");
  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. Merchant.findOne({email: req.body.email.toLowerCase()})
  15. .then((merchant)=>{
  16. if(merchant){
  17. bcrypt.compare(req.body.password, merchant.password, (err, result)=>{
  18. if(result){
  19. req.session.user = merchant._id;
  20. return res.redirect("/dashboard");
  21. }else{
  22. req.session.error = "INVALID EMAIL OR PASSWORD";
  23. return res.redirect("/");
  24. }
  25. });
  26. }else{
  27. req.session.error = "INVALID EMAIL OR PASSWORD";
  28. return res.redirect("/");
  29. }
  30. })
  31. .catch((err)=>{
  32. req.session.error = "ERROR: UNABLE TO RETRIEVE USER DATA";
  33. return res.redirect("/");
  34. });
  35. },
  36. /*
  37. GET - logs the user out
  38. Redirects to /
  39. */
  40. logout: function(req, res){
  41. req.session.user = undefined;
  42. return res.redirect("/");
  43. },
  44. //GET - Redirects user to Clover OAuth page
  45. cloverRedirect: function(req, res){
  46. return res.redirect(`${process.env.CLOVER_ADDRESS}/oauth/authorize?client_id=${process.env.SUBLINE_CLOVER_APPID}&redirect_uri=${process.env.SUBLINE_CLOVER_URI}`);
  47. },
  48. //GET - Get access token from clover and redirect to merchant creation
  49. cloverAuth: function(req, res){
  50. let dataArr = req.url.slice(req.url.indexOf("?") + 1).split("&");
  51. let authorizationCode = "";
  52. let merchantId = "";
  53. for(let i = 0; i < dataArr.length; i++){
  54. if(dataArr[i].slice(0, dataArr[i].indexOf("=")) === "merchant_id"){
  55. merchantId = dataArr[i].slice(dataArr[i].indexOf("=") + 1);
  56. }else if(dataArr[i].slice(0, dataArr[i].indexOf("=")) === "code"){
  57. authorizationCode = dataArr[i].slice(dataArr[i].indexOf("=") + 1);
  58. }
  59. }
  60. axios.get(`${process.env.CLOVER_ADDRESS}/oauth/token?client_id=${process.env.SUBLINE_CLOVER_APPID}&client_secret=${process.env.SUBLINE_CLOVER_APPSECRET}&code=${authorizationCode}`)
  61. .then((response)=>{
  62. Merchant.findOne({posId: merchantId})
  63. .then((merchant)=>{
  64. if(merchant){
  65. merchant.posAccessToken = response.data.access_token;
  66. merchant.save()
  67. .then((updatedMerchant)=>{
  68. req.session.user = updatedMerchant._id;
  69. return res.redirect("/dashboard");
  70. })
  71. .catch((err)=>{
  72. req.session.error("Error: unable to save critical data. Try again.");
  73. return res.redirect("/")
  74. });
  75. }else{
  76. req.session.merchantId = merchantId;
  77. req.session.accessToken = response.data.access_token;
  78. return res.redirect("/merchant/create/clover");
  79. }
  80. })
  81. .catch((err)=>{
  82. req.session.error = "ERROR: WE MADE AN OOPSIES";
  83. });
  84. })
  85. .catch((err)=>{
  86. req.session.error = "ERROR: UNABLE TO RETRIEVE DATA FROM CLOVER";
  87. return res.redirect("/");
  88. });
  89. }
  90. }