Evaluate terms-of-service header. Agreement property is now type URI.

pull/17/merge
Richard Körber 2015-12-16 00:53:31 +01:00
parent 7ecf5674c9
commit 5fc97fab34
4 changed files with 30 additions and 19 deletions

View File

@ -24,22 +24,22 @@ import java.util.List;
*/
public class Registration {
private String agreementUrl;
private List<String> contacts = new ArrayList<>();
private URI agreement;
private URI location;
/**
* Returns the URL of the agreement document the user is required to accept.
* Returns the URI of the agreement document the user is required to accept.
*/
public String getAgreementUrl() {
return agreementUrl;
public URI getAgreement() {
return agreement;
}
/**
* Sets the URL of the agreement document the user is required to accept.
* Sets the URI of the agreement document the user is required to accept.
*/
public void setAgreementUrl(String agreementUrl) {
this.agreementUrl = agreementUrl;
public void setAgreement(URI agreement) {
this.agreement = agreement;
}
/**

View File

@ -81,8 +81,6 @@ public abstract class AbstractAcmeClient implements AcmeClient {
if (!registration.getContacts().isEmpty()) {
claims.put("contact", registration.getContacts());
}
if (registration.getAgreementUrl() != null) {
claims.put("agreement", registration.getAgreementUrl());
int rc = conn.sendSignedRequest(resourceUri(Resource.NEW_REG), claims, session, account);
if (rc != HttpURLConnection.HTTP_CREATED && rc != HttpURLConnection.HTTP_CONFLICT) {
@ -94,6 +92,11 @@ public abstract class AbstractAcmeClient implements AcmeClient {
registration.setLocation(location);
}
URI tos = conn.getLink("terms-of-service");
if (tos != null) {
registration.setAgreement(tos);
}
if (rc == HttpURLConnection.HTTP_CONFLICT) {
throw new AcmeConflictException("Account is already registered", location);
}
@ -113,8 +116,8 @@ public abstract class AbstractAcmeClient implements AcmeClient {
if (!registration.getContacts().isEmpty()) {
claims.put("contact", registration.getContacts());
}
if (registration.getAgreementUrl() != null) {
claims.put("agreement", registration.getAgreementUrl());
if (registration.getAgreement() != null) {
claims.put("agreement", registration.getAgreement());
}
int rc = conn.sendSignedRequest(registration.getLocation(), claims, session, account);
@ -123,6 +126,11 @@ public abstract class AbstractAcmeClient implements AcmeClient {
}
registration.setLocation(conn.getLocation());
URI tos = conn.getLink("terms-of-service");
if (tos != null) {
registration.setAgreement(tos);
}
}
}

View File

@ -35,16 +35,16 @@ public class RegistrationTest {
public void testGetterAndSetter() throws URISyntaxException {
Registration registration = new Registration();
assertThat(registration.getAgreementUrl(), is(nullValue()));
assertThat(registration.getAgreement(), is(nullValue()));
assertThat(registration.getLocation(), is(nullValue()));
assertThat(registration.getContacts(), is(empty()));
registration.setAgreementUrl("http://example.com/agreement.pdf");
registration.setAgreement(new URI("http://example.com/agreement.pdf"));
registration.setLocation(new URI("http://example.com/acme/12345"));
registration.getContacts().add("mailto:foo@example.com");
registration.getContacts().add("mailto:bar@example.com");
assertThat(registration.getAgreementUrl(), is("http://example.com/agreement.pdf"));
assertThat(registration.getAgreement(), is(new URI("http://example.com/agreement.pdf")));
assertThat(registration.getLocation(), is(new URI("http://example.com/acme/12345")));
assertThat(registration.getContacts(), contains("mailto:foo@example.com", "mailto:bar@example.com"));
}

View File

@ -28,6 +28,7 @@ import javax.swing.JOptionPane;
import org.shredzone.acme4j.challenge.Challenge;
import org.shredzone.acme4j.challenge.HttpChallenge;
import org.shredzone.acme4j.exception.AcmeConflictException;
import org.shredzone.acme4j.exception.AcmeException;
import org.shredzone.acme4j.util.CSRBuilder;
import org.shredzone.acme4j.util.CertificateUtils;
@ -60,10 +61,10 @@ public class ClientTest {
*
* @param domains
* Domains to get a common certificate for
* @param agreementUrl
* Agreement URL to be used for creating an account
* @param agreement
* Agreement URI to be used for creating an account
*/
public void fetchCertificate(Collection<String> domains, String agreementUrl)
public void fetchCertificate(Collection<String> domains, URI agreement)
throws IOException, AcmeException {
// Load or create a key pair for the user's account
KeyPair userKeyPair;
@ -87,10 +88,12 @@ public class ClientTest {
// Register a new user
Registration reg = new Registration();
reg.setAgreementUrl(agreementUrl);
reg.setAgreement(agreement);
try {
client.newRegistration(account, reg);
LOG.info("Registered a new user, URI: " + reg.getLocation());
} catch (AcmeConflictException ex) {
LOG.info("Account does already exist, URI: " + reg.getLocation());
} catch (AcmeException ex) {
LOG.warn("Registration failed", ex);
@ -198,7 +201,7 @@ public class ClientTest {
Collection<String> domains = Arrays.asList(args);
try {
ClientTest ct = new ClientTest();
ct.fetchCertificate(domains, AGREEMENT_URL);
ct.fetchCertificate(domains, new URI(AGREEMENT_URL));
} catch (Exception ex) {
LOG.error("Failed to get a certificate for domains " + domains, ex);
}