From 572b1da825d0ef07d9097c24923d78e34216ae6c Mon Sep 17 00:00:00 2001 From: henning Date: Thu, 12 Mar 2026 15:33:59 +0100 Subject: [PATCH] =?UTF-8?q?Forenkler=20VerifiablePresentationNotice=20til?= =?UTF-8?q?=20=C3=A5=20ikke=20inneholde=20DCQL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../types/verifiableCredential/DcqlQuery.java | 133 ------------------ .../types/verifiableCredential/Format.java | 21 --- .../verifiableCredential/SimpleQuery.java | 17 --- .../VerifiablePresentationNotice.java | 34 +---- .../types/PresentationNoticeTest.java | 23 --- 5 files changed, 3 insertions(+), 225 deletions(-) delete mode 100644 src/main/java/no/digipost/api/datatypes/types/verifiableCredential/DcqlQuery.java delete mode 100644 src/main/java/no/digipost/api/datatypes/types/verifiableCredential/Format.java delete mode 100644 src/main/java/no/digipost/api/datatypes/types/verifiableCredential/SimpleQuery.java delete mode 100644 src/test/java/no/digipost/api/datatypes/types/PresentationNoticeTest.java diff --git a/src/main/java/no/digipost/api/datatypes/types/verifiableCredential/DcqlQuery.java b/src/main/java/no/digipost/api/datatypes/types/verifiableCredential/DcqlQuery.java deleted file mode 100644 index edd6df8..0000000 --- a/src/main/java/no/digipost/api/datatypes/types/verifiableCredential/DcqlQuery.java +++ /dev/null @@ -1,133 +0,0 @@ -package no.digipost.api.datatypes.types.verifiableCredential; - -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import jakarta.validation.constraints.NotNull; -import jakarta.xml.bind.annotation.XmlElement; -import jakarta.xml.bind.annotation.XmlElementWrapper; -import lombok.*; -import no.digipost.api.datatypes.documentation.Description; - -import java.util.List; - -import static no.digipost.api.datatypes.types.verifiableCredential.Format.*; - -@Value -@AllArgsConstructor -@NoArgsConstructor(force = true, access = AccessLevel.PRIVATE) -@With -public class DcqlQuery { - - @XmlElementWrapper(name = "credentials") - @XmlElement(name = "credential") - @JsonProperty("credentials") - @Description("List of credential queries as per DCQL.") - @NotNull - List credentials; - - @XmlElementWrapper(name = "credential_sets") - @XmlElement(name = "credential_set") - @JsonProperty("credential_sets") - @Description("Optional credential sets for advanced DCQL queries.") - List credentialSets; - - - @Value - @AllArgsConstructor - @NoArgsConstructor(force = true, access = AccessLevel.PRIVATE) - @With - public static class Credential { - @XmlElement(name = "id") - String id; - - @XmlElement(name = "format") - Format format; - - @XmlElement(name = "meta") - Meta meta; - - @XmlElementWrapper(name = "claims") - @XmlElement(name = "claim") - List claims; - - @XmlElementWrapper(name = "claim_sets") - @XmlElement(name = "claim_set") - @JsonProperty("claim_sets") - List claimSets; - - public static Credential jwtVcJson(String id, List typeValues) { - return new Credential(id, JWT_VC_JSON, new Meta(typeValues, null, null), null, null); - } - - public static Credential mdoc(String id, String doctypeValue) { - return new Credential(id, MSO_MDOC, new Meta(null, doctypeValue, null), null, null); - } - - public static Credential dcSdJwt(String id, List vctValues) { - return new Credential(id, DC_SD_JWT, new Meta(null, null, vctValues), null, null); - } - } - - @Value - @AllArgsConstructor - @NoArgsConstructor(force = true, access = AccessLevel.PRIVATE) - @With - @JsonInclude(JsonInclude.Include.NON_NULL) - public static class Meta { - @XmlElement(name = "type_values") - @JsonProperty("type_values") - @Description("Must be specified when format is JWT_VC_JSON") - List typeValues; - - @XmlElement(name = "doctype_value") - @JsonProperty("doctype_value") - @Description("Must be specified when format is MSO_MDOC") - String doctypeValue; - - @XmlElementWrapper(name = "vct_values") - @XmlElement(name = "vct_value") - @JsonProperty("vct_values") - @Description("Must be specified when format is SD_JWT") - List vctValues; - } - - @Value - @AllArgsConstructor - @NoArgsConstructor(force = true, access = AccessLevel.PRIVATE) - @With - public static class Claim { - @XmlElementWrapper(name = "path") - @XmlElement(name = "path_element") - List path; - - @XmlElement(name = "id") - String id; - - @XmlElementWrapper(name = "values") - @XmlElement(name = "value") - List values; - } - - @Value - @AllArgsConstructor - @NoArgsConstructor(force = true, access = AccessLevel.PRIVATE) - @With - public static class ClaimSet { - @XmlElementWrapper(name = "claims") - @XmlElement(name = "claim_id") - List claims; - } - - @Value - @AllArgsConstructor - @NoArgsConstructor(force = true, access = AccessLevel.PRIVATE) - @With - public static class CredentialSet { - @XmlElementWrapper(name = "options") - @XmlElement(name = "option") - List options; - - @XmlElement(name = "required") - Boolean required; - } -} diff --git a/src/main/java/no/digipost/api/datatypes/types/verifiableCredential/Format.java b/src/main/java/no/digipost/api/datatypes/types/verifiableCredential/Format.java deleted file mode 100644 index fbe5a1e..0000000 --- a/src/main/java/no/digipost/api/datatypes/types/verifiableCredential/Format.java +++ /dev/null @@ -1,21 +0,0 @@ -package no.digipost.api.datatypes.types.verifiableCredential; - -import com.fasterxml.jackson.annotation.JsonValue; - -public enum Format { - - JWT_VC_JSON("jwt_vc_json"), - MSO_MDOC("mso_mdoc"), - DC_SD_JWT("dc+sd-jwt"); - - private final String value; - - Format(String value) { - this.value = value; - } - - @JsonValue - public String getValue() { - return value; - } -} diff --git a/src/main/java/no/digipost/api/datatypes/types/verifiableCredential/SimpleQuery.java b/src/main/java/no/digipost/api/datatypes/types/verifiableCredential/SimpleQuery.java deleted file mode 100644 index a44454f..0000000 --- a/src/main/java/no/digipost/api/datatypes/types/verifiableCredential/SimpleQuery.java +++ /dev/null @@ -1,17 +0,0 @@ -package no.digipost.api.datatypes.types.verifiableCredential; - -import jakarta.xml.bind.annotation.XmlElement; -import lombok.*; - -@Value -@AllArgsConstructor -@NoArgsConstructor(force = true, access = AccessLevel.PRIVATE) -@With -public class SimpleQuery { - - @XmlElement(name = "type") - String type; - - @XmlElement(name = "format") - Format format; -} diff --git a/src/main/java/no/digipost/api/datatypes/types/verifiableCredential/VerifiablePresentationNotice.java b/src/main/java/no/digipost/api/datatypes/types/verifiableCredential/VerifiablePresentationNotice.java index 34df23d..3f28b29 100644 --- a/src/main/java/no/digipost/api/datatypes/types/verifiableCredential/VerifiablePresentationNotice.java +++ b/src/main/java/no/digipost/api/datatypes/types/verifiableCredential/VerifiablePresentationNotice.java @@ -9,7 +9,6 @@ import java.util.List; -import static no.digipost.api.datatypes.types.verifiableCredential.Format.JWT_VC_JSON; @XmlRootElement(name = "verifiable-presentation-notice") @Value @@ -24,18 +23,9 @@ public class VerifiablePresentationNotice implements DataType { String title; @XmlElement(required = true) - @Description("A detailed explanation of the presentation request.") + @Description("A detailed explanation of the presentation request containing the purpose for this particular presentation request.") String description; - @XmlElement - @Description("A simplified credential query format") - SimpleQuery simpleQuery; - - @XmlElement - @Description("A credentials query following the Digital Credentials Query Language (DCQL) specification.") - DcqlQuery dcqlQuery; - - @Value @AllArgsConstructor @NoArgsConstructor(force = true, access = AccessLevel.PRIVATE) @@ -47,25 +37,7 @@ public static class Option { } public static VerifiablePresentationNotice EXAMPLE = new VerifiablePresentationNotice( - "Driver’s License", - "We would like to verify your driver’s license.", - new SimpleQuery("driversLicence", JWT_VC_JSON), - null - ); - - // example førerkort with DCQL - public static VerifiablePresentationNotice DCQL_EXAMPLE = new VerifiablePresentationNotice( - "Driver’s License", - "We would like to verify your driver’s license.", - null, - new DcqlQuery( - List.of( - DcqlQuery.Credential.dcSdJwt( - "credential1", - List.of("driversLicence") - ) - ), - null - ) + "Request for Driver's licence", + "We would like to verify your driver’s license before we can rent you a Toyota." ); } diff --git a/src/test/java/no/digipost/api/datatypes/types/PresentationNoticeTest.java b/src/test/java/no/digipost/api/datatypes/types/PresentationNoticeTest.java deleted file mode 100644 index 2b57f98..0000000 --- a/src/test/java/no/digipost/api/datatypes/types/PresentationNoticeTest.java +++ /dev/null @@ -1,23 +0,0 @@ -package no.digipost.api.datatypes.types; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import no.digipost.api.datatypes.types.verifiableCredential.DcqlQuery; -import no.digipost.api.datatypes.types.verifiableCredential.VerifiablePresentationNotice; -import org.junit.jupiter.api.Test; - -public class PresentationNoticeTest { - - @Test - public void dcqlShouldSerializeCorrectlyAsJson() throws JsonProcessingException { - VerifiablePresentationNotice dcqlExample = VerifiablePresentationNotice.DCQL_EXAMPLE; - - DcqlQuery dcqlQuery = dcqlExample.getDcqlQuery(); - ObjectMapper jsonMapper = new ObjectMapper(); - - String dcqlJson = jsonMapper.writeValueAsString(dcqlQuery); - String expected = "{\"credentials\":[{\"id\":\"credential1\",\"format\":\"dc+sd-jwt\",\"meta\":{\"vct_values\":[\"driversLicence\"]},\"claims\":null,\"claim_sets\":null}],\"credential_sets\":null}"; - - assert dcqlJson.equals(expected); - } -}