mirror of https://github.com/shred/acme4j
Add postasget parameter to generic acme URI
parent
01398e1bbc
commit
33db1c2186
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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)));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue