Move generic challenge generation to AbstractAcmeProvider

pull/55/head
Richard Körber 2018-01-14 14:18:39 +01:00
parent 3f8299c004
commit 1eb56ed8d6
No known key found for this signature in database
GPG Key ID: AAB9FD19C78AA3E0
3 changed files with 15 additions and 12 deletions

View File

@ -27,9 +27,9 @@ import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.StreamSupport; import java.util.stream.StreamSupport;
import org.shredzone.acme4j.challenge.Challenge; import org.shredzone.acme4j.challenge.Challenge;
import org.shredzone.acme4j.challenge.TokenChallenge;
import org.shredzone.acme4j.connector.Resource; import org.shredzone.acme4j.connector.Resource;
import org.shredzone.acme4j.exception.AcmeException; import org.shredzone.acme4j.exception.AcmeException;
import org.shredzone.acme4j.exception.AcmeProtocolException;
import org.shredzone.acme4j.provider.AcmeProvider; import org.shredzone.acme4j.provider.AcmeProvider;
import org.shredzone.acme4j.toolbox.JSON; import org.shredzone.acme4j.toolbox.JSON;
@ -174,15 +174,9 @@ public class Session {
* @return {@link Challenge} instance * @return {@link Challenge} instance
*/ */
public Challenge createChallenge(JSON data) { public Challenge createChallenge(JSON data) {
Objects.requireNonNull(data, "data");
Challenge challenge = provider().createChallenge(this, data); Challenge challenge = provider().createChallenge(this, data);
if (challenge == null) { if (challenge == null) {
if (data.contains("token")) { throw new AcmeProtocolException("Could not create challenge for: " + data);
challenge = new TokenChallenge(this, data);
} else {
challenge = new Challenge(this, data);
}
} }
return challenge; return challenge;
} }

View File

@ -25,6 +25,7 @@ import org.shredzone.acme4j.challenge.Challenge;
import org.shredzone.acme4j.challenge.Dns01Challenge; import org.shredzone.acme4j.challenge.Dns01Challenge;
import org.shredzone.acme4j.challenge.Http01Challenge; import org.shredzone.acme4j.challenge.Http01Challenge;
import org.shredzone.acme4j.challenge.TlsSni02Challenge; import org.shredzone.acme4j.challenge.TlsSni02Challenge;
import org.shredzone.acme4j.challenge.TokenChallenge;
import org.shredzone.acme4j.connector.Connection; import org.shredzone.acme4j.connector.Connection;
import org.shredzone.acme4j.connector.DefaultConnection; import org.shredzone.acme4j.connector.DefaultConnection;
import org.shredzone.acme4j.connector.HttpConnector; import org.shredzone.acme4j.connector.HttpConnector;
@ -72,6 +73,9 @@ public abstract class AbstractAcmeProvider implements AcmeProvider {
/** /**
* {@inheritDoc} * {@inheritDoc}
* <p> * <p>
* This implementation handles the standard challenge types. For unknown types,
* generic {@link Challenge} or {@link TokenChallenge} instances are created.
* <p>
* Custom provider implementations may override this method to provide challenges that * Custom provider implementations may override this method to provide challenges that
* are unique to the provider. * are unique to the provider.
*/ */
@ -83,11 +87,15 @@ public abstract class AbstractAcmeProvider implements AcmeProvider {
String type = data.get("type").required().asString(); String type = data.get("type").required().asString();
BiFunction<Session, JSON, Challenge> constructor = CHALLENGES.get(type); BiFunction<Session, JSON, Challenge> constructor = CHALLENGES.get(type);
if (constructor == null) { if (constructor != null) {
return null; return constructor.apply(session, data);
} }
return constructor.apply(session, data); if (data.contains("token")) {
return new TokenChallenge(session, data);
} else {
return new Challenge(session, data);
}
} }
/** /**

View File

@ -155,7 +155,8 @@ public class AbstractAcmeProviderTest {
.put("url", "https://example.com/some/challenge") .put("url", "https://example.com/some/challenge")
.toJSON(); .toJSON();
Challenge c6 = provider.createChallenge(session, json6); Challenge c6 = provider.createChallenge(session, json6);
assertThat(c6, is(nullValue())); assertThat(c6, not(nullValue()));
assertThat(c6, instanceOf(Challenge.class));
try { try {
JSON json7 = new JSONBuilder() JSON json7 = new JSONBuilder()