From 727cd94028ef5758839ede7ee68199a3036018d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Richard=20K=C3=B6rber?= Date: Fri, 19 May 2023 12:28:46 +0200 Subject: [PATCH] Add method to read Retry-After header --- .../org/shredzone/acme4j/connector/Connection.java | 8 ++++++++ .../shredzone/acme4j/connector/DefaultConnection.java | 10 ++++------ .../shredzone/acme4j/connector/DummyConnection.java | 6 ++++++ 3 files changed, 18 insertions(+), 6 deletions(-) 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();