otherData.js 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. const bcrypt = require("bcryptjs");
  2. const axios = require("axios");
  3. const path = require("path");
  4. const mailgun = require("mailgun-js")({apiKey: process.env.MG_SUBLINE_APIKEY, domain: "mail.thesubline.net"});
  5. const VerifyEmail = require("../emails/verifyEmail.js");
  6. const Merchant = require("../models/merchant");
  7. module.exports = {
  8. /*
  9. POST - logs the user in
  10. req.body = {
  11. email: email of the user,
  12. password: password of the user
  13. }
  14. Redirects to /dashboard
  15. */
  16. login: function(req, res){
  17. Merchant.findOne({email: req.body.email.toLowerCase()})
  18. .then((merchant)=>{
  19. if(merchant){
  20. bcrypt.compare(req.body.password, merchant.password, (err, result)=>{
  21. if(result){
  22. req.session.user = merchant._id;
  23. return res.redirect("/dashboard");
  24. }else{
  25. req.session.error = "INVALID EMAIL OR PASSWORD";
  26. return res.redirect("/");
  27. }
  28. });
  29. }else{
  30. req.session.error = "INVALID EMAIL OR PASSWORD";
  31. return res.redirect("/");
  32. }
  33. })
  34. .catch((err)=>{
  35. req.session.error = "ERROR: UNABLE TO RETRIEVE USER DATA";
  36. return res.redirect("/");
  37. });
  38. },
  39. /*
  40. GET - logs the user out
  41. Redirects to /
  42. */
  43. logout: function(req, res){
  44. req.session.user = undefined;
  45. return res.redirect("/");
  46. },
  47. //GET - Redirects user to Clover OAuth page
  48. cloverRedirect: function(req, res){
  49. return res.redirect(`${process.env.CLOVER_ADDRESS}/oauth/authorize?client_id=${process.env.SUBLINE_CLOVER_APPID}&redirect_uri=${process.env.SUBLINE_CLOVER_URI}`);
  50. },
  51. //GET - Redirects user to Square OAuth page
  52. squareRedirect: function(req, res){
  53. 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`);
  54. },
  55. //GET - Get access token from clover and redirect to merchant creation
  56. cloverAuth: function(req, res){
  57. let dataArr = req.url.slice(req.url.indexOf("?") + 1).split("&");
  58. let authorizationCode = "";
  59. let merchantId = "";
  60. for(let i = 0; i < dataArr.length; i++){
  61. if(dataArr[i].slice(0, dataArr[i].indexOf("=")) === "merchant_id"){
  62. merchantId = dataArr[i].slice(dataArr[i].indexOf("=") + 1);
  63. }else if(dataArr[i].slice(0, dataArr[i].indexOf("=")) === "code"){
  64. authorizationCode = dataArr[i].slice(dataArr[i].indexOf("=") + 1);
  65. }
  66. }
  67. axios.get(`${process.env.CLOVER_ADDRESS}/oauth/token?client_id=${process.env.SUBLINE_CLOVER_APPID}&client_secret=${process.env.SUBLINE_CLOVER_APPSECRET}&code=${authorizationCode}`)
  68. .then((response)=>{
  69. Merchant.findOne({posId: merchantId})
  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 save critical data. Try again.");
  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: WE MADE AN OOPSIES";
  90. });
  91. })
  92. .catch((err)=>{
  93. req.session.error = "ERROR: UNABLE TO RETRIEVE DATA FROM CLOVER";
  94. return res.redirect("/");
  95. });
  96. },
  97. squareAuth: function(req, res){
  98. const code = req.url.slice(req.url.indexOf("code=") + 5, req.url.indexOf("&"));
  99. const url = `${process.env.SQUARE_ADDRESS}/oauth2/token?`;
  100. let data = {
  101. client_id: process.env.SUBLINE_SQUARE_APPID,
  102. client_secret: process.env.SUBLINE_SQUARE_APPSECRET,
  103. grant_type: "authorization_code",
  104. code: code
  105. };
  106. axios.post(url, data)
  107. .then((response)=>{
  108. data = response.data;
  109. return Merchant.findOne({posId: data.merchant_id});
  110. })
  111. .then((merchant)=>{
  112. if(merchant){
  113. merchant.posAccessToken = data.access_token;
  114. return merchant.save()
  115. .then((merchant)=>{
  116. req.session.user = merchant._id;
  117. return res.redirect("/dashboard");
  118. })
  119. .catch((err)=>{
  120. req.session.error = "ERROR: UNABLE TO CREATE NEW USER";
  121. return res.redirect("/");
  122. })
  123. }else{
  124. req.session.merchantId = data.merchant_id;
  125. req.session.accessToken = data.access_token;
  126. return res.redirect("/merchant/create/square");
  127. }
  128. })
  129. .catch((err)=>{
  130. req.session.error = "ERROR: UNABLE TO RETRIEVE DATA FROM SQUARE";
  131. return res.redirect("/");
  132. });
  133. },
  134. logo: function(req, res){
  135. return res.sendFile(path.resolve("./views/shared/images/logo.png"));
  136. }
  137. }