Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
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
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,14 @@

import java.io.Closeable;
import java.io.IOException;
import java.util.List;

import com.github.dockerjava.core.DockerClientConfig;
import com.github.dockerjava.core.http.AbstractHttpFeature;

public interface DockerCmdExecFactory extends Closeable {

public void init(DockerClientConfig dockerClientConfig);
public void init(DockerClientConfig dockerClientConfig, List<AbstractHttpFeature> httpFeatures);

public AuthCmd.Exec createAuthCmdExec();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package com.github.dockerjava.core;

import java.util.List;
import java.util.ServiceLoader;

import com.github.dockerjava.api.DockerClient;
import com.github.dockerjava.api.command.DockerCmdExecFactory;
import com.github.dockerjava.core.DockerClientConfig.DockerClientConfigBuilder;
import com.github.dockerjava.core.http.AbstractHttpFeature;

public class DockerClientBuilder {

Expand All @@ -30,6 +32,11 @@ public static DockerClientBuilder getInstance(DockerClientConfig dockerClientCon
.getInstance(dockerClientConfig));
}

public static DockerClientBuilder getInstance(DockerClientConfig dockerClientConfig, List<AbstractHttpFeature> httpFeatures) {
return new DockerClientBuilder(DockerClientImpl
.getInstance(dockerClientConfig, httpFeatures));
}

public static DockerClientBuilder getInstance(String serverUrl) {
return new DockerClientBuilder(DockerClientImpl
.getInstance(serverUrl));
Expand Down
20 changes: 19 additions & 1 deletion src/main/java/com/github/dockerjava/core/DockerClientImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,16 @@
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import com.github.dockerjava.api.DockerClient;
import com.github.dockerjava.api.command.*;
import com.github.dockerjava.api.model.AuthConfig;
import com.github.dockerjava.api.model.AuthConfigurations;
import com.github.dockerjava.api.model.Identifier;
import com.github.dockerjava.core.command.*;
import com.github.dockerjava.core.http.AbstractHttpFeature;

/**
* @author Konstantin Pelykh ([email protected])
Expand All @@ -22,6 +25,7 @@
public class DockerClientImpl implements Closeable, DockerClient {

private final DockerClientConfig dockerClientConfig;
private List<AbstractHttpFeature> httpFeatures = new ArrayList<>();

private DockerCmdExecFactory dockerCmdExecFactory;

Expand All @@ -39,6 +43,15 @@ private DockerClientImpl(DockerClientConfig dockerClientConfig) {
this.dockerClientConfig = dockerClientConfig;
}

private DockerClientImpl(DockerClientConfig dockerClientConfig, List<AbstractHttpFeature> httpFeatures) {
checkNotNull(dockerClientConfig,
"config was not specified");
checkNotNull(httpFeatures,
"http features were not specified");
this.dockerClientConfig = dockerClientConfig;
this.httpFeatures = httpFeatures;
}

private static DockerClientConfig configWithServerUrl(String serverUrl) {
return DockerClientConfig.createDefaultConfigBuilder()
.withUri(serverUrl).build();
Expand All @@ -53,6 +66,11 @@ public static DockerClientImpl getInstance(
return new DockerClientImpl(dockerClientConfig);
}

public static DockerClientImpl getInstance(
DockerClientConfig dockerClientConfig, List<AbstractHttpFeature> httpFeatures) {
return new DockerClientImpl(dockerClientConfig, httpFeatures);
}

public static DockerClientImpl getInstance(String serverUrl) {
return new DockerClientImpl(serverUrl);
}
Expand All @@ -62,7 +80,7 @@ public DockerClientImpl withDockerCmdExecFactory(
checkNotNull(dockerCmdExecFactory,
"dockerCmdExecFactory was not specified");
this.dockerCmdExecFactory = dockerCmdExecFactory;
this.dockerCmdExecFactory.init(dockerClientConfig);
this.dockerCmdExecFactory.init(dockerClientConfig, httpFeatures);
return this;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.github.dockerjava.core.http;

import java.io.IOException;
import java.util.Map;

import javax.ws.rs.client.ClientRequestContext;
import javax.ws.rs.client.ClientRequestFilter;

public abstract class AbstractHttpFeature implements ClientRequestFilter {

@Override
public abstract void filter(ClientRequestContext requestContext) throws IOException;
public abstract Map<String, Object> getClientConfigurationProperties();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package com.github.dockerjava.core.http;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Map;
import java.util.TreeMap;

import javax.ws.rs.client.ClientRequestContext;
import javax.ws.rs.core.MultivaluedMap;
import javax.xml.bind.DatatypeConverter;

import org.glassfish.jersey.client.ClientProperties;
import org.glassfish.jersey.client.RequestEntityProcessing;

public class HttpBasicAuthenticationFeature extends AbstractHttpFeature {

private final String user;
private final String password;

public HttpBasicAuthenticationFeature(String user, String password) {
this.user = user;
this.password = password;
}

@Override
public void filter(ClientRequestContext requestContext) throws IOException {
MultivaluedMap<String, Object> headers = requestContext.getHeaders();
final String basicAuthentication = getBasicAuthentication();
headers.add("Authorization", basicAuthentication);

}

private String getBasicAuthentication() {
String token = this.user + ":" + this.password;
try {
return "BASIC " + DatatypeConverter.printBase64Binary(token.getBytes("UTF-8"));
} catch (UnsupportedEncodingException ex) {
throw new IllegalStateException("Cannot encode with UTF-8", ex);
}
}

@Override
public Map<String, Object> getClientConfigurationProperties() {
Map<String, Object> map = new TreeMap<String, Object>();
map.put(ClientProperties.REQUEST_ENTITY_PROCESSING, RequestEntityProcessing.BUFFERED);
return map;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

import java.io.IOException;
import java.net.URI;
import java.util.List;
import java.util.Map;

import com.github.dockerjava.api.command.*;

Expand All @@ -29,6 +31,7 @@
import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
import com.github.dockerjava.api.DockerClientException;
import com.github.dockerjava.core.DockerClientConfig;
import com.github.dockerjava.core.http.AbstractHttpFeature;
import com.github.dockerjava.core.util.FollowRedirectsFilter;
import com.github.dockerjava.core.util.JsonClientFilter;
import com.github.dockerjava.core.util.ResponseStatusExceptionFilter;
Expand All @@ -41,8 +44,8 @@ public class DockerCmdExecFactoryImpl implements DockerCmdExecFactory {
private Client client;
private WebTarget baseResource;

@Override
public void init(DockerClientConfig dockerClientConfig) {
@Override
public void init(DockerClientConfig dockerClientConfig, List<AbstractHttpFeature> httpFeatures) {
checkNotNull(dockerClientConfig, "config was not specified");

ClientConfig clientConfig = new ClientConfig();
Expand Down Expand Up @@ -92,6 +95,13 @@ public void init(DockerClientConfig dockerClientConfig) {

clientConfig.property(ApacheClientProperties.CONNECTION_MANAGER,
connManager);

for(AbstractHttpFeature feature : httpFeatures){
Map<String, Object> properties = feature.getClientConfigurationProperties();
for(String propertyName : properties.keySet()){
clientConfig.property(propertyName, properties.get(propertyName));
}
}

ClientBuilder clientBuilder = ClientBuilder.newBuilder().withConfig(
clientConfig);
Expand All @@ -106,6 +116,11 @@ public void init(DockerClientConfig dockerClientConfig) {
dockerClientConfig.setUri(UnixConnectionSocketFactory
.sanitizeUri(originalUri));
}

for(AbstractHttpFeature feature : httpFeatures){
client.register(feature);
}

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

if (dockerClientConfig.getVersion() == null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

import com.github.dockerjava.api.command.*;
import com.github.dockerjava.api.command.AuthCmd.Exec;
import com.github.dockerjava.core.http.AbstractHttpFeature;
import com.github.dockerjava.jaxrs.BuildImageCmdExec;

/**
Expand All @@ -31,8 +32,8 @@ public TestDockerCmdExecFactory(DockerCmdExecFactory delegate) {
}

@Override
public void init(DockerClientConfig dockerClientConfig) {
delegate.init(dockerClientConfig);
public void init(DockerClientConfig dockerClientConfig, List<AbstractHttpFeature> httpFeatures) {
delegate.init(dockerClientConfig, httpFeatures);
}

@Override
Expand Down