diff --git a/src/Config/Config.ts b/src/Config/Config.ts index 552b6d5..08172b0 100644 --- a/src/Config/Config.ts +++ b/src/Config/Config.ts @@ -1,4 +1,5 @@ import axios from "axios"; +import { wafIntercept } from "../madie-madie-util"; export interface OktaConfig { baseUrl: string; @@ -32,6 +33,9 @@ export async function getServiceConfig(): Promise { ) { throw new Error("Invalid Service Config"); } + axios.interceptors.response.use((response) => { + return response; + }, wafIntercept); return serviceConfig; } diff --git a/src/api/useOrganizationApi.ts b/src/api/useOrganizationApi.ts index 4b0fd67..bba0c3b 100644 --- a/src/api/useOrganizationApi.ts +++ b/src/api/useOrganizationApi.ts @@ -2,6 +2,7 @@ import axios from "axios"; import { ServiceConfig, getServiceConfig } from "../Config/Config"; import useOktaTokens from "../hooks/useOktaTokens"; import { Organization } from "@madie/madie-models"; +import { wafIntercept } from "../madie-madie-util"; export class OrganizationApi { constructor(private getAccessToken: () => string) {} @@ -35,6 +36,10 @@ export const getServiceUrl = async () => { return serviceUrl; }; +axios.interceptors.response.use((response) => { + return response; +}, wafIntercept); + export default function useOrganizationApi(): OrganizationApi { const { getAccessToken } = useOktaTokens(); return new OrganizationApi(getAccessToken); diff --git a/src/api/useTerminologyServiceApi.ts b/src/api/useTerminologyServiceApi.ts index 72e761a..8976b27 100644 --- a/src/api/useTerminologyServiceApi.ts +++ b/src/api/useTerminologyServiceApi.ts @@ -2,6 +2,7 @@ import axios from "axios"; import { ServiceConfig, getServiceConfig } from "../Config/Config"; import useOktaTokens from "../hooks/useOktaTokens"; +import { wafIntercept } from "../madie-madie-util"; export class TerminologyServiceApi { constructor(private getAccessToken: () => string) {} @@ -55,6 +56,9 @@ export const getServiceUrl = async () => { return serviceUrl; }; +axios.interceptors.response.use((response) => { + return response; +}, wafIntercept); export default function useTerminologyServiceApi(): TerminologyServiceApi { const { getAccessToken } = useOktaTokens(); diff --git a/src/util/axios-instance.ts b/src/util/axios-instance.ts new file mode 100644 index 0000000..e790e81 --- /dev/null +++ b/src/util/axios-instance.ts @@ -0,0 +1,7 @@ +import axios from "axios"; +import wafIntercept from "./wafIntercept"; + +export const axiosInstance = axios.create(); +axiosInstance.interceptors.response.use((response) => { + return response; +}, wafIntercept); diff --git a/src/util/wafIntercept.ts b/src/util/wafIntercept.ts index 18ef7c6..a6abc76 100644 --- a/src/util/wafIntercept.ts +++ b/src/util/wafIntercept.ts @@ -1,35 +1,28 @@ -import axios from "axios"; import DOMPurify from "dompurify"; -const wafIntercept = () => - axios.interceptors.response.use( - (response) => { - return response; - }, - (error) => { - // Check for WAF block - if ( - error?.response?.status === 403 && - error?.response?.headers["content-type"].includes("text/html") && - JSON.stringify(error.response.data).includes("soc@hcqis.org") - ) { - // eslint-disable-next-line no-console - console.log("WAF Interceptor Triggered"); +const wafIntercept = (error) => { + // Check for WAF block + if ( + error?.response?.status === 403 && + error?.response?.headers["content-type"].includes("text/html") && + JSON.stringify(error.response.data).includes("soc@hcqis.org") + ) { + // eslint-disable-next-line no-console + console.log("WAF Interceptor Triggered"); - const supportID = error.response.data.includes("ID:") - ? error.response.data.split("ID:")[1].split("
")[0].trim() - : ""; - const body = error.response.data.split("")[1].split("
")[0]; - const purifiedBody = DOMPurify.sanitize(body, { ALLOWED_TAGS: [] }); + const supportID = error.response.data.includes("ID:") + ? error.response.data.split("ID:")[1].split("
")[0].trim() + : ""; + const body = error.response.data.split("")[1].split("
")[0]; + const purifiedBody = DOMPurify.sanitize(body, { ALLOWED_TAGS: [] }); - const wafEvent = new CustomEvent("wafReject", { - detail: { message: purifiedBody, supportId: supportID }, - }); - document.dispatchEvent(wafEvent); - throw new Error(purifiedBody); // no tags allowed, removes all HTML tags. - } + const wafEvent = new CustomEvent("wafReject", { + detail: { message: purifiedBody, supportId: supportID }, + }); + document.dispatchEvent(wafEvent); + throw new Error(purifiedBody); // no tags allowed, removes all HTML tags. + } - return Promise.reject(error); - } - ); + return Promise.reject(error); +}; export default wafIntercept;