From d4a175b24404e6801e658f5fc4cba7105f156b37 Mon Sep 17 00:00:00 2001 From: ayush Date: Tue, 14 Jul 2026 14:13:30 +0530 Subject: [PATCH 1/3] Fix organization creation when domain is empty Fixes #50825 Signed-off-by: ayush --- js/apps/admin-ui/src/organizations/OrganizationForm.tsx | 5 +++-- .../java/org/keycloak/organization/utils/Organizations.java | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/js/apps/admin-ui/src/organizations/OrganizationForm.tsx b/js/apps/admin-ui/src/organizations/OrganizationForm.tsx index c89d23729bac..e069976e948e 100644 --- a/js/apps/admin-ui/src/organizations/OrganizationForm.tsx +++ b/js/apps/admin-ui/src/organizations/OrganizationForm.tsx @@ -17,12 +17,13 @@ export type OrganizationFormType = AttributeForm & Omit & { domains?: string[]; }; - export const convertToOrg = ( org: OrganizationFormType, ): OrganizationRepresentation => ({ ...org, - domains: org.domains?.map((d) => ({ name: d, verified: false })), + domains: org.domains + ?.filter((d) => d.trim() !== "") + .map((d) => ({ name: d, verified: false })), attributes: keyValueToArray(org.attributes), }); diff --git a/services/src/main/java/org/keycloak/organization/utils/Organizations.java b/services/src/main/java/org/keycloak/organization/utils/Organizations.java index 393630faff8a..fe42cc19e4ef 100644 --- a/services/src/main/java/org/keycloak/organization/utils/Organizations.java +++ b/services/src/main/java/org/keycloak/organization/utils/Organizations.java @@ -207,7 +207,7 @@ public static int getDomainPartsSize(String domain) { } public static void validateDomain(String rawDomain) { - if (rawDomain == null) { + if (rawDomain == null || isBlank(rawDomain)) { return; } From fa4e3c316f1a6b313b7179a96e3d1956ec7cd590 Mon Sep 17 00:00:00 2001 From: ayush Date: Sat, 18 Jul 2026 00:08:22 +0530 Subject: [PATCH 2/3] Fixed redundant code --- .../java/org/keycloak/organization/utils/Organizations.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/src/main/java/org/keycloak/organization/utils/Organizations.java b/services/src/main/java/org/keycloak/organization/utils/Organizations.java index fe42cc19e4ef..309a50b283ec 100644 --- a/services/src/main/java/org/keycloak/organization/utils/Organizations.java +++ b/services/src/main/java/org/keycloak/organization/utils/Organizations.java @@ -207,7 +207,7 @@ public static int getDomainPartsSize(String domain) { } public static void validateDomain(String rawDomain) { - if (rawDomain == null || isBlank(rawDomain)) { + if (isBlank(rawDomain)) { return; } From bff9483e2e5d203ca905fd846240dbbd05d75d38 Mon Sep 17 00:00:00 2001 From: ayush Date: Sat, 18 Jul 2026 00:24:39 +0530 Subject: [PATCH 3/3] added test cases Signed-off-by: ayush --- .../organizations/OrganizationForm.test.tsx | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 js/apps/admin-ui/src/organizations/OrganizationForm.test.tsx diff --git a/js/apps/admin-ui/src/organizations/OrganizationForm.test.tsx b/js/apps/admin-ui/src/organizations/OrganizationForm.test.tsx new file mode 100644 index 000000000000..9f1250db916e --- /dev/null +++ b/js/apps/admin-ui/src/organizations/OrganizationForm.test.tsx @@ -0,0 +1,42 @@ +import { describe, expect, it } from "vitest"; +import { convertToOrg, OrganizationFormType } from "./OrganizationForm"; + +describe("convertToOrg", () => { + it("omits blank domain entries", () => { + const form: OrganizationFormType = { + name: "test-org", + alias: "test-org", + domains: [""], + } as OrganizationFormType; + + const result = convertToOrg(form); + + expect(result.domains).toEqual([]); + }); + + it("keeps valid domains and drops blanks mixed in", () => { + const form: OrganizationFormType = { + name: "test-org", + alias: "test-org", + domains: ["example.com", "", "acme.com"], + } as OrganizationFormType; + + const result = convertToOrg(form); + + expect(result.domains).toEqual([ + { name: "example.com", verified: false }, + { name: "acme.com", verified: false }, + ]); + }); + + it("handles undefined domains", () => { + const form: OrganizationFormType = { + name: "test-org", + alias: "test-org", + } as OrganizationFormType; + + const result = convertToOrg(form); + + expect(result.domains).toBeUndefined(); + }); +}); \ No newline at end of file