From 33db1c21862c980022ed8f4136cd1f723adf6627 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Richard=20K=C3=B6rber?= Date: Wed, 26 Sep 2018 19:30:33 +0200 Subject: [PATCH] Add postasget parameter to generic acme URI --- .../acme4j/provider/GenericAcmeProvider.java | 19 ++++++++++++++- .../provider/GenericAcmeProviderTest.java | 23 +++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/provider/GenericAcmeProvider.java b/acme4j-client/src/main/java/org/shredzone/acme4j/provider/GenericAcmeProvider.java index 18036d54..7e7a053b 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/provider/GenericAcmeProvider.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/provider/GenericAcmeProvider.java @@ -16,9 +16,12 @@ package org.shredzone.acme4j.provider; import java.net.MalformedURLException; import java.net.URI; import java.net.URL; +import java.util.regex.Pattern; import javax.annotation.ParametersAreNonnullByDefault; +import org.shredzone.acme4j.connector.Connection; + /** * A generic {@link AcmeProvider}. It should be working for all ACME servers complying to * the ACME specifications. @@ -28,6 +31,9 @@ import javax.annotation.ParametersAreNonnullByDefault; @ParametersAreNonnullByDefault public class GenericAcmeProvider extends AbstractAcmeProvider { + private static final Pattern PARAM_POST_AS_GET = + Pattern.compile("(^|.*?&)postasget=false(&.*|$)"); + @Override public boolean accepts(URI serverUri) { return "http".equals(serverUri.getScheme()) @@ -37,10 +43,21 @@ public class GenericAcmeProvider extends AbstractAcmeProvider { @Override public URL resolve(URI serverUri) { try { - return serverUri.toURL(); + return new URL(serverUri.getScheme(), serverUri.getHost(), serverUri.getPort(), serverUri.getPath()); } catch (MalformedURLException ex) { throw new IllegalArgumentException("Bad generic server URI", ex); } } + @Override + @SuppressWarnings("deprecation") + public Connection connect(URI serverUri) { + String query = serverUri.getQuery(); + if (query != null && PARAM_POST_AS_GET.matcher(query).matches()) { + return new org.shredzone.acme4j.connector.PreDraft15Connection(createHttpConnector()); + } else { + return super.connect(serverUri); + } + } + } diff --git a/acme4j-client/src/test/java/org/shredzone/acme4j/provider/GenericAcmeProviderTest.java b/acme4j-client/src/test/java/org/shredzone/acme4j/provider/GenericAcmeProviderTest.java index ff1e6e34..d12eacbf 100644 --- a/acme4j-client/src/test/java/org/shredzone/acme4j/provider/GenericAcmeProviderTest.java +++ b/acme4j-client/src/test/java/org/shredzone/acme4j/provider/GenericAcmeProviderTest.java @@ -21,6 +21,8 @@ import java.net.URISyntaxException; import java.net.URL; import org.junit.Test; +import org.shredzone.acme4j.connector.Connection; +import org.shredzone.acme4j.connector.DefaultConnection; /** * Unit tests for {@link GenericAcmeProvider}. @@ -50,6 +52,27 @@ public class GenericAcmeProviderTest { URL resolvedUrl = provider.resolve(serverUri); assertThat(resolvedUrl.toString(), is(equalTo(serverUri.toString()))); + + Connection connection = provider.connect(serverUri); + assertThat(connection, is(instanceOf(DefaultConnection.class))); + } + + /** + * Test if the postasget parameter is accepted. + */ + @Test + @SuppressWarnings("deprecation") + public void testPostAsGet() throws URISyntaxException { + URI serverUri = new URI("http://example.com/acme?postasget=false"); + URI serverUriWithoutQuery = new URI("http://example.com/acme"); + + GenericAcmeProvider provider = new GenericAcmeProvider(); + + URL resolvedUrl = provider.resolve(serverUri); + assertThat(resolvedUrl.toString(), is(equalTo(serverUriWithoutQuery.toString()))); + + Connection connection = provider.connect(serverUri); + assertThat(connection, is(instanceOf(org.shredzone.acme4j.connector.PreDraft15Connection.class))); } }