otherData.js 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. const Merchant = require("../models/merchant");
  2. const bcrypt = require("bcryptjs");
  3. const axios = require("axios");
  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.session.sessionId;
  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 = null;
  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 - Redirects user to Square OAuth page
  49. squareRedirect: function(req, res){
  50. return res.redirect(`${process.env.SQUARE_ADDRESS}/oauth2/authorize?client_id=${process.env.SUBLINE_SQUARE_APPID}&scope=INVENTORY_READ+ITEMS_READ+MERCHANT_PROFILE_READ+ORDERS_READ+PAYMENTS_READ`);
  51. },
  52. //GET - Get access token from clover and redirect to merchant creation
  53. cloverAuth: function(req, res){
  54. let dataArr = req.url.slice(req.url.indexOf("?") + 1).split("&");
  55. let authorizationCode = "";
  56. let merchantId = "";
  57. for(let i = 0; i < dataArr.length; i++){
  58. if(dataArr[i].slice(0, dataArr[i].indexOf("=")) === "merchant_id"){
  59. merchantId = dataArr[i].slice(dataArr[i].indexOf("=") + 1);
  60. }else if(dataArr[i].slice(0, dataArr[i].indexOf("=")) === "code"){
  61. authorizationCode = dataArr[i].slice(dataArr[i].indexOf("=") + 1);
  62. }
  63. }
  64. let response = {}
  65. axios.get(`${process.env.CLOVER_ADDRESS}/oauth/token?client_id=${process.env.SUBLINE_CLOVER_APPID}&client_secret=${process.env.SUBLINE_CLOVER_APPSECRET}&code=${authorizationCode}`)
  66. .then((data)=>{
  67. response = data;
  68. return Merchant.findOne({posId: merchantId});
  69. })
  70. .then((merchant)=>{
  71. if(merchant){
  72. merchant.posAccessToken = response.data.access_token;
  73. merchant.save()
  74. .then((updatedMerchant)=>{
  75. req.session.user = updatedMerchant._id;
  76. return res.redirect("/dashboard");
  77. })
  78. .catch((err)=>{
  79. req.session.error = "ERROR: UNABLE TO CREATE MERCHANT";
  80. return res.redirect("/")
  81. });
  82. }else{
  83. req.session.merchantId = merchantId;
  84. req.session.accessToken = response.data.access_token;
  85. return res.redirect("/merchant/create/clover");
  86. }
  87. })
  88. .catch((err)=>{
  89. req.session.error = "ERROR: UNABLE TO RETRIEVE DATA FROM CLOVER";
  90. return res.redirect("/");
  91. });
  92. },
  93. squareAuth: function(req, res){
  94. const code = req.url.slice(req.url.indexOf("code=") + 5, req.url.indexOf("&"));
  95. const url = `${process.env.SQUARE_ADDRESS}/oauth2/token?`;
  96. let data = {
  97. client_id: process.env.SUBLINE_SQUARE_APPID,
  98. client_secret: process.env.SUBLINE_SQUARE_APPSECRET,
  99. grant_type: "authorization_code",
  100. code: code
  101. };
  102. axios.post(url, data)
  103. .then((response)=>{
  104. data = response.data;
  105. return Merchant.findOne({posId: data.merchant_id});
  106. })
  107. .then((merchant)=>{
  108. if(merchant){
  109. merchant.posAccessToken = data.access_token;
  110. return merchant.save()
  111. .then((merchant)=>{
  112. req.session.user = merchant._id;
  113. return res.redirect("/dashboard");
  114. })
  115. .catch((err)=>{
  116. req.session.error = "ERROR: UNABLE TO CREATE NEW USER";
  117. return res.redirect("/");
  118. })
  119. }else{
  120. req.session.merchantId = data.merchant_id;
  121. req.session.accessToken = data.access_token;
  122. return res.redirect("/merchant/create/square");
  123. }
  124. })
  125. .catch((err)=>{
  126. req.session.error = "ERROR: UNABLE TO RETRIEVE DATA FROM SQUARE";
  127. return res.redirect("/");
  128. });
  129. }
  130. }