Files
pedwfrontend/pages/_document.js
T
2023-05-23 10:38:03 +01:00

85 lines
3.0 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";
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;
}
setCookie(ctx, "pedw_locale", ctx.locale, {
path: "/",
});
return { ...initialProps, useGATracking };
}
render() {
const googleTagManagerID = process.env.GOOGLE_TAG_MANAGER || null;
const { useGATracking, locale } = 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 +=
`script-src 'self' ` +
process.env.NEXTAUTH_URL +
` 'unsafe-inline' https://www.googletagmanager.com https://maps.googleapis.com 'nonce-${generatedNonce}' 'unsafe-eval';`;
csp += `style-src 'self' https://fonts.googleapis.com 'unsafe-inline' data:;`;
return (
<Html lang={locale}>
<Head>
<meta httpEquiv="Content-Security-Policy" content={csp} />
{useGATracking && (
<Tracking
googleTagManagerID={googleTagManagerID}
nonce={generatedNonce}
/>
)}
</Head>
<body className="js-enabled">
{useGATracking && (
<TrackingNoScript
nonce={generatedNonce}
googleTagManagerID={googleTagManagerID}
/>
)}
{!process.browser && (
<>
<script nonce={generatedNonce}>
window.switchDomain = `{process.env.I18N_DOMAIN}
`
</script>
<script nonce={generatedNonce}>
window.apiRoot = `{process.env.API_ROOT}`
</script>
</>
)}
<SkipLink />
<Main />
<NextScript />
</body>
</Html>
);
}
}
export default MyDocument;