From 01398e1bbca9d6b142f79ef60a1d1584db117469 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Richard=20K=C3=B6rber?= Date: Wed, 26 Sep 2018 19:30:04 +0200 Subject: [PATCH] Pass serverUri to provider's connect() method --- .../src/main/java/org/shredzone/acme4j/Account.java | 10 +++++----- .../main/java/org/shredzone/acme4j/AccountBuilder.java | 2 +- .../java/org/shredzone/acme4j/AcmeJsonResource.java | 2 +- .../main/java/org/shredzone/acme4j/AcmeResource.java | 9 --------- .../main/java/org/shredzone/acme4j/Authorization.java | 2 +- .../main/java/org/shredzone/acme4j/Certificate.java | 6 +++--- .../src/main/java/org/shredzone/acme4j/Order.java | 4 ++-- .../main/java/org/shredzone/acme4j/OrderBuilder.java | 2 +- .../src/main/java/org/shredzone/acme4j/Session.java | 10 ++++++++++ .../java/org/shredzone/acme4j/challenge/Challenge.java | 2 +- .../shredzone/acme4j/connector/ResourceIterator.java | 2 +- .../acme4j/provider/AbstractAcmeProvider.java | 4 ++-- .../org/shredzone/acme4j/provider/AcmeProvider.java | 4 +++- .../provider/letsencrypt/LetsEncryptAcmeProvider.java | 2 +- .../test/java/org/shredzone/acme4j/AccountTest.java | 9 +-------- .../acme4j/connector/SessionProviderTest.java | 4 ++-- .../acme4j/provider/AbstractAcmeProviderTest.java | 7 +++++-- .../acme4j/provider/TestableConnectionProvider.java | 2 +- .../letsencrypt/LetsEncryptAcmeProviderTest.java | 2 +- .../java/org/shredzone/acme4j/toolbox/TestUtils.java | 6 ++++++ 20 files changed, 48 insertions(+), 43 deletions(-) diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/Account.java b/acme4j-client/src/main/java/org/shredzone/acme4j/Account.java index 86ebb085..e79a564a 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/Account.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/Account.java @@ -113,7 +113,7 @@ public class Account extends AcmeJsonResource { @Override public void update() throws AcmeException { LOG.debug("update Account"); - try (Connection conn = connect()) { + try (Connection conn = getSession().connect()) { conn.sendSignedRequest(getLocation(), new JSONBuilder(), getLogin()); JSON json = conn.readJsonResponse(); if (json != null) { @@ -181,7 +181,7 @@ public class Account extends AcmeJsonResource { URL newAuthzUrl = getSession().resourceUrl(Resource.NEW_AUTHZ); LOG.debug("preAuthorize {}", identifier); - try (Connection conn = connect()) { + try (Connection conn = getSession().connect()) { JSONBuilder claims = new JSONBuilder(); claims.put("identifier", identifier.toMap()); @@ -219,7 +219,7 @@ public class Account extends AcmeJsonResource { LOG.debug("key-change"); - try (Connection conn = connect()) { + try (Connection conn = getSession().connect()) { URL keyChangeUrl = getSession().resourceUrl(Resource.KEY_CHANGE); PublicJsonWebKey newKeyJwk = PublicJsonWebKey.Factory.newPublicJwk(newKeyPair.getPublic()); @@ -256,7 +256,7 @@ public class Account extends AcmeJsonResource { */ public void deactivate() throws AcmeException { LOG.debug("deactivate"); - try (Connection conn = connect()) { + try (Connection conn = getSession().connect()) { JSONBuilder claims = new JSONBuilder(); claims.put(KEY_STATUS, "deactivated"); @@ -344,7 +344,7 @@ public class Account extends AcmeJsonResource { */ public void commit() throws AcmeException { LOG.debug("modify/commit"); - try (Connection conn = connect()) { + try (Connection conn = getSession().connect()) { JSONBuilder claims = new JSONBuilder(); if (!editContacts.isEmpty()) { claims.put(KEY_CONTACT, editContacts); diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/AccountBuilder.java b/acme4j-client/src/main/java/org/shredzone/acme4j/AccountBuilder.java index 47e329e6..ca22ee74 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/AccountBuilder.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/AccountBuilder.java @@ -198,7 +198,7 @@ public class AccountBuilder { LOG.debug("create"); - try (Connection conn = session.provider().connect()) { + try (Connection conn = session.connect()) { URL resourceUrl = session.resourceUrl(Resource.NEW_ACCOUNT); JSONBuilder claims = new JSONBuilder(); diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/AcmeJsonResource.java b/acme4j-client/src/main/java/org/shredzone/acme4j/AcmeJsonResource.java index 173ded70..1d8b6a5f 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/AcmeJsonResource.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/AcmeJsonResource.java @@ -115,7 +115,7 @@ public abstract class AcmeJsonResource extends AcmeResource { public void update() throws AcmeException { String resourceType = getClass().getSimpleName(); LOG.debug("update {}", resourceType); - try (Connection conn = connect()) { + try (Connection conn = getSession().connect()) { conn.sendSignedPostAsGetRequest(getLocation(), getLogin()); JSON json = conn.readJsonResponse(); if (json != null) { diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/AcmeResource.java b/acme4j-client/src/main/java/org/shredzone/acme4j/AcmeResource.java index 9a797839..125ea232 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/AcmeResource.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/AcmeResource.java @@ -19,8 +19,6 @@ import java.util.Objects; import javax.annotation.ParametersAreNonnullByDefault; -import org.shredzone.acme4j.connector.Connection; - /** * A generic ACME resource. */ @@ -61,13 +59,6 @@ public abstract class AcmeResource implements Serializable { return getLogin().getSession(); } - /** - * Opens a {@link Connection} to the provider. - */ - protected Connection connect() { - return getSession().provider().connect(); - } - /** * Rebinds this resource to a {@link Login}. *

diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/Authorization.java b/acme4j-client/src/main/java/org/shredzone/acme4j/Authorization.java index f29383d6..09492e95 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/Authorization.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/Authorization.java @@ -144,7 +144,7 @@ public class Authorization extends AcmeJsonResource { */ public void deactivate() throws AcmeException { LOG.debug("deactivate"); - try (Connection conn = connect()) { + try (Connection conn = getSession().connect()) { JSONBuilder claims = new JSONBuilder(); claims.put("status", "deactivated"); diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/Certificate.java b/acme4j-client/src/main/java/org/shredzone/acme4j/Certificate.java index 261c75ca..af7364dd 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/Certificate.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/Certificate.java @@ -70,7 +70,7 @@ public class Certificate extends AcmeResource { public void download() throws AcmeException { if (certChain == null) { LOG.debug("download"); - try (Connection conn = connect()) { + try (Connection conn = getSession().connect()) { conn.sendCertificateRequest(getLocation(), getLogin()); alternates = new ArrayList<>(conn.getLinks("alternate")); certChain = new ArrayList<>(conn.readCertificates()); @@ -150,7 +150,7 @@ public class Certificate extends AcmeResource { LOG.debug("revoke"); URL resUrl = getSession().resourceUrl(Resource.REVOKE_CERT); - try (Connection conn = connect()) { + try (Connection conn = getSession().connect()) { JSONBuilder claims = new JSONBuilder(); claims.putBase64("certificate", getCertificate().getEncoded()); if (reason != null) { @@ -187,7 +187,7 @@ public class Certificate extends AcmeResource { throw new AcmeException("Server does not allow certificate revocation"); } - try (Connection conn = session.provider().connect()) { + try (Connection conn = session.connect()) { JSONBuilder claims = new JSONBuilder(); claims.putBase64("certificate", cert.getEncoded()); if (reason != null) { diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/Order.java b/acme4j-client/src/main/java/org/shredzone/acme4j/Order.java index bc75e07f..a242b6db 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/Order.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/Order.java @@ -162,7 +162,7 @@ public class Order extends AcmeJsonResource { */ public void execute(byte[] csr) throws AcmeException { LOG.debug("finalize"); - try (Connection conn = connect()) { + try (Connection conn = getSession().connect()) { JSONBuilder claims = new JSONBuilder(); claims.putBase64("csr", csr); @@ -235,7 +235,7 @@ public class Order extends AcmeJsonResource { } LOG.debug("cancel"); - try (Connection conn = connect()) { + try (Connection conn = getSession().connect()) { JSONBuilder claims = new JSONBuilder(); claims.put("status", "canceled"); diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/OrderBuilder.java b/acme4j-client/src/main/java/org/shredzone/acme4j/OrderBuilder.java index 50e41317..bc6997f0 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/OrderBuilder.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/OrderBuilder.java @@ -245,7 +245,7 @@ public class OrderBuilder { } LOG.debug("create"); - try (Connection conn = session.provider().connect()) { + try (Connection conn = session.connect()) { JSONBuilder claims = new JSONBuilder(); claims.array("identifiers", identifierSet.stream().map(Identifier::toMap).collect(toList())); diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/Session.java b/acme4j-client/src/main/java/org/shredzone/acme4j/Session.java index 9fe8c01b..dc244a6e 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/Session.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/Session.java @@ -32,6 +32,7 @@ import javax.annotation.Nullable; import javax.annotation.ParametersAreNonnullByDefault; import javax.annotation.concurrent.ThreadSafe; +import org.shredzone.acme4j.connector.Connection; import org.shredzone.acme4j.connector.Resource; import org.shredzone.acme4j.exception.AcmeException; import org.shredzone.acme4j.provider.AcmeProvider; @@ -172,6 +173,15 @@ public class Session { return provider; } + /** + * Returns a new {@link Connection} to the ACME server. + * + * @return {@link Connection} + */ + public Connection connect() { + return provider.connect(getServerUri()); + } + /** * Gets the {@link URL} of the given {@link Resource}. This may involve connecting to * the server and getting a directory. The result is cached. diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/challenge/Challenge.java b/acme4j-client/src/main/java/org/shredzone/acme4j/challenge/Challenge.java index 4605396d..55d1fbda 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/challenge/Challenge.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/challenge/Challenge.java @@ -148,7 +148,7 @@ public class Challenge extends AcmeJsonResource { */ public void trigger() throws AcmeException { LOG.debug("trigger"); - try (Connection conn = connect()) { + try (Connection conn = getSession().connect()) { JSONBuilder claims = new JSONBuilder(); prepareResponse(claims); diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/connector/ResourceIterator.java b/acme4j-client/src/main/java/org/shredzone/acme4j/connector/ResourceIterator.java index c3d68b80..568d02a1 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/connector/ResourceIterator.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/connector/ResourceIterator.java @@ -144,7 +144,7 @@ public class ResourceIterator implements Iterator { */ private void readAndQueue() throws AcmeException { Session session = login.getSession(); - try (Connection conn = session.provider().connect()) { + try (Connection conn = session.connect()) { conn.sendSignedPostAsGetRequest(nextUrl, login); JSON json = conn.readJsonResponse(); diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/provider/AbstractAcmeProvider.java b/acme4j-client/src/main/java/org/shredzone/acme4j/provider/AbstractAcmeProvider.java index 0919ce5a..1022c887 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/provider/AbstractAcmeProvider.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/provider/AbstractAcmeProvider.java @@ -48,13 +48,13 @@ public abstract class AbstractAcmeProvider implements AcmeProvider { private static final Map> CHALLENGES = challengeMap(); @Override - public Connection connect() { + public Connection connect(URI serverUri) { return new DefaultConnection(createHttpConnector()); } @Override public JSON directory(Session session, URI serverUri) throws AcmeException { - try (Connection conn = connect()) { + try (Connection conn = connect(serverUri)) { conn.sendRequest(resolve(serverUri), session); // use nonce header if there is one, saves a HEAD request... diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/provider/AcmeProvider.java b/acme4j-client/src/main/java/org/shredzone/acme4j/provider/AcmeProvider.java index 298ec9db..87177ec5 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/provider/AcmeProvider.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/provider/AcmeProvider.java @@ -60,9 +60,11 @@ public interface AcmeProvider { /** * Creates a {@link Connection} for communication with the ACME server. * + * @param serverUri + * Server {@link URI} * @return {@link Connection} that was generated */ - Connection connect(); + Connection connect(URI serverUri); /** * Returns the provider's directory. The structure must contain resource URLs, and may diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/provider/letsencrypt/LetsEncryptAcmeProvider.java b/acme4j-client/src/main/java/org/shredzone/acme4j/provider/letsencrypt/LetsEncryptAcmeProvider.java index cd953481..6960b38e 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/provider/letsencrypt/LetsEncryptAcmeProvider.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/provider/letsencrypt/LetsEncryptAcmeProvider.java @@ -67,7 +67,7 @@ public class LetsEncryptAcmeProvider extends AbstractAcmeProvider { @Override @SuppressWarnings("deprecation") - public Connection connect() { + public Connection connect(URI serverUri) { return new org.shredzone.acme4j.connector.PreDraft15Connection(createHttpConnector()); } diff --git a/acme4j-client/src/test/java/org/shredzone/acme4j/AccountTest.java b/acme4j-client/src/test/java/org/shredzone/acme4j/AccountTest.java index ada081c5..0eb6bdf7 100644 --- a/acme4j-client/src/test/java/org/shredzone/acme4j/AccountTest.java +++ b/acme4j-client/src/test/java/org/shredzone/acme4j/AccountTest.java @@ -39,7 +39,6 @@ import org.shredzone.acme4j.challenge.Http01Challenge; import org.shredzone.acme4j.connector.Resource; import org.shredzone.acme4j.exception.AcmeException; import org.shredzone.acme4j.exception.AcmeServerException; -import org.shredzone.acme4j.provider.AcmeProvider; import org.shredzone.acme4j.provider.TestableConnectionProvider; import org.shredzone.acme4j.toolbox.JSON; import org.shredzone.acme4j.toolbox.JSONBuilder; @@ -343,13 +342,7 @@ public class AccountTest { provider.putTestResource(Resource.KEY_CHANGE, locationUrl); - Session session = new Session(new URI(TestUtils.ACME_SERVER_URI)) { - @Override - public AcmeProvider provider() { - return provider; - }; - }; - + Session session = TestUtils.session(provider); Login login = new Login(locationUrl, oldKeyPair, session); assertThat(login.getKeyPair(), is(sameInstance(oldKeyPair))); diff --git a/acme4j-client/src/test/java/org/shredzone/acme4j/connector/SessionProviderTest.java b/acme4j-client/src/test/java/org/shredzone/acme4j/connector/SessionProviderTest.java index 69c34f59..014a8579 100644 --- a/acme4j-client/src/test/java/org/shredzone/acme4j/connector/SessionProviderTest.java +++ b/acme4j-client/src/test/java/org/shredzone/acme4j/connector/SessionProviderTest.java @@ -77,7 +77,7 @@ public class SessionProviderTest { } @Override - public Connection connect() { + public Connection connect(URI serverUri) { throw new UnsupportedOperationException(); } @@ -105,7 +105,7 @@ public class SessionProviderTest { } @Override - public Connection connect() { + public Connection connect(URI serverUri) { throw new UnsupportedOperationException(); } diff --git a/acme4j-client/src/test/java/org/shredzone/acme4j/provider/AbstractAcmeProviderTest.java b/acme4j-client/src/test/java/org/shredzone/acme4j/provider/AbstractAcmeProviderTest.java index ca516995..41bf5f44 100644 --- a/acme4j-client/src/test/java/org/shredzone/acme4j/provider/AbstractAcmeProviderTest.java +++ b/acme4j-client/src/test/java/org/shredzone/acme4j/provider/AbstractAcmeProviderTest.java @@ -50,6 +50,8 @@ public class AbstractAcmeProviderTest { */ @Test public void testConnect() { + final URI testServerUri = URI.create("http://example.com/acme"); + final AtomicBoolean invoked = new AtomicBoolean(); AbstractAcmeProvider provider = new AbstractAcmeProvider() { @@ -70,7 +72,7 @@ public class AbstractAcmeProviderTest { } }; - Connection connection = provider.connect(); + Connection connection = provider.connect(testServerUri); assertThat(connection, not(nullValue())); assertThat(connection, instanceOf(DefaultConnection.class)); assertThat(invoked.get(), is(true)); @@ -90,7 +92,8 @@ public class AbstractAcmeProviderTest { AbstractAcmeProvider provider = new AbstractAcmeProvider() { @Override - public Connection connect() { + public Connection connect(URI serverUri) { + assertThat(serverUri, is(testServerUri)); return connection; } diff --git a/acme4j-client/src/test/java/org/shredzone/acme4j/provider/TestableConnectionProvider.java b/acme4j-client/src/test/java/org/shredzone/acme4j/provider/TestableConnectionProvider.java index ad437f84..4275cd3b 100644 --- a/acme4j-client/src/test/java/org/shredzone/acme4j/provider/TestableConnectionProvider.java +++ b/acme4j-client/src/test/java/org/shredzone/acme4j/provider/TestableConnectionProvider.java @@ -119,7 +119,7 @@ public class TestableConnectionProvider extends DummyConnection implements AcmeP } @Override - public Connection connect() { + public Connection connect(URI serverUri) { return this; } diff --git a/acme4j-client/src/test/java/org/shredzone/acme4j/provider/letsencrypt/LetsEncryptAcmeProviderTest.java b/acme4j-client/src/test/java/org/shredzone/acme4j/provider/letsencrypt/LetsEncryptAcmeProviderTest.java index 5f1c357c..9743da4e 100644 --- a/acme4j-client/src/test/java/org/shredzone/acme4j/provider/letsencrypt/LetsEncryptAcmeProviderTest.java +++ b/acme4j-client/src/test/java/org/shredzone/acme4j/provider/letsencrypt/LetsEncryptAcmeProviderTest.java @@ -75,7 +75,7 @@ public class LetsEncryptAcmeProviderTest { @SuppressWarnings("deprecation") public void testConnect() { LetsEncryptAcmeProvider provider = new LetsEncryptAcmeProvider(); - Connection connection = provider.connect(); + Connection connection = provider.connect(URI.create("acme://letsencrypt.org")); assertThat(connection, is(instanceOf(org.shredzone.acme4j.connector.PreDraft15Connection.class))); } diff --git a/acme4j-client/src/test/java/org/shredzone/acme4j/toolbox/TestUtils.java b/acme4j-client/src/test/java/org/shredzone/acme4j/toolbox/TestUtils.java index 4bac66c0..9677450b 100644 --- a/acme4j-client/src/test/java/org/shredzone/acme4j/toolbox/TestUtils.java +++ b/acme4j-client/src/test/java/org/shredzone/acme4j/toolbox/TestUtils.java @@ -54,6 +54,7 @@ import org.jose4j.keys.HmacKey; import org.shredzone.acme4j.Login; import org.shredzone.acme4j.Problem; import org.shredzone.acme4j.Session; +import org.shredzone.acme4j.connector.Connection; import org.shredzone.acme4j.provider.AcmeProvider; /** @@ -161,6 +162,11 @@ public final class TestUtils { public AcmeProvider provider() { return provider; }; + + @Override + public Connection connect() { + return provider.connect(getServerUri()); + } }; }