Skip to content

Commit 241f6f6

Browse files
authored
Merge pull request #949 from AzureAD/avdunn/json-removal
Merge JSON and Nimbus feature branches
2 parents 169c2b0 + 75abea0 commit 241f6f6

30 files changed

+1513
-447
lines changed

msal4j-sdk/src/integrationtest/java/com.microsoft.aad.msal4j/CachePersistenceIT.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ void cacheDeserializationSerializationTest() throws IOException, URISyntaxExcept
5454

5555
assertEquals(app.getAccounts().join().size(), 1);
5656
assertEquals(app.tokenCache.accounts.size(), 1);
57-
assertEquals(app.tokenCache.accessTokens.size(), 2);
57+
assertEquals(app.tokenCache.accessTokens.size(), 1);
5858
assertEquals(app.tokenCache.refreshTokens.size(), 1);
5959
assertEquals(app.tokenCache.idTokens.size(), 1);
6060
assertEquals(app.tokenCache.appMetadata.size(), 1);
@@ -65,7 +65,7 @@ void cacheDeserializationSerializationTest() throws IOException, URISyntaxExcept
6565

6666
assertEquals(app.getAccounts().join().size(), 1);
6767
assertEquals(app.tokenCache.accounts.size(), 1);
68-
assertEquals(app.tokenCache.accessTokens.size(), 2);
68+
assertEquals(app.tokenCache.accessTokens.size(), 1);
6969
assertEquals(app.tokenCache.refreshTokens.size(), 1);
7070
assertEquals(app.tokenCache.idTokens.size(), 1);
7171
assertEquals(app.tokenCache.appMetadata.size(), 1);
@@ -74,7 +74,7 @@ void cacheDeserializationSerializationTest() throws IOException, URISyntaxExcept
7474

7575
assertEquals(app.getAccounts().join().size(), 0);
7676
assertEquals(app.tokenCache.accounts.size(), 0);
77-
assertEquals(app.tokenCache.accessTokens.size(), 1);
77+
assertEquals(app.tokenCache.accessTokens.size(), 0);
7878
assertEquals(app.tokenCache.refreshTokens.size(), 0);
7979
assertEquals(app.tokenCache.idTokens.size(), 0);
8080
assertEquals(app.tokenCache.appMetadata.size(), 1);
@@ -84,7 +84,7 @@ void cacheDeserializationSerializationTest() throws IOException, URISyntaxExcept
8484

8585
assertEquals(app.getAccounts().join().size(), 0);
8686
assertEquals(app.tokenCache.accounts.size(), 0);
87-
assertEquals(app.tokenCache.accessTokens.size(), 1);
87+
assertEquals(app.tokenCache.accessTokens.size(), 0);
8888
assertEquals(app.tokenCache.refreshTokens.size(), 0);
8989
assertEquals(app.tokenCache.idTokens.size(), 0);
9090
assertEquals(app.tokenCache.appMetadata.size(), 1);

msal4j-sdk/src/integrationtest/java/com.microsoft.aad.msal4j/TokenCacheIT.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ void twoAccountsInCache_SameUserDifferentTenants_RemoveAccountTest() throws Exce
163163
// RemoveAccount should remove both cache entities
164164
pca2.removeAccount(account).join();
165165

166-
assertEquals(pca.getAccounts().join().size(), 0);
166+
assertEquals(0, pca2.getAccounts().join().size());
167167

168168
//clean up file
169169
TestHelper.deleteFileContent(

msal4j-sdk/src/main/java/com/microsoft/aad/msal4j/AbstractManagedIdentitySource.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ protected String getMessageFromErrorResponse(IHttpResponse response) {
113113

114114
ManagedIdentityErrorResponse managedIdentityErrorResponse;
115115
try {
116-
managedIdentityErrorResponse = JsonHelper.convertJsonToObject(response.body(), ManagedIdentityErrorResponse.class);
116+
managedIdentityErrorResponse = JsonHelper.convertJsonStringToJsonSerializableObject(response.body(), ManagedIdentityErrorResponse::fromJson);
117117
} catch (MsalJsonParsingException e) {
118118
throw new MsalJsonParsingException(String.format(MsalErrorMessage.MANAGED_IDENTITY_RESPONSE_PARSE_FAILURE, response.statusCode(), e.getMessage()), MsalError.MANAGED_IDENTITY_RESPONSE_PARSE_FAILURE, managedIdentitySourceType);
119119
}

msal4j-sdk/src/main/java/com/microsoft/aad/msal4j/AccessTokenCacheEntity.java

Lines changed: 79 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,32 +3,23 @@
33

44
package com.microsoft.aad.msal4j;
55

6-
import com.fasterxml.jackson.annotation.JsonProperty;
6+
import com.azure.json.JsonReader;
7+
import com.azure.json.JsonSerializable;
8+
import com.azure.json.JsonToken;
9+
import com.azure.json.JsonWriter;
710

11+
import java.io.IOException;
812
import java.util.ArrayList;
913
import java.util.List;
1014

11-
class AccessTokenCacheEntity extends Credential {
15+
class AccessTokenCacheEntity extends Credential implements JsonSerializable<Credential> {
1216

13-
@JsonProperty("credential_type")
1417
private String credentialType;
15-
16-
@JsonProperty("realm")
1718
protected String realm;
18-
19-
@JsonProperty("target")
2019
private String target;
21-
22-
@JsonProperty("cached_at")
2320
private String cachedAt;
24-
25-
@JsonProperty("expires_on")
2621
private String expiresOn;
27-
28-
@JsonProperty("extended_expires_on")
2922
private String extExpiresOn;
30-
31-
@JsonProperty("refresh_on")
3223
private String refreshOn;
3324

3425
String getKey() {
@@ -44,12 +35,80 @@ String getKey() {
4435
return String.join(Constants.CACHE_KEY_SEPARATOR, keyParts).toLowerCase();
4536
}
4637

47-
String credentialType() {
48-
return this.credentialType;
38+
static AccessTokenCacheEntity fromJson(JsonReader jsonReader) throws IOException {
39+
AccessTokenCacheEntity entity = new AccessTokenCacheEntity();
40+
41+
return jsonReader.readObject(reader -> {
42+
while (reader.nextToken() != JsonToken.END_OBJECT) {
43+
String fieldName = reader.getFieldName();
44+
reader.nextToken();
45+
46+
switch (fieldName) {
47+
case "home_account_id":
48+
entity.homeAccountId = reader.getString();
49+
break;
50+
case "environment":
51+
entity.environment = reader.getString();
52+
break;
53+
case "credential_type":
54+
entity.credentialType = reader.getString();
55+
break;
56+
case "client_id":
57+
entity.clientId = reader.getString();
58+
break;
59+
case "secret":
60+
entity.secret = reader.getString();
61+
break;
62+
case "realm":
63+
entity.realm = reader.getString();
64+
break;
65+
case "target":
66+
entity.target = reader.getString();
67+
break;
68+
case "cached_at":
69+
entity.cachedAt = reader.getString();
70+
break;
71+
case "expires_on":
72+
entity.expiresOn = reader.getString();
73+
break;
74+
case "extended_expires_on":
75+
entity.extExpiresOn = reader.getString();
76+
break;
77+
case "refresh_on":
78+
entity.refreshOn = reader.getString();
79+
break;
80+
case "user_assertion_hash":
81+
entity.userAssertionHash = reader.getString();
82+
break;
83+
default:
84+
reader.skipChildren();
85+
break;
86+
}
87+
}
88+
return entity;
89+
});
4990
}
5091

51-
String realm() {
52-
return this.realm;
92+
@Override
93+
public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
94+
jsonWriter.writeStartObject();
95+
96+
jsonWriter.writeStringField("home_account_id", homeAccountId);
97+
jsonWriter.writeStringField("environment", environment);
98+
jsonWriter.writeStringField("credential_type", credentialType);
99+
jsonWriter.writeStringField("client_id", clientId);
100+
jsonWriter.writeStringField("secret", secret);
101+
jsonWriter.writeStringField("realm", realm);
102+
jsonWriter.writeStringField("target", target);
103+
jsonWriter.writeStringField("cached_at", cachedAt);
104+
jsonWriter.writeStringField("expires_on", expiresOn);
105+
jsonWriter.writeStringField("extended_expires_on", extExpiresOn);
106+
jsonWriter.writeStringField("refresh_on", refreshOn);
107+
jsonWriter.writeStringField("user_assertion_hash", userAssertionHash);
108+
109+
jsonWriter.writeEndObject();
110+
111+
return jsonWriter;
53112
}
54113

55114
String target() {
@@ -99,4 +158,4 @@ void extExpiresOn(String extExpiresOn) {
99158
void refreshOn(String refreshOn) {
100159
this.refreshOn = refreshOn;
101160
}
102-
}
161+
}

msal4j-sdk/src/main/java/com/microsoft/aad/msal4j/AccountCacheEntity.java

Lines changed: 72 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,51 +3,101 @@
33

44
package com.microsoft.aad.msal4j;
55

6-
import com.fasterxml.jackson.annotation.JsonProperty;
6+
import com.azure.json.JsonReader;
7+
import com.azure.json.JsonSerializable;
8+
import com.azure.json.JsonToken;
9+
import com.azure.json.JsonWriter;
710

11+
import java.io.IOException;
812
import java.io.Serializable;
913
import java.util.ArrayList;
1014
import java.util.List;
1115
import java.util.Objects;
1216

13-
class AccountCacheEntity implements Serializable {
17+
class AccountCacheEntity implements JsonSerializable<AccountCacheEntity>, Serializable {
1418

1519
static final String MSSTS_ACCOUNT_TYPE = "MSSTS";
1620
static final String ADFS_ACCOUNT_TYPE = "ADFS";
1721

18-
@JsonProperty("home_account_id")
1922
protected String homeAccountId;
20-
21-
@JsonProperty("environment")
2223
protected String environment;
23-
24-
@JsonProperty("realm")
2524
protected String realm;
26-
27-
@JsonProperty("local_account_id")
2825
protected String localAccountId;
29-
30-
@JsonProperty("username")
3126
protected String username;
32-
33-
@JsonProperty("name")
3427
protected String name;
35-
36-
@JsonProperty("client_info")
3728
protected String clientInfoStr;
38-
39-
@JsonProperty("user_assertion_hash")
4029
protected String userAssertionHash;
30+
protected String authorityType;
31+
32+
static AccountCacheEntity fromJson(JsonReader jsonReader) throws IOException {
33+
AccountCacheEntity entity = new AccountCacheEntity();
34+
35+
return jsonReader.readObject(reader -> {
36+
while (reader.nextToken() != JsonToken.END_OBJECT) {
37+
String fieldName = reader.getFieldName();
38+
reader.nextToken();
39+
40+
switch (fieldName) {
41+
case "home_account_id":
42+
entity.homeAccountId = reader.getString();
43+
break;
44+
case "environment":
45+
entity.environment = reader.getString();
46+
break;
47+
case "realm":
48+
entity.realm = reader.getString();
49+
break;
50+
case "local_account_id":
51+
entity.localAccountId = reader.getString();
52+
break;
53+
case "username":
54+
entity.username = reader.getString();
55+
break;
56+
case "name":
57+
entity.name = reader.getString();
58+
break;
59+
case "client_info":
60+
entity.clientInfoStr = reader.getString();
61+
break;
62+
case "user_assertion_hash":
63+
entity.userAssertionHash = reader.getString();
64+
break;
65+
case "authority_type":
66+
entity.authorityType = reader.getString();
67+
break;
68+
default:
69+
reader.skipChildren();
70+
break;
71+
}
72+
}
73+
return entity;
74+
});
75+
}
76+
77+
@Override
78+
public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
79+
jsonWriter.writeStartObject();
80+
81+
jsonWriter.writeStringField("home_account_id", homeAccountId);
82+
jsonWriter.writeStringField("environment", environment);
83+
jsonWriter.writeStringField("realm", realm);
84+
jsonWriter.writeStringField("local_account_id", localAccountId);
85+
jsonWriter.writeStringField("username", username);
86+
jsonWriter.writeStringField("name", name);
87+
jsonWriter.writeStringField("client_info", clientInfoStr);
88+
jsonWriter.writeStringField("user_assertion_hash", userAssertionHash);
89+
jsonWriter.writeStringField("authority_type", authorityType);
90+
91+
jsonWriter.writeEndObject();
92+
93+
return jsonWriter;
94+
}
4195

4296
ClientInfo clientInfo() {
4397
return ClientInfo.createFromJson(clientInfoStr);
4498
}
4599

46-
@JsonProperty("authority_type")
47-
protected String authorityType;
48-
49100
String getKey() {
50-
51101
List<String> keyParts = new ArrayList<>();
52102

53103
keyParts.add(homeAccountId);
@@ -58,7 +108,6 @@ String getKey() {
58108
}
59109

60110
static AccountCacheEntity create(String clientInfoStr, Authority requestAuthority, IdToken idToken, String policy) {
61-
62111
AccountCacheEntity account = new AccountCacheEntity();
63112
account.authorityType(MSSTS_ACCOUNT_TYPE);
64113
account.clientInfoStr = clientInfoStr;
@@ -80,7 +129,6 @@ static AccountCacheEntity create(String clientInfoStr, Authority requestAuthorit
80129
}
81130

82131
static AccountCacheEntity createADFSAccount(Authority requestAuthority, IdToken idToken) {
83-
84132
AccountCacheEntity account = new AccountCacheEntity();
85133
account.authorityType(ADFS_ACCOUNT_TYPE);
86134
account.homeAccountId(idToken.subject);
@@ -173,8 +221,6 @@ void authorityType(String authorityType) {
173221
this.authorityType = authorityType;
174222
}
175223

176-
//These methods are based on those generated by Lombok's @EqualsAndHashCode annotation.
177-
//They have the same functionality as the generated methods, but were refactored for readability.
178224
@Override
179225
public boolean equals(Object o) {
180226
if (this == o) return true;
@@ -207,4 +253,4 @@ public int hashCode() {
207253
result = result * 59 + (this.authorityType == null ? 43 : this.authorityType.hashCode());
208254
return result;
209255
}
210-
}
256+
}

0 commit comments

Comments
 (0)