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 4e22c3d4..52faac39 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/Order.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/Order.java @@ -114,12 +114,17 @@ public class Order extends AcmeJsonResource { } /** - * Gets the {@link Certificate} if it is available. + * Gets the {@link Certificate}. + * + * @throws IllegalStateException + * if the order is not ready yet. You must finalize the order first, and wait + * for the status to become {@link Status#VALID}. */ - public Optional getCertificate() { + public Certificate getCertificate() { return getJSON().get("certificate") - .map(Value::asURL) - .map(getLogin()::bindCertificate); + .map(Value::asURL) + .map(getLogin()::bindCertificate) + .orElseThrow(() -> new IllegalStateException("Order is not completed")); } /** diff --git a/acme4j-client/src/test/java/org/shredzone/acme4j/OrderTest.java b/acme4j-client/src/test/java/org/shredzone/acme4j/OrderTest.java index 0631bf1f..a35ae955 100644 --- a/acme4j-client/src/test/java/org/shredzone/acme4j/OrderTest.java +++ b/acme4j-client/src/test/java/org/shredzone/acme4j/OrderTest.java @@ -79,7 +79,7 @@ public class OrderTest { .isEqualTo("2016-01-01T00:00:00Z"); softly.assertThat(order.getNotAfter().orElseThrow()) .isEqualTo("2016-01-08T00:00:00Z"); - softly.assertThat(order.getCertificate().orElseThrow().getLocation()) + softly.assertThat(order.getCertificate().getLocation()) .isEqualTo(url("https://example.com/acme/cert/1234")); softly.assertThat(order.getFinalizeLocation()).isEqualTo(finalizeUrl); @@ -141,13 +141,13 @@ public class OrderTest { try (var softly = new AutoCloseableSoftAssertions()) { // Lazy loading softly.assertThat(requestWasSent).isFalse(); - softly.assertThat(order.getCertificate().orElseThrow().getLocation()) + softly.assertThat(order.getCertificate().getLocation()) .isEqualTo(url("https://example.com/acme/cert/1234")); softly.assertThat(requestWasSent).isTrue(); // Subsequent queries do not trigger another load requestWasSent.set(false); - softly.assertThat(order.getCertificate().orElseThrow().getLocation()) + softly.assertThat(order.getCertificate().getLocation()) .isEqualTo(url("https://example.com/acme/cert/1234")); softly.assertThat(order.getStatus()).isEqualTo(Status.PENDING); softly.assertThat(order.getExpires().orElseThrow()).isEqualTo("2015-03-01T14:09:00Z"); @@ -210,7 +210,7 @@ public class OrderTest { .isEqualTo("2016-01-01T00:00:00Z"); softly.assertThat(order.getNotAfter().orElseThrow()) .isEqualTo("2016-01-08T00:00:00Z"); - softly.assertThat(order.getCertificate().orElseThrow().getLocation()) + softly.assertThat(order.getCertificate().getLocation()) .isEqualTo(url("https://example.com/acme/cert/1234")); softly.assertThat(order.getAutoRenewalCertificate()).isEmpty(); softly.assertThat(order.getFinalizeLocation()).isEqualTo(finalizeUrl); diff --git a/acme4j-example/src/main/java/org/shredzone/acme4j/example/ClientTest.java b/acme4j-example/src/main/java/org/shredzone/acme4j/example/ClientTest.java index 2efcfa75..5574c691 100644 --- a/acme4j-example/src/main/java/org/shredzone/acme4j/example/ClientTest.java +++ b/acme4j-example/src/main/java/org/shredzone/acme4j/example/ClientTest.java @@ -142,7 +142,7 @@ public class ClientTest { } // Get the certificate - Certificate certificate = order.getCertificate().orElseThrow(); + Certificate certificate = order.getCertificate(); LOG.info("Success! The certificate for domains {} has been generated!", domains); LOG.info("Certificate URL: {}", certificate.getLocation()); diff --git a/acme4j-it/src/test/java/org/shredzone/acme4j/it/boulder/OrderHttpIT.java b/acme4j-it/src/test/java/org/shredzone/acme4j/it/boulder/OrderHttpIT.java index c585e59b..8fa97d24 100644 --- a/acme4j-it/src/test/java/org/shredzone/acme4j/it/boulder/OrderHttpIT.java +++ b/acme4j-it/src/test/java/org/shredzone/acme4j/it/boulder/OrderHttpIT.java @@ -23,7 +23,6 @@ import java.security.KeyPair; import org.junit.jupiter.api.Test; import org.shredzone.acme4j.AccountBuilder; import org.shredzone.acme4j.Authorization; -import org.shredzone.acme4j.Certificate; import org.shredzone.acme4j.Order; import org.shredzone.acme4j.Session; import org.shredzone.acme4j.Status; @@ -93,9 +92,7 @@ public class OrderHttpIT { .conditionEvaluationListener(cond -> updateOrder(order)) .untilAsserted(() -> assertThat(order.getStatus()).isNotIn(Status.PENDING, Status.PROCESSING)); - var cert = order.getCertificate() - .map(Certificate::getCertificate) - .orElseThrow(); + var cert = order.getCertificate().getCertificate(); assertThat(cert.getNotAfter()).isNotNull(); assertThat(cert.getNotBefore()).isNotNull(); assertThat(cert.getSubjectX500Principal().getName()).contains("CN=" + TEST_DOMAIN); diff --git a/acme4j-it/src/test/java/org/shredzone/acme4j/it/pebble/OrderIT.java b/acme4j-it/src/test/java/org/shredzone/acme4j/it/pebble/OrderIT.java index 55fd6081..f9b44a01 100644 --- a/acme4j-it/src/test/java/org/shredzone/acme4j/it/pebble/OrderIT.java +++ b/acme4j-it/src/test/java/org/shredzone/acme4j/it/pebble/OrderIT.java @@ -195,7 +195,7 @@ public class OrderIT extends PebbleITBase { assertThat(order.getStatus()).isEqualTo(Status.VALID); - var certificate = order.getCertificate().orElseThrow(); + var certificate = order.getCertificate(); var cert = certificate.getCertificate(); assertThat(cert).isNotNull(); assertThat(cert.getNotBefore().toInstant()).isEqualTo(notBefore); diff --git a/acme4j-it/src/test/java/org/shredzone/acme4j/it/pebble/OrderWildcardIT.java b/acme4j-it/src/test/java/org/shredzone/acme4j/it/pebble/OrderWildcardIT.java index 2286ca22..8fd2f972 100644 --- a/acme4j-it/src/test/java/org/shredzone/acme4j/it/pebble/OrderWildcardIT.java +++ b/acme4j-it/src/test/java/org/shredzone/acme4j/it/pebble/OrderWildcardIT.java @@ -25,7 +25,6 @@ import java.time.temporal.ChronoUnit; import org.bouncycastle.asn1.x509.GeneralName; import org.junit.jupiter.api.Test; import org.shredzone.acme4j.AccountBuilder; -import org.shredzone.acme4j.Certificate; import org.shredzone.acme4j.Session; import org.shredzone.acme4j.Status; import org.shredzone.acme4j.challenge.Dns01Challenge; @@ -112,9 +111,7 @@ public class OrderWildcardIT extends PebbleITBase { order.getStatus()).isNotIn(Status.PENDING, Status.PROCESSING)); - var cert = order.getCertificate() - .map(Certificate::getCertificate) - .orElseThrow(); + var cert = order.getCertificate().getCertificate(); assertThat(cert).isNotNull(); assertThat(cert.getNotAfter()).isNotEqualTo(notBefore); assertThat(cert.getNotBefore()).isNotEqualTo(notAfter);