MCPcopy Create free account
hub / github.com/atomicdotdev/atomic / run

Method run

atomic-cli/src/commands/identity/sign.rs:35–85  ·  view source on GitHub ↗
(&self)

Source from the content-addressed store, hash-verified

33
34impl Command for Sign {
35 fn run(&self) -> CliResult<()> {
36 let store = IdentityStore::open_default().map_err(|e| {
37 CliError::Internal(anyhow::anyhow!("Failed to open identity store: {}", e))
38 })?;
39
40 let identity = if let Some(name) = &self.identity {
41 store
42 .load_by_name(name)
43 .map_err(|_| CliError::IdentityNotFound(name.clone()))?
44 } else {
45 store
46 .get_default()
47 .map_err(|e| {
48 CliError::Internal(anyhow::anyhow!("Failed to load default identity: {}", e))
49 })?
50 .ok_or_else(|| {
51 CliError::Internal(anyhow::anyhow!(
52 "No default identity set. Create one first:\n \
53 atomic identity new <name> --email <email> --set-default"
54 ))
55 })?
56 };
57
58 let keypair = store.load_keypair(&identity.id, None).map_err(|e| {
59 CliError::Internal(anyhow::anyhow!(
60 "Failed to load keypair for '{}': {}",
61 identity.name,
62 e
63 ))
64 })?;
65
66 let mut data = Vec::new();
67 std::io::stdin()
68 .read_to_end(&mut data)
69 .map_err(|e| CliError::Internal(anyhow::anyhow!("Failed to read stdin: {}", e)))?;
70
71 let sig_bytes = keypair.sign(&data);
72 let signature = BASE64.encode(&sig_bytes);
73 let public_key = identity.public_key_base32();
74 let name = &identity.name;
75
76 let output = serde_json::json!({
77 "signature": signature,
78 "public_key": public_key,
79 "identity": name,
80 "alg": "ed25519",
81 });
82
83 println!("{}", serde_json::to_string_pretty(&output).unwrap());
84 Ok(())
85 }
86}

Callers

nothing calls this directly

Calls 7

load_by_nameMethod · 0.80
load_keypairMethod · 0.80
encodeMethod · 0.80
public_key_base32Method · 0.80
cloneMethod · 0.45
get_defaultMethod · 0.45
signMethod · 0.45

Tested by

no test coverage detected