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 74e95002..77472a9b 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/Authorization.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/Authorization.java @@ -223,7 +223,7 @@ public class Authorization extends AcmeResource { * JSON data */ protected void unmarshalAuthorization(JSON json) { - this.status = Status.parse(json.get("status").asString(), Status.PENDING); + this.status = json.get("status").asStatusOrElse(Status.PENDING); String jsonExpires = json.get("expires").asString(); if (jsonExpires != null) { diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/Status.java b/acme4j-client/src/main/java/org/shredzone/acme4j/Status.java index e6b27236..6fef0b63 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/Status.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/Status.java @@ -38,18 +38,4 @@ public enum Status { .orElse(Status.UNKNOWN); } - /** - * Parses the string and returns a corresponding Status object. - * - * @param str - * String to parse - * @param def - * Default Status if str is {@code null} - * @return {@link Status} matching the string, or {@link Status#UNKNOWN} if there was - * no match, or {@code def} if the str was {@code null} - */ - public static Status parse(String str, Status def) { - return str != null ? parse(str) : def; - } - } 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..37cb9356 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 @@ -99,7 +99,7 @@ public class Challenge extends AcmeResource { * Returns the current status of the challenge. */ public Status getStatus() { - return Status.parse(data.get(KEY_STATUS).asString(), Status.PENDING); + return data.get(KEY_STATUS).asStatusOrElse(Status.PENDING); } /** diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/util/JSON.java b/acme4j-client/src/main/java/org/shredzone/acme4j/util/JSON.java index 0f6acbd7..f7fcffc5 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/util/JSON.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/util/JSON.java @@ -41,6 +41,7 @@ import java.util.stream.StreamSupport; import org.jose4j.json.JsonUtil; import org.jose4j.lang.JoseException; +import org.shredzone.acme4j.Status; import org.shredzone.acme4j.exception.AcmeProtocolException; /** @@ -392,6 +393,21 @@ public final class JSON implements Serializable { } } + /** + * Returns the parsed status. + * + * @param def + * Default status if value is not present or {@code null} + * @return {@link Status} + */ + public Status asStatusOrElse(Status def) { + if (val == null) { + return def; + } + + return Status.parse(val.toString()); + } + @Override public boolean equals(Object obj) { if (obj == null || !(obj instanceof Value)) { diff --git a/acme4j-client/src/test/java/org/shredzone/acme4j/StatusTest.java b/acme4j-client/src/test/java/org/shredzone/acme4j/StatusTest.java index 10014c29..20b4acb4 100644 --- a/acme4j-client/src/test/java/org/shredzone/acme4j/StatusTest.java +++ b/acme4j-client/src/test/java/org/shredzone/acme4j/StatusTest.java @@ -35,9 +35,6 @@ public class StatusTest { // unknown status returns UNKNOWN assertThat(Status.parse("foo"), is(Status.UNKNOWN)); - - // null returns default value - assertThat(Status.parse(null, Status.PROCESSING), is(Status.PROCESSING)); } } diff --git a/acme4j-client/src/test/java/org/shredzone/acme4j/util/JSONTest.java b/acme4j-client/src/test/java/org/shredzone/acme4j/util/JSONTest.java index ad5fb34e..18d102e3 100644 --- a/acme4j-client/src/test/java/org/shredzone/acme4j/util/JSONTest.java +++ b/acme4j-client/src/test/java/org/shredzone/acme4j/util/JSONTest.java @@ -36,6 +36,7 @@ import java.util.NoSuchElementException; import java.util.stream.Collectors; import org.junit.Test; +import org.shredzone.acme4j.Status; import org.shredzone.acme4j.exception.AcmeProtocolException; /** @@ -84,7 +85,8 @@ public class JSONTest { JSON json = TestUtils.getJsonAsObject("json"); assertThat(json.keySet(), containsInAnyOrder( - "text", "number", "boolean", "uri", "url", "date", "array", "collect")); + "text", "number", "boolean", "uri", "url", "date", "array", + "collect", "status")); assertThat(json.contains("text"), is(true)); assertThat(json.contains("music"), is(false)); assertThat(json.get("text"), is(notNullValue())); @@ -178,6 +180,7 @@ public class JSONTest { assertThat(json.get("uri").asURI(), is(URI.create("mailto:foo@example.com"))); assertThat(json.get("url").asURL(), is(new URL("http://example.com"))); assertThat(json.get("date").asInstant(), is(date)); + assertThat(json.get("status").asStatusOrElse(Status.INVALID), is(Status.VALID)); JSON.Array array = json.get("array").asArray(); assertThat(array.get(0).asString(), is("foo")); @@ -204,8 +207,8 @@ public class JSONTest { assertThat(json.get("none").asURI(), is(nullValue())); assertThat(json.get("none").asURL(), is(nullValue())); assertThat(json.get("none").asInstant(), is(nullValue())); - assertThat(json.get("none").asArray(), is(nullValue())); assertThat(json.get("none").asObject(), is(nullValue())); + assertThat(json.get("none").asStatusOrElse(Status.INVALID), is(Status.INVALID)); try { json.get("none").asInt(); diff --git a/acme4j-client/src/test/resources/json.properties b/acme4j-client/src/test/resources/json.properties index b9ab56ed..c0a89b7d 100644 --- a/acme4j-client/src/test/resources/json.properties +++ b/acme4j-client/src/test/resources/json.properties @@ -44,7 +44,8 @@ json = \ "url": "http://example.com",\ "date": "2016-01-08T00:00:00Z",\ "array": ["foo", 987, [1, 2, 3], {"test": "ok"}],\ - "collect": ["foo", "bar", "barfoo"]\ + "collect": ["foo", "bar", "barfoo"],\ + "status": "VALID"\ } newRegistration = \