Handle agreementRequired error

pull/30/head
Richard Körber 2016-11-21 01:26:14 +01:00
parent 0f44b6fc0f
commit 3803833240
2 changed files with 72 additions and 0 deletions

View File

@ -41,6 +41,7 @@ import org.jose4j.jwk.PublicJsonWebKey;
import org.jose4j.jws.JsonWebSignature;
import org.jose4j.lang.JoseException;
import org.shredzone.acme4j.Session;
import org.shredzone.acme4j.exception.AcmeAgreementRequiredException;
import org.shredzone.acme4j.exception.AcmeConflictException;
import org.shredzone.acme4j.exception.AcmeException;
import org.shredzone.acme4j.exception.AcmeProtocolException;
@ -347,6 +348,13 @@ public class DefaultConnection implements Connection {
case ACME_ERROR_PREFIX_DEPRECATED + "unauthorized":
throw new AcmeUnauthorizedException(type, detail);
case ACME_ERROR_PREFIX + "agreementRequired":
case ACME_ERROR_PREFIX_DEPRECATED + "agreementRequired":
String instance = (String) map.get("instance");
throw new AcmeAgreementRequiredException(
type, detail, getLink("terms-of-service"),
(instance != null ? resolveRelative(instance) : null));
case ACME_ERROR_PREFIX + "rateLimited":
case ACME_ERROR_PREFIX_DEPRECATED + "rateLimited":
throw new AcmeRateLimitExceededException(

View File

@ -0,0 +1,64 @@
/*
* acme4j - Java ACME client
*
* Copyright (C) 2016 Richard "Shred" Körber
* http://acme4j.shredzone.org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/
package org.shredzone.acme4j.exception;
import java.net.URI;
/**
* An exception that is thrown when the client needs to accept the terms of service in
* order to continue.
*/
public class AcmeAgreementRequiredException extends AcmeServerException {
private static final long serialVersionUID = 7719055447283858352L;
private final URI agreementUri;
private final URI instance;
/**
* Creates a new {@link AcmeAgreementRequiredException}.
*
* @param type
* System readable error type (here
* {@code "urn:ietf:params:acme:error:agreementRequired"})
* @param detail
* Human readable error message
* @param agreementUri
* {@link URI} of the agreement document to accept
* @param instance
* {@link URI} to be visited by a human, showing instructions for how to
* agree to the terms and conditions.
*/
public AcmeAgreementRequiredException(String type, String detail, URI agreementUri, URI instance) {
super(type, detail);
this.agreementUri = agreementUri;
this.instance = instance;
}
/**
* Returns the {@link URI} of the agreement document to accept, or {@code null} if
* the server did not provide a link to such a document.
*/
public URI getAgreementUri() {
return agreementUri;
}
/**
* Returns the {@link URI} of a document showing a human how to agree to the terms and
* conditions, or {@code null} if the server did not provide such a link.
*/
public URI getInstance() {
return instance;
}
}