diff --git a/apps/dokploy/components/dashboard/application/domains/handle-domain.tsx b/apps/dokploy/components/dashboard/application/domains/handle-domain.tsx index 9d7a074f9..4c467a690 100644 --- a/apps/dokploy/components/dashboard/application/domains/handle-domain.tsx +++ b/apps/dokploy/components/dashboard/application/domains/handle-domain.tsx @@ -46,7 +46,13 @@ export type CacheType = "fetch" | "cache"; export const domain = z .object({ - host: z.string().min(1, { message: "Add a hostname" }), + host: z + .string() + .min(1, { message: "Add a hostname" }) + .refine((val) => val === val.trim(), { + message: "Domain name cannot have leading or trailing spaces", + }) + .transform((val) => val.trim()), path: z.string().min(1).optional(), internalPath: z.string().optional(), stripPath: z.boolean().optional(), diff --git a/apps/dokploy/server/db/validations/domain.ts b/apps/dokploy/server/db/validations/domain.ts index 4937f843b..35de518c0 100644 --- a/apps/dokploy/server/db/validations/domain.ts +++ b/apps/dokploy/server/db/validations/domain.ts @@ -2,7 +2,13 @@ import { z } from "zod"; export const domain = z .object({ - host: z.string().min(1, { message: "Add a hostname" }), + host: z + .string() + .min(1, { message: "Add a hostname" }) + .refine((val) => val === val.trim(), { + message: "Domain name cannot have leading or trailing spaces", + }) + .transform((val) => val.trim()), path: z.string().min(1).optional(), port: z .number() @@ -33,7 +39,13 @@ export const domain = z export const domainCompose = z .object({ - host: z.string().min(1, { message: "Host is required" }), + host: z + .string() + .min(1, { message: "Add a hostname" }) + .refine((val) => val === val.trim(), { + message: "Domain name cannot have leading or trailing spaces", + }) + .transform((val) => val.trim()), path: z.string().min(1).optional(), port: z .number() diff --git a/packages/server/src/db/validations/domain.ts b/packages/server/src/db/validations/domain.ts index a10c96dcc..c032841e3 100644 --- a/packages/server/src/db/validations/domain.ts +++ b/packages/server/src/db/validations/domain.ts @@ -2,7 +2,13 @@ import { z } from "zod"; export const domain = z .object({ - host: z.string().min(1, { message: "Add a hostname" }), + host: z + .string() + .min(1, { message: "Add a hostname" }) + .refine((val) => val === val.trim(), { + message: "Domain name cannot have leading or trailing spaces", + }) + .transform((val) => val.trim()), path: z.string().min(1).optional(), internalPath: z.string().optional(), stripPath: z.boolean().optional(), @@ -58,7 +64,13 @@ export const domain = z export const domainCompose = z .object({ - host: z.string().min(1, { message: "Host is required" }), + host: z + .string() + .min(1, { message: "Add a hostname" }) + .refine((val) => val === val.trim(), { + message: "Domain name cannot have leading or trailing spaces", + }) + .transform((val) => val.trim()), path: z.string().min(1).optional(), internalPath: z.string().optional(), stripPath: z.boolean().optional(), diff --git a/packages/server/src/services/domain.ts b/packages/server/src/services/domain.ts index f81fffb96..50888e546 100644 --- a/packages/server/src/services/domain.ts +++ b/packages/server/src/services/domain.ts @@ -19,6 +19,7 @@ export const createDomain = async (input: typeof apiCreateDomain._type) => { .insert(domains) .values({ ...input, + host: input.host?.trim(), }) .returning() .then((response) => response[0]); @@ -120,6 +121,7 @@ export const updateDomainById = async ( .update(domains) .set({ ...domainData, + ...(domainData.host && { host: domainData.host.trim() }), }) .where(eq(domains.domainId, domainId)) .returning();