From 1eb3965ac00ce727968a17ab5e58eb6e62c4b3b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Richard=20K=C3=B6rber?= Date: Thu, 30 Apr 2020 19:35:37 +0200 Subject: [PATCH] Verbose exception when getOrders is not supported by the server --- .../src/main/java/org/shredzone/acme4j/Account.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 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 3f4ae73d..109d79af 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/Account.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/Account.java @@ -24,6 +24,7 @@ import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Objects; +import java.util.Optional; import javax.annotation.CheckForNull; import javax.annotation.ParametersAreNonnullByDefault; @@ -128,8 +129,13 @@ public class Account extends AcmeJsonResource { * {@link Order} objects in a different order. */ public Iterator getOrders() { - URL ordersUrl = getJSON().get(KEY_ORDERS).asURL(); - return new ResourceIterator<>(getLogin(), KEY_ORDERS, ordersUrl, Login::bindOrder); + Optional ordersUrl = getJSON().get(KEY_ORDERS).optional().map(Value::asURL); + if (!ordersUrl.isPresent()) { + // Let's Encrypt does not provide this field at the moment although it's required. + // See https://github.com/letsencrypt/boulder/issues/3335 + throw new AcmeProtocolException("This ACME server does not support getOrders()"); + } + return new ResourceIterator<>(getLogin(), KEY_ORDERS, ordersUrl.get(), Login::bindOrder); } /**