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 01910923..87468502 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/Account.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/Account.java @@ -196,9 +196,7 @@ public class Account extends AcmeJsonResource { conn.sendSignedRequest(newAuthzUrl, claims, getLogin()); - var authLocation = conn.getLocation() - .orElseThrow(() -> new AcmeProtocolException("Server did not provide an authorization location")); - var auth = getLogin().bindAuthorization(authLocation); + var auth = getLogin().bindAuthorization(conn.getLocation()); auth.setJSON(conn.readJsonResponse()); return auth; } 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 4986860c..75e1f65e 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/AccountBuilder.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/AccountBuilder.java @@ -26,7 +26,6 @@ import javax.crypto.spec.SecretKeySpec; import edu.umd.cs.findbugs.annotations.Nullable; import org.shredzone.acme4j.connector.Resource; import org.shredzone.acme4j.exception.AcmeException; -import org.shredzone.acme4j.exception.AcmeProtocolException; import org.shredzone.acme4j.toolbox.AcmeUtils; import org.shredzone.acme4j.toolbox.JSONBuilder; import org.shredzone.acme4j.toolbox.JoseUtils; @@ -261,10 +260,7 @@ public class AccountBuilder { conn.sendSignedRequest(resourceUrl, claims, session, keyPair); - var location = conn.getLocation() - .orElseThrow(() -> new AcmeProtocolException("Server did not provide an account location")); - - var login = new Login(location, keyPair, session); + var login = new Login(conn.getLocation(), keyPair, session); login.getAccount().setJSON(conn.readJsonResponse()); return login; } 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 a333cce6..841f246a 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/OrderBuilder.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/OrderBuilder.java @@ -314,10 +314,7 @@ public class OrderBuilder { conn.sendSignedRequest(session.resourceUrl(Resource.NEW_ORDER), claims, login); - var orderLocation = conn.getLocation() - .orElseThrow(() -> new AcmeProtocolException("Server did not provide an order location")); - - var order = new Order(login, orderLocation); + var order = new Order(login, conn.getLocation()); order.setJSON(conn.readJsonResponse()); return order; } diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/connector/Connection.java b/acme4j-client/src/main/java/org/shredzone/acme4j/connector/Connection.java index 1935fe86..cbd58bed 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/connector/Connection.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/connector/Connection.java @@ -169,9 +169,11 @@ public interface Connection extends AutoCloseable { *

* Relative links are resolved against the last request's URL. * - * @return Location {@link URL}, or empty if no Location header was set + * @return Location {@link URL} + * @throws org.shredzone.acme4j.exception.AcmeProtocolException if the location + * header is missing */ - Optional getLocation(); + URL getLocation(); /** * Returns the content of the last-modified header, if present. diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/connector/DefaultConnection.java b/acme4j-client/src/main/java/org/shredzone/acme4j/connector/DefaultConnection.java index cdb0059f..e80a4d4a 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/connector/DefaultConnection.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/connector/DefaultConnection.java @@ -258,14 +258,15 @@ public class DefaultConnection implements Connection { } @Override - public Optional getLocation() { + public URL getLocation() { return getResponse().headers() .firstValue(LOCATION_HEADER) .map(l -> { LOG.debug("Location: {}", l); return l; }) - .map(this::resolveRelative); + .map(this::resolveRelative) + .orElseThrow(() -> new AcmeProtocolException("location header is missing")); } @Override diff --git a/acme4j-client/src/test/java/org/shredzone/acme4j/AccountBuilderTest.java b/acme4j-client/src/test/java/org/shredzone/acme4j/AccountBuilderTest.java index 41b1f22b..173ba5db 100644 --- a/acme4j-client/src/test/java/org/shredzone/acme4j/AccountBuilderTest.java +++ b/acme4j-client/src/test/java/org/shredzone/acme4j/AccountBuilderTest.java @@ -21,7 +21,6 @@ import static org.shredzone.acme4j.toolbox.TestUtils.url; import java.net.HttpURLConnection; import java.net.URL; import java.security.KeyPair; -import java.util.Optional; import org.jose4j.jwx.CompactSerializer; import org.junit.jupiter.api.Test; @@ -72,8 +71,8 @@ public class AccountBuilderTest { } @Override - public Optional getLocation() { - return Optional.of(locationUrl); + public URL getLocation() { + return locationUrl; } @Override @@ -134,8 +133,8 @@ public class AccountBuilderTest { } @Override - public Optional getLocation() { - return Optional.of(locationUrl); + public URL getLocation() { + return locationUrl; } @Override @@ -176,8 +175,8 @@ public class AccountBuilderTest { } @Override - public Optional getLocation() { - return Optional.of(locationUrl); + public URL getLocation() { + return locationUrl; } @Override 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 c205d49e..b052b0a4 100644 --- a/acme4j-client/src/test/java/org/shredzone/acme4j/AccountTest.java +++ b/acme4j-client/src/test/java/org/shredzone/acme4j/AccountTest.java @@ -27,7 +27,6 @@ import java.net.HttpURLConnection; import java.net.URI; import java.net.URL; import java.util.Collection; -import java.util.Optional; import java.util.concurrent.atomic.AtomicBoolean; import org.jose4j.jws.JsonWebSignature; @@ -88,8 +87,8 @@ public class AccountTest { } @Override - public Optional getLocation() { - return Optional.of(locationUrl); + public URL getLocation() { + return locationUrl; } @Override @@ -145,8 +144,8 @@ public class AccountTest { } @Override - public Optional getLocation() { - return Optional.of(locationUrl); + public URL getLocation() { + return locationUrl; } @Override @@ -199,8 +198,8 @@ public class AccountTest { } @Override - public Optional getLocation() { - return Optional.of(locationUrl); + public URL getLocation() { + return locationUrl; } }; @@ -327,8 +326,8 @@ public class AccountTest { } @Override - public Optional getLocation() { - return Optional.of(locationUrl); + public URL getLocation() { + return locationUrl; } }; @@ -424,8 +423,8 @@ public class AccountTest { } @Override - public Optional getLocation() { - return Optional.of(locationUrl); + public URL getLocation() { + return locationUrl; } }; diff --git a/acme4j-client/src/test/java/org/shredzone/acme4j/OrderBuilderTest.java b/acme4j-client/src/test/java/org/shredzone/acme4j/OrderBuilderTest.java index 5c76120e..18a25ef2 100644 --- a/acme4j-client/src/test/java/org/shredzone/acme4j/OrderBuilderTest.java +++ b/acme4j-client/src/test/java/org/shredzone/acme4j/OrderBuilderTest.java @@ -25,7 +25,6 @@ import java.net.InetAddress; import java.net.URL; import java.time.Duration; import java.util.Arrays; -import java.util.Optional; import org.assertj.core.api.AutoCloseableSoftAssertions; import org.junit.jupiter.api.Test; @@ -67,8 +66,8 @@ public class OrderBuilderTest { } @Override - public Optional getLocation() { - return Optional.of(locationUrl); + public URL getLocation() { + return locationUrl; } }; @@ -150,8 +149,8 @@ public class OrderBuilderTest { } @Override - public Optional getLocation() { - return Optional.of(locationUrl); + public URL getLocation() { + return locationUrl; } }; diff --git a/acme4j-client/src/test/java/org/shredzone/acme4j/connector/DefaultConnectionTest.java b/acme4j-client/src/test/java/org/shredzone/acme4j/connector/DefaultConnectionTest.java index 60215174..79c11c70 100644 --- a/acme4j-client/src/test/java/org/shredzone/acme4j/connector/DefaultConnectionTest.java +++ b/acme4j-client/src/test/java/org/shredzone/acme4j/connector/DefaultConnectionTest.java @@ -18,6 +18,7 @@ import static java.time.temporal.ChronoUnit.SECONDS; import static com.github.tomakehurst.wiremock.client.WireMock.*; import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.shredzone.acme4j.toolbox.TestUtils.getResourceAsByteArray; import static org.shredzone.acme4j.toolbox.TestUtils.url; @@ -215,8 +216,7 @@ public class DefaultConnectionTest { try (var conn = session.connect()) { conn.sendRequest(requestUrl, session, null); var location = conn.getLocation(); - assertThat(location.orElseThrow()) - .isEqualTo(new URL("https://example.com/otherlocation")); + assertThat(location).isEqualTo(new URL("https://example.com/otherlocation")); } } @@ -232,8 +232,7 @@ public class DefaultConnectionTest { try (var conn = session.connect()) { conn.sendRequest(requestUrl, session, null); var location = conn.getLocation(); - assertThat(location.orElseThrow()) - .isEqualTo(new URL(baseUrl + "/otherlocation")); + assertThat(location).isEqualTo(new URL(baseUrl + "/otherlocation")); } } @@ -300,7 +299,8 @@ public class DefaultConnectionTest { try (var conn = session.connect()) { conn.sendRequest(requestUrl, session, null); - assertThat(conn.getLocation()).isEmpty(); + assertThatExceptionOfType(AcmeProtocolException.class) + .isThrownBy(conn::getLocation); } verify(getRequestedFor(urlEqualTo(REQUEST_PATH))); diff --git a/acme4j-client/src/test/java/org/shredzone/acme4j/connector/DummyConnection.java b/acme4j-client/src/test/java/org/shredzone/acme4j/connector/DummyConnection.java index 1ce01998..77cf419f 100644 --- a/acme4j-client/src/test/java/org/shredzone/acme4j/connector/DummyConnection.java +++ b/acme4j-client/src/test/java/org/shredzone/acme4j/connector/DummyConnection.java @@ -85,7 +85,7 @@ public class DummyConnection implements Connection { } @Override - public Optional getLocation() { + public URL getLocation() { throw new UnsupportedOperationException(); }