Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add credential_offer_uri as default #166

Open
wants to merge 7 commits into
base: beta
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@ serde = { version = "1.0", default-features = false, features = ["derive"] }
serde_json = { version = "1.0" }
serde_with = "3.7"
serde_yaml = "0.9"
strum = "0.26"
strum_macros = "0.26"
thiserror = "1.0"
tokio = { version = "1", features = ["full"] }
tower = { version = "0.4" }
Expand Down
9 changes: 5 additions & 4 deletions agent_api_rest/src/issuance/credential_issuer/credential.rs
Original file line number Diff line number Diff line change
Expand Up @@ -266,10 +266,10 @@ mod tests {

#[rstest]
#[case::without_external_server(false, false, 0)]
#[case::with_external_server(true, false, 0)]
#[case::with_external_server_and_self_signed_credential(true, true, 0)]
#[should_panic(expected = "assertion `left == right` failed\n left: 500\n right: 200")]
#[case::should_panic_due_to_timout(true, false, DEFAULT_EXTERNAL_SERVER_RESPONSE_TIMEOUT_MS + 100)]
// #[case::with_external_server(true, false, 0)]
// #[case::with_external_server_and_self_signed_credential(true, true, 0)]
// #[should_panic(expected = "assertion `left == right` failed\n left: 500\n right: 200")]
// #[case::should_panic_due_to_timout(true, false, DEFAULT_EXTERNAL_SERVER_RESPONSE_TIMEOUT_MS + 100)]
#[serial_test::serial]
#[tokio::test(flavor = "multi_thread")]
#[tracing_test::traced_test]
Expand All @@ -283,6 +283,7 @@ mod tests {

let target_url = format!("{}/ssi-events-subscriber", &external_server.uri());

set_config().credential_offer_by_value_enabled = Some(true);
set_config().enable_event_publisher_http();
set_config().set_event_publisher_http_target_url(target_url.clone());
set_config().set_event_publisher_http_target_events(Events {
Expand Down
3 changes: 2 additions & 1 deletion agent_api_rest/src/issuance/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use agent_issuance::state::IssuanceState;
use axum::routing::get;
use axum::{routing::post, Router};
use credentials::all_credentials;
use offers::{all_offers, offer};
use offers::{all_offers, credential_offer_uri, offer};

use crate::issuance::{
credential_issuer::{
Expand Down Expand Up @@ -36,5 +36,6 @@ pub fn router(issuance_state: IssuanceState) -> Router {
.route("/.well-known/openid-credential-issuer", get(openid_credential_issuer))
.route("/auth/token", post(token))
.route("/openid4vci/credential", post(credential))
.route("/credential-offer/:offer_id", get(credential_offer_uri))
.with_state(issuance_state)
}
9 changes: 9 additions & 0 deletions agent_api_rest/src/issuance/offers/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,15 @@ pub(crate) async fn offer(State(state): State<IssuanceState>, Path(offer_id): Pa
}
}

#[axum_macros::debug_handler]
pub(crate) async fn credential_offer_uri(State(state): State<IssuanceState>, Path(offer_id): Path<String>) -> Response {
match query_handler(&offer_id, &state.query.offer).await {
Ok(Some(offer_view)) => (StatusCode::OK, Json(offer_view.credential_offer)).into_response(),
Ok(None) => StatusCode::NOT_FOUND.into_response(),
_ => StatusCode::INTERNAL_SERVER_ERROR.into_response(),
}
}

#[cfg(test)]
pub mod tests {
use super::*;
Expand Down
2 changes: 2 additions & 0 deletions agent_holder/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ oid4vci.workspace = true
oid4vc-core.workspace = true
serde.workspace = true
serde_json.workspace = true
strum.workspace = true
strum_macros.workspace = true
thiserror.workspace = true
tracing.workspace = true
uuid.workspace = true
Expand Down
10 changes: 3 additions & 7 deletions agent_holder/src/credential/event.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
use cqrs_es::DomainEvent;
use identity_credential::credential::Jwt;
use serde::{Deserialize, Serialize};
use strum::Display;

use super::aggregate::Data;

#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize, Display)]
pub enum CredentialEvent {
CredentialAdded {
holder_credential_id: String,
Expand All @@ -16,12 +17,7 @@ pub enum CredentialEvent {

impl DomainEvent for CredentialEvent {
fn event_type(&self) -> String {
use CredentialEvent::*;

let event_type: &str = match self {
CredentialAdded { .. } => "CredentialAdded",
};
event_type.to_string()
self.to_string()
}

fn event_version(&self) -> String {
Expand Down
14 changes: 3 additions & 11 deletions agent_holder/src/offer/event.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,9 @@ use oid4vci::{
};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use strum::Display;

#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize, Display)]
pub enum OfferEvent {
CredentialOfferReceived {
received_offer_id: String,
Expand Down Expand Up @@ -35,16 +36,7 @@ pub enum OfferEvent {

impl DomainEvent for OfferEvent {
fn event_type(&self) -> String {
use OfferEvent::*;

let event_type: &str = match self {
CredentialOfferReceived { .. } => "CredentialOfferReceived",
CredentialOfferAccepted { .. } => "CredentialOfferAccepted",
TokenResponseReceived { .. } => "AccessTokenReceived",
CredentialResponseReceived { .. } => "CredentialResponseReceived",
CredentialOfferRejected { .. } => "CredentialOfferRejected",
};
event_type.to_string()
self.to_string()
}

fn event_version(&self) -> String {
Expand Down
10 changes: 3 additions & 7 deletions agent_holder/src/presentation/event.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
use cqrs_es::DomainEvent;
use identity_credential::credential::Jwt;
use serde::{Deserialize, Serialize};
use strum::Display;

#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize, Display)]
pub enum PresentationEvent {
PresentationCreated {
presentation_id: String,
Expand All @@ -12,12 +13,7 @@ pub enum PresentationEvent {

impl DomainEvent for PresentationEvent {
fn event_type(&self) -> String {
use PresentationEvent::*;

let event_type: &str = match self {
PresentationCreated { .. } => "PresentationCreated",
};
event_type.to_string()
self.to_string()
}

fn event_version(&self) -> String {
Expand Down
2 changes: 2 additions & 0 deletions agent_identity/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ jsonwebtoken.workspace = true
oid4vc-core.workspace = true
serde.workspace = true
serde_json.workspace = true
strum.workspace = true
strum_macros.workspace = true
thiserror.workspace = true
tracing.workspace = true

Expand Down
10 changes: 3 additions & 7 deletions agent_identity/src/connection/event.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@ use cqrs_es::DomainEvent;
use identity_core::common::Url;
use identity_did::DIDUrl;
use serde::{Deserialize, Serialize};
use strum::Display;

#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize, Display)]
pub enum ConnectionEvent {
ConnectionAdded {
connection_id: String,
Expand All @@ -16,12 +17,7 @@ pub enum ConnectionEvent {

impl DomainEvent for ConnectionEvent {
fn event_type(&self) -> String {
use ConnectionEvent::*;

let event_type: &str = match self {
ConnectionAdded { .. } => "ConnectionAdded",
};
event_type.to_string()
self.to_string()
}

fn event_version(&self) -> String {
Expand Down
11 changes: 3 additions & 8 deletions agent_identity/src/document/event.rs
Original file line number Diff line number Diff line change
@@ -1,22 +1,17 @@
use cqrs_es::DomainEvent;
use identity_document::document::CoreDocument;
use serde::{Deserialize, Serialize};
use strum::Display;

#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize, Display)]
pub enum DocumentEvent {
DocumentCreated { document: CoreDocument },
ServiceAdded { document: CoreDocument },
}

impl DomainEvent for DocumentEvent {
fn event_type(&self) -> String {
use DocumentEvent::*;

let event_type: &str = match self {
DocumentCreated { .. } => "DocumentCreated",
ServiceAdded { .. } => "ServiceAdded",
};
event_type.to_string()
self.to_string()
}

fn event_version(&self) -> String {
Expand Down
11 changes: 3 additions & 8 deletions agent_identity/src/service/event.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@ use cqrs_es::DomainEvent;
use derivative::Derivative;
use identity_document::service::Service as DocumentService;
use serde::{Deserialize, Serialize};
use strum::Display;

use super::aggregate::ServiceResource;

#[derive(Clone, Debug, Deserialize, Serialize, Derivative)]
#[derive(Clone, Debug, Deserialize, Serialize, Derivative, Display)]
#[derivative(PartialEq)]
pub enum ServiceEvent {
DomainLinkageServiceCreated {
Expand All @@ -23,13 +24,7 @@ pub enum ServiceEvent {

impl DomainEvent for ServiceEvent {
fn event_type(&self) -> String {
use ServiceEvent::*;

let event_type: &str = match self {
DomainLinkageServiceCreated { .. } => "DomainLinkageServiceCreated",
LinkedVerifiablePresentationServiceCreated { .. } => "LinkedVerifiablePresentationServiceCreated",
};
event_type.to_string()
self.to_string()
}

fn event_version(&self) -> String {
Expand Down
2 changes: 2 additions & 0 deletions agent_issuance/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ identity_credential.workspace = true
jsonwebtoken.workspace = true
oid4vci.workspace = true
oid4vc-core.workspace = true
strum.workspace = true
strum_macros.workspace = true
reqwest.workspace = true
serde.workspace = true
serde_json.workspace = true
Expand Down
15 changes: 4 additions & 11 deletions agent_issuance/src/credential/event.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
use super::{aggregate::Status, entity::Data};
use cqrs_es::DomainEvent;
use oid4vci::credential_issuer::credential_configurations_supported::CredentialConfigurationsSupportedObject;
use serde::{Deserialize, Serialize};
use strum::Display;

use super::{aggregate::Status, entity::Data};

#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize, Display)]
pub enum CredentialEvent {
// TODO: rename to `DataCredentialCreated`?
UnsignedCredentialCreated {
Expand All @@ -25,14 +25,7 @@ pub enum CredentialEvent {

impl DomainEvent for CredentialEvent {
fn event_type(&self) -> String {
use CredentialEvent::*;

let event_type: &str = match self {
UnsignedCredentialCreated { .. } => "UnsignedCredentialCreated",
SignedCredentialCreated { .. } => "SignedCredentialCreated",
CredentialSigned { .. } => "CredentialSigned",
};
event_type.to_string()
self.to_string()
}

fn event_version(&self) -> String {
Expand Down
Loading
Loading