From 3cf73e9f5cbdbb30660a26a4df7e95c3b7ab7fb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Richard=20K=C3=B6rber?= Date: Thu, 12 Nov 2020 22:39:24 +0100 Subject: [PATCH] Add method to get a list of alternate certificates --- .../java/org/shredzone/acme4j/Certificate.java | 14 ++++++++++++++ .../java/org/shredzone/acme4j/CertificateTest.java | 5 +++++ 2 files changed, 19 insertions(+) diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/Certificate.java b/acme4j-client/src/main/java/org/shredzone/acme4j/Certificate.java index 05875d5c..743f6a7b 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/Certificate.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/Certificate.java @@ -24,6 +24,7 @@ import java.security.cert.X509Certificate; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; import edu.umd.cs.findbugs.annotations.Nullable; import org.shredzone.acme4j.connector.Connection; @@ -110,6 +111,19 @@ public class Certificate extends AcmeResource { } } + /** + * Returns alternate certificate chains, if available. + * + * @return Alternate certificate chains, or empty if there are none. + * @since 2.11 + */ + public List getAlternateCertificates() { + Login login = getLogin(); + return getAlternates().stream() + .map(login::bindCertificate) + .collect(Collectors.toList()); + } + /** * Writes the certificate to the given writer. It is written in PEM format, with the * end-entity cert coming first, followed by the intermediate ceritificates. diff --git a/acme4j-client/src/test/java/org/shredzone/acme4j/CertificateTest.java b/acme4j-client/src/test/java/org/shredzone/acme4j/CertificateTest.java index 92b58b17..ee843cef 100644 --- a/acme4j-client/src/test/java/org/shredzone/acme4j/CertificateTest.java +++ b/acme4j-client/src/test/java/org/shredzone/acme4j/CertificateTest.java @@ -113,6 +113,11 @@ public class CertificateTest { assertThat(cert.getAlternates().get(0), is(url("https://example.com/acme/alt-cert/1"))); assertThat(cert.getAlternates().get(1), is(url("https://example.com/acme/alt-cert/2"))); + assertThat(cert.getAlternateCertificates(), is(notNullValue())); + assertThat(cert.getAlternateCertificates().size(), is(2)); + assertThat(cert.getAlternateCertificates().get(0).getLocation(), is(url("https://example.com/acme/alt-cert/1"))); + assertThat(cert.getAlternateCertificates().get(1).getLocation(), is(url("https://example.com/acme/alt-cert/2"))); + provider.close(); }