diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/Session.java b/acme4j-client/src/main/java/org/shredzone/acme4j/Session.java index b6a9b039..f7e065d4 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/Session.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/Session.java @@ -311,6 +311,18 @@ public class Session { return resourceMap.get() != null; } + /** + * Purges the directory cache. Makes sure that a fresh copy of the directory will be + * read from the CA on the next time the directory is accessed. + * + * @since 3.0.0 + */ + public void purgeDirectoryCache() { + setDirectoryLastModified(null); + setDirectoryExpires(null); + resourceMap.set(null); + } + /** * Reads the provider's directory, then rebuild the resource map. The resource map * is unchanged if the {@link AcmeProvider} returns that the directory has not been diff --git a/acme4j-client/src/test/java/org/shredzone/acme4j/SessionTest.java b/acme4j-client/src/test/java/org/shredzone/acme4j/SessionTest.java index 88f2d568..048ec042 100644 --- a/acme4j-client/src/test/java/org/shredzone/acme4j/SessionTest.java +++ b/acme4j-client/src/test/java/org/shredzone/acme4j/SessionTest.java @@ -97,6 +97,13 @@ public class SessionTest { assertThat(session.getDirectoryLastModified()).isEqualTo(now); session.setDirectoryLastModified(null); assertThat(session.getDirectoryLastModified()).isNull(); + + session.setDirectoryExpires(now); + session.setDirectoryLastModified(now); + session.purgeDirectoryCache(); + assertThat(session.getDirectoryExpires()).isNull(); + assertThat(session.getDirectoryLastModified()).isNull(); + assertThat(session.hasDirectory()).isFalse(); } /**