You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by sk...@apache.org on 2014/04/04 07:26:49 UTC

[45/51] [abbrv] git commit: [OLINGO-233] HTTP proxy enabled HttpClientFactory provided

[OLINGO-233] HTTP proxy enabled HttpClientFactory provided


Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/1e8eaecf
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/1e8eaecf
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/1e8eaecf

Branch: refs/heads/olingo-206-validator
Commit: 1e8eaecf066817802945595a5410a104132f1283
Parents: 16d3b02
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Wed Apr 2 16:44:39 2014 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Wed Apr 2 16:44:39 2014 +0200

----------------------------------------------------------------------
 .../AbstractBasicAuthHttpClientFactory.java     | 51 ------------
 .../http/AbstractNTLMAuthHttpClientFactory.java | 63 --------------
 .../core/http/BasicAuthHttpClientFactory.java   | 55 +++++++++++++
 .../core/http/NTLMAuthHttpClientFactory.java    | 73 +++++++++++++++++
 .../http/ProxyWrapperHttpClientFactory.java     | 86 ++++++++++++++++++++
 .../it/v3/AuthEntityRetrieveTestITCase.java     | 16 +---
 6 files changed, 216 insertions(+), 128 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/1e8eaecf/lib/client-core/src/main/java/org/apache/olingo/client/core/http/AbstractBasicAuthHttpClientFactory.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/http/AbstractBasicAuthHttpClientFactory.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/http/AbstractBasicAuthHttpClientFactory.java
deleted file mode 100644
index 806bfb5..0000000
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/http/AbstractBasicAuthHttpClientFactory.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.olingo.client.core.http;
-
-import java.net.URI;
-
-import org.apache.http.auth.AuthScope;
-import org.apache.http.auth.UsernamePasswordCredentials;
-import org.apache.http.client.HttpClient;
-import org.apache.http.impl.client.DefaultHttpClient;
-import org.apache.olingo.client.api.http.HttpMethod;
-
-/**
- * Base implementation for working with Basic Authentication: needs to be subclassed in order to provide actual username
- * and password.
- */
-public abstract class AbstractBasicAuthHttpClientFactory extends DefaultHttpClientFactory {
-
-  private static final long serialVersionUID = 7985626503125490244L;
-
-  protected abstract String getUsername();
-
-  protected abstract String getPassword();
-
-  @Override
-  public HttpClient createHttpClient(final HttpMethod method, final URI uri) {
-    final DefaultHttpClient httpclient = (DefaultHttpClient) super.createHttpClient(method, uri);
-
-    httpclient.getCredentialsProvider().setCredentials(
-            new AuthScope(uri.getHost(), uri.getPort()),
-            new UsernamePasswordCredentials(getUsername(), getPassword()));
-
-    return httpclient;
-  }
-}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/1e8eaecf/lib/client-core/src/main/java/org/apache/olingo/client/core/http/AbstractNTLMAuthHttpClientFactory.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/http/AbstractNTLMAuthHttpClientFactory.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/http/AbstractNTLMAuthHttpClientFactory.java
deleted file mode 100644
index e7c0ca0..0000000
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/http/AbstractNTLMAuthHttpClientFactory.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.olingo.client.core.http;
-
-import java.net.URI;
-
-import org.apache.http.auth.AuthScope;
-import org.apache.http.auth.NTCredentials;
-import org.apache.http.client.CredentialsProvider;
-import org.apache.http.client.HttpClient;
-import org.apache.http.impl.client.BasicCredentialsProvider;
-import org.apache.http.impl.client.DefaultHttpClient;
-import org.apache.olingo.client.api.http.HttpMethod;
-
-/**
- * Base implementation for working with NTLM Authentication via embedded HttpClient features: needs to be subclassed in
- * order to provide all needed login information.
- * <br/>
- * External NTLM engine such as <a href="http://jcifs.samba.org/">JCIFS</a> library developed by the
- * <a href="http://www.samba.org/">Samba</a> project as a part of their Windows interoperability suite of programs.
- *
- * @see NTCredentials
- * @see http://hc.apache.org/httpcomponents-client-ga/ntlm.html#Using_Samba_JCIFS_as_an_alternative_NTLM_engine
- */
-public abstract class AbstractNTLMAuthHttpClientFactory extends DefaultHttpClientFactory {
-
-  protected abstract String getUsername();
-
-  protected abstract String getPassword();
-
-  protected abstract String getWorkstation();
-
-  protected abstract String getDomain();
-
-  @Override
-  public HttpClient createHttpClient(final HttpMethod method, final URI uri) {
-    final DefaultHttpClient httpclient = (DefaultHttpClient) super.createHttpClient(method, uri);
-
-    final CredentialsProvider credsProvider = new BasicCredentialsProvider();
-    credsProvider.setCredentials(AuthScope.ANY,
-            new NTCredentials(getUsername(), getPassword(), getWorkstation(), getDomain()));
-
-    httpclient.setCredentialsProvider(credsProvider);
-
-    return httpclient;
-  }
-}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/1e8eaecf/lib/client-core/src/main/java/org/apache/olingo/client/core/http/BasicAuthHttpClientFactory.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/http/BasicAuthHttpClientFactory.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/http/BasicAuthHttpClientFactory.java
new file mode 100644
index 0000000..b978621
--- /dev/null
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/http/BasicAuthHttpClientFactory.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.olingo.client.core.http;
+
+import java.net.URI;
+
+import org.apache.http.auth.AuthScope;
+import org.apache.http.auth.UsernamePasswordCredentials;
+import org.apache.http.client.HttpClient;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.olingo.client.api.http.HttpMethod;
+
+/**
+ * Implementation for working with Basic Authentication.
+ */
+public class BasicAuthHttpClientFactory extends DefaultHttpClientFactory {
+
+  private static final long serialVersionUID = 7985626503125490244L;
+
+  private final String username;
+
+  private final String password;
+
+  public BasicAuthHttpClientFactory(final String username, final String password) {
+    this.username = username;
+    this.password = password;
+  }
+
+  @Override
+  public HttpClient createHttpClient(final HttpMethod method, final URI uri) {
+    final DefaultHttpClient httpclient = (DefaultHttpClient) super.createHttpClient(method, uri);
+
+    httpclient.getCredentialsProvider().setCredentials(
+            new AuthScope(uri.getHost(), uri.getPort()),
+            new UsernamePasswordCredentials(username, password));
+
+    return httpclient;
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/1e8eaecf/lib/client-core/src/main/java/org/apache/olingo/client/core/http/NTLMAuthHttpClientFactory.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/http/NTLMAuthHttpClientFactory.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/http/NTLMAuthHttpClientFactory.java
new file mode 100644
index 0000000..202fc9a
--- /dev/null
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/http/NTLMAuthHttpClientFactory.java
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.olingo.client.core.http;
+
+import java.net.URI;
+
+import org.apache.http.auth.AuthScope;
+import org.apache.http.auth.NTCredentials;
+import org.apache.http.client.CredentialsProvider;
+import org.apache.http.client.HttpClient;
+import org.apache.http.impl.client.BasicCredentialsProvider;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.olingo.client.api.http.HttpMethod;
+
+/**
+ * Implementation for working with NTLM Authentication via embedded HttpClient features.
+ * <br/>
+ * External NTLM engine such as <a href="http://jcifs.samba.org/">JCIFS</a> library developed by the
+ * <a href="http://www.samba.org/">Samba</a> project as a part of their Windows interoperability suite of programs.
+ *
+ * @see NTCredentials
+ * @see http://hc.apache.org/httpcomponents-client-ga/ntlm.html#Using_Samba_JCIFS_as_an_alternative_NTLM_engine
+ */
+public class NTLMAuthHttpClientFactory extends DefaultHttpClientFactory {
+
+  private static final long serialVersionUID = 9060120943020134668L;
+
+  private final String username;
+
+  private final String password;
+
+  private final String workstation;
+
+  private final String domain;
+
+  public NTLMAuthHttpClientFactory(final String username, final String password,
+          final String workstation, final String domain) {
+
+    this.username = username;
+    this.password = password;
+    this.workstation = workstation;
+    this.domain = domain;
+  }
+
+  @Override
+  public HttpClient createHttpClient(final HttpMethod method, final URI uri) {
+    final DefaultHttpClient httpclient = (DefaultHttpClient) super.createHttpClient(method, uri);
+
+    final CredentialsProvider credsProvider = new BasicCredentialsProvider();
+    credsProvider.setCredentials(AuthScope.ANY,
+            new NTCredentials(username, password, workstation, domain));
+
+    httpclient.setCredentialsProvider(credsProvider);
+
+    return httpclient;
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/1e8eaecf/lib/client-core/src/main/java/org/apache/olingo/client/core/http/ProxyWrapperHttpClientFactory.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/http/ProxyWrapperHttpClientFactory.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/http/ProxyWrapperHttpClientFactory.java
new file mode 100644
index 0000000..ab57901
--- /dev/null
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/http/ProxyWrapperHttpClientFactory.java
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.olingo.client.core.http;
+
+import java.net.URI;
+import org.apache.http.HttpHost;
+import org.apache.http.auth.AuthScope;
+import org.apache.http.auth.UsernamePasswordCredentials;
+import org.apache.http.client.HttpClient;
+import org.apache.http.conn.params.ConnRoutePNames;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.olingo.client.api.http.HttpClientFactory;
+import org.apache.olingo.client.api.http.HttpMethod;
+
+/**
+ * Implementation for working behind an HTTP proxy (possibly requiring authentication); requires another concrete
+ * {@link HttpClientFactory} implementation acting as real HTTP client factory.
+ */
+public class ProxyWrapperHttpClientFactory implements HttpClientFactory {
+
+  private final URI proxy;
+
+  private String proxyUsername;
+
+  private String proxyPassword;
+
+  private final DefaultHttpClientFactory wrapped;
+
+  public ProxyWrapperHttpClientFactory(final URI proxy) {
+    this(proxy, null, null, new DefaultHttpClientFactory());
+  }
+
+  public ProxyWrapperHttpClientFactory(final URI proxy, final String proxyUsername, final String proxyPassword) {
+    this(proxy, proxyUsername, proxyPassword, new DefaultHttpClientFactory());
+  }
+
+  public ProxyWrapperHttpClientFactory(final URI proxy, final DefaultHttpClientFactory wrapped) {
+    this(proxy, null, null, wrapped);
+  }
+
+  public ProxyWrapperHttpClientFactory(final URI proxy,
+          final String proxyUsername, final String proxyPassword, final DefaultHttpClientFactory wrapped) {
+
+    this.proxy = proxy;
+    this.proxyUsername = proxyUsername;
+    this.proxyPassword = proxyPassword;
+    this.wrapped = wrapped;
+  }
+
+  @Override
+  public HttpClient createHttpClient(final HttpMethod method, final URI uri) {
+    // Use wrapped factory to obtain an httpclient instance for given method and uri
+    final DefaultHttpClient httpclient = (DefaultHttpClient) wrapped.createHttpClient(method, uri);
+
+    final HttpHost proxyHost = new HttpHost(proxy.getHost(), proxy.getPort());
+
+    // Sets usage of HTTP proxy
+    httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxyHost);
+
+    // Sets proxy authentication, if credentials were provided
+    if (proxyUsername != null && proxyPassword != null) {
+      httpclient.getCredentialsProvider().setCredentials(
+              new AuthScope(proxyHost),
+              new UsernamePasswordCredentials(proxyUsername, proxyPassword));
+    }
+
+    return httpclient;
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/1e8eaecf/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AuthEntityRetrieveTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AuthEntityRetrieveTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AuthEntityRetrieveTestITCase.java
index 9d98270..686e5ca 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AuthEntityRetrieveTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AuthEntityRetrieveTestITCase.java
@@ -18,7 +18,7 @@
  */
 package org.apache.olingo.client.core.it.v3;
 
-import org.apache.olingo.client.core.http.AbstractBasicAuthHttpClientFactory;
+import org.apache.olingo.client.core.http.BasicAuthHttpClientFactory;
 import org.apache.olingo.client.core.http.DefaultHttpClientFactory;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
@@ -27,19 +27,7 @@ public class AuthEntityRetrieveTestITCase extends EntityRetrieveTestITCase {
 
   @BeforeClass
   public static void enableBasicAuth() {
-    client.getConfiguration().setHttpClientFactory(new AbstractBasicAuthHttpClientFactory() {
-      private static final long serialVersionUID = 1L;
-
-      @Override
-      protected String getUsername() {
-        return "odatajclient";
-      }
-
-      @Override
-      protected String getPassword() {
-        return "odatajclient";
-      }
-    });
+    client.getConfiguration().setHttpClientFactory(new BasicAuthHttpClientFactory("odatajclient", "odatajclient"));
   }
 
   @AfterClass