adorsys / didcomm-mediator-rs

Simple mediator for DIDComm Messaging v2
Apache License 2.0
2 stars 0 forks source link

Integrate of develop did resolution for did method did:web #38

Closed francis-pouatcha closed 9 months ago

francis-pouatcha commented 9 months ago

Spec at https://w3c-ccg.github.io/did-method-web/

It can be implemented as a sub-module of the did-utils project

francis-pouatcha commented 9 months ago

Simple path testing on an existing online server

There is a unit test in the code base just testing if the server is responding. Could be extended to test if document returned is a did server.

IngridPuppet commented 9 months ago
mod local;

use did_resolver::{
    did_parser::Did,
    traits::resolvable::{resolution_options::DidResolutionOptions, DidResolvable},
};
use did_resolver_web::resolution::resolver::DidWebResolver;

#[tokio::test]
async fn resolves_did_web_address() -> Result<(), Box<dyn std::error::Error>> {
    //! This test requires that a running instance of
    //! the server be accessible on the internet.

    // Read did:web address from local uncommitted file
    // since it is subject to frequent change
    use local::DID_ADDRESS as did;

    // Resolve via the universal resolver
    let resp = reqwest::get(format!("https://dev.uniresolver.io/1.0/identifiers/{did}"))
        .await?
        .json::<serde_json::Value>()
        .await?;

    // Extract DID document
    let diddoc = resp
        .get("didDocument")
        .expect("Missing didDocument property");

    assert_eq!(did, diddoc.get("id").unwrap());

    Ok(())
}

#[tokio::test]
async fn resolves_did_web_address_with_local_binding() {
    let did = Did::parse(format!("did:web:{}%3A{}", "localhost", "8090")).expect("did parse error");

    let did_web_resolver = DidWebResolver::http();
    let options = DidResolutionOptions::default();
    let result = did_web_resolver
        .resolve(&did, &options)
        .await
        .expect("resolution error");

    let diddoc = result.did_document();
    assert_eq!(&did, diddoc.id());
}

#[tokio::test]
async fn resolves_did_web_address_with_https_local_binding() {
    //! This test requires that a running instance of
    //! the server be accessible on the internet.

    // Read did:web address from local uncommitted file
    // since it is subject to frequent change
    use local::DID_ADDRESS;

    let did = Did::parse(DID_ADDRESS.to_string()).expect("did parse error");

    let did_web_resolver = DidWebResolver::https();
    let options = DidResolutionOptions::default();
    let result = did_web_resolver
        .resolve(&did, &options)
        .await
        .expect("resolution error");

    let diddoc = result.did_document();
    assert_eq!(&did, diddoc.id());
}
IngridPuppet commented 9 months ago
[package]
name = "somebank"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
tokio = { version = "1.30.0", features = ["full"] }
axum = "0.6.20"
serde_json = "1.0.104"
chrono = "0.4.26"
tower-http = { version = "0.4.3", features = ["fs"] }
reqwest = { version = "0.11.18", features = ["blocking", "json"] }

# aries-vcx
did_resolver = { path = "../../aries-vcx/did_resolver" }
did_resolver_web = { path = "../../aries-vcx/did_resolver_web" }