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.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);
}
}
}

View File

@ -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)));
}
}