From a59f31603d11c2da9986d81fc79a6456296cc134 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Richard=20K=C3=B6rber?= Date: Fri, 11 Dec 2015 18:36:01 +0100 Subject: [PATCH] Add some protected methods for unit testing. Fix bug in URI resolving. --- .../LetsEncryptAcmeClientProvider.java | 62 +++++++++++++------ 1 file changed, 43 insertions(+), 19 deletions(-) diff --git a/acme4j-letsencrypt/src/main/java/org/shredzone/acme4j/provider/LetsEncryptAcmeClientProvider.java b/acme4j-letsencrypt/src/main/java/org/shredzone/acme4j/provider/LetsEncryptAcmeClientProvider.java index cf62cd37..1c0cb905 100644 --- a/acme4j-letsencrypt/src/main/java/org/shredzone/acme4j/provider/LetsEncryptAcmeClientProvider.java +++ b/acme4j-letsencrypt/src/main/java/org/shredzone/acme4j/provider/LetsEncryptAcmeClientProvider.java @@ -58,25 +58,7 @@ public class LetsEncryptAcmeClientProvider extends AbstractAcmeClientProvider { @Override public AcmeClient connect(URI serverUri) { - if (accepts(serverUri)) { - throw new IllegalArgumentException("Unknown URI " + serverUri); - } - - String path = serverUri.getPath(); - String directoryUri; - if (path == null || "v01".equals(path)) { - directoryUri = V01_DIRECTORY_URI; - } else if ("staging".equals(path)) { - directoryUri = STAGING_DIRECTORY_URI; - } else { - throw new IllegalArgumentException("Unknown URI " + serverUri); - } - - try { - return new GenericAcmeClient(this, new URI(directoryUri)); - } catch (URISyntaxException ex) { - throw new IllegalArgumentException(directoryUri, ex); - } + return createAcmeClient(resolve(serverUri)); } @Override @@ -88,6 +70,48 @@ public class LetsEncryptAcmeClientProvider extends AbstractAcmeClientProvider { return conn; } + /** + * Creates an {@link AcmeClient} for the given directory URI. + * + * @param directoryUri + * Directory {@link URI} + * @return {@link AcmeClient} + */ + protected AcmeClient createAcmeClient(URI directoryUri) { + return new GenericAcmeClient(this, directoryUri); + } + + /** + * Resolves the server URI and returns the matching directory URI. + * + * @param serverUri + * Server {@link URI} to resolve + * @return Directory {@link URI} + * @throws IllegalArgumentException + * if the server URI cannot be resolved + */ + protected URI resolve(URI serverUri) { + if (!accepts(serverUri)) { + throw new IllegalArgumentException("Unknown URI " + serverUri); + } + + String path = serverUri.getPath(); + String directoryUri; + if (path == null || "".equals(path) || "/".equals(path) || "/v01".equals(path)) { + directoryUri = V01_DIRECTORY_URI; + } else if ("/staging".equals(path)) { + directoryUri = STAGING_DIRECTORY_URI; + } else { + throw new IllegalArgumentException("Unknown URI " + serverUri); + } + + try { + return new URI(directoryUri); + } catch (URISyntaxException ex) { + throw new IllegalArgumentException(directoryUri, ex); + } + } + /** * Lazily creates an {@link SSLSocketFactory} that exclusively accepts the Let's * Encrypt certificate.