diff --git a/apps/viewer/pages/[[...publicId]].tsx b/apps/viewer/pages/[[...publicId]].tsx index a4c11c947..5af8cea3e 100644 --- a/apps/viewer/pages/[[...publicId]].tsx +++ b/apps/viewer/pages/[[...publicId]].tsx @@ -1,3 +1,4 @@ +import { IncomingMessage } from 'http' import { NotFoundPage } from 'layouts/NotFoundPage' import { PublicTypebot } from 'models' import { GetServerSideProps, GetServerSidePropsContext } from 'next' @@ -11,17 +12,14 @@ export const getServerSideProps: GetServerSideProps = async ( let typebot: Omit | null const isIE = /MSIE|Trident/.test(context.req.headers['user-agent'] ?? '') const pathname = context.resolvedUrl.split('?')[0] + const host = getHost(context.req) try { - if (!context.req.headers.host) return { props: {} } + if (!host) return { props: {} } const viewerUrls = (process.env.NEXT_PUBLIC_VIEWER_URL ?? '').split(',') const isMatchingViewerUrl = viewerUrls.some((url) => - (context.req.headers.host ?? '') - .split(':')[0] - .includes(url.split('//')[1].split(':')[0]) + host.split(':')[0].includes(url.split('//')[1].split(':')[0]) ) - const customDomain = `${context.req.headers.host}${ - pathname === '/' ? '' : pathname - }` + const customDomain = `${host}${pathname === '/' ? '' : pathname}` typebot = isMatchingViewerUrl ? await getTypebotFromPublicId(context.query.publicId?.toString()) : await getTypebotFromCustomDomain(customDomain) @@ -35,7 +33,7 @@ export const getServerSideProps: GetServerSideProps = async ( props: { typebot, isIE, - url: `https://${context.req.headers.host}${pathname}`, + url: `https://${host}${pathname}`, }, } } catch (err) { @@ -44,7 +42,7 @@ export const getServerSideProps: GetServerSideProps = async ( return { props: { isIE, - url: `https://${context.req.headers.host}${pathname}`, + url: `https://${host}${pathname}`, }, } } @@ -66,6 +64,20 @@ const getTypebotFromCustomDomain = async (customDomain: string) => { return omit(typebot as unknown as PublicTypebot, 'createdAt', 'updatedAt') } +const getHost = (req?: IncomingMessage): string | undefined => { + let host = req?.headers ? req.headers.host : window.location.host + if (!host) return + if ( + req && + req.headers['x-forwarded-host'] && + typeof req.headers['x-forwarded-host'] === 'string' + ) { + host = req.headers['x-forwarded-host'] + } + + return host +} + const App = ({ typebot, ...props }: TypebotPageProps) => isDefined(typebot) ? (