From 7af51b8665e0f83ddc030fa6165e9f86bf18401f Mon Sep 17 00:00:00 2001 From: Greg Messner Date: Sat, 10 Feb 2018 12:58:15 -0800 Subject: [PATCH] Mods to support using a proxy server (#141). --- README.md | 19 +++++++++++--- pom.xml | 5 ++++ .../org/gitlab4j/api/GitLabApiClient.java | 6 +++++ .../java/org/gitlab4j/api/TestGitLabApi.java | 26 +++++++++++++++++-- 4 files changed, 51 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 2e3c85c5..cf71ab81 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ To utilize the GitLab API for Java in your project, simply add the following dep ```java dependencies { ... - compile group: 'org.gitlab4j', name: 'gitlab4j-api', version: '4.8.1' + compile group: 'org.gitlab4j', name: 'gitlab4j-api', version: '4.8.2' } ``` @@ -20,7 +20,7 @@ dependencies { org.gitlab4j gitlab4j-api - 4.8.1 + 4.8.2 ``` @@ -68,7 +68,20 @@ gitLabApi.sudo("johndoe") // To turn off sudo mode gitLabApi.unsudo(); ``` - +--- +## Connecting Through a Proxy Server +As of GitLab4J-API 4.8.2 support has been added for connecting to the GitLab server using an HTTP proxy server: +```java +// Log in to the GitLab server using a proxy server (with basic auth on proxy) +Map proxyConfiguration = ProxyClientConfig.createProxyClientConfig("http://your-proxy-server", "proxy-username", "proxy-password"); +GitLabApi gitLabApi = new GitLabApi("http://your.gitlab.server.com", "YOUR_PRIVATE_TOKEN", null, proxyConfiguration); +``` +```java +// Log in to the GitLab server using a proxy server (no auth on proxy) +Map proxyConfiguration = ProxyClientConfig.createProxyClientConfig("http://your-proxy-server"); +GitLabApi gitLabApi = new GitLabApi("http://your.gitlab.server.com", "YOUR_PRIVATE_TOKEN", null, proxyConfiguration); +``` +*NOTE: See the Javadoc on the GitLabApi class for a complete list of methods accepting the proxy configuration (clientConfiguration parameter)* --- ## GitLab API V3 and V4 Support As of GitLab4J-API 4.2.0 support has been added for GitLab API V4. If your application requires GitLab API V3, diff --git a/pom.xml b/pom.xml index a8062bc2..a715c66b 100644 --- a/pom.xml +++ b/pom.xml @@ -222,6 +222,11 @@ jersey-client ${jersey.version} + + org.glassfish.jersey.connectors + jersey-apache-connector + ${jersey.version} + javax.servlet javax.servlet-api diff --git a/src/main/java/org/gitlab4j/api/GitLabApiClient.java b/src/main/java/org/gitlab4j/api/GitLabApiClient.java index fd82db1f..5e4a4935 100755 --- a/src/main/java/org/gitlab4j/api/GitLabApiClient.java +++ b/src/main/java/org/gitlab4j/api/GitLabApiClient.java @@ -29,6 +29,7 @@ import javax.ws.rs.core.Response; import org.gitlab4j.api.Constants.TokenType; import org.gitlab4j.api.GitLabApi.ApiVersion; import org.gitlab4j.api.utils.JacksonJson; +import org.glassfish.jersey.apache.connector.ApacheConnectorProvider; import org.glassfish.jersey.client.ClientConfig; import org.glassfish.jersey.client.ClientProperties; @@ -211,6 +212,11 @@ public class GitLabApiClient { clientConfig = new ClientConfig(); if (clientConfigProperties != null) { + + if (clientConfigProperties.containsKey(ClientProperties.PROXY_URI)) { + clientConfig.connectorProvider(new ApacheConnectorProvider()); + } + for (Map.Entry propertyEntry : clientConfigProperties.entrySet()) { clientConfig.property(propertyEntry.getKey(), propertyEntry.getValue()); } diff --git a/src/test/java/org/gitlab4j/api/TestGitLabApi.java b/src/test/java/org/gitlab4j/api/TestGitLabApi.java index 8a782e1e..382ba9fa 100644 --- a/src/test/java/org/gitlab4j/api/TestGitLabApi.java +++ b/src/test/java/org/gitlab4j/api/TestGitLabApi.java @@ -3,7 +3,8 @@ package org.gitlab4j.api; import static org.junit.Assert.assertNotNull; import static org.junit.Assume.assumeTrue; -import org.gitlab4j.api.GitLabApi.ApiVersion; +import java.util.Map; + import org.gitlab4j.api.models.Version; import org.junit.Before; import org.junit.BeforeClass; @@ -23,9 +24,15 @@ public class TestGitLabApi { // The following needs to be set to your test repository private static final String TEST_HOST_URL; private static final String TEST_PRIVATE_TOKEN; + private static final String TEST_PROXY_URI; + private static final String TEST_PROXY_USERNAME; + private static final String TEST_PROXY_PASSWORD; static { TEST_HOST_URL = TestUtils.getProperty("TEST_HOST_URL"); TEST_PRIVATE_TOKEN = TestUtils.getProperty("TEST_PRIVATE_TOKEN"); + TEST_PROXY_URI = TestUtils.getProperty("TEST_PROXY_URI"); + TEST_PROXY_USERNAME = TestUtils.getProperty("TEST_PROXY_USERNAME"); + TEST_PROXY_PASSWORD = TestUtils.getProperty("TEST_PROXY_PASSWORD"); } private static GitLabApi gitLabApi; @@ -47,7 +54,7 @@ public class TestGitLabApi { } if (problems.isEmpty()) { - gitLabApi = new GitLabApi(ApiVersion.V4, TEST_HOST_URL, TEST_PRIVATE_TOKEN); + gitLabApi = new GitLabApi(TEST_HOST_URL, TEST_PRIVATE_TOKEN); } else { System.err.print(problems); } @@ -66,4 +73,19 @@ public class TestGitLabApi { assertNotNull(version.getVersion()); assertNotNull(version.getRevision()); } + + @Test + public void testProxyConnection() throws GitLabApiException { + assumeTrue(TEST_PROXY_URI != null && TEST_PROXY_USERNAME != null && TEST_PROXY_PASSWORD != null); + + // Setup a GitLabApi instance to use a proxy + Map clientConfig = ProxyClientConfig.createProxyClientConfig(TEST_PROXY_URI, TEST_PROXY_USERNAME, TEST_PROXY_PASSWORD); + GitLabApi gitLabApi = new GitLabApi(TEST_HOST_URL, TEST_PRIVATE_TOKEN, null, clientConfig); + + Version version = gitLabApi.getVersion(); + assertNotNull(version); + System.out.format("version=%s, revision=%s%n", version.getVersion(), version.getRevision()); + assertNotNull(version.getVersion()); + assertNotNull(version.getRevision()); + } } -- GitLab