opnform-host-nginx/client/middleware/custom-domain.global.js

65 lines
1.6 KiB
JavaScript
Raw Normal View History

import {customDomainUsed, getDomain, getHost} from "~/lib/utils.js"
2023-12-16 19:21:03 +01:00
2024-01-12 15:43:28 +01:00
/**
* Added by Caddy when proxying to the app
* @type {string}
*/
const customDomainHeaderName = "user-custom-domain"
2024-01-12 15:43:28 +01:00
/**
* List of routes that can be used with a custom domain
* @type {string[]}
*/
const customDomainAllowedRoutes = ["forms-slug"]
2024-01-12 15:43:28 +01:00
2024-01-16 16:51:38 +01:00
function redirectToMainDomain(details = {}) {
2024-07-15 13:18:38 +02:00
const config = useRuntimeConfig()
const appDomain = getDomain(config.public.appUrl)
const host = getHost()
console.warn("Redirecting to main domain", {
reason: "unknown",
appDomain,
host,
getDomain: getDomain(host), ...details
})
return navigateTo(
useRuntimeConfig().public.appUrl +
"?utm_source=failed_custom_domain_redirect",
{redirectCode: 301, external: true},
)
2023-12-16 19:21:03 +01:00
}
export default defineNuxtRouteMiddleware((to) => {
if (!customDomainUsed()) return
2024-01-12 15:43:28 +01:00
const config = useRuntimeConfig()
const customDomainHeaderValue = useRequestHeaders()[customDomainHeaderName]
if (
import.meta.server &&
(!customDomainHeaderValue ||
customDomainHeaderValue !== getDomain(getHost()))
) {
return redirectToMainDomain({
reason: "header_mismatch",
2024-01-16 17:40:28 +01:00
customDomainHeaderValue: customDomainHeaderValue,
2024-01-16 16:51:38 +01:00
host: getDomain(getHost()),
})
2024-01-12 15:43:28 +01:00
}
if (!config.public.customDomainsEnabled) {
// If custom domain not allowed, redirect
2024-01-16 17:40:28 +01:00
return redirectToMainDomain({
reason: "custom_domains_disabled",
2024-01-16 17:40:28 +01:00
})
2024-01-12 15:43:28 +01:00
}
if (!customDomainAllowedRoutes.includes(to.name)) {
// Custom domain only allowed for form url
2024-01-16 17:40:28 +01:00
return redirectToMainDomain({
reason: "route_not_allowed",
route: to.name
2024-01-16 16:51:38 +01:00
})
2023-12-16 19:21:03 +01:00
}
})