From be43c5cae37f790569b716719f1c177e221edf69 Mon Sep 17 00:00:00 2001 From: Julien Nahum Date: Fri, 12 Jan 2024 17:32:10 +0100 Subject: [PATCH] Fix sentry nuxt and custom domain redirect --- .../Middleware/CustomDomainRestriction.php | 4 ++-- client/composables/useOpnApi.js | 18 ++++++------------ client/lib/utils.js | 8 +++++--- client/nuxt.config.ts | 2 +- 4 files changed, 14 insertions(+), 18 deletions(-) diff --git a/app/Http/Middleware/CustomDomainRestriction.php b/app/Http/Middleware/CustomDomainRestriction.php index 3ff5b8b..31f4b0e 100644 --- a/app/Http/Middleware/CustomDomainRestriction.php +++ b/app/Http/Middleware/CustomDomainRestriction.php @@ -28,7 +28,7 @@ class CustomDomainRestriction 'success' => false, 'message' => 'Invalid domain', 'error' => 'invalid_domain', - ], 401); + ], 420); } // Check if domain is different from current domain @@ -43,7 +43,7 @@ class CustomDomainRestriction 'success' => false, 'message' => 'Unknown domain', 'error' => 'invalid_domain', - ], 400); + ], 420); } Workspace::addGlobalScope('domain-restricted', function (Builder $builder) use ($workspace) { diff --git a/client/composables/useOpnApi.js b/client/composables/useOpnApi.js index e2c0ede..77bcd7e 100644 --- a/client/composables/useOpnApi.js +++ b/client/composables/useOpnApi.js @@ -42,26 +42,20 @@ export function getOpnRequestsOptions(request, opts) { return { baseURL: config.public.apiBase, - onResponseError({response}) { + async onResponseError({response}) { const authStore = useAuthStore() - console.log(response) + const {status} = response - if (status === 401) { - if (response.body.error && response.body.error === 'invalid_domain' && process.client) { - // If invalid domain, redirect to main domain - window.location.href = config.public.appUrl + '?utm_source=failed_custom_domain_redirect' - return - } - if (authStore.check) { console.log("Logging out due to 401") authStore.logout() useRouter().push({name: 'login'}) } - } - - if (status >= 500) { + } else if (status === 420) { + // If invalid domain, redirect to main domain + window.location.href = config.public.appUrl + '?utm_source=failed_custom_domain_redirect' + } else if (status >= 500) { console.error('Request error', status) } }, diff --git a/client/lib/utils.js b/client/lib/utils.js index b6914b8..f5eaf25 100644 --- a/client/lib/utils.js +++ b/client/lib/utils.js @@ -47,7 +47,7 @@ export const appUrl = (path = '/') => { */ export const getHost = function () { if (process.server) { - return useNuxtApp().ssrContext?.event.context.siteConfigNitroOrigin || useNuxtApp().ssrContext?.event.node.req.headers.host + return getDomain(useNuxtApp().ssrContext?.event.context.siteConfigNitroOrigin) || useNuxtApp().ssrContext?.event.node.req.headers.host } else { return window.location.host } @@ -59,6 +59,7 @@ export const getHost = function () { * @returns {*} */ export const getDomain = function (url) { + if (url.includes('localhost')) return 'localhost' return (new URL(url)).hostname } @@ -68,7 +69,8 @@ export const getDomain = function (url) { */ export const customDomainUsed = function() { const config = useRuntimeConfig() - const appUrl = config.public.appUrl + const appDomain = getDomain(config.public.appUrl) + const host = getHost() - return getDomain(getHost()) !== getDomain(appUrl) + return host !== appDomain && getDomain(host) !== appDomain } diff --git a/client/nuxt.config.ts b/client/nuxt.config.ts index 1f96e39..18c84cd 100644 --- a/client/nuxt.config.ts +++ b/client/nuxt.config.ts @@ -14,7 +14,7 @@ export default defineNuxtConfig({ 'nuxt3-notifications', 'nuxt-simple-sitemap', '@nuxt/image', - // ... opnformConfig.sentry_dsn ? ['@nuxtjs/sentry'] : [], + ... process.env.NUXT_PUBLIC_SENTRY_DSN ? ['@nuxtjs/sentry'] : [], ], build: { transpile: ["vue-notion"],