Added issuer property validations
This commit is contained in:
parent
92ad87c6bc
commit
d6e0d85d2f
@ -9,6 +9,7 @@ import java.util.function.Function;
|
|||||||
import org.oneedtech.inspect.schema.Catalog;
|
import org.oneedtech.inspect.schema.Catalog;
|
||||||
import org.oneedtech.inspect.schema.SchemaKey;
|
import org.oneedtech.inspect.schema.SchemaKey;
|
||||||
import org.oneedtech.inspect.util.resource.Resource;
|
import org.oneedtech.inspect.util.resource.Resource;
|
||||||
|
import org.oneedtech.inspect.vc.Validation.MessageLevel;
|
||||||
import org.oneedtech.inspect.vc.util.JsonNodeUtil;
|
import org.oneedtech.inspect.vc.util.JsonNodeUtil;
|
||||||
import org.oneedtech.inspect.vc.util.PrimitiveValueValidator;
|
import org.oneedtech.inspect.vc.util.PrimitiveValueValidator;
|
||||||
|
|
||||||
@ -148,7 +149,8 @@ public class Assertion extends Credential {
|
|||||||
URL(PrimitiveValueValidator::validateUrl),
|
URL(PrimitiveValueValidator::validateUrl),
|
||||||
URL_AUTHORITY(PrimitiveValueValidator::validateUrlAuthority),
|
URL_AUTHORITY(PrimitiveValueValidator::validateUrlAuthority),
|
||||||
|
|
||||||
IMAGE(null);
|
IMAGE(null),
|
||||||
|
ISSUER(null);
|
||||||
|
|
||||||
private final Function<JsonNode, Boolean> validationFunction;
|
private final Function<JsonNode, Boolean> validationFunction;
|
||||||
|
|
||||||
@ -264,7 +266,8 @@ public class Assertion extends Credential {
|
|||||||
new Validation.Builder().name("email").type(ValueType.EMAIL).required(true).build(),
|
new Validation.Builder().name("email").type(ValueType.EMAIL).required(true).build(),
|
||||||
new Validation.Builder().name("telephone").type(ValueType.TELEPHONE).required(false).build(),
|
new Validation.Builder().name("telephone").type(ValueType.TELEPHONE).required(false).build(),
|
||||||
new Validation.Builder().name("publicKey").type(ValueType.ID).expectedType(Type.CryptographicKey).fetch(true).required(false).build(),
|
new Validation.Builder().name("publicKey").type(ValueType.ID).expectedType(Type.CryptographicKey).fetch(true).required(false).build(),
|
||||||
new Validation.Builder().name("verification").type(ValueType.ID).expectedType(Type.VerificationObjectIssuer).fetch(false).required(false).build()
|
new Validation.Builder().name("verification").type(ValueType.ID).expectedType(Type.VerificationObjectIssuer).fetch(false).required(false).build(),
|
||||||
|
new Validation.Builder().name("id").type(ValueType.ISSUER).required(false).messageLevel(MessageLevel.Warning).build()
|
||||||
))
|
))
|
||||||
.put(Type.Profile, List.of(
|
.put(Type.Profile, List.of(
|
||||||
new Validation.Builder().name("id").type(ValueType.IRI).required(true).build(),
|
new Validation.Builder().name("id").type(ValueType.IRI).required(true).build(),
|
||||||
@ -276,7 +279,8 @@ public class Assertion extends Credential {
|
|||||||
new Validation.Builder().name("email").type(ValueType.EMAIL).required(true).build(),
|
new Validation.Builder().name("email").type(ValueType.EMAIL).required(true).build(),
|
||||||
new Validation.Builder().name("telephone").type(ValueType.TELEPHONE).required(false).build(),
|
new Validation.Builder().name("telephone").type(ValueType.TELEPHONE).required(false).build(),
|
||||||
new Validation.Builder().name("publicKey").type(ValueType.ID).expectedType(Type.CryptographicKey).fetch(true).required(false).build(),
|
new Validation.Builder().name("publicKey").type(ValueType.ID).expectedType(Type.CryptographicKey).fetch(true).required(false).build(),
|
||||||
new Validation.Builder().name("verification").type(ValueType.ID).expectedType(Type.VerificationObjectIssuer).fetch(false).required(false).build()
|
new Validation.Builder().name("verification").type(ValueType.ID).expectedType(Type.VerificationObjectIssuer).fetch(false).required(false).build(),
|
||||||
|
new Validation.Builder().name("id").type(ValueType.ISSUER).required(false).messageLevel(MessageLevel.Warning).build()
|
||||||
))
|
))
|
||||||
.put(Type.RevocationList, List.of(
|
.put(Type.RevocationList, List.of(
|
||||||
new Validation.Builder().name("type").type(ValueType.RDF_TYPE).required(true).many(true).mustContainOneType(List.of(Type.RevocationList)).build(),
|
new Validation.Builder().name("type").type(ValueType.RDF_TYPE).required(true).many(true).mustContainOneType(List.of(Type.RevocationList)).build(),
|
||||||
|
@ -20,6 +20,7 @@ public class Validation {
|
|||||||
private final boolean fetch;
|
private final boolean fetch;
|
||||||
private final String defaultType;
|
private final String defaultType;
|
||||||
private final boolean fullValidate;
|
private final boolean fullValidate;
|
||||||
|
private MessageLevel messageLevel;
|
||||||
|
|
||||||
public Validation(Builder builder) {
|
public Validation(Builder builder) {
|
||||||
this.name = builder.name;
|
this.name = builder.name;
|
||||||
@ -34,9 +35,9 @@ public class Validation {
|
|||||||
this.fetch = builder.fetch;
|
this.fetch = builder.fetch;
|
||||||
this.defaultType = builder.defaultType;
|
this.defaultType = builder.defaultType;
|
||||||
this.fullValidate = builder.fullValidate;
|
this.fullValidate = builder.fullValidate;
|
||||||
|
this.messageLevel = builder.messageLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
@ -85,6 +86,15 @@ public class Validation {
|
|||||||
return fullValidate;
|
return fullValidate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public MessageLevel getMessageLevel() {
|
||||||
|
return messageLevel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum MessageLevel {
|
||||||
|
Warning,
|
||||||
|
Error
|
||||||
|
}
|
||||||
|
|
||||||
public static class Builder {
|
public static class Builder {
|
||||||
private String name;
|
private String name;
|
||||||
private Assertion.ValueType type;
|
private Assertion.ValueType type;
|
||||||
@ -98,11 +108,13 @@ public class Validation {
|
|||||||
private boolean fetch;
|
private boolean fetch;
|
||||||
private String defaultType;
|
private String defaultType;
|
||||||
private boolean fullValidate;
|
private boolean fullValidate;
|
||||||
|
private MessageLevel messageLevel;
|
||||||
|
|
||||||
public Builder() {
|
public Builder() {
|
||||||
this.mustContainOne = new ArrayList<>();
|
this.mustContainOne = new ArrayList<>();
|
||||||
this.prerequisites = new ArrayList<>();
|
this.prerequisites = new ArrayList<>();
|
||||||
this.expectedTypes = new ArrayList<>();
|
this.expectedTypes = new ArrayList<>();
|
||||||
|
this.messageLevel = MessageLevel.Error;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Builder name(String name) {
|
public Builder name(String name) {
|
||||||
@ -184,6 +196,11 @@ public class Validation {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Builder messageLevel(MessageLevel messageLevel) {
|
||||||
|
this.messageLevel = messageLevel;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public Validation build() {
|
public Validation build() {
|
||||||
return new Validation(this);
|
return new Validation(this);
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,35 @@
|
|||||||
|
package org.oneedtech.inspect.vc.probe.validation;
|
||||||
|
|
||||||
|
import org.oneedtech.inspect.core.probe.RunContext;
|
||||||
|
import org.oneedtech.inspect.core.report.ReportItems;
|
||||||
|
import org.oneedtech.inspect.vc.Validation;
|
||||||
|
import org.oneedtech.inspect.vc.Validation.MessageLevel;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
|
|
||||||
|
public class ValidationIssuerPropertyProbe extends ValidationPropertyProbe {
|
||||||
|
|
||||||
|
public ValidationIssuerPropertyProbe(Validation validation) {
|
||||||
|
super(validation);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ValidationIssuerPropertyProbe(Validation validation, boolean fullValidate) {
|
||||||
|
super(validation, fullValidate);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected ReportItems validate(JsonNode node, RunContext ctx) {
|
||||||
|
if (!node.asText().matches("^http(s)?://")) {
|
||||||
|
return buildResponse("Issuer Profile " + node.toString() + " not hosted with HTTP-based identifier." +
|
||||||
|
"Many platforms can only handle HTTP(s)-hosted issuers.", ctx);
|
||||||
|
}
|
||||||
|
return success(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
private ReportItems buildResponse(String msg, RunContext ctx) {
|
||||||
|
if (validation.getMessageLevel() == MessageLevel.Warning) {
|
||||||
|
return warning(msg, ctx);
|
||||||
|
}
|
||||||
|
return error(msg, ctx);
|
||||||
|
}
|
||||||
|
}
|
@ -2,8 +2,8 @@ package org.oneedtech.inspect.vc.probe.validation;
|
|||||||
|
|
||||||
import static org.oneedtech.inspect.util.code.Defensives.checkNotNull;
|
import static org.oneedtech.inspect.util.code.Defensives.checkNotNull;
|
||||||
|
|
||||||
import org.oneedtech.inspect.vc.Validation;
|
|
||||||
import org.oneedtech.inspect.vc.Assertion.ValueType;
|
import org.oneedtech.inspect.vc.Assertion.ValueType;
|
||||||
|
import org.oneedtech.inspect.vc.Validation;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Factory for ValidationPropertyProbes
|
* Factory for ValidationPropertyProbes
|
||||||
@ -22,6 +22,9 @@ public class ValidationPropertyProbeFactory {
|
|||||||
if (validation.getType() == ValueType.IMAGE) {
|
if (validation.getType() == ValueType.IMAGE) {
|
||||||
return new ValidationImagePropertyProbe(validation);
|
return new ValidationImagePropertyProbe(validation);
|
||||||
}
|
}
|
||||||
|
if (validation.getType() == ValueType.ISSUER) {
|
||||||
|
return new ValidationIssuerPropertyProbe(validation);
|
||||||
|
}
|
||||||
return new ValidationPropertyProbe(validation, fullValidate);
|
return new ValidationPropertyProbe(validation, fullValidate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user