Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Added SSL support
  • Loading branch information
sabre1041 committed Oct 19, 2014
commit 8a9b9e4107e69d818dd3544879db404245cc0867
48 changes: 44 additions & 4 deletions src/main/java/com/github/dockerjava/core/DockerClientConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

public class DockerClientConfig {
private final URI uri;
private final String version, username, password, email;
private final String version, username, password, email, keystore, keystorePassword, truststore, truststorePassword;
private final Integer readTimeout;
private final boolean loggingFilterEnabled;

Expand All @@ -22,6 +22,10 @@ private DockerClientConfig(DockerClientConfigBuilder builder) {
this.email = builder.email;
this.readTimeout = builder.readTimeout;
this.loggingFilterEnabled = builder.loggingFilterEnabled;
this.keystore = builder.keystore;
this.keystorePassword = builder.keystorePassword;
this.truststore = builder.truststore;
this.truststorePassword = builder.truststorePassword;
}

public URI getUri() {
Expand Down Expand Up @@ -51,6 +55,22 @@ public Integer getReadTimeout() {
public boolean isLoggingFilterEnabled() {
return loggingFilterEnabled;
}

public String getKeystore() {
return keystore;
}

public String getKeystorePassword() {
return keystorePassword;
}

public String getTruststore() {
return truststore;
}

public String getTruststorePassword() {
return truststorePassword;
}

public static Properties loadIncludedDockerProperties() {
try {
Expand Down Expand Up @@ -97,7 +117,7 @@ public static Properties overrideDockerPropertiesWithSystemProperties(Properties
overriddenProperties.putAll(p);

// TODO Add all values from system properties that begin with docker.io.*
for (String s : new String[]{ "url", "version", "username", "password", "email", "readTimeout", "enableLoggingFilter"}) {
for (String s : new String[]{ "url", "version", "username", "password", "email", "readTimeout", "enableLoggingFilter", "keystore", "keystorePassword", "truststore", "truststorePassword"}) {
final String key = "docker.io." + s;
if (System.getProperties().containsKey(key)) {
overriddenProperties.setProperty(key, System.getProperty(key));
Expand All @@ -115,7 +135,7 @@ public static DockerClientConfigBuilder createDefaultConfigBuilder() {

public static class DockerClientConfigBuilder {
private URI uri;
private String version, username, password, email;
private String version, username, password, email, keystore, keystorePassword, truststore, truststorePassword;
private Integer readTimeout;
private boolean loggingFilterEnabled;

Expand All @@ -138,7 +158,11 @@ public DockerClientConfigBuilder withProperties(Properties p) {
.withPassword(p.getProperty("docker.io.password"))
.withEmail(p.getProperty("docker.io.email"))
.withReadTimeout(Integer.valueOf(p.getProperty("docker.io.readTimeout", "0")))
.withLoggingFilter(Boolean.valueOf(p.getProperty("docker.io.enableLoggingFilter", "true")));
.withLoggingFilter(Boolean.valueOf(p.getProperty("docker.io.enableLoggingFilter", "true")))
.withKeystore(p.getProperty("docker.io.keystore"))
.withKeystorePassword(p.getProperty("docker.io.keystorePassword"))
.withTruststore(p.getProperty("docker.io.truststore"))
.withTruststorePassword(p.getProperty("docker.io.truststorePassword"));
}

public final DockerClientConfigBuilder withUri(String uri) {
Expand Down Expand Up @@ -170,6 +194,22 @@ public final DockerClientConfigBuilder withLoggingFilter(boolean loggingFilterEn
this.loggingFilterEnabled = loggingFilterEnabled;
return this;
}
public final DockerClientConfigBuilder withKeystore(String keystore) {
this.keystore = keystore;
return this;
}
public final DockerClientConfigBuilder withKeystorePassword(String keystorePassword) {
this.keystorePassword = keystorePassword;
return this;
}
public final DockerClientConfigBuilder withTruststore(String truststore) {
this.truststore = truststore;
return this;
}
public final DockerClientConfigBuilder withTruststorePassword(String truststorePassword) {
this.truststorePassword = truststorePassword;
return this;
}
public DockerClientConfig build() {
return new DockerClientConfig(this);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,5 @@
package com.github.dockerjava.jaxrs;

import java.io.IOException;
import java.util.logging.Logger;

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;

import com.github.dockerjava.api.command.EventsCmd;
import org.glassfish.jersey.client.ClientConfig;
import org.glassfish.jersey.client.ClientProperties;
import org.glassfish.jersey.CommonProperties;

import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
import com.github.dockerjava.api.command.AttachContainerCmd;
import com.github.dockerjava.api.command.AuthCmd;
Expand All @@ -22,6 +10,7 @@
import com.github.dockerjava.api.command.CreateContainerCmd;
import com.github.dockerjava.api.command.CreateImageCmd;
import com.github.dockerjava.api.command.DockerCmdExecFactory;
import com.github.dockerjava.api.command.EventsCmd;
import com.github.dockerjava.api.command.InfoCmd;
import com.github.dockerjava.api.command.InspectContainerCmd;
import com.github.dockerjava.api.command.InspectImageCmd;
Expand Down Expand Up @@ -50,6 +39,19 @@
import com.github.dockerjava.jaxrs.util.SelectiveLoggingFilter;
import com.google.common.base.Preconditions;

import java.io.IOException;
import java.util.logging.Logger;

import javax.net.ssl.SSLContext;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;

import org.glassfish.jersey.CommonProperties;
import org.glassfish.jersey.SslConfigurator;
import org.glassfish.jersey.client.ClientConfig;
import org.glassfish.jersey.client.ClientProperties;

public class DockerCmdExecFactoryImpl implements DockerCmdExecFactory {

private Client client;
Expand Down Expand Up @@ -78,7 +80,28 @@ public void init(DockerClientConfig dockerClientConfig) {
int readTimeout = dockerClientConfig.getReadTimeout();
clientConfig.property(ClientProperties.READ_TIMEOUT, readTimeout);
}
client = ClientBuilder.newClient(clientConfig);

ClientBuilder clientBuilder = ClientBuilder.newBuilder().withConfig(clientConfig);


if((dockerClientConfig.getKeystore() != null && dockerClientConfig.getKeystorePassword() != null) || (dockerClientConfig.getTruststore() != null && dockerClientConfig.getTruststorePassword() != null)) {
SslConfigurator sslConfig = SslConfigurator.newInstance();

if(dockerClientConfig.getKeystore() != null && dockerClientConfig.getKeystorePassword() != null) {
sslConfig.keyStoreFile(dockerClientConfig.getKeystore());
sslConfig.keyStorePassword(dockerClientConfig.getKeystorePassword());
}

if(dockerClientConfig.getTruststore() != null && dockerClientConfig.getTruststorePassword() != null) {
sslConfig.trustStoreFile(dockerClientConfig.getTruststore());
sslConfig.trustStorePassword(dockerClientConfig.getTruststorePassword());
}

SSLContext sslContext = sslConfig.createSSLContext();
clientBuilder.sslContext(sslContext);
}

client = clientBuilder.build();

WebTarget webResource = client.target(dockerClientConfig.getUri());

Expand Down