diff --git a/apps/dokploy/components/dashboard/settings/web-domain.tsx b/apps/dokploy/components/dashboard/settings/web-domain.tsx index 509df40d..354f1158 100644 --- a/apps/dokploy/components/dashboard/settings/web-domain.tsx +++ b/apps/dokploy/components/dashboard/settings/web-domain.tsx @@ -29,11 +29,22 @@ import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { z } from "zod"; -const addServerDomain = z.object({ - domain: z.string().min(1, { message: "URL is required" }), - letsEncryptEmail: z.string().min(1, "Email is required").email(), - certificateType: z.enum(["letsencrypt", "none"]), -}); +const addServerDomain = z + .object({ + domain: z.string().min(1, { message: "URL is required" }), + letsEncryptEmail: z.string(), + certificateType: z.enum(["letsencrypt", "none"]), + }) + .superRefine((data, ctx) => { + if (data.certificateType === "letsencrypt" && !data.letsEncryptEmail) { + ctx.addIssue({ + code: z.ZodIssueCode.custom, + message: + "LetsEncrypt email is required when certificate type is letsencrypt", + path: ["letsEncryptEmail"], + }); + } + }); type AddServerDomain = z.infer; diff --git a/apps/dokploy/server/api/routers/settings.ts b/apps/dokploy/server/api/routers/settings.ts index a6246861..e1e63579 100644 --- a/apps/dokploy/server/api/routers/settings.ts +++ b/apps/dokploy/server/api/routers/settings.ts @@ -174,7 +174,9 @@ export const settingsRouter = createTRPCRouter({ } const admin = await updateAdmin(ctx.user.authId, { host: input.host, - letsEncryptEmail: input.letsEncryptEmail, + ...(input.letsEncryptEmail && { + letsEncryptEmail: input.letsEncryptEmail, + }), certificateType: input.certificateType, }); @@ -186,7 +188,10 @@ export const settingsRouter = createTRPCRouter({ } updateServerTraefik(admin, input.host); - updateLetsEncryptEmail(admin.letsEncryptEmail); + if (input.letsEncryptEmail) { + updateLetsEncryptEmail(input.letsEncryptEmail); + } + return admin; }), cleanSSHPrivateKey: adminProcedure.mutation(async ({ ctx }) => { diff --git a/packages/server/src/db/schema/admin.ts b/packages/server/src/db/schema/admin.ts index efa7716e..5aceb5bc 100644 --- a/packages/server/src/db/schema/admin.ts +++ b/packages/server/src/db/schema/admin.ts @@ -45,6 +45,7 @@ const createSchema = createInsertSchema(admins, { sshPrivateKey: z.string().optional(), certificateType: z.enum(["letsencrypt", "none"]).default("none"), serverIp: z.string().optional(), + letsEncryptEmail: z.string().optional(), }); export const apiSaveSSHKey = createSchema @@ -55,11 +56,14 @@ export const apiSaveSSHKey = createSchema export const apiAssignDomain = createSchema .pick({ - letsEncryptEmail: true, host: true, certificateType: true, + letsEncryptEmail: true, }) - .required(); + .required() + .partial({ + letsEncryptEmail: true, + }); export const apiUpdateDockerCleanup = createSchema .pick({