Skip to content

Commit 6732612

Browse files
committed
implement new docker config file format for authentication
add auth option to create image command
1 parent 5736b4b commit 6732612

19 files changed

Lines changed: 354 additions & 263 deletions

File tree

src/main/java/com/github/dockerjava/api/command/CreateContainerCmd.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.github.dockerjava.api.exception.ConflictException;
44
import com.github.dockerjava.api.exception.NotFoundException;
5+
import com.github.dockerjava.api.model.AuthConfig;
56
import com.github.dockerjava.api.model.Bind;
67
import com.github.dockerjava.api.model.Capability;
78
import com.github.dockerjava.api.model.Device;
@@ -23,6 +24,8 @@
2324

2425
public interface CreateContainerCmd extends SyncDockerCmd<CreateContainerResponse> {
2526

27+
AuthConfig getAuthConfig();
28+
2629
@CheckForNull
2730
List<String> getAliases();
2831

@@ -197,6 +200,8 @@ public interface CreateContainerCmd extends SyncDockerCmd<CreateContainerRespons
197200
@CheckForNull
198201
Boolean isTty();
199202

203+
CreateContainerCmd withAuthConfig(AuthConfig authConfig);
204+
200205
/**
201206
* Add network-scoped alias for the container
202207
* @param aliases on ore more aliases

src/main/java/com/github/dockerjava/core/AuthConfigFile.java

Lines changed: 0 additions & 161 deletions
This file was deleted.

src/main/java/com/github/dockerjava/core/DefaultDockerClientConfig.java

Lines changed: 38 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
11
package com.github.dockerjava.core;
22

3-
import static com.google.common.base.Preconditions.checkNotNull;
4-
import static org.apache.commons.lang.BooleanUtils.isTrue;
3+
import com.github.dockerjava.api.exception.DockerClientException;
4+
import com.github.dockerjava.api.model.AuthConfig;
5+
import com.github.dockerjava.api.model.AuthConfigurations;
6+
import com.github.dockerjava.core.NameParser.HostnameReposName;
7+
import com.github.dockerjava.core.NameParser.ReposTag;
8+
import org.apache.commons.lang.StringUtils;
9+
import org.apache.commons.lang.builder.EqualsBuilder;
10+
import org.apache.commons.lang.builder.HashCodeBuilder;
11+
import org.apache.commons.lang.builder.ToStringBuilder;
12+
import org.apache.commons.lang.builder.ToStringStyle;
513

614
import java.io.File;
715
import java.io.FileInputStream;
@@ -14,17 +22,8 @@
1422
import java.util.Properties;
1523
import java.util.Set;
1624

17-
import org.apache.commons.lang.StringUtils;
18-
import org.apache.commons.lang.builder.EqualsBuilder;
19-
import org.apache.commons.lang.builder.HashCodeBuilder;
20-
import org.apache.commons.lang.builder.ToStringBuilder;
21-
import org.apache.commons.lang.builder.ToStringStyle;
22-
23-
import com.github.dockerjava.api.exception.DockerClientException;
24-
import com.github.dockerjava.api.model.AuthConfig;
25-
import com.github.dockerjava.api.model.AuthConfigurations;
26-
import com.github.dockerjava.core.NameParser.HostnameReposName;
27-
import com.github.dockerjava.core.NameParser.ReposTag;
25+
import static com.google.common.base.Preconditions.checkNotNull;
26+
import static org.apache.commons.lang.BooleanUtils.isTrue;
2827

2928
/**
3029
* Respects some of the docker CLI options. See https://docs.docker.com/engine/reference/commandline/cli/#environment-variables
@@ -53,8 +52,6 @@ public class DefaultDockerClientConfig implements Serializable, DockerClientConf
5352

5453
private static final String DOCKER_JAVA_PROPERTIES = "docker-java.properties";
5554

56-
private static final String DOCKER_CFG = ".dockercfg";
57-
5855
private static final Set<String> CONFIG_KEYS = new HashSet<String>();
5956

6057
static {
@@ -71,16 +68,18 @@ public class DefaultDockerClientConfig implements Serializable, DockerClientConf
7168

7269
private final URI dockerHost;
7370

74-
private final String registryUsername, registryPassword, registryEmail, registryUrl, dockerConfig;
71+
private final String registryUsername, registryPassword, registryEmail, registryUrl, dockerConfigPath;
7572

7673
private final SSLConfig sslConfig;
7774

7875
private final RemoteApiVersion apiVersion;
7976

80-
DefaultDockerClientConfig(URI dockerHost, String dockerConfig, String apiVersion, String registryUrl,
81-
String registryUsername, String registryPassword, String registryEmail, SSLConfig sslConfig) {
77+
private DockerConfigFile dockerConfig = null;
78+
79+
DefaultDockerClientConfig(URI dockerHost, String dockerConfigPath, String apiVersion, String registryUrl,
80+
String registryUsername, String registryPassword, String registryEmail, SSLConfig sslConfig) {
8281
this.dockerHost = checkDockerHostScheme(dockerHost);
83-
this.dockerConfig = dockerConfig;
82+
this.dockerConfigPath = dockerConfigPath;
8483
this.apiVersion = RemoteApiVersion.parseConfigWithDefault(apiVersion);
8584
this.sslConfig = sslConfig;
8685
this.registryUsername = registryUsername;
@@ -232,7 +231,18 @@ public String getRegistryUrl() {
232231
return registryUrl;
233232
}
234233

235-
public String getDockerConfig() {
234+
public String getDockerConfigPath() {
235+
return dockerConfigPath;
236+
}
237+
238+
public DockerConfigFile getDockerConfig() {
239+
if (dockerConfig == null) {
240+
try {
241+
dockerConfig = DockerConfigFile.loadConfig(new File(getDockerConfigPath()));
242+
} catch (IOException e) {
243+
throw new DockerClientException("Failed to parse docker configuration file", e);
244+
}
245+
}
236246
return dockerConfig;
237247
}
238248

@@ -251,47 +261,23 @@ && getRegistryUrl() != null) {
251261

252262
@Override
253263
public AuthConfig effectiveAuthConfig(String imageName) {
254-
AuthConfig authConfig = null;
255-
256-
File dockerCfgFile = new File(getDockerConfig() + File.separator + DOCKER_CFG);
264+
AuthConfig authConfig = getAuthConfig();
257265

258-
if (dockerCfgFile.exists() && dockerCfgFile.isFile() && imageName != null) {
259-
AuthConfigFile authConfigFile;
260-
try {
261-
authConfigFile = AuthConfigFile.loadConfig(dockerCfgFile);
262-
} catch (IOException e) {
263-
throw new DockerClientException("Failed to parse dockerCfgFile", e);
264-
}
265-
ReposTag reposTag = NameParser.parseRepositoryTag(imageName);
266-
HostnameReposName hostnameReposName = NameParser.resolveRepositoryName(reposTag.repos);
267-
268-
authConfig = authConfigFile.resolveAuthConfig(hostnameReposName.hostname);
266+
if (authConfig != null) {
267+
return authConfig;
269268
}
270269

271-
AuthConfig otherAuthConfig = getAuthConfig();
270+
DockerConfigFile dockerCfg = getDockerConfig();
272271

273-
if (otherAuthConfig != null) {
274-
authConfig = otherAuthConfig;
275-
}
272+
ReposTag reposTag = NameParser.parseRepositoryTag(imageName);
273+
HostnameReposName hostnameReposName = NameParser.resolveRepositoryName(reposTag.repos);
276274

277-
return authConfig;
275+
return dockerCfg.resolveAuthConfig(hostnameReposName.hostname);
278276
}
279277

280278
@Override
281279
public AuthConfigurations getAuthConfigurations() {
282-
File dockerCfgFile = new File(getDockerConfig() + File.separator + DOCKER_CFG);
283-
if (dockerCfgFile.exists() && dockerCfgFile.isFile()) {
284-
AuthConfigFile authConfigFile;
285-
try {
286-
authConfigFile = AuthConfigFile.loadConfig(dockerCfgFile);
287-
} catch (IOException e) {
288-
throw new DockerClientException("Failed to parse dockerCfgFile", e);
289-
}
290-
291-
return authConfigFile.getAuthConfigurations();
292-
}
293-
294-
return new AuthConfigurations();
280+
return getDockerConfig().getAuthConfigurations();
295281
}
296282

297283
@Override

src/main/java/com/github/dockerjava/core/DockerClientImpl.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,5 @@
11
package com.github.dockerjava.core;
22

3-
import static com.google.common.base.Preconditions.checkNotNull;
4-
5-
import java.io.Closeable;
6-
import java.io.File;
7-
import java.io.IOException;
8-
import java.io.InputStream;
9-
103
import com.github.dockerjava.api.DockerClient;
114
import com.github.dockerjava.api.command.AttachContainerCmd;
125
import com.github.dockerjava.api.command.AuthCmd;
@@ -47,6 +40,7 @@
4740
import com.github.dockerjava.api.command.RemoveImageCmd;
4841
import com.github.dockerjava.api.command.RemoveNetworkCmd;
4942
import com.github.dockerjava.api.command.RemoveVolumeCmd;
43+
import com.github.dockerjava.api.command.RenameContainerCmd;
5044
import com.github.dockerjava.api.command.RestartContainerCmd;
5145
import com.github.dockerjava.api.command.SaveImageCmd;
5246
import com.github.dockerjava.api.command.SearchImagesCmd;
@@ -59,7 +53,6 @@
5953
import com.github.dockerjava.api.command.UpdateContainerCmd;
6054
import com.github.dockerjava.api.command.VersionCmd;
6155
import com.github.dockerjava.api.command.WaitContainerCmd;
62-
import com.github.dockerjava.api.command.RenameContainerCmd;
6356
import com.github.dockerjava.api.model.AuthConfig;
6457
import com.github.dockerjava.api.model.Identifier;
6558
import com.github.dockerjava.core.command.AttachContainerCmdImpl;
@@ -100,6 +93,7 @@
10093
import com.github.dockerjava.core.command.RemoveImageCmdImpl;
10194
import com.github.dockerjava.core.command.RemoveNetworkCmdImpl;
10295
import com.github.dockerjava.core.command.RemoveVolumeCmdImpl;
96+
import com.github.dockerjava.core.command.RenameContainerCmdImpl;
10397
import com.github.dockerjava.core.command.RestartContainerCmdImpl;
10498
import com.github.dockerjava.core.command.SaveImageCmdImpl;
10599
import com.github.dockerjava.core.command.SearchImagesCmdImpl;
@@ -112,9 +106,14 @@
112106
import com.github.dockerjava.core.command.UpdateContainerCmdImpl;
113107
import com.github.dockerjava.core.command.VersionCmdImpl;
114108
import com.github.dockerjava.core.command.WaitContainerCmdImpl;
115-
import com.github.dockerjava.core.command.RenameContainerCmdImpl;
116109

117110
import javax.annotation.Nonnull;
111+
import java.io.Closeable;
112+
import java.io.File;
113+
import java.io.IOException;
114+
import java.io.InputStream;
115+
116+
import static com.google.common.base.Preconditions.checkNotNull;
118117

119118
/**
120119
* @author Konstantin Pelykh (kpelykh@gmail.com)
@@ -287,7 +286,8 @@ public ListContainersCmd listContainersCmd() {
287286

288287
@Override
289288
public CreateContainerCmd createContainerCmd(String image) {
290-
return new CreateContainerCmdImpl(getDockerCmdExecFactory().createCreateContainerCmdExec(), image);
289+
return new CreateContainerCmdImpl(getDockerCmdExecFactory()
290+
.createCreateContainerCmdExec(), dockerClientConfig.effectiveAuthConfig(image), image);
291291
}
292292

293293
@Override

0 commit comments

Comments
 (0)