Skip to content

Commit 46cd7c0

Browse files
committed
add null check for response
1 parent 24840c1 commit 46cd7c0

2 files changed

Lines changed: 33 additions & 0 deletions

File tree

‎src/main/java/com/google/firebase/appcheck/internal/AppCheckTokenVerifier.java‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,9 @@ private boolean verifyOneTimeToken(String token)
290290
httpResponse = httpRequest.execute();
291291

292292
GenericJson response = httpResponse.parseAs(GenericJson.class);
293+
if (response == null) {
294+
return false;
295+
}
293296
Boolean alreadyConsumed = (Boolean) response.get("alreadyConsumed");
294297
if (alreadyConsumed == null) {
295298
alreadyConsumed = (Boolean) response.get("already_consumed");

‎src/test/java/com/google/firebase/appcheck/internal/AppCheckTokenVerifierTest.java‎

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,36 @@ public void testVerifyToken_WithConsumeOption_CallsBackend() throws Exception {
209209
assertTrue(response.isAlreadyConsumed().get());
210210
}
211211

212+
@Test
213+
public void testVerifyToken_WithConsumeOption_EmptyBackendResponse_DoesNotThrow()
214+
throws Exception {
215+
when(mockJwtProcessor.process(any(SignedJWT.class), any())).thenReturn(claims);
216+
217+
MockLowLevelHttpResponse mockResponse = new MockLowLevelHttpResponse();
218+
mockResponse.setStatusCode(204);
219+
mockResponse.setContent("");
220+
221+
MockHttpTransport transport =
222+
new MockHttpTransport.Builder().setLowLevelHttpResponse(mockResponse).build();
223+
224+
HttpRequestFactory mockRequestFactory = transport.createRequestFactory();
225+
JsonFactory jsonFactory = ApiClientUtils.getDefaultJsonFactory();
226+
227+
FirebaseApp app = FirebaseApp.getInstance();
228+
AppCheckTokenVerifier customVerifier =
229+
new AppCheckTokenVerifier(app, mockRequestFactory, jsonFactory, mockJwtProcessor);
230+
231+
String token = createToken(header, claims);
232+
VerifyAppCheckTokenOptions options =
233+
VerifyAppCheckTokenOptions.builder().setConsume(true).build();
234+
VerifyAppCheckTokenResponse response = customVerifier.verifyToken(token, options);
235+
236+
assertNotNull(response);
237+
assertEquals(APP_ID, response.getAppId());
238+
assertTrue(response.isAlreadyConsumed().isPresent());
239+
assertFalse(response.isAlreadyConsumed().get());
240+
}
241+
212242
@Test
213243
public void testVerifyToken_NullOrEmptyToken_ThrowsException() {
214244
IllegalArgumentException ex1 =

0 commit comments

Comments
 (0)