Basic oAuth for QBO BOD-266

This commit is contained in:
Patrick Fic
2020-08-25 10:28:24 -07:00
parent dabc8892b9
commit 5e4a825bcf
10 changed files with 517 additions and 111 deletions

View File

@@ -0,0 +1,31 @@
const path = require("path");
require("dotenv").config({
path: path.resolve(
process.cwd(),
`.env.${process.env.NODE_ENV || "development"}`
),
});
const OAuthClient = require("intuit-oauth");
var Tokens = require("csrf");
var tokens = new Tokens();
const oauthClient = new OAuthClient({
clientId: process.env.QB_ONLINE_CLIENT_ID,
clientSecret: process.env.QB_ONLINE_SECRET,
environment: "sandbox", //process.env.NODE_ENV === "production" ? "production" : "sandbox",
redirectUri: process.env.QB_ONLINE_REDIRECT_URI,
});
exports.default = async (req, res) => {
console.log("QBO Authorize Called");
const { userId } = req.body;
console.log("exports.default -> userId", userId);
// AuthorizationUri
const authUri = oauthClient.authorizeUri({
scope: [OAuthClient.scopes.Accounting, OAuthClient.scopes.OpenId],
state: tokens.create(userId),
}); // can be an array of multiple scopes ex : {scope:[OAuthClient.scopes.Accounting,OAuthClient.scopes.OpenId]}
console.log("authUri", authUri);
// Redirect the authUri
res.send(authUri);
};

View File

@@ -0,0 +1,36 @@
const path = require("path");
require("dotenv").config({
path: path.resolve(
process.cwd(),
`.env.${process.env.NODE_ENV || "development"}`
),
});
const OAuthClient = require("intuit-oauth");
var Tokens = require("csrf");
const oauthClient = new OAuthClient({
clientId: process.env.QB_ONLINE_CLIENT_ID,
clientSecret: process.env.QB_ONLINE_SECRET,
environment: "sandbox", //process.env.NODE_ENV === "production" ? "production" : "sandbox",
redirectUri: process.env.QB_ONLINE_REDIRECT_URI,
});
exports.default = async (req, res) => {
// Parse the redirect URL for authCode and exchange them for tokens
const parseRedirect = req.url;
const { code, state, realmId } = req.query;
console.log("exports.default -> state", state);
// Exchange the auth code retrieved from the **req.url** on the redirectUri
oauthClient
.createToken(parseRedirect)
.then(function (authResponse) {
console.log("The Token is " + JSON.stringify(authResponse.getJson()));
const { access_token, refresh_token } = authResponse.getJson();
console.log("exports.default -> refresh_token", refresh_token);
console.log("exports.default -> access_token", access_token);
})
.catch(function (e) {
console.error("The error message is :" + e.originalMessage);
console.error(e.intuit_tid);
});
};

View File

@@ -0,0 +1,11 @@
exports.callback = require("./qbo-callback").default;
exports.authorize = require("./qbo-authorize").default;
const OAuthClient = require("intuit-oauth");
const path = require("path");
require("dotenv").config({
path: path.resolve(
process.cwd(),
`.env.${process.env.NODE_ENV || "development"}`
),
});