mirror of https://github.com/shred/acme4j
Handle empty JSON responses
parent
bb91000fb2
commit
7cfcbc99b6
|
@ -158,7 +158,10 @@ public class Account extends AcmeJsonResource {
|
|||
conn.sendSignedRequest(newAuthzUrl, claims, getLogin());
|
||||
|
||||
Authorization auth = getLogin().bindAuthorization(conn.getLocation());
|
||||
auth.setJSON(conn.readJsonResponse());
|
||||
JSON json = conn.readJsonResponse();
|
||||
if (json != null) {
|
||||
auth.setJSON(json);
|
||||
}
|
||||
return auth;
|
||||
}
|
||||
}
|
||||
|
@ -224,7 +227,10 @@ public class Account extends AcmeJsonResource {
|
|||
|
||||
conn.sendSignedRequest(getLocation(), claims, getLogin());
|
||||
|
||||
setJSON(conn.readJsonResponse());
|
||||
JSON json = conn.readJsonResponse();
|
||||
if (json != null) {
|
||||
setJSON(json);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -294,7 +300,10 @@ public class Account extends AcmeJsonResource {
|
|||
|
||||
conn.sendSignedRequest(getLocation(), claims, getLogin());
|
||||
|
||||
setJSON(conn.readJsonResponse());
|
||||
JSON json = conn.readJsonResponse();
|
||||
if (json != null) {
|
||||
setJSON(json);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -35,6 +35,7 @@ import org.shredzone.acme4j.connector.Connection;
|
|||
import org.shredzone.acme4j.connector.Resource;
|
||||
import org.shredzone.acme4j.exception.AcmeException;
|
||||
import org.shredzone.acme4j.toolbox.AcmeUtils;
|
||||
import org.shredzone.acme4j.toolbox.JSON;
|
||||
import org.shredzone.acme4j.toolbox.JSONBuilder;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
@ -210,7 +211,10 @@ public class AccountBuilder {
|
|||
URL location = conn.getLocation();
|
||||
|
||||
Login login = new Login(location, keyPair, session);
|
||||
login.getAccount().setJSON(conn.readJsonResponse());
|
||||
JSON json = conn.readJsonResponse();
|
||||
if (json != null) {
|
||||
login.getAccount().setJSON(json);
|
||||
}
|
||||
return login;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -132,7 +132,10 @@ public class Authorization extends AcmeJsonResource {
|
|||
|
||||
conn.sendSignedRequest(getLocation(), claims, getLogin());
|
||||
|
||||
setJSON(conn.readJsonResponse());
|
||||
JSON json = conn.readJsonResponse();
|
||||
if (json != null) {
|
||||
setJSON(json);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -25,6 +25,7 @@ import java.util.Set;
|
|||
import org.shredzone.acme4j.connector.Connection;
|
||||
import org.shredzone.acme4j.connector.Resource;
|
||||
import org.shredzone.acme4j.exception.AcmeException;
|
||||
import org.shredzone.acme4j.toolbox.JSON;
|
||||
import org.shredzone.acme4j.toolbox.JSONBuilder;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
@ -152,7 +153,10 @@ public class OrderBuilder {
|
|||
conn.sendSignedRequest(session.resourceUrl(Resource.NEW_ORDER), claims, login);
|
||||
|
||||
Order order = new Order(login, conn.getLocation());
|
||||
order.setJSON(conn.readJsonResponse());
|
||||
JSON json = conn.readJsonResponse();
|
||||
if (json != null) {
|
||||
order.setJSON(json);
|
||||
}
|
||||
return order;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -145,7 +145,10 @@ public class Challenge extends AcmeJsonResource {
|
|||
|
||||
conn.sendSignedRequest(getLocation(), claims, getLogin());
|
||||
|
||||
setJSON(conn.readJsonResponse());
|
||||
JSON json = conn.readJsonResponse();
|
||||
if (json != null) {
|
||||
setJSON(json);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -94,7 +94,7 @@ public interface Connection extends AutoCloseable {
|
|||
/**
|
||||
* Reads a server response as JSON data.
|
||||
*
|
||||
* @return The JSON response
|
||||
* @return The JSON response, or {@code null} if the server did not provide any data.
|
||||
*/
|
||||
JSON readJsonResponse() throws AcmeException;
|
||||
|
||||
|
|
|
@ -192,6 +192,10 @@ public class DefaultConnection implements Connection {
|
|||
public JSON readJsonResponse() throws AcmeException {
|
||||
assertConnectionIsOpen();
|
||||
|
||||
if (conn.getContentLength() == 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
String contentType = AcmeUtils.getContentType(conn.getHeaderField(CONTENT_TYPE_HEADER));
|
||||
if (!("application/json".equals(contentType)
|
||||
|| "application/problem+json".equals(contentType))) {
|
||||
|
|
|
@ -427,6 +427,7 @@ public class DefaultConnectionTest {
|
|||
String jsonData = "{\"type\":\"urn:ietf:params:acme:error:unauthorized\",\"detail\":\"Invalid response: 404\"}";
|
||||
|
||||
when(mockUrlConnection.getHeaderField("Content-Type")).thenReturn("application/problem+json");
|
||||
when(mockUrlConnection.getContentLength()).thenReturn(jsonData.length());
|
||||
when(mockUrlConnection.getResponseCode()).thenReturn(HttpURLConnection.HTTP_FORBIDDEN);
|
||||
when(mockUrlConnection.getOutputStream()).thenReturn(new ByteArrayOutputStream());
|
||||
when(mockUrlConnection.getErrorStream()).thenReturn(new ByteArrayInputStream(jsonData.getBytes("utf-8")));
|
||||
|
@ -446,6 +447,7 @@ public class DefaultConnectionTest {
|
|||
|
||||
verify(mockUrlConnection, atLeastOnce()).getHeaderField("Content-Type");
|
||||
verify(mockUrlConnection, atLeastOnce()).getResponseCode();
|
||||
verify(mockUrlConnection).getContentLength();
|
||||
verify(mockUrlConnection).getErrorStream();
|
||||
verify(mockUrlConnection).getURL();
|
||||
}
|
||||
|
@ -461,6 +463,7 @@ public class DefaultConnectionTest {
|
|||
linkHeader.put("Link", Arrays.asList("<https://example.com/tos.pdf>; rel=\"terms-of-service\""));
|
||||
|
||||
when(mockUrlConnection.getHeaderField("Content-Type")).thenReturn("application/problem+json");
|
||||
when(mockUrlConnection.getContentLength()).thenReturn(jsonData.length());
|
||||
when(mockUrlConnection.getHeaderFields()).thenReturn(linkHeader);
|
||||
when(mockUrlConnection.getResponseCode()).thenReturn(HttpURLConnection.HTTP_FORBIDDEN);
|
||||
when(mockUrlConnection.getOutputStream()).thenReturn(new ByteArrayOutputStream());
|
||||
|
@ -484,6 +487,7 @@ public class DefaultConnectionTest {
|
|||
verify(mockUrlConnection, atLeastOnce()).getHeaderFields();
|
||||
verify(mockUrlConnection, atLeastOnce()).getResponseCode();
|
||||
verify(mockUrlConnection).getErrorStream();
|
||||
verify(mockUrlConnection).getContentLength();
|
||||
verify(mockUrlConnection, atLeastOnce()).getURL();
|
||||
}
|
||||
|
||||
|
@ -500,6 +504,7 @@ public class DefaultConnectionTest {
|
|||
Instant retryAfter = Instant.now().plusSeconds(30L).truncatedTo(ChronoUnit.MILLIS);
|
||||
|
||||
when(mockUrlConnection.getHeaderField("Content-Type")).thenReturn("application/problem+json");
|
||||
when(mockUrlConnection.getContentLength()).thenReturn(jsonData.length());
|
||||
when(mockUrlConnection.getHeaderField("Retry-After")).thenReturn(retryAfter.toString());
|
||||
when(mockUrlConnection.getHeaderFieldDate("Retry-After", 0L)).thenReturn(retryAfter.toEpochMilli());
|
||||
when(mockUrlConnection.getHeaderFields()).thenReturn(linkHeader);
|
||||
|
@ -529,6 +534,7 @@ public class DefaultConnectionTest {
|
|||
verify(mockUrlConnection).getHeaderFieldDate("Retry-After", 0L);
|
||||
verify(mockUrlConnection, atLeastOnce()).getHeaderFields();
|
||||
verify(mockUrlConnection, atLeastOnce()).getResponseCode();
|
||||
verify(mockUrlConnection).getContentLength();
|
||||
verify(mockUrlConnection).getErrorStream();
|
||||
verify(mockUrlConnection, atLeastOnce()).getURL();
|
||||
}
|
||||
|
@ -833,6 +839,7 @@ public class DefaultConnectionTest {
|
|||
String jsonData = "{\n\"foo\":123,\n\"bar\":\"a-string\"\n}\n";
|
||||
|
||||
when(mockUrlConnection.getHeaderField("Content-Type")).thenReturn("application/json");
|
||||
when(mockUrlConnection.getContentLength()).thenReturn(jsonData.length());
|
||||
when(mockUrlConnection.getResponseCode()).thenReturn(HttpURLConnection.HTTP_OK);
|
||||
when(mockUrlConnection.getInputStream()).thenReturn(new ByteArrayInputStream(jsonData.getBytes("utf-8")));
|
||||
|
||||
|
@ -845,6 +852,7 @@ public class DefaultConnectionTest {
|
|||
}
|
||||
|
||||
verify(mockUrlConnection).getHeaderField("Content-Type");
|
||||
verify(mockUrlConnection).getContentLength();
|
||||
verify(mockUrlConnection).getResponseCode();
|
||||
verify(mockUrlConnection).getInputStream();
|
||||
verifyNoMoreInteractions(mockUrlConnection);
|
||||
|
|
Loading…
Reference in New Issue