Skip to content

Commit 42f1714

Browse files
authored
Merge pull request #61 from danubetech/fix/validation-issues
Validation issues
2 parents af042a9 + b331a52 commit 42f1714

File tree

3 files changed

+80
-39
lines changed

3 files changed

+80
-39
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.danubetech.verifiablecredentials.jwt;
22

3+
import com.danubetech.verifiablecredentials.VerifiableCredential;
34
import com.danubetech.verifiablecredentials.VerifiablePresentation;
45
import com.nimbusds.jose.JWSObject;
56
import com.nimbusds.jwt.JWTClaimsSet;
@@ -29,7 +30,7 @@ public static JwtVerifiablePresentation fromCompactSerialization(String compactS
2930
if (jsonObject == null) return null;
3031

3132
VerifiablePresentation payloadVerifiablePresentation = VerifiablePresentation.fromJsonObject(new LinkedHashMap<>(jsonObject));
32-
33+
if(!payloadVerifiablePresentation.getContexts().contains(VerifiableCredential.DEFAULT_JSONLD_CONTEXTS[0])) throw new ParseException("The 'vp' claim must contain the default context v1",0);
3334
return new JwtVerifiablePresentation(jwtPayload, payloadVerifiablePresentation, signedJWT, compactSerialization);
3435
}
3536
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.danubetech.verifiablecredentials.jwt;
22

3+
import com.danubetech.verifiablecredentials.VerifiableCredentialV2;
34
import com.danubetech.verifiablecredentials.VerifiablePresentation;
45
import com.danubetech.verifiablecredentials.VerifiablePresentationV2;
56
import com.nimbusds.jose.JWSObject;
@@ -30,7 +31,7 @@ public static JwtVerifiablePresentationV2 fromCompactSerialization(String compac
3031
if (jsonObject == null) return null;
3132

3233
VerifiablePresentationV2 payloadVerifiablePresentation = VerifiablePresentationV2.fromJsonObject(new LinkedHashMap<>(jsonObject));
33-
34+
if(!payloadVerifiablePresentation.getContexts().contains(VerifiableCredentialV2.DEFAULT_JSONLD_CONTEXTS[0])) throw new ParseException("The 'vc' claim must contain the default context v2",0);
3435
return new JwtVerifiablePresentationV2(jwtPayload, payloadVerifiablePresentation, signedJWT, compactSerialization);
3536
}
3637
}

src/main/java/com/danubetech/verifiablecredentials/validation/Validation.java

Lines changed: 76 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,71 @@ private static void validateOneOfRuns(List<Runnable> runnables, String message)
6363
public static void validate(VerifiableCredential verifiableCredential) throws IllegalStateException {
6464

6565
foundation.identity.jsonld.validation.Validation.validate(verifiableCredential);
66+
validateVerifiableCredentialProperties(verifiableCredential);
67+
}
68+
69+
public static void validate(VerifiableCredential verifiableCredential, boolean jsonLdValidation) throws IllegalStateException {
70+
71+
if(jsonLdValidation)foundation.identity.jsonld.validation.Validation.validate(verifiableCredential);
72+
validateVerifiableCredentialProperties(verifiableCredential);
73+
}
74+
75+
public static void validate(VerifiablePresentation verifiablePresentation) throws IllegalStateException {
76+
77+
foundation.identity.jsonld.validation.Validation.validate(verifiablePresentation);
78+
validateVerifiablePresentationProperties(verifiablePresentation);
79+
}
80+
81+
public static void validate(VerifiablePresentation verifiablePresentation, boolean jsonLdValidation) throws IllegalStateException {
82+
83+
if(jsonLdValidation)foundation.identity.jsonld.validation.Validation.validate(verifiablePresentation);
84+
validateVerifiablePresentationProperties(verifiablePresentation);
85+
}
86+
87+
public static void validate(VerifiableCredentialV2 verifiableCredential) throws IllegalStateException {
88+
89+
foundation.identity.jsonld.validation.Validation.validate(verifiableCredential);
90+
validateVerifiableCredentialV2Properties(verifiableCredential);
91+
}
92+
93+
public static void validate(VerifiableCredentialV2 verifiableCredential, boolean jsonLdValidation) throws IllegalStateException {
94+
95+
if(jsonLdValidation)foundation.identity.jsonld.validation.Validation.validate(verifiableCredential);
96+
validateVerifiableCredentialV2Properties(verifiableCredential);
97+
}
98+
99+
public static void validate(VerifiablePresentationV2 verifiablePresentation) throws IllegalStateException {
100+
101+
foundation.identity.jsonld.validation.Validation.validate(verifiablePresentation);
102+
validateVerifiablePresentationV2Properties(verifiablePresentation);
103+
}
104+
105+
public static void validate(VerifiablePresentationV2 verifiablePresentation, boolean jsonLdValidation) throws IllegalStateException {
106+
107+
if(jsonLdValidation)foundation.identity.jsonld.validation.Validation.validate(verifiablePresentation);
108+
validateVerifiablePresentationV2Properties(verifiablePresentation);
109+
}
110+
111+
112+
private static void validateIssuer(VerifiableCredentialV2 verifiableCredential) throws IllegalStateException {
113+
114+
validateRun(() -> validateTrue(verifiableCredential.getIssuer() != null), "Bad or missing 'issuer'.");
115+
if (verifiableCredential.getIssuer() instanceof String issuerString) validateRun(() -> validateUrl(URI.create(issuerString)), "'issuer' must be a valid URI.");
116+
else if (verifiableCredential.getIssuer() instanceof Map<?,?> issuerMap) validateRun(()-> validateUrl(URI.create(((Map<String,Object>) issuerMap).get("id").toString())), "'issuer' must contain be a valid 'id'.");
117+
else validateRun(() -> validateTrue(false),"'issuer' must be a valid URI or object containing an 'id' property.");
118+
}
119+
120+
private static void validateStatus(VerifiableCredentialV2 verifiableCredential) throws IllegalStateException {
121+
if (verifiableCredential.getCredentialStatus() == null) return;
122+
verifiableCredential.getCredentialStatusAsList().forEach(Validation::validateCredentialStatus);
123+
}
124+
125+
private static void validateCredentialStatus(CredentialStatus credentialStatus) throws IllegalStateException {
126+
validateRun(() -> validateTrue(credentialStatus.getType() != null), "Bad or missing 'credentialStatus Type'.");
127+
}
128+
66129

130+
private static void validateVerifiableCredentialProperties(VerifiableCredential verifiableCredential){
67131
validateRun(() -> validateTrue(verifiableCredential.getJsonObject() != null), "Bad or missing JSON object.");
68132
validateRun(() -> validateTrue(!verifiableCredential.getContexts().isEmpty()), "Bad or missing '@context'.");
69133
validateRun(() -> validateUrl(verifiableCredential.getContexts().get(0)), "@context must be a valid URI: " + verifiableCredential.getContexts().get(0));
@@ -80,25 +144,7 @@ public static void validate(VerifiableCredential verifiableCredential) throws Il
80144
validateRun(() -> validateTrue(verifiableCredential.getCredentialSubject() != null), "Bad or missing 'credentialSubject'.");
81145
}
82146

83-
public static void validate(VerifiablePresentation verifiablePresentation) throws IllegalStateException {
84-
85-
foundation.identity.jsonld.validation.Validation.validate(verifiablePresentation);
86-
87-
validateRun(() -> validateTrue(verifiablePresentation.getJsonObject() != null), "Bad or missing JSON object.");
88-
validateRun(() -> validateTrue(! verifiablePresentation.getContexts().isEmpty()), "Bad or missing '@context'.");
89-
validateRun(() -> validateUrl(verifiablePresentation.getContexts().get(0)), "@context must be a valid URI: " + verifiablePresentation.getContexts().get(0));
90-
validateRun(() -> validateTrue(VerifiableCredential.DEFAULT_JSONLD_CONTEXTS[0].equals(verifiablePresentation.getContexts().get(0))), "First value of @context must be " + VerifiableCredential.DEFAULT_JSONLD_CONTEXTS[0] + ": " + verifiablePresentation.getContexts().get(0));
91-
validateRun(() -> { if (verifiablePresentation.getId() != null) validateUrl(verifiablePresentation.getId()); }, "'id' must be a valid URI.");
92-
93-
validateRun(() -> validateTrue(! verifiablePresentation.getTypes().isEmpty()), "Bad or missing 'type'.");
94-
validateRun(() -> validateTrue(verifiablePresentation.getTypes().contains(VerifiablePresentation.DEFAULT_JSONLD_TYPES[0])), "type must contain VerifiablePresentation: " + verifiablePresentation.getTypes());
95-
validateOneOfRuns(List.of(() -> validateTrue(verifiablePresentation.getVerifiableCredentialAsList() != null), () -> validateTrue(verifiablePresentation.getJwtVerifiableCredentialString() != null)), "Bad or missing 'verifiableCredential'.");
96-
}
97-
98-
public static void validate(VerifiableCredentialV2 verifiableCredential) throws IllegalStateException {
99-
100-
foundation.identity.jsonld.validation.Validation.validate(verifiableCredential);
101-
147+
private static void validateVerifiableCredentialV2Properties(VerifiableCredentialV2 verifiableCredential){
102148
validateRun(() -> validateTrue(verifiableCredential.getJsonObject() != null), "Bad or missing JSON object.");
103149
validateRun(() -> validateTrue(!verifiableCredential.getContexts().isEmpty()), "Bad or missing '@context'.");
104150
validateRun(() -> validateUrl(verifiableCredential.getContexts().get(0)), "@context must be a valid URI: " + verifiableCredential.getContexts().get(0));
@@ -119,10 +165,19 @@ public static void validate(VerifiableCredentialV2 verifiableCredential) throws
119165
validateStatus(verifiableCredential);
120166
}
121167

122-
public static void validate(VerifiablePresentationV2 verifiablePresentation) throws IllegalStateException {
168+
private static void validateVerifiablePresentationProperties(VerifiablePresentation verifiablePresentation){
169+
validateRun(() -> validateTrue(verifiablePresentation.getJsonObject() != null), "Bad or missing JSON object.");
170+
validateRun(() -> validateTrue(! verifiablePresentation.getContexts().isEmpty()), "Bad or missing '@context'.");
171+
validateRun(() -> validateUrl(verifiablePresentation.getContexts().get(0)), "@context must be a valid URI: " + verifiablePresentation.getContexts().get(0));
172+
validateRun(() -> validateTrue(VerifiableCredential.DEFAULT_JSONLD_CONTEXTS[0].equals(verifiablePresentation.getContexts().get(0))), "First value of @context must be " + VerifiableCredential.DEFAULT_JSONLD_CONTEXTS[0] + ": " + verifiablePresentation.getContexts().get(0));
173+
validateRun(() -> { if (verifiablePresentation.getId() != null) validateUrl(verifiablePresentation.getId()); }, "'id' must be a valid URI.");
123174

124-
foundation.identity.jsonld.validation.Validation.validate(verifiablePresentation);
175+
validateRun(() -> validateTrue(! verifiablePresentation.getTypes().isEmpty()), "Bad or missing 'type'.");
176+
validateRun(() -> validateTrue(verifiablePresentation.getTypes().contains(VerifiablePresentation.DEFAULT_JSONLD_TYPES[0])), "type must contain VerifiablePresentation: " + verifiablePresentation.getTypes());
177+
validateOneOfRuns(List.of(() -> validateTrue(verifiablePresentation.getVerifiableCredentialAsList() != null), () -> validateTrue(verifiablePresentation.getJwtVerifiableCredentialString() != null)), "Bad or missing 'verifiableCredential'.");
178+
}
125179

180+
private static void validateVerifiablePresentationV2Properties(VerifiablePresentationV2 verifiablePresentation){
126181
validateRun(() -> validateTrue(verifiablePresentation.getJsonObject() != null), "Bad or missing JSON object.");
127182
validateRun(() -> validateTrue(! verifiablePresentation.getContexts().isEmpty()), "Bad or missing '@context'.");
128183
validateRun(() -> validateUrl(verifiablePresentation.getContexts().get(0)), "@context must be a valid URI: " + verifiablePresentation.getContexts().get(0));
@@ -134,20 +189,4 @@ public static void validate(VerifiablePresentationV2 verifiablePresentation) thr
134189
validateOneOfRuns(List.of(() -> validateTrue(verifiablePresentation.getVerifiableCredentialAsList() != null), () -> validateTrue(verifiablePresentation.getJwtVerifiableCredentialString() != null)), "Bad or missing 'verifiableCredential'.");
135190
}
136191

137-
private static void validateIssuer(VerifiableCredentialV2 verifiableCredential) throws IllegalStateException {
138-
139-
validateRun(() -> validateTrue(verifiableCredential.getIssuer() != null), "Bad or missing 'issuer'.");
140-
if (verifiableCredential.getIssuer() instanceof String issuerString) validateRun(() -> validateUrl(URI.create(issuerString)), "'issuer' must be a valid URI.");
141-
else if (verifiableCredential.getIssuer() instanceof Map<?,?> issuerMap) validateRun(()-> validateUrl(URI.create(((Map<String,Object>) issuerMap).get("id").toString())), "'issuer' must contain be a valid 'id'.");
142-
else validateRun(() -> validateTrue(false),"'issuer' must be a valid URI or object containing an 'id' property.");
143-
}
144-
145-
private static void validateStatus(VerifiableCredentialV2 verifiableCredential) throws IllegalStateException {
146-
if (verifiableCredential.getCredentialStatus() == null) return;
147-
verifiableCredential.getCredentialStatusAsList().forEach(Validation::validateCredentialStatus);
148-
}
149-
150-
private static void validateCredentialStatus(CredentialStatus credentialStatus) throws IllegalStateException {
151-
validateRun(() -> validateTrue(credentialStatus.getType() != null), "Bad or missing 'credentialStatus Type'.");
152-
}
153192
}

0 commit comments

Comments
 (0)