mirror of https://github.com/shred/acme4j
Add support for only-return-existing flag
parent
2b3c53455e
commit
dcdf240804
|
@ -41,6 +41,7 @@ public class AccountBuilder {
|
||||||
|
|
||||||
private List<URI> contacts = new ArrayList<>();
|
private List<URI> contacts = new ArrayList<>();
|
||||||
private Boolean termsOfServiceAgreed;
|
private Boolean termsOfServiceAgreed;
|
||||||
|
private Boolean onlyExisting;
|
||||||
private String keyIdentifier;
|
private String keyIdentifier;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -81,6 +82,18 @@ public class AccountBuilder {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Signals that only an existing account should be returned. The server will not
|
||||||
|
* create a new account if the key is not known. This is useful if you only have your
|
||||||
|
* account's key pair available, but not your account's location URL.
|
||||||
|
*
|
||||||
|
* @return itself
|
||||||
|
*/
|
||||||
|
public AccountBuilder onlyExisting() {
|
||||||
|
this.onlyExisting = true;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets a Key Identifier provided by the CA. Use this if your CA requires an
|
* Sets a Key Identifier provided by the CA. Use this if your CA requires an
|
||||||
* individual account identification, e.g. your customer number.
|
* individual account identification, e.g. your customer number.
|
||||||
|
@ -125,6 +138,9 @@ public class AccountBuilder {
|
||||||
claims.put("external-account-binding",
|
claims.put("external-account-binding",
|
||||||
createExternalAccountBinding(keyIdentifier, session.getKeyPair(), resourceUrl));
|
createExternalAccountBinding(keyIdentifier, session.getKeyPair(), resourceUrl));
|
||||||
}
|
}
|
||||||
|
if (onlyExisting != null) {
|
||||||
|
claims.put("only-return-existing", onlyExisting);
|
||||||
|
}
|
||||||
|
|
||||||
conn.sendSignedRequest(resourceUrl, claims, session, true);
|
conn.sendSignedRequest(resourceUrl, claims, session, true);
|
||||||
conn.accept(HttpURLConnection.HTTP_OK, HttpURLConnection.HTTP_CREATED);
|
conn.accept(HttpURLConnection.HTTP_OK, HttpURLConnection.HTTP_CREATED);
|
||||||
|
|
|
@ -191,4 +191,49 @@ public class AccountBuilderTest {
|
||||||
provider.close();
|
provider.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test if an existing account is properly returned.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testOnlyExistingRegistration() throws Exception {
|
||||||
|
TestableConnectionProvider provider = new TestableConnectionProvider() {
|
||||||
|
@Override
|
||||||
|
public void sendSignedRequest(URL url, JSONBuilder claims, Session session, boolean enforceJwk) {
|
||||||
|
assertThat(session, is(notNullValue()));
|
||||||
|
assertThat(url, is(resourceUrl));
|
||||||
|
assertThat(claims.toString(), sameJSONAs(getJSON("newAccountOnlyExisting").toString()));
|
||||||
|
assertThat(enforceJwk, is(true));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int accept(int... httpStatus) throws AcmeException {
|
||||||
|
assertThat(httpStatus, isIntArrayContainingInAnyOrder(HttpURLConnection.HTTP_OK, HttpURLConnection.HTTP_CREATED));
|
||||||
|
return HttpURLConnection.HTTP_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public URL getLocation() {
|
||||||
|
return locationUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JSON readJsonResponse() {
|
||||||
|
return getJSON("newAccountResponse");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
provider.putTestResource(Resource.NEW_ACCOUNT, resourceUrl);
|
||||||
|
|
||||||
|
AccountBuilder builder = new AccountBuilder();
|
||||||
|
builder.onlyExisting();
|
||||||
|
|
||||||
|
Session session = provider.createSession();
|
||||||
|
Account account = builder.create(session);
|
||||||
|
|
||||||
|
assertThat(account.getLocation(), is(locationUrl));
|
||||||
|
assertThat(session.getKeyIdentifier(), is(locationUrl.toString()));
|
||||||
|
|
||||||
|
provider.close();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"only-return-existing": true
|
||||||
|
}
|
|
@ -14,6 +14,17 @@ Account account = builder.create(session);
|
||||||
URL accountLocationUrl = account.getLocation();
|
URL accountLocationUrl = account.getLocation();
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Find out your account's location URL
|
||||||
|
|
||||||
|
You can also use the `AccountBuilder` to find out the location URL of your existing account:
|
||||||
|
|
||||||
|
```java
|
||||||
|
Account account = new AccountBuilder().onlyExisting().create(session);
|
||||||
|
URL accountLocationUrl = account.getLocation();
|
||||||
|
```
|
||||||
|
|
||||||
|
If you do not have an account yet, an exception is raised instead, and no new account is created.
|
||||||
|
|
||||||
## Update your Account
|
## Update your Account
|
||||||
|
|
||||||
At some point, you may want to update your account. For example your contact address might have changed. To do so, invoke `Account.modify()`, perform the changes, and invoke `commit()` to make them permanent.
|
At some point, you may want to update your account. For example your contact address might have changed. To do so, invoke `Account.modify()`, perform the changes, and invoke `commit()` to make them permanent.
|
||||||
|
|
Loading…
Reference in New Issue