106 lines
4.7 KiB
JavaScript
106 lines
4.7 KiB
JavaScript
import Document, { Html, Head, Main, NextScript } from "next/document";
|
|
import SkipLink from "../components/skiplink";
|
|
import { Tracking, TrackingNoScript } from "../components/tracking";
|
|
import { nanoid } from "nanoid";
|
|
import { setCookie } from "nookies";
|
|
import Script from "next/script";
|
|
|
|
class MyDocument extends Document {
|
|
static async getInitialProps(ctx) {
|
|
const initialProps = await Document.getInitialProps(ctx);
|
|
|
|
let useGATracking = false;
|
|
|
|
if (ctx.req && ctx.req.headers.cookie) {
|
|
typeof ctx.req.cookies.CookiePolicy != "undefined"
|
|
? JSON.parse(ctx.req.cookies.CookiePolicy).usage == "accepted"
|
|
? (useGATracking = true)
|
|
: (useGATracking = false)
|
|
: (useGATracking = true);
|
|
} else {
|
|
useGATracking = false;
|
|
}
|
|
|
|
const cookieObj = ctx.req.cookies.CookiePolicy || {};
|
|
|
|
console.log("useGATracking: ", useGATracking);
|
|
setCookie(ctx, "pedw_locale", ctx.locale, {
|
|
path: "/",
|
|
});
|
|
|
|
return { ...initialProps, useGATracking, cookieObj };
|
|
}
|
|
|
|
render() {
|
|
const googleTagManagerID = process.env.GOOGLE_TAG_MANAGER || null;
|
|
const { useGATracking, locale, cookieObj } = this.props;
|
|
|
|
const generatedNonce = nanoid();
|
|
|
|
let csp = ``;
|
|
csp += `base-uri 'self';`;
|
|
csp += `form-action 'self' ` + process.env.NEXTAUTH_URL + ` ;`;
|
|
csp += `object-src 'self' data:;`;
|
|
csp += `default-src 'self' https://www.google-analytics.com;`;
|
|
csp += `connect-src 'self' http://127.0.0.1 https://maps.googleapis.com https://uksouth-1.in.applicationinsights.azure.com https://ukwest-0.in.applicationinsights.azure.com https://js.monitor.azure.com https://region1.google-analytics.com;`;
|
|
csp += `script-src 'self' 'unsafe-eval' 'unsafe-inline' https://maps.googleapis.com https://ukwest-0.in.applicationinsights.azure.com https://region1.google-analytics.com https://www.google-analytics.com/ https://tagmanager.google.com/ https://www.googletagmanager.com/;`;
|
|
csp += `style-src 'self' 'unsafe-inline' https://pro.fontawesome.com/ https://www.google-analytics.com https://tagmanager.google.com/ https://www.googletagmanager.com/ https://fonts.googleapis.com/;`;
|
|
csp += `img-src 'self' 'unsafe-inline' https://maps.gstatic.com https://maps.googleapis.com https://www.gov.wales https://gov.wales https://fonts.gstatic.com https://www.googletagmanager.com https://www.google-analytics.com https://ssl.gstatic.com/ blob: data:;`;
|
|
csp += `font-src 'self' 'unsafe-inline' https://pro.fontawesome.com/ https://fonts.gstatic.com/ data:;`;
|
|
csp += `frame-src https://datamap.gov.wales`;
|
|
|
|
return (
|
|
<Html lang={locale}>
|
|
<Head nonce={generatedNonce}>
|
|
<meta httpEquiv="Content-Security-Policy" content={csp} />
|
|
{useGATracking && (
|
|
<Tracking
|
|
googleTagManagerID={"G-GTWW3JT03Z"}
|
|
nonce={generatedNonce}
|
|
cookieObj={cookieObj}
|
|
/>
|
|
)}
|
|
|
|
{/* <GoogleAnalytics gaId={googleTagManagerID} /> */}
|
|
</Head>
|
|
<body className="js-enabled">
|
|
{useGATracking && (
|
|
<TrackingNoScript
|
|
nonce={generatedNonce}
|
|
googleTagManagerID={googleTagManagerID}
|
|
/>
|
|
)}
|
|
{!process.browser && (
|
|
<>
|
|
<script
|
|
nonce={generatedNonce}
|
|
dangerouslySetInnerHTML={{
|
|
__html:
|
|
"window.switchDomain = '" +
|
|
process.env.I18N_DOMAIN +
|
|
"'",
|
|
}}
|
|
/>
|
|
<script
|
|
nonce={generatedNonce}
|
|
dangerouslySetInnerHTML={{
|
|
__html:
|
|
"window.apiRoot = '" +
|
|
process.env.API_ROOT +
|
|
"'",
|
|
}}
|
|
/>
|
|
</>
|
|
)}
|
|
|
|
<SkipLink />
|
|
<Main />
|
|
<NextScript />
|
|
</body>
|
|
</Html>
|
|
);
|
|
}
|
|
}
|
|
|
|
export default MyDocument;
|