Add method to read Retry-After header

pull/140/head
Richard Körber 2023-05-19 12:28:46 +02:00
parent 160f507767
commit 727cd94028
No known key found for this signature in database
GPG Key ID: AAB9FD19C78AA3E0
3 changed files with 18 additions and 6 deletions

View File

@ -16,6 +16,7 @@ package org.shredzone.acme4j.connector;
import java.net.URL; import java.net.URL;
import java.security.KeyPair; import java.security.KeyPair;
import java.security.cert.X509Certificate; import java.security.cert.X509Certificate;
import java.time.Instant;
import java.time.ZonedDateTime; import java.time.ZonedDateTime;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
@ -148,6 +149,13 @@ public interface Connection extends AutoCloseable {
*/ */
List<X509Certificate> readCertificates() throws AcmeException; List<X509Certificate> readCertificates() throws AcmeException;
/**
* Returns the Retry-After header if present.
*
* @since 3.0.0
*/
Optional<Instant> getRetryAfter();
/** /**
* Throws an {@link AcmeRetryAfterException} if the last status was HTTP Accepted and * Throws an {@link AcmeRetryAfterException} if the last status was HTTP Accepted and
* a Retry-After header was received. * a Retry-After header was received.

View File

@ -233,7 +233,7 @@ public class DefaultConnection implements Connection {
@Override @Override
public void handleRetryAfter(String message) throws AcmeException { public void handleRetryAfter(String message) throws AcmeException {
var retryAfter = getRetryAfterHeader(); var retryAfter = getRetryAfter();
if (retryAfter.isPresent()) { if (retryAfter.isPresent()) {
throw new AcmeRetryAfterException(message, retryAfter.get()); throw new AcmeRetryAfterException(message, retryAfter.get());
} }
@ -454,10 +454,8 @@ public class DefaultConnection implements Connection {
} }
} }
/** @Override
* Gets the instant sent with the Retry-After header. public Optional<Instant> getRetryAfter() {
*/
private Optional<Instant> getRetryAfterHeader() {
return getResponse().headers() return getResponse().headers()
.firstValue(RETRY_AFTER_HEADER) .firstValue(RETRY_AFTER_HEADER)
.map(this::parseRetryAfterHeader); .map(this::parseRetryAfterHeader);
@ -542,7 +540,7 @@ public class DefaultConnection implements Connection {
} }
if ("rateLimited".equals(error)) { if ("rateLimited".equals(error)) {
var retryAfter = getRetryAfterHeader(); var retryAfter = getRetryAfter();
var rateLimits = getLinks("help"); var rateLimits = getLinks("help");
throw new AcmeRateLimitedException(problem, retryAfter.orElse(null), rateLimits); throw new AcmeRateLimitedException(problem, retryAfter.orElse(null), rateLimits);
} }

View File

@ -16,6 +16,7 @@ package org.shredzone.acme4j.connector;
import java.net.URL; import java.net.URL;
import java.security.KeyPair; import java.security.KeyPair;
import java.security.cert.X509Certificate; import java.security.cert.X509Certificate;
import java.time.Instant;
import java.time.ZonedDateTime; import java.time.ZonedDateTime;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
@ -74,6 +75,11 @@ public class DummyConnection implements Connection {
throw new UnsupportedOperationException(); throw new UnsupportedOperationException();
} }
@Override
public Optional<Instant> getRetryAfter() {
throw new UnsupportedOperationException();
}
@Override @Override
public void handleRetryAfter(String message) throws AcmeException { public void handleRetryAfter(String message) throws AcmeException {
throw new UnsupportedOperationException(); throw new UnsupportedOperationException();