diff --git a/server/lib/schemas.ts b/server/lib/schemas.ts index cf1b40c8..0888ff31 100644 --- a/server/lib/schemas.ts +++ b/server/lib/schemas.ts @@ -3,7 +3,7 @@ import { z } from "zod"; export const subdomainSchema = z .string() .regex( - /^(?!:\/\/)([a-zA-Z0-9-_]+\.)*[a-zA-Z0-9-_]+$/, + /^(?!:\/\/)([a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)*[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$/, "Invalid subdomain format" ) .min(1, "Subdomain must be at least 1 character long") @@ -12,7 +12,8 @@ export const subdomainSchema = z export const tlsNameSchema = z .string() .regex( - /^(?!:\/\/)([a-zA-Z0-9-_]+\.)*[a-zA-Z0-9-_]+$|^$/, + /^(?!:\/\/)([a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)*[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$|^$/, "Invalid subdomain format" ) - .transform((val) => val.toLowerCase()); \ No newline at end of file + .transform((val) => val.toLowerCase()); + diff --git a/src/app/[orgId]/settings/resources/[resourceId]/general/page.tsx b/src/app/[orgId]/settings/resources/[resourceId]/general/page.tsx index 8c5ee667..b95ecef2 100644 --- a/src/app/[orgId]/settings/resources/[resourceId]/general/page.tsx +++ b/src/app/[orgId]/settings/resources/[resourceId]/general/page.tsx @@ -53,6 +53,7 @@ import { import DomainPicker from "@app/components/DomainPicker"; import { Globe } from "lucide-react"; import { build } from "@server/build"; +import { finalizeSubdomainSanitize } from "@app/lib/subdomain-utils"; export default function GeneralForm() { const [formKey, setFormKey] = useState(0); @@ -85,6 +86,7 @@ export default function GeneralForm() { domainId: string; subdomain?: string; fullDomain: string; + baseDomain: string; } | null>(null); const GeneralFormSchema = z @@ -441,7 +443,8 @@ export default function GeneralForm() { const selected = { domainId: res.domainId, subdomain: res.subdomain, - fullDomain: res.fullDomain + fullDomain: res.fullDomain, + baseDomain: res.baseDomain }; setSelectedDomain(selected); }} @@ -454,18 +457,24 @@ export default function GeneralForm() {