1use anyhow::{Context, Result};
12use futu_auth::machine;
13
14pub async fn run(for_key: Option<String>) -> Result<()> {
15 let raw = machine::raw_machine_id().context("read machine id")?;
16 match for_key {
17 None => {
18 println!("machine-id (raw): {raw}");
19 println!();
20 println!("To compute a key-specific fingerprint for binding:");
21 println!(" futucli machine-id --for-key REPLACE_WITH_KEY_ID");
22 println!(
23 " # ⚠️ 把 REPLACE_WITH_KEY_ID 换成 `futucli list-keys` 里某把 key 的 id 字段"
24 );
25 }
26 Some(id) => {
27 let fp = machine::fingerprint_from_raw(&id, &raw);
28 println!("fingerprint (for key_id={id:?}):");
29 println!(" {fp}");
30 println!();
31 println!("To bind this machine when generating a key elsewhere:");
32 println!(" futucli gen-key --id {id} --scopes SCOPE1,SCOPE2 --bind-machines {fp}");
33 println!(
34 " # ⚠️ --scopes 按需替换为真实 scope 列表(qot:read / acc:read / trade:unlock / trade:real / admin)"
35 );
36 }
37 }
38 Ok(())
39}