Skip to content

Commit 4e686f7

Browse files
authored
Merge pull request #42 from IABTechLab/gdm-jsonnull-hotfix
Added JsonNull handling in KeyParser
2 parents bd45979 + 89d24a7 commit 4e686f7

File tree

2 files changed

+55
-22
lines changed

2 files changed

+55
-22
lines changed

src/main/java/com/uid2/client/KeyParser.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ static KeyContainer parse(InputStream stream) {
4040
tokenExpirySeconds = defaultTokenExpiryDays * 24 * 60 * 60;
4141
}
4242

43-
JsonArray keysJson = body.get("keys").getAsJsonArray();
43+
JsonArray keysJson = isNull(body.get("keys")) ? new JsonArray() : body.get("keys").getAsJsonArray();
4444

4545
List<Key> keys = new ArrayList<>();
4646
for (JsonElement element : keysJson) {
@@ -62,10 +62,15 @@ static KeyContainer parse(InputStream stream) {
6262

6363
static private int getAsInt(JsonObject body, String memberName) {
6464
JsonElement element = body.get(memberName);
65-
return element == null ? 0 : element.getAsInt();
65+
return isNull(element) ? 0 : element.getAsInt();
6666
}
67+
6768
static private long getAsLong(JsonObject body, String memberName) {
6869
JsonElement element = body.get(memberName);
69-
return element == null ? 0 : element.getAsLong();
70+
return isNull(element) ? 0 : element.getAsLong();
71+
}
72+
73+
static private boolean isNull(JsonElement jo) {
74+
return jo == null || jo.isJsonNull();
7075
}
7176
}

src/test/java/com/uid2/client/KeyParserTests.java

Lines changed: 47 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,10 @@
1010

1111

1212
public class KeyParserTests {
13+
private static final int DEFAULT_TOKEN_EXPIRY_SECONDS = 2592000;
14+
1315
@Test
14-
public void parseKeyListSharingEndpoint() throws Exception
15-
{
16+
public void parseKeyListSharingEndpoint() {
1617
String s = "{ \"body\": { " +
1718
"\"caller_site_id\": 11, " +
1819
"\"master_keyset_id\": 1, " +
@@ -42,32 +43,32 @@ public void parseKeyListSharingEndpoint() throws Exception
4243
KeyContainer keyContainer = parse(s);
4344

4445
assertEquals(11, keyContainer.getCallerSiteId());
46+
assertEquals(1728000, keyContainer.getTokenExpirySeconds());
47+
4548
Key masterKey = keyContainer.getMasterKey(Instant.now());
4649
assertNotNull(masterKey);
4750
assertEquals(2, masterKey.getId());
4851

4952
Key defaultKey = keyContainer.getDefaultKey(Instant.now());
5053
assertNotNull(defaultKey);
5154
assertEquals(3, defaultKey.getId());
52-
assertEquals(1728000, keyContainer.getTokenExpirySeconds());
5355

54-
Key key = keyContainer.getKey(3);
55-
assertNotNull(key);
56-
assertEquals(99999, key.getKeysetId());
57-
assertEquals(Instant.ofEpochSecond(1609459200), key.getCreated());
58-
assertEquals(Instant.ofEpochSecond(1609459210), key.getActivates());
59-
assertEquals(Instant.ofEpochSecond(1893456000), key.getExpires());
60-
assertEquals("o8HsvkwJ5Ulnrd0uui3GpukpwDapj+JLqb7qfN/GJKo=", InputUtil.byteArrayToBase64(key.getSecret()));
61-
62-
key = keyContainer.getKey(2);
63-
assertNotNull(key);
64-
assertEquals(1, key.getKeysetId());
65-
assertEquals(Instant.ofEpochSecond(1609458200), key.getCreated());
66-
assertEquals(Instant.ofEpochSecond(1609459220), key.getActivates());
67-
assertEquals(Instant.ofEpochSecond(1893457000), key.getExpires());
68-
assertEquals("DD67xF8OFmbJ1/lMPQ6fGRDbJOT4kXErrYWcKdFfCUE=", InputUtil.byteArrayToBase64(key.getSecret()));
69-
}
56+
Key key3 = keyContainer.getKey(3);
57+
assertNotNull(key3);
58+
assertEquals(99999, key3.getKeysetId());
59+
assertEquals(Instant.ofEpochSecond(1609459200), key3.getCreated());
60+
assertEquals(Instant.ofEpochSecond(1609459210), key3.getActivates());
61+
assertEquals(Instant.ofEpochSecond(1893456000), key3.getExpires());
62+
assertEquals("o8HsvkwJ5Ulnrd0uui3GpukpwDapj+JLqb7qfN/GJKo=", InputUtil.byteArrayToBase64(key3.getSecret()));
7063

64+
Key key2 = keyContainer.getKey(2);
65+
assertNotNull(key2);
66+
assertEquals(1, key2.getKeysetId());
67+
assertEquals(Instant.ofEpochSecond(1609458200), key2.getCreated());
68+
assertEquals(Instant.ofEpochSecond(1609459220), key2.getActivates());
69+
assertEquals(Instant.ofEpochSecond(1893457000), key2.getExpires());
70+
assertEquals("DD67xF8OFmbJ1/lMPQ6fGRDbJOT4kXErrYWcKdFfCUE=", InputUtil.byteArrayToBase64(key2.getSecret()));
71+
}
7172

7273
@Test
7374
public void parseErrorKeyList() {
@@ -79,6 +80,33 @@ public void parseErrorKeyList() {
7980
assertThrows(Exception.class, () -> parse("{\"body\": [{\"id\": 5}]}"));
8081
}
8182

83+
@Test
84+
public void parseWithNullTokenExpirySecondField() {
85+
String s = "{ \"body\": { " +
86+
"\"caller_site_id\": 11, " +
87+
"\"token_expiry_seconds\": null " +
88+
"}, " +
89+
"\"status\": \"success\" }";
90+
91+
KeyContainer keyContainer = parse(s);
92+
93+
assertEquals(11, keyContainer.getCallerSiteId());
94+
assertEquals(DEFAULT_TOKEN_EXPIRY_SECONDS, keyContainer.getTokenExpirySeconds());
95+
}
96+
97+
@Test
98+
public void parseWithMissingTokenExpirySecondField() {
99+
String s = "{ \"body\": { " +
100+
"\"caller_site_id\": 11 " +
101+
"}, " +
102+
"\"status\": \"success\" }";
103+
104+
KeyContainer keyContainer = parse(s);
105+
106+
assertEquals(11, keyContainer.getCallerSiteId());
107+
assertEquals(DEFAULT_TOKEN_EXPIRY_SECONDS, keyContainer.getTokenExpirySeconds());
108+
}
109+
82110
private KeyContainer parse(String str) {
83111
InputStream inputStream = new ByteArrayInputStream(str.getBytes(StandardCharsets.UTF_8));
84112
return KeyParser.parse(inputStream);

0 commit comments

Comments
 (0)