X Tutup
Skip to content

Commit 83c0407

Browse files
author
Marcus Linke
committed
Basic http proxy configuration support
1 parent fabfb01 commit 83c0407

File tree

1 file changed

+34
-1
lines changed

1 file changed

+34
-1
lines changed

src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import com.github.dockerjava.jaxrs.filter.JsonClientFilter;
4646
import com.github.dockerjava.jaxrs.filter.ResponseStatusExceptionFilter;
4747
import com.github.dockerjava.jaxrs.filter.SelectiveLoggingFilter;
48+
4849
import org.apache.http.config.RegistryBuilder;
4950
import org.apache.http.conn.socket.ConnectionSocketFactory;
5051
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
@@ -63,8 +64,13 @@
6364
import javax.ws.rs.client.ClientRequestFilter;
6465
import javax.ws.rs.client.ClientResponseFilter;
6566
import javax.ws.rs.client.WebTarget;
67+
6668
import java.io.IOException;
69+
import java.net.InetSocketAddress;
70+
import java.net.Proxy;
71+
import java.net.ProxySelector;
6772
import java.net.URI;
73+
import java.util.List;
6874

6975
import static com.google.common.base.Preconditions.checkNotNull;
7076

@@ -96,6 +102,7 @@ public class DockerCmdExecFactoryImpl implements DockerCmdExecFactory {
96102
@Override
97103
public void init(DockerClientConfig dockerClientConfig) {
98104
checkNotNull(dockerClientConfig, "config was not specified");
105+
this.dockerClientConfig = dockerClientConfig;
99106

100107
ClientConfig clientConfig = new ClientConfig();
101108
clientConfig.connectorProvider(new ApacheConnectorProvider());
@@ -135,11 +142,14 @@ public void init(DockerClientConfig dockerClientConfig) {
135142
SSLContext sslContext = null;
136143

137144
if (dockerClientConfig.getSslConfig() != null) {
145+
configureProxy(clientConfig, "https");
138146
try {
139147
sslContext = dockerClientConfig.getSslConfig().getSSLContext();
140148
} catch (Exception ex) {
141149
throw new DockerClientException("Error in SSL Configuration", ex);
142150
}
151+
} else {
152+
configureProxy(clientConfig, "http");
143153
}
144154

145155
PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(getSchemeRegistry(
@@ -170,7 +180,30 @@ public void init(DockerClientConfig dockerClientConfig) {
170180

171181
baseResource = client.target(dockerClientConfig.getUri()).path(dockerClientConfig.getVersion().asWebPathPart());
172182

173-
this.dockerClientConfig = dockerClientConfig;
183+
}
184+
185+
private void configureProxy(ClientConfig clientConfig, String protocol) {
186+
187+
List<Proxy> proxies = ProxySelector.getDefault().select(dockerClientConfig.getUri());
188+
189+
for (Proxy proxy : proxies) {
190+
InetSocketAddress address = (InetSocketAddress) proxy.address();
191+
if (address != null) {
192+
String hostname = address.getHostName();
193+
int port = address.getPort();
194+
195+
clientConfig.property(ClientProperties.PROXY_URI, protocol + "://" + hostname + ":" + port);
196+
197+
String httpProxyUser = System.getProperty(protocol + ".proxyUser");
198+
if (httpProxyUser != null) {
199+
clientConfig.property(ClientProperties.PROXY_USERNAME, httpProxyUser);
200+
String httpProxyPassword = System.getProperty(protocol + ".proxyPassword");
201+
if (httpProxyPassword != null) {
202+
clientConfig.property(ClientProperties.PROXY_PASSWORD, httpProxyPassword);
203+
}
204+
}
205+
}
206+
}
174207
}
175208

176209
private org.apache.http.config.Registry<ConnectionSocketFactory> getSchemeRegistry(final URI originalUri,

0 commit comments

Comments
 (0)
X Tutup