From ffe657cc009ee90c7761bc17d1eb3f53a0096923 Mon Sep 17 00:00:00 2001 From: Tiago Nascimento Date: Thu, 22 Aug 2024 12:05:50 -0300 Subject: [PATCH] Update credential offer definitions --- src/core/profiles/w3c/jwtld.rs | 89 +++++++++++++++++++++++++++++++--- src/core/profiles/w3c/ldp.rs | 74 +++------------------------- src/core/profiles/w3c/mod.rs | 53 ++++++++++++++++++++ src/metadata.rs | 1 + 4 files changed, 143 insertions(+), 74 deletions(-) diff --git a/src/core/profiles/w3c/jwtld.rs b/src/core/profiles/w3c/jwtld.rs index ba5eb66..cba8a01 100644 --- a/src/core/profiles/w3c/jwtld.rs +++ b/src/core/profiles/w3c/jwtld.rs @@ -5,34 +5,87 @@ use crate::profiles::{ CredentialRequestProfile, CredentialResponseProfile, }; +use super::{CredentialDefinitionLD, CredentialOfferDefinitionLD}; + #[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] -pub struct Metadata {} +pub struct Metadata { + credential_definition: CredentialDefinitionLD, +} + +impl Metadata { + pub fn new(credential_definition: CredentialDefinitionLD) -> Self { + Self { + credential_definition, + } + } + + field_getters_setters![ + pub self [self] ["JWT VC LD metadata value"] { + set_credential_definition -> credential_definition[CredentialDefinitionLD], + } + ]; +} + impl CredentialMetadataProfile for Metadata { type Request = Request; fn to_request(&self) -> Self::Request { - Request::new() + Request::new(self.credential_definition.clone()) } } #[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] -pub struct Offer {} +pub struct Offer { + credential_definition: CredentialOfferDefinitionLD, +} + +impl Offer { + pub fn new(credential_definition: CredentialOfferDefinitionLD) -> Self { + Self { + credential_definition, + } + } + + field_getters_setters![ + pub self [self] ["JWT VC LD offer value"] { + set_credential_definition -> credential_definition[CredentialOfferDefinitionLD], + } + ]; +} impl CredentialOfferProfile for Offer {} #[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] pub struct AuthorizationDetails { + credential_definition: CredentialDefinitionLD, + #[serde( default, skip_serializing, deserialize_with = "crate::deny_field::deny_field", - rename = "credential_configuration_id" + rename = "credential_identifier" )] - _credential_configuration_id: (), + _credential_identifier: (), +} + +impl AuthorizationDetails { + pub fn new(credential_definition: CredentialDefinitionLD) -> Self { + Self { + credential_definition, + _credential_identifier: (), + } + } + field_getters_setters![ + pub self [self] ["JWT VC LD authorization value"] { + set_credential_definition -> credential_definition[CredentialDefinitionLD], + } + ]; } impl AuthorizationDetailsProfile for AuthorizationDetails {} -#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)] +#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] pub struct Request { + credential_definition: CredentialDefinitionLD, + #[serde( default, skip_serializing, @@ -43,16 +96,36 @@ pub struct Request { } impl Request { - pub fn new() -> Self { + pub fn new(credential_definition: CredentialDefinitionLD) -> Self { Self { + credential_definition, _credential_identifier: (), } } + + field_getters_setters![ + pub self [self] ["JWT VC request value"] { + set_credential_definition -> credential_definition[CredentialDefinitionLD], + } + ]; } impl CredentialRequestProfile for Request { type Response = Response; } #[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] -pub struct Response {} +pub struct Response { + credential: String, +} + +impl Response { + pub fn new(credential: String) -> Self { + Self { credential } + } + field_getters_setters![ + pub self [self] ["JWT VC response value"] { + set_credential -> credential[String], + } + ]; +} impl CredentialResponseProfile for Response {} diff --git a/src/core/profiles/w3c/ldp.rs b/src/core/profiles/w3c/ldp.rs index f13f7b7..610aa27 100644 --- a/src/core/profiles/w3c/ldp.rs +++ b/src/core/profiles/w3c/ldp.rs @@ -9,69 +9,37 @@ use crate::profiles::{ CredentialRequestProfile, CredentialResponseProfile, }; -use super::{CredentialDefinition, CredentialOfferDefinition}; +use super::{CredentialDefinitionLD, CredentialOfferDefinitionLD}; #[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] pub struct Metadata { credential_signing_alg_values_supported: Option>, - #[serde(rename = "@context")] - context: Vec, - credentials_definition: CredentialDefinitionLD, + #[serde(flatten)] + credential_definition: CredentialDefinitionLD, order: Option>, } impl Metadata { - pub fn new( - context: Vec, - credentials_definition: CredentialDefinitionLD, - ) -> Self { + pub fn new(credential_definition: CredentialDefinitionLD) -> Self { Self { credential_signing_alg_values_supported: None, - context, - credentials_definition, + credential_definition, order: None, } } field_getters_setters![ pub self [self] ["LD VC metadata value"] { set_credential_signing_alg_values_supported -> credential_signing_alg_values_supported[Option>], - set_context -> context[Vec], - set_credentials_definition -> credentials_definition[CredentialDefinitionLD], + set_credential_definition -> credential_definition[CredentialDefinitionLD], set_order -> order[Option>], } ]; } - -#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] -pub struct CredentialDefinitionLD { - #[serde(flatten)] - credential_definition: CredentialDefinition, - #[serde(rename = "@context")] - context: Vec, -} - -impl CredentialDefinitionLD { - pub fn new( - credential_definition: CredentialDefinition, - context: Vec, - ) -> Self { - Self { - credential_definition, - context, - } - } - field_getters_setters![ - pub self [self] ["LD VC credential definition value"] { - set_credential_definition -> credential_definition[CredentialDefinition], - set_context -> context[Vec], - } - ]; -} impl CredentialMetadataProfile for Metadata { type Request = Request; fn to_request(&self) -> Self::Request { - Request::new(self.credentials_definition().clone()) + Request::new(self.credential_definition().clone()) } } @@ -93,32 +61,6 @@ impl Offer { } ]; } -#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] -pub struct CredentialOfferDefinitionLD { - #[serde(rename = "@context")] - context: Vec, - #[serde(flatten)] - credential_offer_definite: CredentialOfferDefinition, -} - -impl CredentialOfferDefinitionLD { - pub fn new( - context: Vec, - credential_offer_definite: CredentialOfferDefinition, - ) -> Self { - Self { - context, - credential_offer_definite, - } - } - - field_getters_setters![ - pub self [self] ["LD VC credential offer definition value"] { - set_context -> context[Vec], - set_credential_offer_definite -> credential_offer_definite[CredentialOfferDefinition], - } - ]; -} impl CredentialOfferProfile for Offer {} #[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] @@ -217,7 +159,7 @@ mod test { "VerifiableCredential", "UniversityDegreeCredential" ], - "credentials_definition": { + "credential_definition": { "@context": [ "https://www.w3.org/2018/credentials/v1", "https://www.w3.org/2018/credentials/examples/v1" diff --git a/src/core/profiles/w3c/mod.rs b/src/core/profiles/w3c/mod.rs index 7c17592..399ca94 100644 --- a/src/core/profiles/w3c/mod.rs +++ b/src/core/profiles/w3c/mod.rs @@ -32,6 +32,32 @@ impl CredentialDefinition { ]; } +#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] +pub struct CredentialDefinitionLD { + #[serde(flatten)] + credential_definition: CredentialDefinition, + #[serde(rename = "@context")] + context: Vec, +} + +impl CredentialDefinitionLD { + pub fn new( + credential_definition: CredentialDefinition, + context: Vec, + ) -> Self { + Self { + credential_definition, + context, + } + } + field_getters_setters![ + pub self [self] ["LD VC credential definition value"] { + set_credential_definition -> credential_definition[CredentialDefinition], + set_context -> context[Vec], + } + ]; +} + #[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] pub struct CredentialOfferDefinition { r#type: Vec, @@ -49,6 +75,33 @@ impl CredentialOfferDefinition { ]; } +#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] +pub struct CredentialOfferDefinitionLD { + #[serde(flatten)] + credential_offer_definition: CredentialOfferDefinition, + #[serde(rename = "@context")] + context: Vec, +} + +impl CredentialOfferDefinitionLD { + pub fn new( + context: Vec, + credential_offer_definition: CredentialOfferDefinition, + ) -> Self { + Self { + context, + credential_offer_definition, + } + } + + field_getters_setters![ + pub self [self] ["LD VC credential offer definition value"] { + set_context -> context[Vec], + set_credential_offer_definition -> credential_offer_definition[CredentialOfferDefinition], + } + ]; +} + #[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)] pub struct CredentialSubjectClaims { mandatory: Option, diff --git a/src/metadata.rs b/src/metadata.rs index 25d5f5c..8019916 100644 --- a/src/metadata.rs +++ b/src/metadata.rs @@ -296,6 +296,7 @@ where field_getters_setters![ pub self [self] ["credential metadata value"] { + set_name -> name[Option], set_scope -> scope[Option], set_cryptographic_binding_methods_supported -> cryptographic_binding_methods_supported[Option>], set_proof_types_supported -> proof_types_supported[Option>],