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