This is an automated email from the ASF dual-hosted git repository.
xyz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git
The following commit(s) were added to refs/heads/master by this push:
new aa230bc41ac [fix][admin] Tenant AdminRoles can not contains whitespace
in the beginning or end. (#22450)
aa230bc41ac is described below
commit aa230bc41ac11685f1656137f5d497bbd1bd657c
Author: Phineas <[email protected]>
AuthorDate: Mon May 27 16:11:46 2024 +0800
[fix][admin] Tenant AdminRoles can not contains whitespace in the beginning
or end. (#22450)
---
.../pulsar/broker/admin/impl/TenantsBase.java | 16 ++++++++++++
.../org/apache/pulsar/client/api/TenantTest.java | 29 ++++++++++++++++++++--
2 files changed, 43 insertions(+), 2 deletions(-)
diff --git
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/TenantsBase.java
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/TenantsBase.java
index 74c0367e0b9..93eb7f33faf 100644
---
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/TenantsBase.java
+++
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/admin/impl/TenantsBase.java
@@ -122,6 +122,7 @@ public class TenantsBase extends PulsarWebResource {
validateSuperUserAccessAsync()
.thenCompose(__ -> validatePoliciesReadOnlyAccessAsync())
.thenCompose(__ -> validateClustersAsync(tenantInfo))
+ .thenCompose(__ -> validateAdminRoleAsync(tenantInfo))
.thenCompose(__ -> tenantResources().tenantExistsAsync(tenant))
.thenAccept(exist -> {
if (exist) {
@@ -167,6 +168,7 @@ public class TenantsBase extends PulsarWebResource {
validateSuperUserAccessAsync()
.thenCompose(__ -> validatePoliciesReadOnlyAccessAsync())
.thenCompose(__ -> validateClustersAsync(newTenantAdmin))
+ .thenCompose(__ -> validateAdminRoleAsync(newTenantAdmin))
.thenCompose(__ -> tenantResources().getTenantAsync(tenant))
.thenCompose(tenantAdmin -> {
if (!tenantAdmin.isPresent()) {
@@ -282,4 +284,18 @@ public class TenantsBase extends PulsarWebResource {
}
});
}
+
+ private CompletableFuture<Void> validateAdminRoleAsync(TenantInfoImpl
info) {
+ if (info.getAdminRoles() != null && !info.getAdminRoles().isEmpty()) {
+ for (String adminRole : info.getAdminRoles()) {
+ if (!StringUtils.trim(adminRole).equals(adminRole)) {
+ log.warn("[{}] Failed to validate due to adminRole {}
contains whitespace in the beginning or end.",
+ clientAppId(), adminRole);
+ return FutureUtil.failedFuture(new
RestException(Status.PRECONDITION_FAILED,
+ "AdminRoles contains whitespace in the beginning
or end."));
+ }
+ }
+ }
+ return CompletableFuture.completedFuture(null);
+ }
}
diff --git
a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/TenantTest.java
b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/TenantTest.java
index 15c5d55cbea..e5b5e211582 100644
--- a/pulsar-broker/src/test/java/org/apache/pulsar/client/api/TenantTest.java
+++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/api/TenantTest.java
@@ -34,7 +34,7 @@ public class TenantTest extends MockedPulsarServiceBaseTest {
@BeforeMethod
@Override
protected void setup() throws Exception {
-
+
}
@AfterMethod(alwaysRun = true)
@@ -66,5 +66,30 @@ public class TenantTest extends MockedPulsarServiceBaseTest {
admin.tenants().createTenant("testTenant-unlimited" + i,
tenantInfo);
}
}
-
+
+ @Test
+ public void testBlankAdminRoleTenant() throws Exception {
+ super.internalSetup();
+ admin.clusters().createCluster("test",
ClusterData.builder().serviceUrl(brokerUrl.toString()).build());
+ TenantInfoImpl blankAdminRoleTenantInfo =
+ new TenantInfoImpl(Sets.newHashSet(""),
Sets.newHashSet("test"));
+ TenantInfoImpl containsWhitespaceAdminRoleTenantInfo =
+ new TenantInfoImpl(Sets.newHashSet(" role1 "),
Sets.newHashSet("test"));
+ TenantInfoImpl noneBlankAdminRoleTenantInfo =
+ new TenantInfoImpl(Sets.newHashSet("role1"),
Sets.newHashSet("test"));
+ admin.tenants().createTenant("testTenant1",
noneBlankAdminRoleTenantInfo);
+ try {
+ admin.tenants().createTenant("testTenant2",
blankAdminRoleTenantInfo);
+ } catch (PulsarAdminException e) {
+ Assert.assertEquals(e.getStatusCode(), 412);
+ Assert.assertEquals(e.getHttpError(), "AdminRoles contains
whitespace in the beginning or end.");
+ }
+
+ try {
+ admin.tenants().createTenant("testTenant3",
containsWhitespaceAdminRoleTenantInfo);
+ } catch (PulsarAdminException e) {
+ Assert.assertEquals(e.getStatusCode(), 412);
+ Assert.assertEquals(e.getHttpError(), "AdminRoles contains
whitespace in the beginning or end.");
+ }
+ }
}