Bladeren bron

Finished creating OAuth flow. Created blind.

Lee Morgan 6 jaren geleden
bovenliggende
commit
2d24e2a9f9
5 gewijzigde bestanden met toevoegingen van 31 en 9 verwijderingen
  1. 23 2
      controllers/otherData.js
  2. 5 6
      controllers/renderer.js
  3. 1 0
      models/merchant.js
  4. 1 0
      routes.js
  5. 1 1
      views/landingPage/landing.ejs

+ 23 - 2
controllers/otherData.js

@@ -211,7 +211,28 @@ module.exports = {
     },
 
     //Get - Redirects user to Clover OAuth page
-    cloverAuth: function(req, res){
+    clover: function(req, res){
+        let url = "https://www.example.com/oauth_callback?merchant_id={mId}&client_id={APP_ID}&employee_id={EMPLOYEE_ID}&code={AUTHORIZATION_CODE}";
+        let str = url.slice(url.indexOf("merchant_id=") + 12, url.indexOf("&client_id"));
+        console.log(str);
         return res.redirect(`${process.env.CLOVER_ADDRESS}/oauth/authorize?client_id=${process.env.SUBLINE_CLOVER_APPID}&redirect_uri=localhost:8080/clover`);
+    },
+
+    cloverAuth: function(req, res){
+        let authorizationCode = req.url.slice(req.url.indexOf("code=") + 5);
+        req.session.merchantId = req.url.slice(req.url.indexOf("merchant_id=") + 12, req.url.indexOf("&client_id"))
+        
+        axios.get(`${process.env.CLOVER_ADDRESS}/oauth/token?client_id=${process.env.SUBLINE_CLOVER_APPID}&client_secret=${process.env.SUBLINE_CLOVER_APPSECRET}&code=${authorizationCode}`)
+            .then((response)=>{
+                req.session.accessToken = response.data.access_token;
+                return res.redirect("/merchant/new/clover");
+            })
+            .catch((err)=>{
+                console.log(err);
+                req.session.error = "Error: Unable to retrieve data from Clover";
+                return res.redirect("/");
+            });
     }
-}
+}
+
+//https://www.example.com/oauth_callback?merchant_id={mId}&client_id={APP_ID}&employee_id={EMPLOYEE_ID}&code={AUTHORIZATION_CODE}

+ 5 - 6
controllers/renderer.js

@@ -5,8 +5,6 @@ const Merchant = require("../models/merchant");
 const Ingredient = require("../models/ingredient");
 const Transaction = require("../models/transaction");
 
-const token = "b48068eb-411a-918e-ea64-52007147e42c";
-
 module.exports = {
     //GET - Shows the public landing page
     //Returns: 
@@ -46,7 +44,7 @@ module.exports = {
             })
             .then((merchant)=>{
                 if(merchant.pos === "clover"){
-                    axios.get(`https://apisandbox.dev.clover.com/v3/merchants/${merchant.posId}/orders?filter=clientCreatedTime>=${merchant.lastUpdatedTime}&expand=lineItems&access_token=${token}`)
+                    axios.get(`https://apisandbox.dev.clover.com/v3/merchants/${merchant.posId}/orders?filter=clientCreatedTime>=${merchant.lastUpdatedTime}&expand=lineItems&access_token=${merchant.posAccessToken}`)
                         .then((result)=>{
                             let transactions = [];
                             for(let order of result.data.elements){
@@ -78,7 +76,8 @@ module.exports = {
 
                             merchant.save()
                                 .then((updatedMerchant)=>{
-                                    merchant.password = undefined;
+                                    updatedMerchant.password = undefined;
+                                    updatedMerchant.accessToken = undefined;
                                     res.render("inventoryPage/inventory", {merchant: updatedMerchant, error: undefined});
                                     Transaction.create(transactions);
                                     return;
@@ -143,7 +142,7 @@ module.exports = {
     //  error: returns error (if any) from session
     //Renders merchantSetupPage
     merchantSetupClover: function(req, res){
-        req.session.posId = "YHVPCQMVB1P81";
+        // req.session.posId = "YHVPCQMVB1P81";
 
         let errorMessage = {};
         if(req.session.error){
@@ -155,7 +154,7 @@ module.exports = {
         
         Ingredient.find()
             .then((ingredients)=>{
-                axios.get(`https://apisandbox.dev.clover.com/v3/merchants/${req.session.posId}/items?access_token=${token}`)
+                axios.get(`https://apisandbox.dev.clover.com/v3/merchants/${req.session.merchantId}/items?access_token=${req.session.accessToken}`)
                     .then((recipes)=>{
                         return res.render("merchantSetupPage/merchantSetup", {ingredients: ingredients, recipes: recipes.data, error: errorMessage});
                     })

+ 1 - 0
models/merchant.js

@@ -19,6 +19,7 @@ const MerchantSchema = new mongoose.Schema({
         required: true
     },
     posId: String,
+    posAccessToken: String,
     lastUpdatedTime: {
         type: String,
         default: Date.now()

+ 1 - 0
routes.js

@@ -34,5 +34,6 @@ module.exports = function(app){
     app.post("/login", otherData.login);
     app.get("/logout", otherData.logout);
     app.post("/email", otherData.checkUniqueEmail);
+    app.get("/cloverlogin", otherData.clover);
     app.get("/cloverauth", otherData.cloverAuth);
 }

+ 1 - 1
views/landingPage/landing.ejs

@@ -73,7 +73,7 @@
             <h1>Choose your POS System</h1>
 
             <div class="cards">
-                <a href="/cloverauth">
+                <a href="/cloverlogin">
                     <img src="../shared/images/clover-logo.jpeg" alt="Clover">
                 </a>