Skip to content

Commit c62319d

Browse files
committed
feat: Ability to preserve VCDM fields in VC-JWT
1 parent b1b23ae commit c62319d

File tree

1 file changed

+31
-16
lines changed

1 file changed

+31
-16
lines changed

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

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public class ToJwtConverter {
1919
* from JSON-LD to JWT VC
2020
*/
2121

22-
public static JwtVerifiableCredential toJwtVerifiableCredential(VerifiableCredential verifiableCredential, String aud) {
22+
public static JwtVerifiableCredential toJwtVerifiableCredential(VerifiableCredential verifiableCredential, String aud, boolean preserveVerifiableCredentialProperties) {
2323

2424
JWTClaimsSet.Builder jwtPayloadBuilder = new JWTClaimsSet.Builder();
2525

@@ -33,41 +33,46 @@ public static JwtVerifiableCredential toJwtVerifiableCredential(VerifiableCreden
3333
URI id = verifiableCredential.getId();
3434
if (id != null) {
3535
jwtPayloadBuilder.jwtID(id.toString());
36-
JsonLDUtils.jsonLdRemove(payloadVerifiableCredential, JsonLDKeywords.JSONLD_TERM_ID);
36+
if (!preserveVerifiableCredentialProperties) {
37+
JsonLDUtils.jsonLdRemove(payloadVerifiableCredential, JsonLDKeywords.JSONLD_TERM_ID);
38+
}
3739
}
3840

3941
CredentialSubject credentialSubject = verifiableCredential.getCredentialSubject();
40-
if (credentialSubject != null) {
41-
if (credentialSubject.getId() != null) {
42-
jwtPayloadBuilder.subject(credentialSubject.getId().toString());
42+
if (credentialSubject != null && credentialSubject.getId() != null) {
43+
jwtPayloadBuilder.subject(credentialSubject.getId().toString());
44+
if (!preserveVerifiableCredentialProperties) {
45+
CredentialSubject payloadCredentialSubject = CredentialSubject.builder()
46+
.base(credentialSubject)
47+
.build();
48+
JsonLDUtils.jsonLdRemove(payloadCredentialSubject, JsonLDKeywords.JSONLD_TERM_ID);
49+
CredentialSubject.removeFromJsonLdObject(payloadVerifiableCredential);
50+
payloadCredentialSubject.addToJsonLDObject(payloadVerifiableCredential);
4351
}
44-
CredentialSubject payloadCredentialSubject = CredentialSubject.builder()
45-
.base(credentialSubject)
46-
.build();
47-
JsonLDUtils.jsonLdRemove(payloadCredentialSubject, JsonLDKeywords.JSONLD_TERM_ID);
48-
CredentialSubject.removeFromJsonLdObject(payloadVerifiableCredential);
49-
payloadCredentialSubject.addToJsonLDObject(payloadVerifiableCredential);
5052
}
5153

5254
URI issuer = verifiableCredential.getIssuer();
5355
if (issuer != null) {
5456
jwtPayloadBuilder.issuer(issuer.toString());
55-
if ( verifiableCredential.getJsonObject().containsKey(VerifiableCredentialKeywords.JSONLD_TERM_ISSUER)
56-
&& !( verifiableCredential.getJsonObject().get(VerifiableCredentialKeywords.JSONLD_TERM_ISSUER) instanceof Map)) {
57+
if (!preserveVerifiableCredentialProperties) {
5758
JsonLDUtils.jsonLdRemove(payloadVerifiableCredential, VerifiableCredentialKeywords.JSONLD_TERM_ISSUER);
5859
}
5960
}
6061

6162
Date issuanceDate = verifiableCredential.getIssuanceDate();
6263
if (issuanceDate != null) {
6364
jwtPayloadBuilder.notBeforeTime(issuanceDate);
64-
JsonLDUtils.jsonLdRemove(payloadVerifiableCredential, VerifiableCredentialKeywords.JSONLD_TERM_ISSUANCEDATE);
65+
if (!preserveVerifiableCredentialProperties) {
66+
JsonLDUtils.jsonLdRemove(payloadVerifiableCredential, VerifiableCredentialKeywords.JSONLD_TERM_ISSUANCEDATE);
67+
}
6568
}
6669

6770
Date expirationDate = verifiableCredential.getExpirationDate();
6871
if (expirationDate != null) {
6972
jwtPayloadBuilder.expirationTime(expirationDate);
70-
JsonLDUtils.jsonLdRemove(payloadVerifiableCredential, VerifiableCredentialKeywords.JSONLD_TERM_EXPIRATIONDATE);
73+
if (!preserveVerifiableCredentialProperties) {
74+
JsonLDUtils.jsonLdRemove(payloadVerifiableCredential, VerifiableCredentialKeywords.JSONLD_TERM_EXPIRATIONDATE);
75+
}
7176
}
7277

7378
if (aud != null) {
@@ -82,9 +87,19 @@ public static JwtVerifiableCredential toJwtVerifiableCredential(VerifiableCreden
8287
return new JwtVerifiableCredential(jwtPayload, payloadVerifiableCredential, null, null);
8388
}
8489

90+
public static JwtVerifiableCredential toJwtVerifiableCredential(VerifiableCredential verifiableCredential, String aud) {
91+
92+
return toJwtVerifiableCredential(verifiableCredential, null, false);
93+
}
94+
95+
public static JwtVerifiableCredential toJwtVerifiableCredential(VerifiableCredential verifiableCredential, boolean preserveVerifiableCredentialProperties) {
96+
97+
return toJwtVerifiableCredential(verifiableCredential, null, preserveVerifiableCredentialProperties);
98+
}
99+
85100
public static JwtVerifiableCredential toJwtVerifiableCredential(VerifiableCredential verifiableCredential) {
86101

87-
return toJwtVerifiableCredential(verifiableCredential, null);
102+
return toJwtVerifiableCredential(verifiableCredential, null, false);
88103
}
89104

90105
/*

0 commit comments

Comments
 (0)