Skip to content

Commit af042a9

Browse files
authored
Merge pull request #60 from danubetech/fix/v2-jwt-issues
V2 Jwt issues
2 parents 388543c + efa7564 commit af042a9

File tree

5 files changed

+42
-20
lines changed

5 files changed

+42
-20
lines changed

src/main/java/com/danubetech/verifiablecredentials/VerifiableCredentialV2.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,12 @@ public B credentialSubject(CredentialSubject credentialSubject) {
113113
return (B) this;
114114
}
115115

116+
public B credentialSubject(Collection<CredentialSubject> credentialSubject) {
117+
if (this.credentialSubject == null) this.credentialSubject = new ArrayList<>();
118+
this.credentialSubject.addAll(credentialSubject);
119+
return (B) this;
120+
}
121+
116122
public B credentialStatus(CredentialStatus credentialStatus) {
117123
if (this.credentialStatus == null) this.credentialStatus = new ArrayList<>();
118124
this.credentialStatus.add(credentialStatus);
@@ -256,7 +262,7 @@ public Date getValidUntil() {
256262
}
257263

258264
public CredentialSubject getCredentialSubject() {
259-
return CredentialSubject.getFromJsonLDObject(this);
265+
return this.getCredentialSubjectAsList().get(0);
260266
}
261267

262268
public List<CredentialSubject> getCredentialSubjectAsList() {

src/main/java/com/danubetech/verifiablecredentials/jwt/FromJwtConverter.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import java.net.URI;
1313
import java.util.Collections;
1414
import java.util.Date;
15+
import java.util.List;
1516

1617
public class FromJwtConverter {
1718

@@ -110,7 +111,9 @@ public static VerifiablePresentation fromJwtVerifiableCredentialToVerifiablePres
110111
public static VerifiableCredentialV2 fromJwtVerifiableCredentialV2(JwtVerifiableCredentialV2 jwtVerifiableCredential) {
111112

112113
VerifiableCredentialV2 payloadVerifiableCredential = VerifiableCredentialV2.fromJson(jwtVerifiableCredential.getPayloadObject().toString());
113-
CredentialSubject payloadCredentialSubject = payloadVerifiableCredential.getCredentialSubject();
114+
115+
List<CredentialSubject> credentialSubjects = payloadVerifiableCredential.getCredentialSubjectAsList();
116+
114117
CredentialSubject.removeFromJsonLdObject(payloadVerifiableCredential);
115118

116119
VerifiableCredentialV2.Builder<? extends VerifiableCredentialV2.Builder<?>> verifiableCredentialBuilder = VerifiableCredentialV2.builder()
@@ -125,21 +128,19 @@ public static VerifiableCredentialV2 fromJwtVerifiableCredentialV2(JwtVerifiable
125128
verifiableCredentialBuilder.id(URI.create(jwtId));
126129
}
127130

128-
if (payloadCredentialSubject != null) {
129-
131+
for(CredentialSubject cs : credentialSubjects) {
130132
CredentialSubject.Builder<? extends CredentialSubject.Builder<?>> credentialSubjectBuilder = CredentialSubject.builder()
131-
.base(payloadCredentialSubject);
133+
.base(cs);
132134

133135
String subject = payload.getSubject();
134-
if (subject != null && payloadCredentialSubject.getId() == null) {
136+
if (subject != null && cs.getId() == null) {
135137
credentialSubjectBuilder.id(URI.create(subject));
136138
}
137-
138139
CredentialSubject credentialSubject = credentialSubjectBuilder.build();
139-
140140
verifiableCredentialBuilder.credentialSubject(credentialSubject);
141141
}
142142

143+
143144
String issuer = payload.getIssuer();
144145
if (issuer != null && payloadVerifiableCredential.getIssuer() == null) {
145146
verifiableCredentialBuilder.issuer(URI.create(issuer));

src/main/java/com/danubetech/verifiablecredentials/jwt/JwtVerifiableCredential.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public static JwtVerifiableCredential fromCompactSerialization(String compactSer
2929
if (jsonObject == null) return null;
3030

3131
VerifiableCredential payloadVerifiableCredential = VerifiableCredential.fromJsonObject(new LinkedHashMap<>(jsonObject));
32-
32+
if(!payloadVerifiableCredential.getContexts().contains(VerifiableCredential.DEFAULT_JSONLD_CONTEXTS[0])) throw new ParseException("The 'vc' claim must contain the default context v1",0);
3333
return new JwtVerifiableCredential(jwtPayload, payloadVerifiableCredential, signedJWT, compactSerialization);
3434
}
3535
}

src/main/java/com/danubetech/verifiablecredentials/jwt/JwtVerifiableCredentialV2.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public static JwtVerifiableCredentialV2 fromCompactSerialization(String compactS
3030
if (jsonObject == null) return null;
3131

3232
VerifiableCredentialV2 payloadVerifiableCredential = VerifiableCredentialV2.fromJsonObject(new LinkedHashMap<>(jsonObject));
33-
33+
if(!payloadVerifiableCredential.getContexts().contains(VerifiableCredentialV2.DEFAULT_JSONLD_CONTEXTS[0])) throw new ParseException("The 'vc' claim must contain the default context v2",0);
3434
return new JwtVerifiableCredentialV2(jwtPayload, payloadVerifiableCredential, signedJWT, compactSerialization);
3535
}
3636
}

src/main/java/com/danubetech/verifiablecredentials/jwt/ToJwtConverter.java

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -175,15 +175,30 @@ public static JwtVerifiableCredentialV2 toJwtVerifiableCredentialV2(VerifiableCr
175175
}
176176

177177
CredentialSubject credentialSubject = verifiableCredential.getCredentialSubject();
178+
var credentialSubjectList = verifiableCredential.getCredentialSubjectAsList();
178179
if (credentialSubject != null && credentialSubject.getId() != null) {
179180
jwtPayloadBuilder.subject(credentialSubject.getId().toString());
180-
if (!preserveVerifiableCredentialProperties) {
181-
CredentialSubject payloadCredentialSubject = CredentialSubject.builder()
182-
.base(credentialSubject)
183-
.build();
184-
JsonLDUtils.jsonLdRemove(payloadCredentialSubject, JsonLDKeywords.JSONLD_TERM_ID);
185-
CredentialSubject.removeFromJsonLdObject(payloadVerifiableCredential);
186-
payloadCredentialSubject.addToJsonLDObject(payloadVerifiableCredential);
181+
if(credentialSubjectList.size()>1){
182+
if (!preserveVerifiableCredentialProperties) {
183+
CredentialSubject.removeFromJsonLdObject(payloadVerifiableCredential);
184+
for(CredentialSubject subject: credentialSubjectList){
185+
CredentialSubject payloadCredentialSubject = CredentialSubject.builder()
186+
.base(subject)
187+
.build();
188+
JsonLDUtils.jsonLdRemove(payloadCredentialSubject, JsonLDKeywords.JSONLD_TERM_ID);
189+
190+
payloadCredentialSubject.addToJsonLDObjectAsJsonArray(payloadVerifiableCredential);
191+
}
192+
}
193+
}else{
194+
if (!preserveVerifiableCredentialProperties) {
195+
CredentialSubject payloadCredentialSubject = CredentialSubject.builder()
196+
.base(credentialSubject)
197+
.build();
198+
JsonLDUtils.jsonLdRemove(payloadCredentialSubject, JsonLDKeywords.JSONLD_TERM_ID);
199+
CredentialSubject.removeFromJsonLdObject(payloadVerifiableCredential);
200+
payloadCredentialSubject.addToJsonLDObject(payloadVerifiableCredential);
201+
}
187202
}
188203
}
189204

@@ -239,7 +254,7 @@ public static JwtVerifiableCredentialV2 toJwtVerifiableCredentialV2(VerifiableCr
239254
return toJwtVerifiableCredentialV2(verifiableCredential, null, false, false);
240255
}
241256

242-
public static JwtVerifiablePresentationV2 toJwtVerifiablePresentation(VerifiablePresentationV2 verifiablePresentation, String aud) {
257+
public static JwtVerifiablePresentationV2 toJwtVerifiablePresentationV2(VerifiablePresentationV2 verifiablePresentation, String aud) {
243258

244259
JWTClaimsSet.Builder jwtPayloadBuilder = new JWTClaimsSet.Builder();
245260

@@ -275,8 +290,8 @@ public static JwtVerifiablePresentationV2 toJwtVerifiablePresentation(Verifiable
275290
return new JwtVerifiablePresentationV2(jwtPayload, payloadVerifiablePresentation, null, null);
276291
}
277292

278-
public static JwtVerifiablePresentationV2 toJwtVerifiablePresentation(VerifiablePresentationV2 verifiablePresentation) {
293+
public static JwtVerifiablePresentationV2 toJwtVerifiablePresentationV2(VerifiablePresentationV2 verifiablePresentation) {
279294

280-
return toJwtVerifiablePresentation(verifiablePresentation, null);
295+
return toJwtVerifiablePresentationV2(verifiablePresentation, null);
281296
}
282297
}

0 commit comments

Comments
 (0)