diff --git a/src/main/java/com/spotify/docker/AbstractDockerMojo.java b/src/main/java/com/spotify/docker/AbstractDockerMojo.java index b2c9b8b2..87b32584 100644 --- a/src/main/java/com/spotify/docker/AbstractDockerMojo.java +++ b/src/main/java/com/spotify/docker/AbstractDockerMojo.java @@ -21,8 +21,10 @@ package com.spotify.docker; +import com.google.common.base.Optional; import com.spotify.docker.client.DefaultDockerClient; import com.spotify.docker.client.DockerCertificateException; +import com.spotify.docker.client.DockerCertificates; import com.spotify.docker.client.DockerClient; import com.spotify.docker.client.messages.AuthConfig; @@ -41,6 +43,8 @@ import static com.google.common.base.Strings.isNullOrEmpty; import static com.spotify.docker.client.DefaultDockerClient.NO_TIMEOUT; +import java.nio.file.Paths; + abstract class AbstractDockerMojo extends AbstractMojo { @Component(role = MavenSession.class) @@ -67,7 +71,10 @@ abstract class AbstractDockerMojo extends AbstractMojo { */ @Parameter(property = "dockerHost") private String dockerHost; - + + @Parameter(property = "dockerCertPath") + private String dockerCertPath; + @Parameter(property = "serverId") private String serverId; @@ -103,6 +110,10 @@ public void execute() throws MojoExecutionException { if (!isNullOrEmpty(dockerHost)) { builder.uri(dockerHost); } + final Optional certs = dockerCertificates(); + if (certs.isPresent()) { + builder.dockerCertificates(certs.get()); + } final AuthConfig authConfig = authConfig(); if (authConfig != null) { @@ -131,6 +142,16 @@ protected String rawDockerHost() { return dockerHost; } + protected Optional dockerCertificates() throws DockerCertificateException { + if (!isNullOrEmpty(dockerCertPath)) { + return DockerCertificates.builder() + .dockerCertPath(Paths.get(dockerCertPath)).build(); + } + else { + return Optional.absent(); + } + } + /** * Get the email from the server configuration in ~/.m2/settings.xml. * diff --git a/src/test/java/com/spotify/docker/AbstractDockerMojoTest.java b/src/test/java/com/spotify/docker/AbstractDockerMojoTest.java index 938a78bc..1904b32d 100644 --- a/src/test/java/com/spotify/docker/AbstractDockerMojoTest.java +++ b/src/test/java/com/spotify/docker/AbstractDockerMojoTest.java @@ -23,6 +23,7 @@ import com.spotify.docker.client.DefaultDockerClient; import com.spotify.docker.client.DockerCertificateException; +import com.spotify.docker.client.DockerCertificates; import com.spotify.docker.client.DockerClient; import com.spotify.docker.client.messages.AuthConfig; import org.apache.maven.execution.MavenSession; @@ -41,11 +42,13 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import static org.mockito.Matchers.any; @RunWith(MockitoJUnitRunner.class) public class AbstractDockerMojoTest { private static final String DOCKER_HOST = "testhost"; + private static final String DOCKER_CERT_PATH = "src/test/resources/certs"; private static final String SERVER_ID = "testId"; private static final String REGISTRY_URL = "https://my.docker.reg"; private static final String USERNAME = "username"; @@ -93,10 +96,13 @@ public void setUp() { @Test public void testDockerHostSet() throws Exception { ReflectionTestUtils.setField(sut, "dockerHost", DOCKER_HOST); + ReflectionTestUtils.setField(sut, "dockerCertPath", DOCKER_CERT_PATH); sut.execute(); verify(builder).uri(DOCKER_HOST); + verify(builder).dockerCertificates(any(DockerCertificates.class)); + } @Test diff --git a/src/test/resources/certs/ca.pem b/src/test/resources/certs/ca.pem new file mode 100644 index 00000000..e447607c --- /dev/null +++ b/src/test/resources/certs/ca.pem @@ -0,0 +1,18 @@ +-----BEGIN CERTIFICATE----- +MIICzzCCAbegAwIBAgIQM3V9fYpuIu4iUS0IzED4qzANBgkqhkiG9w0BAQsFADAR +MQ8wDQYDVQQKEwZscm9sYXowHhcNMTYwMzI0MDgzMjAwWhcNMTkwMzA5MDgzMjAw +WjARMQ8wDQYDVQQKEwZscm9sYXowggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQDZZL8tEnRzBRmvRqhKxezX3BYEWjwEjsx3uP4fCSYQ2Vzv0C/Up28TIgjO +e0iCYEQexWxuchK/LeEueLsVoheSHIgGXSfwCXJs/n3bBNIL4fmMY/jIxNx9W9wd +ROW02CRbYfYf1OK6Mhv6fO0za4I2PrQ4n46Kf7plLENNqJgVl5KMW4F/5ctQNhgG +IDkmbR7CSSwStUfDCd3nST+fu4cxjwDTOO7PsNi8fsRPNFKqbBus1ax4Qbe6pr5/ +q9BqN7k0XKjkH5qSf3pNKjSAHZNE2ZJASYOvoCV8J4UAvyFSVwH6FS8sKzJvjAQl +350Hycq1C7E4TPzORmQhz5uD+XYXAgMBAAGjIzAhMA4GA1UdDwEB/wQEAwICrDAP +BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAuuxFJpvpY5MXpvdpC +7TtYTs/Wohhx7W/oGiktYyh3qOp9giAqNZo8IIslx2IysnewMB+FidWGsxn1Yf8t +VOUqmLt3NDwB+WbdIsPtus20g+KZ3p9qs1PDwBasWUFVpf8dqLOGeDaWQuaxNM9t +TfIbbiILlAEnL6UVFWsJWJ5ecPema7BRzCfuTcG9XK0sHb5ag0p8LRkH4jXrUEsO +oS8Ql6ZpciIIx6dJwWAoYWrOCpFKEtFVM4dV/C5AjG0SrA5cmOz2gZAbG35hl/nd +Uf77qTmAcb+DsLa6uHaFCyOSkCariPPIs/ESeNV4OeYhghPnYGHg/E+LZ2S2xYi1 +48AS +-----END CERTIFICATE----- diff --git a/src/test/resources/certs/cert.pem b/src/test/resources/certs/cert.pem new file mode 100644 index 00000000..8dd997f3 --- /dev/null +++ b/src/test/resources/certs/cert.pem @@ -0,0 +1,18 @@ +-----BEGIN CERTIFICATE----- +MIIC7jCCAdagAwIBAgIRAJbjvBXgSzRQS5mre8WpoRowDQYJKoZIhvcNAQELBQAw +ETEPMA0GA1UEChMGbHJvbGF6MB4XDTE2MDMyNDA4MzIwMFoXDTE5MDMwOTA4MzIw +MFowHTEbMBkGA1UECgwSbHJvbGF6Ljxib290c3RyYXA+MIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEA7slaZB71bdSOLSmAqH4iIIPP/EbWttpmTu8qeWBz +zopjod1n/VZZfHu41dHxPCnIHPi463GRWdqG3sXKL/xKqDbS0bGIhNHblwHE0o7V +9Nb20hRde2+a1Wy8P/qcDUX2zXZhK+hA1vHAXWcHfYyOpTN0sj9hQLgqoC132nao +OeKUrEk1XmXDV6Ltg21GcvSgMV6RzWPyK6kFwQ3D7pEM7GYhg8NLZz9yXf7LzzsF +xJIDEIuSD5X+MJo5k67CJBrYPkNLN1x3YpOwsVEq12hP1Nd6mz6jA2fyCiD1dAYn +UfrAPznJ1O7IIalL+fMWhFk5hBDsMZkRrbXsMlFMr9TeOwIDAQABozUwMzAOBgNV +HQ8BAf8EBAMCB4AwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAN +BgkqhkiG9w0BAQsFAAOCAQEANvZBvq4zOZIruiIbXznnT53ekM3YY0yud4+qpb7P +loyCrfZcprhkXzlzLOWGyPQQPcJM4J3Y5hXM7ZhW1KL4DVnNd5/KAh/tvJ4B4ez6 +Z+EoMTkSSXSEm1+pCN5LMA1hKyPu8FFG0SL5oHt2Q2plHUTqQxlqQpeosHuCoyPs +iFjsUVc4VCk6/8uykjrzURc2wyFMLe/0J5Sef5upC1gWwDtj1UpuD/ofDKi8KWT+ +KRmF9Hfu+nG35pOeUE6RfyFtOO05yXfraYXNkiRidn6mjQwvUIFC+CT8C9zZz/x3 +CRWjshWZ140rjyeAazNU49hpJlcumTwhLg8C3cOWynCNIQ== +-----END CERTIFICATE----- diff --git a/src/test/resources/certs/key.pem b/src/test/resources/certs/key.pem new file mode 100644 index 00000000..0e266ec9 --- /dev/null +++ b/src/test/resources/certs/key.pem @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpgIBAAKCAQEA7slaZB71bdSOLSmAqH4iIIPP/EbWttpmTu8qeWBzzopjod1n +/VZZfHu41dHxPCnIHPi463GRWdqG3sXKL/xKqDbS0bGIhNHblwHE0o7V9Nb20hRd +e2+a1Wy8P/qcDUX2zXZhK+hA1vHAXWcHfYyOpTN0sj9hQLgqoC132naoOeKUrEk1 +XmXDV6Ltg21GcvSgMV6RzWPyK6kFwQ3D7pEM7GYhg8NLZz9yXf7LzzsFxJIDEIuS +D5X+MJo5k67CJBrYPkNLN1x3YpOwsVEq12hP1Nd6mz6jA2fyCiD1dAYnUfrAPznJ +1O7IIalL+fMWhFk5hBDsMZkRrbXsMlFMr9TeOwIDAQABAoIBAQDTvoPEUtuqaBkn +nSz0vN0AXkKZ4CtYfHTKvDS66zfmSDuvdolXUjIKPCAco426nwZQApLgXZXZyvlc +JKJ1SNDfN7ZcsoRv2zRRRQVG/dhmxBSdF+gJpF71sPWB+nZVItyHN9lVOR/+OuQt +L0aqI3D+t5Fc2u0fmfBal9c3R49Hu5k6i5dXmSFFBphGg54+T76Rwi0QDl4UNJNo +/FV+8Xnx012G0IprNmx8JivLM6/DrFG5s480vgHwe0Lvm+nawL9VN5lLKBol2KaN +DOwMDrSA5nufsxus8wnfLXcUYprPD/hGsj7n5wyEixJ7rYb/lZ6INVQJCfAAkVoP +UmeIJMthAoGBAPo3cl0BtsLPOtNTI1bajR1Ck2s37qxOyDHsYzs63PUn+U8Tifa1 +GIwlnxZX7mDtRRvI8XEnjG4UYIpnr4eRyYQz4QM0SmoJwZK5SDjjftqvXg8nR1AF +4NnNJsaijUG+kaPMWTihA8k72vCZ/ckXDeLbrb45NxoxOQBdNfJ80iPLAoGBAPRO +RhPq6FxmT+UqGaTykA+AGrc2zyGQBlITxi6zc9h1+np1sdorl1///HjQxdhIHjVD +Kjfqxr+XGWJw0oGwNA+JozbKDvnfVsTuRXB6uJb+ACjMmxtl823YXB6Ss5kFkrTk +RRsJVH2X54gfXeXIwhpQSW9yB0wXjsWsQJWko0FRAoGBAPlxCSu7J61x1d0Shqpx +WjiPRFOhAOj56Q4L8Kj9d4VXAm1YtzMhOoWMg9pMcrJiF4Epg7kgihi7a7rOvuhR +6ClJZspA+OZZL4bL+znrYW01YnmM2MTn905p/HwNVPDzwFEgyNlxe0rDxvIRMjWk +LA26nqyCcXJFG+RHCB7jXMKdAoGBAKOJWgOvNcfUfRrsKapu7NxTZo7KU7El1fVP +Y1STr7JwlzEuY9WlZHlQxFKjfiyfaglBYpt3v380yDtLRr6lktPr0KO2cnv1cwH0 +desrWzFH6hdlj1ax0lfvgwq8LRj70A7i1xeYEUTZUJWgWZyd3MD8iYveit/2zQ2p +lroVMWthAoGBAK2o5XDDClmu5dDVO7chtonBm5Z7k9uK0shXDKdywN0cliQhFBFN +++Uj593K9Ndkak57QLl/9CBXnwuFwDA3DUvtdKvLpQcpzry8DmfyAfOEkrt7Kxea +WKzOmU7KxBWldOSRZod+q4PcWZCDgqlulj8kkb1revScwb+RqAUTs107 +-----END RSA PRIVATE KEY-----