2024-08-26 23:12:27 +01:00
|
|
|
import { sequence } from '@sveltejs/kit/hooks';
|
|
|
|
|
import {init as initSentry, handleErrorWithSentry, sentryHandle} from '@sentry/sveltekit';
|
2024-03-08 19:49:19 +00:00
|
|
|
import type { Handle } from "@sveltejs/kit";
|
2024-08-26 23:12:27 +01:00
|
|
|
import { randomBytes } from 'crypto';
|
2024-03-08 19:49:19 +00:00
|
|
|
|
2024-08-26 23:12:27 +01:00
|
|
|
initSentry({
|
2024-08-25 02:42:16 +01:00
|
|
|
dsn: "https://d006c73cc53783930a1521a68ae1c312@o4507835405369344.ingest.de.sentry.io/4507835410481232",
|
|
|
|
|
tracesSampleRate: 1
|
|
|
|
|
})
|
|
|
|
|
|
2024-03-08 19:49:19 +00:00
|
|
|
const securityHeaders = {
|
|
|
|
|
'X-Content-Type-Options': 'nosniff',
|
|
|
|
|
'X-XSS-Protection': '0',
|
|
|
|
|
|
|
|
|
|
"Referrer-Policy": "no-referrer-when-downgrade",
|
|
|
|
|
|
2024-03-08 19:58:23 +00:00
|
|
|
"Permissions-Policy": "payment=(), geolocation=(self), fullscreen=(self)",
|
2024-03-08 19:49:19 +00:00
|
|
|
|
|
|
|
|
'Cross-Origin-Embedder-Policy': 'require-corp',
|
|
|
|
|
'Cross-Origin-Opener-Policy': 'same-origin',
|
|
|
|
|
'Cross-Origin-Resource-Policy': 'same-origin',
|
|
|
|
|
|
2024-08-26 20:46:14 +01:00
|
|
|
'Report-To': '{"group":"csp-endpoint","max_age":10886400,"endpoints":[{"url":"https://o4507835405369344.ingest.de.sentry.io/api/4507835410481232/security/?sentry_key=d006c73cc53783930a1521a68ae1c312"}],"include_subdomains":true}',
|
2024-03-08 19:49:19 +00:00
|
|
|
}
|
|
|
|
|
|
2024-08-26 23:12:27 +01:00
|
|
|
export const handle: Handle = async (input) => {
|
|
|
|
|
const sentryNonce = randomBytes(16).toString('hex');
|
|
|
|
|
return await sequence(
|
|
|
|
|
sentryHandle({
|
|
|
|
|
// injectFetchProxyScript: false,
|
|
|
|
|
fetchProxyScriptNonce: sentryNonce,
|
|
|
|
|
}),
|
|
|
|
|
async ({ event, resolve }) => {
|
|
|
|
|
const response = await resolve(event);
|
|
|
|
|
let csp = response.headers.get("Content-Security-Policy");
|
|
|
|
|
if (csp) {
|
|
|
|
|
response.headers.set("Content-Security-Policy", csp.replace("script-src", "script-src 'nonce-" + sentryNonce + "'"));
|
2024-07-23 23:14:29 +01:00
|
|
|
}
|
2024-03-08 19:49:19 +00:00
|
|
|
|
2024-08-26 23:12:27 +01:00
|
|
|
Object.entries(securityHeaders).forEach(
|
|
|
|
|
([header, value]) => {
|
|
|
|
|
if (!response.headers.has(header)) {
|
|
|
|
|
response.headers.set(header, value)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
);
|
2024-03-08 19:49:19 +00:00
|
|
|
|
2024-08-26 23:12:27 +01:00
|
|
|
response.headers.delete("x-sveltekit-page")
|
|
|
|
|
|
|
|
|
|
return response;
|
|
|
|
|
}
|
|
|
|
|
)(input)
|
|
|
|
|
}
|
|
|
|
|
export const handleError = handleErrorWithSentry();
|