From 0508d279f75395e35435f1464c3abdfe81c1effa Mon Sep 17 00:00:00 2001 From: vramik Date: Thu, 23 May 2024 12:36:33 +0200 Subject: [PATCH] Filter empty domains from OrganizationsRepresentation before running validation Closes #29809 Signed-off-by: vramik --- .../organization/admin/resource/OrganizationsResource.java | 5 ++++- .../java/org/keycloak/organization/utils/Organizations.java | 1 + .../testsuite/organization/admin/OrganizationTest.java | 6 ++++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/services/src/main/java/org/keycloak/organization/admin/resource/OrganizationsResource.java b/services/src/main/java/org/keycloak/organization/admin/resource/OrganizationsResource.java index 52e73b9b9f..edd15a464d 100644 --- a/services/src/main/java/org/keycloak/organization/admin/resource/OrganizationsResource.java +++ b/services/src/main/java/org/keycloak/organization/admin/resource/OrganizationsResource.java @@ -92,7 +92,10 @@ public class OrganizationsResource { throw ErrorResponse.error("Organization cannot be null.", Response.Status.BAD_REQUEST); } - Set domains = ofNullable(organization.getDomains()).orElse(Set.of()).stream().map(OrganizationDomainRepresentation::getName).collect(Collectors.toSet()); + Set domains = ofNullable(organization.getDomains()).orElse(Set.of()).stream() + .map(OrganizationDomainRepresentation::getName) + .filter(StringUtil::isNotBlank) + .collect(Collectors.toSet()); OrganizationModel model = provider.create(organization.getName(), domains); Organizations.toModel(organization, model); 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 3c58201fc3..1c58c8c923 100644 --- a/services/src/main/java/org/keycloak/organization/utils/Organizations.java +++ b/services/src/main/java/org/keycloak/organization/utils/Organizations.java @@ -170,6 +170,7 @@ public class Organizations { model.setAttributes(rep.getAttributes()); model.setDomains(ofNullable(rep.getDomains()).orElse(Set.of()).stream() .filter(Objects::nonNull) + .filter(domain -> StringUtil.isNotBlank(domain.getName())) .map(Organizations::toModel) .collect(Collectors.toSet())); diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/organization/admin/OrganizationTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/organization/admin/OrganizationTest.java index cbf8b6e64e..2bef33356a 100755 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/organization/admin/OrganizationTest.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/organization/admin/OrganizationTest.java @@ -375,6 +375,12 @@ public class OrganizationTest extends AbstractOrganizationTest { assertNotNull(existing.getDomain("acme.com")); } + @Test + public void testFilterEmptyDomain() { + //org should be created with only one domain + assertThat(createOrganization("singleValidDomainOrg", "validDomain.com", "", null).getDomains(), hasSize(1)); + } + @Test public void testDisabledOrganizationProvider() throws IOException { OrganizationRepresentation existing = createOrganization("acme", "acme.org", "acme.net");