From 14bb35d1bb89ff7c7f07286ce4e68eb1c13232fb Mon Sep 17 00:00:00 2001 From: Kuba Orlik Date: Mon, 3 Mar 2025 20:58:00 +0100 Subject: [PATCH] Hide domain matching behind a feature flag --- src/back/config.ts | 3 +++ src/back/routes/middlewares/customUrlView.tsx | 23 +++++++++++-------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/back/config.ts b/src/back/config.ts index 4ce61c6..c78464e 100644 --- a/src/back/config.ts +++ b/src/back/config.ts @@ -24,6 +24,9 @@ export const MAILCATCHER_API_PORT = parseInt( export const MAILER = process.env.SEALIOUS_MAILER || "mailcatcher"; export const DEFAULT_HTML_LANG = "pl"; +// if enabled, domain name will be checked when matching cusom pages from DB by URL. Otherwise only the path part of the URL is used +export const MULTI_DOMAIN_ENABLED = process.env.MULTI_DOMAIN_ENABLED == "true" || false; + export const IMAGE_CACHE_FS_DIR = process.env.IMAGE_CACHE_FS_DIR || locreq.resolve("cache/images"); export const SMARTCROP_CACHE_FS_DIR = diff --git a/src/back/routes/middlewares/customUrlView.tsx b/src/back/routes/middlewares/customUrlView.tsx index 0a6292b..27d5707 100644 --- a/src/back/routes/middlewares/customUrlView.tsx +++ b/src/back/routes/middlewares/customUrlView.tsx @@ -10,7 +10,7 @@ import type { FilePointer } from "@sealcode/file-manager"; import html from "../../html.js"; import { tempstream } from "tempstream"; import { defaultHead } from "../../defaultHead.js"; -import { BASE_URL } from "../../config.js"; +import { BASE_URL, MULTI_DOMAIN_ENABLED } from "../../config.js"; interface ContextState { jddNames: string[]; @@ -23,17 +23,22 @@ export const customUrlView = if (ctx.body) return; const main_domain = new URL(BASE_URL).hostname; - const { - items: [page], - } = await app.collections.pages - .list(ctx.$context) - .filter({ - url: ctx.url.split("?")[0], + let filter = { + url: ctx.url.split("?")[0], + }; + + if (MULTI_DOMAIN_ENABLED) { + filter = { + ...filter, ...(ctx.hostname !== main_domain ? { domain: ctx.hostname } : { domain: "" }), - }) - .fetch(); + }; + } + + const { + items: [page], + } = await app.collections.pages.list(ctx.$context).filter(filter).fetch(); const pageContent = Array.isArray(page?.get("content")) ? (page?.get("content") as RawJDDocument)