Skip to content

Commit c4c5098

Browse files
committed
feat: v2 validation
1 parent 88cd427 commit c4c5098

File tree

1 file changed

+48
-0
lines changed
  • src/main/java/com/danubetech/verifiablecredentials/validation

1 file changed

+48
-0
lines changed

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

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
package com.danubetech.verifiablecredentials.validation;
22

33
import com.danubetech.verifiablecredentials.VerifiableCredential;
4+
import com.danubetech.verifiablecredentials.VerifiableCredentialV2;
45
import com.danubetech.verifiablecredentials.VerifiablePresentation;
6+
import com.danubetech.verifiablecredentials.credentialstatus.CredentialStatus;
57

68
import java.net.URI;
79
import java.net.URISyntaxException;
10+
import java.util.List;
11+
import java.util.Map;
812

913
public class Validation {
1014

@@ -70,4 +74,48 @@ public static void validate(VerifiablePresentation verifiablePresentation) throw
7074
validateRun(() -> validateTrue(verifiablePresentation.getTypes().contains(VerifiablePresentation.DEFAULT_JSONLD_TYPES[0])), "type must contain VerifiablePresentation: " + verifiablePresentation.getTypes());
7175
validateRun(() -> validateTrue(verifiablePresentation.getVerifiableCredential() != null || verifiablePresentation.getJwtVerifiableCredentialString() != null), "Bad or missing 'verifiableCredential'.");
7276
}
77+
78+
79+
public static void validate(VerifiableCredentialV2 verifiableCredential) throws IllegalStateException {
80+
81+
foundation.identity.jsonld.validation.Validation.validate(verifiableCredential);
82+
83+
validateRun(() -> validateTrue(verifiableCredential.getJsonObject() != null), "Bad or missing JSON object.");
84+
validateRun(() -> validateTrue(!verifiableCredential.getContexts().isEmpty()), "Bad or missing '@context'.");
85+
validateRun(() -> validateUrl(verifiableCredential.getContexts().get(0)), "@context must be a valid URI: " + verifiableCredential.getContexts().get(0));
86+
validateRun(() -> validateTrue(VerifiableCredentialV2.DEFAULT_JSONLD_CONTEXTS[0].equals(verifiableCredential.getContexts().get(0))), "First value of @context must be " + VerifiableCredentialV2.DEFAULT_JSONLD_CONTEXTS[0] + ": " + verifiableCredential.getContexts().get(0));
87+
validateRun(() -> { if (verifiableCredential.getId() != null) validateUrl(verifiableCredential.getId()); }, "'id' must be a valid URI.");
88+
89+
validateRun(() -> validateTrue(!verifiableCredential.getTypes().isEmpty()), "Bad or missing 'type'.");
90+
validateRun(() -> validateTrue(verifiableCredential.getTypes().contains(VerifiableCredential.DEFAULT_JSONLD_TYPES[0])), "'type' must contain 'VerifiableCredential': " + verifiableCredential.getTypes());
91+
92+
93+
//Issuer validation
94+
validateIssuer(verifiableCredential);
95+
validateRun(() -> validateTrue(verifiableCredential.getValidFrom() != null), "Bad or missing 'validFrom'.");
96+
validateRun(verifiableCredential::getValidUntil, "Bad 'validUntil'.");
97+
validateRun(verifiableCredential::getCredentialSubject, "Bad 'credentialSubject'.");
98+
validateRun(() -> validateTrue(verifiableCredential.getCredentialSubject() != null), "Bad or missing 'credentialSubject'.");
99+
100+
//Validate credential Status : Handle both list and single object of credentialStatus
101+
validateStatus(verifiableCredential);
102+
}
103+
104+
private static void validateIssuer(VerifiableCredentialV2 verifiableCredential) throws IllegalStateException {
105+
106+
validateRun(() -> validateTrue(verifiableCredential.getIssuer() != null), "Bad or missing 'issuer'.");
107+
if(verifiableCredential.getIssuer() instanceof String )validateRun(() -> validateUrl(URI.create(verifiableCredential.getIssuer().toString())), "'issuer' must be a valid URI.");
108+
else if(verifiableCredential.getIssuer() instanceof Map<?,?>) validateRun(()-> validateUrl(URI.create(((Map<String,Object>)verifiableCredential.getIssuer()).get("id").toString())), "'issuer' must be a valid URI.");
109+
else validateRun(()-> validateTrue(false),"'issuer' must be a valid URI or object containing an 'id' property.");
110+
}
111+
112+
private static void validateStatus(VerifiableCredentialV2 verifiableCredential) throws IllegalStateException {
113+
if(verifiableCredential.getCredentialStatus() == null) return;
114+
if(verifiableCredential.getCredentialStatus() instanceof CredentialStatus) validateCredentialStatus((CredentialStatus) verifiableCredential.getCredentialStatus());
115+
else if (verifiableCredential.getCredentialStatus() instanceof List<?>) ((List<CredentialStatus>)verifiableCredential.getCredentialStatus()).forEach(Validation::validateCredentialStatus);
116+
}
117+
118+
private static void validateCredentialStatus(CredentialStatus credentialStatus) throws IllegalStateException {
119+
validateRun(() -> validateTrue(credentialStatus.getType() != null), "Bad or missing 'credentialStatus Type'.");
120+
}
73121
}

0 commit comments

Comments
 (0)