Add postasget parameter to generic acme URI

pull/81/head
Richard Körber 2018-09-26 19:30:33 +02:00
parent 01398e1bbc
commit 33db1c2186
No known key found for this signature in database
GPG Key ID: AAB9FD19C78AA3E0
2 changed files with 41 additions and 1 deletions

View File

@ -16,9 +16,12 @@ package org.shredzone.acme4j.provider;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.URI; import java.net.URI;
import java.net.URL; import java.net.URL;
import java.util.regex.Pattern;
import javax.annotation.ParametersAreNonnullByDefault; import javax.annotation.ParametersAreNonnullByDefault;
import org.shredzone.acme4j.connector.Connection;
/** /**
* A generic {@link AcmeProvider}. It should be working for all ACME servers complying to * A generic {@link AcmeProvider}. It should be working for all ACME servers complying to
* the ACME specifications. * the ACME specifications.
@ -28,6 +31,9 @@ import javax.annotation.ParametersAreNonnullByDefault;
@ParametersAreNonnullByDefault @ParametersAreNonnullByDefault
public class GenericAcmeProvider extends AbstractAcmeProvider { public class GenericAcmeProvider extends AbstractAcmeProvider {
private static final Pattern PARAM_POST_AS_GET =
Pattern.compile("(^|.*?&)postasget=false(&.*|$)");
@Override @Override
public boolean accepts(URI serverUri) { public boolean accepts(URI serverUri) {
return "http".equals(serverUri.getScheme()) return "http".equals(serverUri.getScheme())
@ -37,10 +43,21 @@ public class GenericAcmeProvider extends AbstractAcmeProvider {
@Override @Override
public URL resolve(URI serverUri) { public URL resolve(URI serverUri) {
try { try {
return serverUri.toURL(); return new URL(serverUri.getScheme(), serverUri.getHost(), serverUri.getPort(), serverUri.getPath());
} catch (MalformedURLException ex) { } catch (MalformedURLException ex) {
throw new IllegalArgumentException("Bad generic server URI", 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);
}
}
} }

View File

@ -21,6 +21,8 @@ import java.net.URISyntaxException;
import java.net.URL; import java.net.URL;
import org.junit.Test; import org.junit.Test;
import org.shredzone.acme4j.connector.Connection;
import org.shredzone.acme4j.connector.DefaultConnection;
/** /**
* Unit tests for {@link GenericAcmeProvider}. * Unit tests for {@link GenericAcmeProvider}.
@ -50,6 +52,27 @@ public class GenericAcmeProviderTest {
URL resolvedUrl = provider.resolve(serverUri); URL resolvedUrl = provider.resolve(serverUri);
assertThat(resolvedUrl.toString(), is(equalTo(serverUri.toString()))); 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)));
} }
} }