otherData.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  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. let response = {}
  68. axios.get(`${process.env.CLOVER_ADDRESS}/oauth/token?client_id=${process.env.SUBLINE_CLOVER_APPID}&client_secret=${process.env.SUBLINE_CLOVER_APPSECRET}&code=${authorizationCode}`)
  69. .then((data)=>{
  70. response = data;
  71. return Merchant.findOne({posId: merchantId});
  72. })
  73. .then((merchant)=>{
  74. if(merchant){
  75. merchant.posAccessToken = response.data.access_token;
  76. merchant.save()
  77. .then((updatedMerchant)=>{
  78. req.session.user = updatedMerchant._id;
  79. return res.redirect("/dashboard");
  80. })
  81. .catch((err)=>{
  82. req.session.error("ERROR: UNABLE TO CREATE MERCHANT");
  83. return res.redirect("/")
  84. });
  85. }else{
  86. req.session.merchantId = merchantId;
  87. req.session.accessToken = response.data.access_token;
  88. return res.redirect("/merchant/create/clover");
  89. }
  90. })
  91. .catch((err)=>{
  92. req.session.error = "ERROR: UNABLE TO RETRIEVE DATA FROM CLOVER";
  93. return res.redirect("/");
  94. });
  95. },
  96. squareAuth: function(req, res){
  97. const code = req.url.slice(req.url.indexOf("code=") + 5, req.url.indexOf("&"));
  98. const url = `${process.env.SQUARE_ADDRESS}/oauth2/token?`;
  99. let data = {
  100. client_id: process.env.SUBLINE_SQUARE_APPID,
  101. client_secret: process.env.SUBLINE_SQUARE_APPSECRET,
  102. grant_type: "authorization_code",
  103. code: code
  104. };
  105. axios.post(url, data)
  106. .then((response)=>{
  107. data = response.data;
  108. return Merchant.findOne({posId: data.merchant_id});
  109. })
  110. .then((merchant)=>{
  111. if(merchant){
  112. merchant.posAccessToken = data.access_token;
  113. return merchant.save()
  114. .then((merchant)=>{
  115. req.session.user = merchant._id;
  116. return res.redirect("/dashboard");
  117. })
  118. .catch((err)=>{
  119. req.session.error = "ERROR: UNABLE TO CREATE NEW USER";
  120. return res.redirect("/");
  121. })
  122. }else{
  123. req.session.merchantId = data.merchant_id;
  124. req.session.accessToken = data.access_token;
  125. return res.redirect("/merchant/create/square");
  126. }
  127. })
  128. .catch((err)=>{
  129. req.session.error = "ERROR: UNABLE TO RETRIEVE DATA FROM SQUARE";
  130. return res.redirect("/");
  131. });
  132. },
  133. logo: function(req, res){
  134. return res.sendFile(path.resolve("./views/shared/images/logo.png"));
  135. }
  136. }