Repository: incubator-brooklyn
Updated Branches:
  refs/heads/master fe425079f -> 09377df27


Rest client authenticates


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/317b69e1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/317b69e1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/317b69e1

Branch: refs/heads/master
Commit: 317b69e17338bb541bc903b5ed97e30e58a929a6
Parents: fe42507
Author: Sam Corbett <[email protected]>
Authored: Mon Jan 19 16:15:55 2015 +0000
Committer: Sam Corbett <[email protected]>
Committed: Mon Jan 19 16:15:55 2015 +0000

----------------------------------------------------------------------
 .../java/brooklyn/rest/client/BrooklynApi.java  | 86 ++++++++++++++++----
 .../rest/client/BrooklynApiRestClientTest.java  |  7 +-
 2 files changed, 74 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/317b69e1/usage/rest-client/src/main/java/brooklyn/rest/client/BrooklynApi.java
----------------------------------------------------------------------
diff --git 
a/usage/rest-client/src/main/java/brooklyn/rest/client/BrooklynApi.java 
b/usage/rest-client/src/main/java/brooklyn/rest/client/BrooklynApi.java
index 1bdd92f..1dbdf6c 100644
--- a/usage/rest-client/src/main/java/brooklyn/rest/client/BrooklynApi.java
+++ b/usage/rest-client/src/main/java/brooklyn/rest/client/BrooklynApi.java
@@ -18,13 +18,23 @@
  */
 package brooklyn.rest.client;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.net.MalformedURLException;
 import java.net.URL;
 import javax.ws.rs.core.Response;
 
+import org.apache.commons.codec.binary.Base64;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.jboss.resteasy.client.ClientExecutor;
+import org.jboss.resteasy.client.ClientRequest;
 import org.jboss.resteasy.client.ClientResponse;
 import org.jboss.resteasy.client.ProxyFactory;
+import org.jboss.resteasy.client.core.executors.ApacheHttpClient4Executor;
 import org.jboss.resteasy.util.GenericType;
 
+import com.google.common.base.Charsets;
+
 import brooklyn.rest.api.AccessApi;
 import brooklyn.rest.api.ActivityApi;
 import brooklyn.rest.api.ApplicationApi;
@@ -48,73 +58,113 @@ import brooklyn.rest.api.VersionApi;
 public class BrooklynApi {
 
     private final String target;
+    private final ClientExecutor clientExecutor;
+
+    public BrooklynApi(URL endpoint) {
+        this(checkNotNull(endpoint, "endpoint").toString());
+    }
 
     public BrooklynApi(String endpoint) {
-        target = endpoint;
+        this(endpoint, null, null);
     }
 
-    public BrooklynApi(URL endpoint) {
-        this(endpoint.toString());
+    public BrooklynApi(URL endpoint, String username, String password) {
+        this(endpoint.toString(), username, password);
+    }
+
+    public BrooklynApi(final String endpoint, final String username, final 
String password) {
+        URL target = null;
+        try {
+            target = new URL(checkNotNull(endpoint, "endpoint"));
+        } catch (MalformedURLException e) {
+            throw new IllegalArgumentException(e);
+        }
+        this.target = endpoint;
+
+        // Resteasy is a big pain.
+        DefaultHttpClient client = new DefaultHttpClient();
+        if (username != null && password != null) {
+            clientExecutor = new ApacheHttpClient4Executor(client) {
+                @Override
+                public ClientResponse execute(ClientRequest request) throws 
Exception {
+                    String token = username + ":" + password;
+                    String base64Token = 
Base64.encodeBase64String(token.getBytes(Charsets.UTF_8));
+                    request.header("Authorization", "Basic " + base64Token);
+                    return super.execute(request);
+                }
+            };
+        } else {
+            clientExecutor = new ApacheHttpClient4Executor(client);
+        }
+    }
+
+    public BrooklynApi(URL endpoint, ClientExecutor clientExecutor) {
+        this.target = checkNotNull(endpoint, "endpoint").toString();
+        this.clientExecutor = checkNotNull(clientExecutor, "clientExecutor");
+    }
+
+    private <T> T proxy(Class<T> clazz) {
+        return ProxyFactory.create(clazz, target, clientExecutor);
     }
 
     public ActivityApi getActivityApi() {
-        return ProxyFactory.create(ActivityApi.class, target);
+        return proxy(ActivityApi.class);
     }
 
     public ApplicationApi getApplicationApi() {
-        return ProxyFactory.create(ApplicationApi.class, target);
+        return proxy(ApplicationApi.class);
     }
 
     public CatalogApi getCatalogApi() {
-        return ProxyFactory.create(CatalogApi.class, target);
+        return proxy(CatalogApi.class);
     }
 
     public EffectorApi getEffectorApi() {
-        return ProxyFactory.create(EffectorApi.class, target);
+        return proxy(EffectorApi.class);
     }
 
     public EntityConfigApi getEntityConfigApi() {
-        return ProxyFactory.create(EntityConfigApi.class, target);
+        return proxy(EntityConfigApi.class);
     }
 
     public EntityApi getEntityApi() {
-        return ProxyFactory.create(EntityApi.class, target);
+        return proxy(EntityApi.class);
     }
 
     public LocationApi getLocationApi() {
-        return ProxyFactory.create(LocationApi.class, target);
+        return proxy(LocationApi.class);
     }
 
     public PolicyConfigApi getPolicyConfigApi() {
-        return ProxyFactory.create(PolicyConfigApi.class, target);
+        return proxy(PolicyConfigApi.class);
     }
 
     public PolicyApi getPolicyApi() {
-        return ProxyFactory.create(PolicyApi.class, target);
+        return proxy(PolicyApi.class);
     }
 
     public ScriptApi getScriptApi() {
-        return ProxyFactory.create(ScriptApi.class, target);
+        return proxy(ScriptApi.class);
     }
 
     public SensorApi getSensorApi() {
-        return ProxyFactory.create(SensorApi.class, target);
+        return proxy(SensorApi.class);
     }
 
     public ServerApi getServerApi() {
-        return ProxyFactory.create(ServerApi.class, target);
+        return proxy(ServerApi.class);
     }
 
     public UsageApi getUsageApi() {
-        return ProxyFactory.create(UsageApi.class, target);
+        return proxy(UsageApi.class);
     }
 
     public VersionApi getVersionApi() {
-        return ProxyFactory.create(VersionApi.class, target);
+        return proxy(VersionApi.class);
     }
 
     public AccessApi getAccessApi() {
-        return ProxyFactory.create(AccessApi.class, target);
+        return proxy(AccessApi.class);
     }
 
     @SuppressWarnings("unchecked")

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/317b69e1/usage/rest-client/src/test/java/brooklyn/rest/client/BrooklynApiRestClientTest.java
----------------------------------------------------------------------
diff --git 
a/usage/rest-client/src/test/java/brooklyn/rest/client/BrooklynApiRestClientTest.java
 
b/usage/rest-client/src/test/java/brooklyn/rest/client/BrooklynApiRestClientTest.java
index b7e35a3..b67b972 100644
--- 
a/usage/rest-client/src/test/java/brooklyn/rest/client/BrooklynApiRestClientTest.java
+++ 
b/usage/rest-client/src/test/java/brooklyn/rest/client/BrooklynApiRestClientTest.java
@@ -38,6 +38,9 @@ import brooklyn.management.internal.LocalManagementContext;
 import brooklyn.rest.BrooklynRestApiLauncher;
 import brooklyn.rest.BrooklynRestApiLauncherTest;
 import brooklyn.rest.domain.LocationSummary;
+import brooklyn.rest.security.provider.ExplicitUsersSecurityProvider;
+import brooklyn.rest.security.provider.SecurityProvider;
+import brooklyn.rest.security.provider.TestSecurityProvider;
 
 @Test
 public class BrooklynApiRestClientTest {
@@ -69,10 +72,12 @@ public class BrooklynApiRestClientTest {
 
         Server server = BrooklynRestApiLauncher.launcher()
                 .managementContext(manager)
+                .securityProvider(TestSecurityProvider.class)
                 .customContext(context)
                 .start();
 
-        api = new BrooklynApi("http://localhost:"; + 
server.getConnectors()[0].getPort() + "/");
+        api = new BrooklynApi("http://localhost:"; + 
server.getConnectors()[0].getPort() + "/",
+                TestSecurityProvider.USER, TestSecurityProvider.PASSWORD);
     }
 
     @AfterClass(alwaysRun = true)

Reply via email to