diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/connector/Connection.java b/acme4j-client/src/main/java/org/shredzone/acme4j/connector/Connection.java index cbd58bed..10b1b032 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/connector/Connection.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/connector/Connection.java @@ -16,6 +16,7 @@ package org.shredzone.acme4j.connector; import java.net.URL; import java.security.KeyPair; import java.security.cert.X509Certificate; +import java.time.Instant; import java.time.ZonedDateTime; import java.util.Collection; import java.util.List; @@ -148,6 +149,13 @@ public interface Connection extends AutoCloseable { */ List readCertificates() throws AcmeException; + /** + * Returns the Retry-After header if present. + * + * @since 3.0.0 + */ + Optional getRetryAfter(); + /** * Throws an {@link AcmeRetryAfterException} if the last status was HTTP Accepted and * a Retry-After header was received. diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/connector/DefaultConnection.java b/acme4j-client/src/main/java/org/shredzone/acme4j/connector/DefaultConnection.java index e80a4d4a..57b14087 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/connector/DefaultConnection.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/connector/DefaultConnection.java @@ -233,7 +233,7 @@ public class DefaultConnection implements Connection { @Override public void handleRetryAfter(String message) throws AcmeException { - var retryAfter = getRetryAfterHeader(); + var retryAfter = getRetryAfter(); if (retryAfter.isPresent()) { throw new AcmeRetryAfterException(message, retryAfter.get()); } @@ -454,10 +454,8 @@ public class DefaultConnection implements Connection { } } - /** - * Gets the instant sent with the Retry-After header. - */ - private Optional getRetryAfterHeader() { + @Override + public Optional getRetryAfter() { return getResponse().headers() .firstValue(RETRY_AFTER_HEADER) .map(this::parseRetryAfterHeader); @@ -542,7 +540,7 @@ public class DefaultConnection implements Connection { } if ("rateLimited".equals(error)) { - var retryAfter = getRetryAfterHeader(); + var retryAfter = getRetryAfter(); var rateLimits = getLinks("help"); throw new AcmeRateLimitedException(problem, retryAfter.orElse(null), rateLimits); } diff --git a/acme4j-client/src/test/java/org/shredzone/acme4j/connector/DummyConnection.java b/acme4j-client/src/test/java/org/shredzone/acme4j/connector/DummyConnection.java index 77cf419f..299758ad 100644 --- a/acme4j-client/src/test/java/org/shredzone/acme4j/connector/DummyConnection.java +++ b/acme4j-client/src/test/java/org/shredzone/acme4j/connector/DummyConnection.java @@ -16,6 +16,7 @@ package org.shredzone.acme4j.connector; import java.net.URL; import java.security.KeyPair; import java.security.cert.X509Certificate; +import java.time.Instant; import java.time.ZonedDateTime; import java.util.Collection; import java.util.List; @@ -74,6 +75,11 @@ public class DummyConnection implements Connection { throw new UnsupportedOperationException(); } + @Override + public Optional getRetryAfter() { + throw new UnsupportedOperationException(); + } + @Override public void handleRetryAfter(String message) throws AcmeException { throw new UnsupportedOperationException();