From 5ed94954e62c3207cf4189515d905de91879902e Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Thu, 6 Aug 2026 00:01:57 -0600 Subject: [PATCH] Merge pull request #4972 from Dokploy/fix/domain-single-label-hostname fix(domain): allow single-label hostnames without a TLD (cherry picked from commit 75448f358e8dc8d15f88d6b0112b1e186ada668d) [skip ci] --- apps/dokploy/__test__/utils/hostname-validation.test.ts | 4 +++- packages/server/src/utils/hostname-validation.ts | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/apps/dokploy/__test__/utils/hostname-validation.test.ts b/apps/dokploy/__test__/utils/hostname-validation.test.ts index c0e734282..4dac477da 100644 --- a/apps/dokploy/__test__/utils/hostname-validation.test.ts +++ b/apps/dokploy/__test__/utils/hostname-validation.test.ts @@ -9,6 +9,9 @@ describe("VALID_HOSTNAME_REGEX", () => { "a.b.c.example.co", "xn--80ak6aa92e.com", "123.example.com", + "example", + "dokploy-server", + "localhost", ])("accepts valid hostname %s", (host) => { expect(VALID_HOSTNAME_REGEX.test(host)).toBe(true); }); @@ -17,7 +20,6 @@ describe("VALID_HOSTNAME_REGEX", () => { "bbn_client.example.com", "-example.com", "example-.com", - "example", "exa mple.com", "example..com", "", diff --git a/packages/server/src/utils/hostname-validation.ts b/packages/server/src/utils/hostname-validation.ts index be3407e5e..bc5aae7b6 100644 --- a/packages/server/src/utils/hostname-validation.ts +++ b/packages/server/src/utils/hostname-validation.ts @@ -1,8 +1,8 @@ // Valid hostname per RFC 1123: labels of letters, digits and hyphens -// (no leading/trailing hyphen), separated by dots. Underscores are rejected +// (no leading/trailing hyphen), optionally separated by dots. Underscores are rejected // because Let's Encrypt refuses to issue certificates for them. export const VALID_HOSTNAME_REGEX = - /^(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$/; + /^(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)*[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$/; export const INVALID_HOSTNAME_MESSAGE = "Invalid domain name. Use only letters, numbers, hyphens and dots (e.g. example.com). Underscores are not allowed.";