Przeglądaj źródła

Merge branch 'OAuth' into development

Lee Morgan 6 lat temu
rodzic
commit
3243ffd6cf

+ 6 - 2
controllers/merchantData.js

@@ -147,7 +147,7 @@ module.exports = {
             return res.redirect("/");
         }
 
-        axios.get(`https://apisandbox.dev.clover.com/v3/merchants/${req.session.posId}?access_token=${token}`)
+        axios.get(`https://apisandbox.dev.clover.com/v3/merchants/${req.session.merchantId}?access_token=${req.session.accessToken}`)
             .then((cloverMerchant)=>{
                 req.session.posId = undefined;
 
@@ -159,9 +159,13 @@ module.exports = {
                     email: data.email,
                     password: hash,
                     pos: "clover",
-                    posId: cloverMerchant.data.id
+                    posId: cloverMerchant.data.id,
+                    posAccessToken: req.session.accessToken
                 });
 
+                req.session.merchantId = undefined;
+                req.session.accessToken = undefined;
+
                 for(let item of data.inventory){
                     merchant.inventory.push({
                         ingredient: item.ingredient.id,

+ 24 - 1
controllers/otherData.js

@@ -184,7 +184,10 @@ module.exports = {
     },
 
     //POST - check an email for uniqueness
-    //
+    //Inputs:
+    //  req.body.email: email to check
+    //Returns:
+    //  Boolean
     checkUniqueEmail: function(req, res){
         Merchant.findOne({email: req.body.email})
             .then((merchant)=>{
@@ -205,5 +208,25 @@ module.exports = {
 
                 return res.json(errorMessage);
             });
+    },
+
+    //Get - Redirects user to Clover OAuth page
+    clover: function(req, res){
+        return res.redirect(`${process.env.CLOVER_ADDRESS}/oauth/authorize?client_id=${process.env.SUBLINE_CLOVER_APPID}&redirect_uri=localhost:8080/cloverauth`);
+    },
+
+    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)=>{
+                req.session.error = "Error: Unable to retrieve data from Clover";
+                return res.redirect("/");
+            });
     }
 }

+ 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()

+ 2 - 0
routes.js

@@ -34,4 +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/controller.js

@@ -7,7 +7,7 @@ let controller = {
         if(error){
             banner.createError(error);
         }
-        
+
         publicObj.display();
     },
 

+ 1 - 1
views/landingPage/landing.ejs

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