Merge branch 'Development' into 6715-change-sastoken-to-oauth

This commit is contained in:
2021-11-18 10:25:47 +00:00
35 changed files with 988 additions and 870 deletions
+85 -48
View File
@@ -1,8 +1,8 @@
import axios from "axios";
import https from "https";
import CryptoJS from "crypto-js";
import { response } from "express";
import HmacSHA256 from "crypto-js/hmac-sha256";
import { rest } from "lodash";
const PROXY_RELAY_URL =
"https://" +
@@ -49,16 +49,46 @@ const getSASToken = () => {
return token;
};
export default async function ApiProxy(req, res) {
//console.log(req.method);
function checkProxyPath(queryPath) {
const WORDKEY = process.env.NEXT_PUBLIC_HASHKEY;
var hashPath =
queryPath.indexOf("/api/proxy/") == -1
? queryPath
: queryPath.split("/api/proxy/")[1];
const wordKey = WORDKEY;
var hashlink = CryptoJS.HmacSHA256(
decodeURI(hashPath),
CryptoJS.enc.Hex.parse(wordKey)
);
hashlink = hashlink.toString(CryptoJS.enc.Hex);
return hashlink;
}
export default async function ApiProxy(req, res) {
var data = JSON.stringify(req.body);
const SASToken = getSASToken();
const isDocument = req.url.indexOf("/documents/download") > -1;
let hashCheckPath = isDocument
? req.url.split("?hash=")[0]
: req.url.split("&hash=")[0];
let hashCheckValue = isDocument
? req.url.split("?hash=")[1]
: req.url.split("&hash=")[1];
let hashFromRequest = checkProxyPath(hashCheckPath);
var configNoData = {
method: req.method,
//url: PROXY_RELAY_URL + updateFormCollection + "(" + incidentId + ")",
url: PROXY_RELAY_URL + req.url.split("/api/proxy/")[1],
url:
PROXY_RELAY_URL +
req.url.split("&hash=")[0].split("/api/proxy/")[1] +
"&hash=" +
req.url.split("&hash=")[1],
headers: {
"OData-MaxVersion": "4.0",
"OData-Version": "4.0",
@@ -72,7 +102,11 @@ export default async function ApiProxy(req, res) {
var config = {
method: req.method,
url: PROXY_RELAY_URL + req.query.route[0],
url:
PROXY_RELAY_URL +
req.query.route[0] +
"&hash=" +
req.url.split("&hash=")[1],
headers: {
"OData-MaxVersion": "4.0",
"OData-Version": "4.0",
@@ -86,7 +120,11 @@ export default async function ApiProxy(req, res) {
var configDocument = {
method: req.method,
url: PROXY_RELAY_URL + req.url.split("/api/proxy/")[1],
url:
PROXY_RELAY_URL +
req.url.split("?hash=")[0].split("/api/proxy/")[1] +
"?hash=" +
req.url.split("?hash=")[1],
headers: {
"OData-MaxVersion": "4.0",
"OData-Version": "4.0",
@@ -98,46 +136,45 @@ export default async function ApiProxy(req, res) {
responseType: "arraybuffer",
};
return new Promise((resolve, reject) => {
let apiPath = req.url.split("/api/proxy/")[1];
let hasDocument = apiPath.indexOf("/download") > 0 ? true : false;
// console.log(
// "//////////////",
// req.url.split("/api/proxy/")[1],
// PROXY_RELAY_URL + req.query.route[0],
// req.method,
// hasDocument
// );
axios(
req.method == "GET"
? hasDocument
? configDocument
: configNoData
: config
)
.then((response) => {
res.statusCode = 200;
if (hasDocument) {
res.setHeader(
"Content-disposition",
"attachment; filename=" +
response.headers["content-disposition"].split(
"filename="
)[1]
);
res.end(response.data);
} else {
res.setHeader("Content-Type", "application/json");
// res.setHeader("Cache-Control", "max-age=1800000");
res.end(JSON.stringify(response.data));
}
resolve();
})
.catch((error) => {
console.log("proxy response error", error);
res.json(error);
res.status(405).end();
return resolve();
});
});
if (hashCheckValue == hashFromRequest) {
return new Promise((resolve, reject) => {
let hasDocument =
hashCheckPath.indexOf("/download") > 0 ? true : false;
axios(
req.method == "GET"
? hasDocument
? configDocument
: configNoData
: config
)
.then((response) => {
res.statusCode = 200;
if (hasDocument) {
res.setHeader(
"Content-disposition",
"attachment; filename=" +
response.headers["content-disposition"].split(
"filename="
)[1]
);
res.end(response.data);
} else {
res.setHeader("Content-Type", "application/json");
// res.setHeader("Cache-Control", "max-age=1800000");
res.end(JSON.stringify(response.data));
}
resolve();
})
.catch((error) => {
console.log("proxy response error", error);
// res.json(error);
res.status(405).end();
return resolve();
});
});
} else {
res.status(405).end();
return resolve();
}
}