From 19787f4c004109a400d3be133346e2e5f06266e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Richard=20K=C3=B6rber?= Date: Mon, 21 Mar 2016 23:12:24 +0100 Subject: [PATCH] Also accept 'urn:ietf:params:acme:error' error responses --- .../exception/AcmeRateLimitExceededException.java | 3 ++- .../acme4j/exception/AcmeServerException.java | 13 +++++++++---- .../acme4j/exception/AcmeUnauthorizedException.java | 3 ++- .../shredzone/acme4j/impl/DefaultConnection.java | 4 +++- .../acme4j/impl/DefaultConnectionTest.java | 4 ++-- 5 files changed, 18 insertions(+), 9 deletions(-) diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/exception/AcmeRateLimitExceededException.java b/acme4j-client/src/main/java/org/shredzone/acme4j/exception/AcmeRateLimitExceededException.java index 0a9db98a..883db085 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/exception/AcmeRateLimitExceededException.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/exception/AcmeRateLimitExceededException.java @@ -25,7 +25,8 @@ public class AcmeRateLimitExceededException extends AcmeServerException { * Creates a new {@link AcmeRateLimitExceededException}. * * @param type - * System readable error type (here {@code "urn:acme:error:rateLimited"}) + * System readable error type (here + * {@code "urn:ietf:params:acme:error:rateLimited"}) * @param detail * Human readable error message */ diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/exception/AcmeServerException.java b/acme4j-client/src/main/java/org/shredzone/acme4j/exception/AcmeServerException.java index 392b5462..96bd6c58 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/exception/AcmeServerException.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/exception/AcmeServerException.java @@ -22,7 +22,8 @@ package org.shredzone.acme4j.exception; public class AcmeServerException extends AcmeException { private static final long serialVersionUID = 5971622508467042792L; - private static final String ACME_ERROR_PREFIX = "urn:acme:error:"; + private static final String ACME_ERROR_PREFIX = "urn:ietf:params:acme:error:"; + private static final String ACME_ERROR_PREFIX_DEPRECATED = "urn:acme:error:"; private final String type; @@ -30,7 +31,8 @@ public class AcmeServerException extends AcmeException { * Creates a new {@link AcmeServerException}. * * @param type - * System readable error type (e.g. {@code "urn:acme:error:malformed"}) + * System readable error type (e.g. + * {@code "urn:ietf:params:acme:error:malformed"}) * @param detail * Human readable error message */ @@ -51,13 +53,16 @@ public class AcmeServerException extends AcmeException { /** * Returns the ACME error type. This is the last part of the type URN, e.g. - * {@code "malformed"} on {@code "urn:acme:error:malformed"}. + * {@code "malformed"} on {@code "urn:ietf:params:acme:error:malformed"}. * - * @return ACME error type, or {@code null} if this is not an {@code "urn:acme:error"} + * @return ACME error type, or {@code null} if this is not an + * {@code "urn:ietf:params:acme:error"} */ public String getAcmeErrorType() { if (type.startsWith(ACME_ERROR_PREFIX)) { return type.substring(ACME_ERROR_PREFIX.length()); + } else if (type.startsWith(ACME_ERROR_PREFIX_DEPRECATED)) { + return type.substring(ACME_ERROR_PREFIX_DEPRECATED.length()); } else { return null; } diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/exception/AcmeUnauthorizedException.java b/acme4j-client/src/main/java/org/shredzone/acme4j/exception/AcmeUnauthorizedException.java index c8ca4b31..cdab617d 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/exception/AcmeUnauthorizedException.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/exception/AcmeUnauthorizedException.java @@ -26,7 +26,8 @@ public class AcmeUnauthorizedException extends AcmeServerException { * Creates a new {@link AcmeUnauthorizedException}. * * @param type - * System readable error type (here {@code "urn:acme:error:unauthorized"}) + * System readable error type (here + * {@code "urn:ietf:params:acme:error:unauthorized"}) * @param detail * Human readable error message */ diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/impl/DefaultConnection.java b/acme4j-client/src/main/java/org/shredzone/acme4j/impl/DefaultConnection.java index a1fdcc9d..4c80bf5b 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/impl/DefaultConnection.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/impl/DefaultConnection.java @@ -42,8 +42,8 @@ import org.shredzone.acme4j.connector.HttpConnector; import org.shredzone.acme4j.connector.Resource; import org.shredzone.acme4j.connector.Session; import org.shredzone.acme4j.exception.AcmeException; -import org.shredzone.acme4j.exception.AcmeRateLimitExceededException; import org.shredzone.acme4j.exception.AcmeProtocolException; +import org.shredzone.acme4j.exception.AcmeRateLimitExceededException; import org.shredzone.acme4j.exception.AcmeServerException; import org.shredzone.acme4j.exception.AcmeUnauthorizedException; import org.shredzone.acme4j.util.ClaimBuilder; @@ -322,9 +322,11 @@ public class DefaultConnection implements Connection { switch (type) { case "urn:acme:error:unauthorized": + case "urn:ietf:params:acme:error:unauthorized": throw new AcmeUnauthorizedException(type, detail); case "urn:acme:error:rateLimited": + case "urn:ietf:params:acme:error:rateLimited": throw new AcmeRateLimitExceededException(type, detail); default: diff --git a/acme4j-client/src/test/java/org/shredzone/acme4j/impl/DefaultConnectionTest.java b/acme4j-client/src/test/java/org/shredzone/acme4j/impl/DefaultConnectionTest.java index bc0feeae..acb6ecc7 100644 --- a/acme4j-client/src/test/java/org/shredzone/acme4j/impl/DefaultConnectionTest.java +++ b/acme4j-client/src/test/java/org/shredzone/acme4j/impl/DefaultConnectionTest.java @@ -194,7 +194,7 @@ public class DefaultConnectionTest { */ @Test public void testThrowException() throws Exception { - String jsonData = "{\"type\":\"urn:acme:error:unauthorized\",\"detail\":\"Invalid response: 404\"}"; + String jsonData = "{\"type\":\"urn:ietf:params:acme:error:unauthorized\",\"detail\":\"Invalid response: 404\"}"; when(mockUrlConnection.getHeaderField("Content-Type")).thenReturn("application/problem+json"); when(mockUrlConnection.getResponseCode()).thenReturn(HttpURLConnection.HTTP_FORBIDDEN); @@ -205,7 +205,7 @@ public class DefaultConnectionTest { conn.throwAcmeException(); fail("Expected to fail"); } catch (AcmeServerException ex) { - assertThat(ex.getType(), is("urn:acme:error:unauthorized")); + assertThat(ex.getType(), is("urn:ietf:params:acme:error:unauthorized")); assertThat(ex.getMessage(), is("Invalid response: 404")); assertThat(ex.getAcmeErrorType(), is("unauthorized")); } catch (AcmeException ex) {