75 lines
2.5 KiB
JavaScript
75 lines
2.5 KiB
JavaScript
const path = require("path");
|
|
require("dotenv").config({
|
|
path: path.resolve(process.cwd(), `.env.${process.env.NODE_ENV || "development"}`)
|
|
});
|
|
const logger = require("../../utils/logger");
|
|
const OAuthClient = require("intuit-oauth");
|
|
const client = require("../../graphql-client/graphql-client").client;
|
|
const queries = require("../../graphql-client/queries");
|
|
const { parse, stringify } = require("querystring");
|
|
const { InstanceEndpoints } = require("../../utils/instanceMgr");
|
|
|
|
const oauthClient = new OAuthClient({
|
|
clientId: process.env.QBO_CLIENT_ID,
|
|
clientSecret: process.env.QBO_SECRET,
|
|
environment: process.env.NODE_ENV === "production" ? "production" : "sandbox",
|
|
redirectUri: process.env.QBO_REDIRECT_URI,
|
|
logging: true
|
|
});
|
|
|
|
//TODO:AIO Add in QBO callbacks.
|
|
const url = InstanceEndpoints();
|
|
|
|
exports.default = async (req, res) => {
|
|
const queryString = req.url.split("?").reverse()[0];
|
|
const params = parse(queryString);
|
|
try {
|
|
logger.log("qbo-callback-create-token", "DEBUG", params.state, null, null);
|
|
const authResponse = await oauthClient.createToken(req.url);
|
|
if (authResponse.json.error) {
|
|
logger.log("qbo-callback-error", "ERROR", params.state, null, {
|
|
error: authResponse.json
|
|
});
|
|
res.redirect(`${url}/manage/accounting/qbo?error=${encodeURIComponent(JSON.stringify(authResponse.json))}`);
|
|
} else {
|
|
await client.request(queries.SET_QBO_AUTH_WITH_REALM, {
|
|
email: params.state,
|
|
qbo_auth: { ...authResponse.json, createdAt: Date.now() },
|
|
qbo_realmId: params.realmId
|
|
});
|
|
logger.log("qbo-callback-create-token-success", "DEBUG", params.state, null, null);
|
|
|
|
res.redirect(`${url}/manage/accounting/qbo?${stringify(params)}`);
|
|
}
|
|
} catch (e) {
|
|
logger.log("qbo-callback-error", "ERROR", params.state, null, {
|
|
error: e
|
|
});
|
|
res.status(400).json(e);
|
|
}
|
|
};
|
|
|
|
exports.refresh = async (oauthClient, req) => {
|
|
try {
|
|
// logger.log("qbo-token-refresh", "DEBUG", req.user.email, null, null);
|
|
const authResponse = await oauthClient.refresh();
|
|
await client.request(queries.SET_QBO_AUTH, {
|
|
email: req.user.email,
|
|
qbo_auth: { ...authResponse.json, createdAt: Date.now() }
|
|
});
|
|
} catch (error) {
|
|
logger.log("qbo-token-refresh-error", "ERROR", req.user.email, null, {
|
|
error
|
|
});
|
|
}
|
|
};
|
|
|
|
exports.setNewRefreshToken = async (email, apiResponse) => {
|
|
//logger.log("qbo-token-updated", "DEBUG", email, null, null);
|
|
|
|
await client.request(queries.SET_QBO_AUTH, {
|
|
email,
|
|
qbo_auth: { ...apiResponse.token, createdAt: Date.now() }
|
|
});
|
|
};
|