Skip to content

Commit

Permalink
Merge branch '__rultor'
Browse files Browse the repository at this point in the history
  • Loading branch information
rultor committed Nov 27, 2018
2 parents f2b7c20 + a3a3e37 commit f3a8549
Show file tree
Hide file tree
Showing 4 changed files with 138 additions and 3 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,4 @@ bin/

nb-configuration.xml
.DS_Store
/nbproject/
6 changes: 3 additions & 3 deletions src/main/java/com/amihaiemil/docker/Auth.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,9 @@
* @version $Id$
* @see <a href="https://docs.docker.com/engine/api/v1.35/#section/Authentication">Authentication</a>
* @since 0.0.1
* @todo #99:30min Implement a new auth named 'Token' that will hold the user's
* identity token from the auth endpoint. Implement some operation that would
* call the /auth endpoint and obtain a token.
* @todo #171:30min We have implemented all forms of Auth. We also have the
* AuthHttpClient. Figure out how to make the library decorate the base
* HttpClient with the AuthHttpClient in a seemless manner.
*/
public interface Auth {
/**
Expand Down
73 changes: 73 additions & 0 deletions src/main/java/com/amihaiemil/docker/IdentityToken.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
/**
* Copyright (c) 2018, Mihai Emil Andronache
* All rights reserved.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* 1)Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2)Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3)Neither the name of docker-java-api nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/

package com.amihaiemil.docker;

import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.function.Supplier;
import javax.json.Json;

/**
* An {@link Auth} holding an Identity token.
* <p>
* Identity tokens are obtained after validating your {@link Credentials}
* with a registry. However, the docker engine is capable of obtaining this
* token transparently if you just provide {@link Credentials}.
* <p>
* {@link IdentityToken} is useful for cases when you have already obtained
* a token from a previous session and you wish to reuse it.
*
* @author George Aristy (george.aristy@gmail.com)
* @see <a href="https://docs.docker.com/engine/api/v1.35/#section/Authentication">Authentication</a>
* @see <a href="https://docs.docker.com/registry/spec/auth/token/">Token Authentication Specification</a>
* @see <a href="https://docs.docker.com/engine/api/v1.35/#operation/SystemAuth">Check auth configuration</a>
* @version $Id$
* @since 0.0.4
*/
public final class IdentityToken implements Auth {
/**
* Base64-encoded JSON structure holding the identity token.
*/
private final Supplier<String> value;

/**
* Ctor.
* @param value The token's value
*/
public IdentityToken(final String value) {
this.value = () -> Base64.getEncoder().encodeToString(
Json.createObjectBuilder().add("identitytoken", value)
.build().toString()
.getBytes(StandardCharsets.UTF_8)
);
}

@Override
public String encoded() {
return this.value.get();
}
}
61 changes: 61 additions & 0 deletions src/test/java/com/amihaiemil/docker/IdentityTokenTestCase.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
/**
* Copyright (c) 2018, Mihai Emil Andronache
* All rights reserved.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* 1)Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2)Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3)Neither the name of docker-java-api nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
package com.amihaiemil.docker;

import java.nio.charset.StandardCharsets;
import java.util.Base64;
import javax.json.Json;
import org.hamcrest.MatcherAssert;
import org.hamcrest.Matchers;
import org.junit.Test;

/**
* Unit tests for {@link IdentityToken}.
*
* @author George Aristy (george.aristy@gmail.com)
* @version $Id$
* @since 0.0.4
*/
public final class IdentityTokenTestCase {
/**
* Correctly encodes to base64 all attributes as a JSON object.
*/
@Test
public void correctEncoding() {
final String token = "abc123";
MatcherAssert.assertThat(
new IdentityToken(token).encoded(),
Matchers.is(
Base64.getEncoder().encodeToString(
Json.createObjectBuilder()
.add("identitytoken", token)
.build().toString()
.getBytes(StandardCharsets.UTF_8)
)
)
);
}
}

0 comments on commit f3a8549

Please sign in to comment.