From 7c2c88add0f037e4e92c14cf5625ccad9273f4ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Richard=20K=C3=B6rber?= Date: Mon, 11 Sep 2017 23:01:32 +0200 Subject: [PATCH] Challenges return error state Partial backport of commit cdb23628. Fixes issue #35. --- .../java/org/shredzone/acme4j/challenge/Challenge.java | 9 +++++++++ .../org/shredzone/acme4j/challenge/ChallengeTest.java | 3 +++ acme4j-client/src/test/resources/json.properties | 6 +++++- 3 files changed, 17 insertions(+), 1 deletion(-) 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 5e235f61..ec0dcb4b 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 @@ -19,6 +19,7 @@ import java.time.Instant; import java.util.Objects; import org.shredzone.acme4j.AcmeResource; +import org.shredzone.acme4j.Problem; import org.shredzone.acme4j.Session; import org.shredzone.acme4j.Status; import org.shredzone.acme4j.connector.Connection; @@ -47,6 +48,7 @@ public class Challenge extends AcmeResource { protected static final String KEY_STATUS = "status"; protected static final String KEY_URI = "uri"; protected static final String KEY_VALIDATED = "validated"; + protected static final String KEY_ERROR = "error"; private JSON data = JSON.empty(); @@ -117,6 +119,13 @@ public class Challenge extends AcmeResource { return data.get(KEY_VALIDATED).asInstant(); } + /** + * Returns the reason why the challenge failed, if returned by the server. + */ + public Problem getError() { + return data.get(KEY_ERROR).asProblem(); + } + /** * Returns the JSON representation of the challenge data. */ diff --git a/acme4j-client/src/test/java/org/shredzone/acme4j/challenge/ChallengeTest.java b/acme4j-client/src/test/java/org/shredzone/acme4j/challenge/ChallengeTest.java index 68ffe4ae..68340ec7 100644 --- a/acme4j-client/src/test/java/org/shredzone/acme4j/challenge/ChallengeTest.java +++ b/acme4j-client/src/test/java/org/shredzone/acme4j/challenge/ChallengeTest.java @@ -113,6 +113,9 @@ public class ChallengeTest { assertThat(challenge.getStatus(), is(Status.VALID)); assertThat(challenge.getLocation(), is(new URI("http://example.com/challenge/123"))); assertThat(challenge.getValidated(), is(parseTimestamp("2015-12-12T17:19:36.336785823Z"))); + assertThat(challenge.getError(), is(notNullValue())); + assertThat(challenge.getError().getType(), is(URI.create("urn:ietf:params:acme:error:connection"))); + assertThat(challenge.getError().getDetail(), is("connection refused")); assertThat(challenge.getJSON().get("type").asString(), is("generic-01")); assertThat(challenge.getJSON().get("uri").asURL(), is(new URL("http://example.com/challenge/123"))); assertThat(challenge.getJSON().get("not-present").asString(), is(nullValue())); diff --git a/acme4j-client/src/test/resources/json.properties b/acme4j-client/src/test/resources/json.properties index f38344f6..201e60fc 100644 --- a/acme4j-client/src/test/resources/json.properties +++ b/acme4j-client/src/test/resources/json.properties @@ -225,7 +225,11 @@ genericChallenge = \ "type":"generic-01", \ "status":"valid", \ "uri":"http://example.com/challenge/123", \ - "validated":"2015-12-12T17:19:36.336785823Z" \ + "validated":"2015-12-12T17:19:36.336785823Z", \ + "error": { \ + "type": "urn:ietf:params:acme:error:connection", \ + "detail": "connection refused" \ + }\ } httpChallenge = \