Compare changes

Choose any two refs to compare.

Changed files
+47 -17
cli
client
+2 -1
cli/Cargo.toml
···
shellwords = "1.1.0"
hidapi = "2.6.3"
ledger-transport-hid = "0.11.0"
-
serde_ipld_dagcbor = { git = "http://github.com/edouardparis/serde_ipld_dagcbor", branch = "scopeguard-no-default-features", default-features = false }
+
cid = { version = "0.11.1", default-features = false }
+
serde_ipld_dagcbor = { git = "http://github.com/ipld/serde_ipld_dagcbor", branch = "master", default-features = false }
serde = { version = "1.0", default-features = false, features = ["alloc", "derive"] }
serde_json = { version = "1.0", default-features = false, features = ["alloc"] }
tokio = { version = "1.38.1", features = ["io-util", "macros", "net", "rt", "rt-multi-thread", "sync"] }
+20
cli/previous_operation.json
···
+
{
+
"alsoKnownAs": [
+
"at://test-vnd.edouard.paris"
+
],
+
"prev": null,
+
"rotationKeys": [
+
"did:key:zQ3shiNS7Bm7F3AH5NU4uimiSpZ8ryYj365Uq1N7KMsWUaXKp"
+
],
+
"services": {
+
"atproto_pds": {
+
"endpoint": "https://pds.edouard.paris",
+
"type": "AtprotoPersonalDataServer"
+
}
+
},
+
"sig": "kfShJ7A67jZAjZhydcnz3HRnrlE0NqocV2RmjRNlCB5hyj4Qiw51Kn_Bkqj704KYOTEiyhpiVajRc-qVc9ssWw",
+
"type": "plc_operation",
+
"verificationMethods": {
+
"atproto": "did:key:zQ3shiNS7Bm7F3AH5NU4uimiSpZ8ryYj365Uq1N7KMsWUaXKp"
+
}
+
}
+24 -15
cli/src/main.rs
···
use base58::ToBase58;
use base64::Engine;
+
use cid::multihash;
use clap::{CommandFactory, Parser, Subcommand};
use rustyline::completion::{Completer, Pair};
use rustyline::error::ReadlineError;
···
AtprotoAppClient,
};
-
use serde::{Deserialize, Serialize};
use std::borrow::Cow;
use std::fs::File;
use std::io::Read;
···
#[clap(long, default_missing_value = "true", num_args = 0..=1)]
new_plc_did: bool,
},
+
GetCID {
+
/// Path to operation json file
+
#[clap(long)]
+
operation: String,
+
},
Exit,
}
···
previous,
new_plc_did,
} => {
-
let operation = read_operation_file(&operation)?;
-
let previous = if let Some(path) = previous {
-
Some(read_operation_file(&path)?)
+
let operation: client::PlcOperation = read_json_file(&operation)?;
+
let previous: Option<client::SignedPlcOperation> = if let Some(path) = previous {
+
Some(read_json_file(&path)?)
} else {
None
};
···
.map(|s| base64::prelude::BASE64_URL_SAFE_NO_PAD.encode(s))?;
println!("sig: {}", sig);
if *new_plc_did {
-
let b = serde_ipld_dagcbor::to_vec(&SignedPlcOperation { operation, sig }).unwrap();
+
let b = serde_ipld_dagcbor::to_vec(&operation.signed(sig)).unwrap();
let hash = sha2::Sha256::digest(b);
let s = base32::encode(base32::Alphabet::Rfc4648Lower { padding: true }, &hash);
eprintln!("did:plc:{}", &s[..24]);
}
}
+
CliCommand::GetCID { operation } => {
+
let operation: client::SignedPlcOperation = read_json_file(&operation)?;
+
let b = serde_ipld_dagcbor::to_vec(&operation).unwrap();
+
let digest = sha2::Sha256::digest(b);
+
let wrap = multihash::Multihash::wrap(0x12, &digest).unwrap();
+
let cid = cid::Cid::new(cid::Version::V1, 0x71, wrap).unwrap();
+
eprintln!("cid: {}", cid);
+
}
CliCommand::Exit => {
app_client.exit().await?;
return Err("Exiting".into());
···
Ok(())
}
-
#[derive(Serialize)]
-
pub struct SignedPlcOperation {
-
#[serde(flatten)]
-
operation: client::PlcOperation,
-
sig: String,
-
}
-
-
fn read_operation_file(path: &str) -> Result<client::PlcOperation, Box<dyn std::error::Error>> {
+
fn read_json_file<T>(path: &str) -> Result<T, Box<dyn std::error::Error>>
+
where
+
T: serde::de::DeserializeOwned,
+
{
let mut file = File::open(path)?;
let mut contents = String::new();
file.read_to_string(&mut contents)?;
-
let operation: client::PlcOperation = serde_json::from_str(&contents)?;
-
Ok(operation)
+
let data: T = serde_json::from_str(&contents)?;
+
Ok(data)
}
#[tokio::main(flavor = "multi_thread")]
+1 -1
client/Cargo.toml
···
postcard = { version = "1.1.1", features = ["alloc"] }
common = { package = "vnd-atproto-common", path = "../common"}
sdk = { package = "vanadium-client-sdk", git = "https://github.com/LedgerHQ/vanadium"}
-
serde_ipld_dagcbor = { git = "http://github.com/edouardparis/serde_ipld_dagcbor", branch = "scopeguard-no-default-features", default-features = false }
+
serde_ipld_dagcbor = { git = "http://github.com/ipld/serde_ipld_dagcbor", branch = "master", default-features = false }