This is an automated email from the ASF dual-hosted git repository.
sijie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-pulsar.git
The following commit(s) were added to refs/heads/master by this push:
new c0a5072 add encoding for WebTargets parts (#2359)
c0a5072 is described below
commit c0a5072b80d8b63e447cee8a029d23e4e075d2d6
Author: Jia Zhai <[email protected]>
AuthorDate: Mon Aug 13 04:36:41 2018 +0800
add encoding for WebTargets parts (#2359)
### Motivation
Fixes #2304
Issue #2304 reported that Pulsar admin commands will fail with some url
style parts,
```
root@pulsar-admin:/pulsar# pulsar-admin namespaces grant-permission
--actions produce,consume --role 'spiffe://developer/passport'
core-platform/testing
HTTP 404 Not Found
Reason: HTTP 404 Not Found
```
This PR try to fix it.
### Modifications
- use URLEncoder to encode webTarget parts.
- add tests to verify
### Result
all UT passed
---
.../java/org/apache/pulsar/broker/admin/AdminApiTest.java | 6 ++++++
.../apache/pulsar/client/admin/internal/WebTargets.java | 14 +++++++++++++-
2 files changed, 19 insertions(+), 1 deletion(-)
diff --git
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiTest.java
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiTest.java
index c9d973d..ae72737 100644
---
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiTest.java
+++
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApiTest.java
@@ -620,11 +620,15 @@ public class AdminApiTest extends
MockedPulsarServiceBaseTest {
// Ok, got the non authorized exception since usc cluster is not
in the allowed clusters list.
}
+ // test with url style role.
+ admin.namespaces().grantPermissionOnNamespace("prop-xyz/ns1",
+ "spiffe://developer/passport-role",
EnumSet.allOf(AuthAction.class));
admin.namespaces().grantPermissionOnNamespace("prop-xyz/ns1",
"my-role", EnumSet.allOf(AuthAction.class));
Policies policies = new Policies();
policies.replication_clusters = Sets.newHashSet("test");
policies.bundles = Policies.defaultBundle();
+
policies.auth_policies.namespace_auth.put("spiffe://developer/passport-role",
EnumSet.allOf(AuthAction.class));
policies.auth_policies.namespace_auth.put("my-role",
EnumSet.allOf(AuthAction.class));
assertEquals(admin.namespaces().getPolicies("prop-xyz/ns1"), policies);
@@ -632,7 +636,9 @@ public class AdminApiTest extends
MockedPulsarServiceBaseTest {
assertEquals(admin.namespaces().getTopics("prop-xyz/ns1"),
Lists.newArrayList());
+ admin.namespaces().revokePermissionsOnNamespace("prop-xyz/ns1",
"spiffe://developer/passport-role");
admin.namespaces().revokePermissionsOnNamespace("prop-xyz/ns1",
"my-role");
+
policies.auth_policies.namespace_auth.remove("spiffe://developer/passport-role");
policies.auth_policies.namespace_auth.remove("my-role");
assertEquals(admin.namespaces().getPolicies("prop-xyz/ns1"), policies);
diff --git
a/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/WebTargets.java
b/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/WebTargets.java
index 35b04f1..3de248c 100644
---
a/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/WebTargets.java
+++
b/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/WebTargets.java
@@ -18,14 +18,26 @@
*/
package org.apache.pulsar.client.admin.internal;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
import javax.ws.rs.client.WebTarget;
+import lombok.extern.slf4j.Slf4j;
+@Slf4j
class WebTargets {
static WebTarget addParts(WebTarget target, String[] parts) {
if (parts != null && parts.length > 0) {
for (String part : parts) {
- target = target.path(part);
+ String encode;
+ try {
+ encode = URLEncoder.encode(part,
StandardCharsets.UTF_8.toString());
+ } catch (UnsupportedEncodingException e) {
+ log.error(String.format("%s is Unknown",
StandardCharsets.UTF_8.toString()) + "exception - [{}]", e);
+ encode = part;
+ }
+ target = target.path(encode);
}
}
return target;