diff options
Diffstat (limited to 'adenosine-cli/src/bin/adenosine.rs')
-rw-r--r-- | adenosine-cli/src/bin/adenosine.rs | 65 |
1 files changed, 41 insertions, 24 deletions
diff --git a/adenosine-cli/src/bin/adenosine.rs b/adenosine-cli/src/bin/adenosine.rs index 33f74c9..1d6e22d 100644 --- a/adenosine-cli/src/bin/adenosine.rs +++ b/adenosine-cli/src/bin/adenosine.rs @@ -104,7 +104,7 @@ enum BskyCommand { name: String, }, */ - Profile { name: DidOrHost }, + Profile { name: Option<DidOrHost> }, SearchUsers { query: String }, } @@ -235,7 +235,6 @@ fn run(opt: Opt) -> Result<()> { let result = match opt.cmd { Command::Status => { - // XXX println!("Configuration"); println!(" ATP_HOST: {}", opt.atp_host); if opt.auth_token.is_some() { @@ -252,7 +251,7 @@ fn run(opt: Opt) -> Result<()> { let name = name .map(|v| v.to_string()) .or(jwt_did) - .ok_or(anyhow!("expected a name or auth token"))?; + .ok_or(anyhow!("expected a name, or self via auth token"))?; params.insert("user".to_string(), name.to_string()); xrpc_client.get("com.atproto.repoDescribe", Some(params))? } @@ -262,7 +261,7 @@ fn run(opt: Opt) -> Result<()> { xrpc_client.get("com.atproto.resolveName", Some(params))? } Command::Get { uri, cid } => { - params.insert("did".to_string(), uri.repository.to_string()); + params.insert("user".to_string(), uri.repository.to_string()); params.insert( "collection".to_string(), uri.collection.ok_or(anyhow!("collection required"))?, @@ -278,9 +277,9 @@ fn run(opt: Opt) -> Result<()> { } Command::Ls { uri } => { // TODO: option to print fully-qualified path? + params.insert("user".to_string(), uri.repository.to_string()); if !uri.collection.is_some() { // if a repository, but no collection, list the collections - params.insert("user".to_string(), uri.repository.to_string()); let describe = xrpc_client .get("com.atproto.repoDescribe", Some(params))? .ok_or(anyhow!("expected a repoDescribe response"))?; @@ -296,16 +295,30 @@ fn run(opt: Opt) -> Result<()> { } } else if uri.collection.is_some() && !uri.record.is_some() { // if a collection, but no record, list the records (with extracted timestamps) + params.insert( + "collection".to_string(), + uri.collection.unwrap().to_string(), + ); + let records = xrpc_client + .get("com.atproto.repoListRecords", Some(params))? + .ok_or(anyhow!("expected a repoListRecords response"))?; + for r in records.as_array().unwrap_or(&vec![]).iter() { + println!("{}", r); + } } else { return Err(anyhow!("got too much of a URI to 'ls'")); } None } Command::Create { collection, fields } => { + params.insert( + "did".to_string(), + jwt_did.ok_or(anyhow!("need auth token"))?, + ); params.insert("collection".to_string(), collection); update_params_from_fields(&fields, &mut params); let val = value_from_fields(fields); - xrpc_client.post("com.atproto.repoCreateRecord", Some(params), val)? + xrpc_client.post("com.atproto.repoCreateRecord", Some(params), Some(val))? } Command::Update { uri, fields } => { params.insert("did".to_string(), uri.repository.to_string()); @@ -323,7 +336,7 @@ fn run(opt: Opt) -> Result<()> { .unwrap_or(json!({})); update_params_from_fields(&fields, &mut params); update_value_from_fields(fields, &mut record); - xrpc_client.post("com.atproto.repoPutRecord", Some(params), record)? + xrpc_client.post("com.atproto.repoPutRecord", Some(params), Some(record))? } Command::Delete { uri } => { params.insert("did".to_string(), uri.repository.to_string()); @@ -335,7 +348,7 @@ fn run(opt: Opt) -> Result<()> { "rkey".to_string(), uri.record.ok_or(anyhow!("record key required"))?, ); - xrpc_client.post("com.atproto.repoDeleteRecord", Some(params), json!({}))? + xrpc_client.post("com.atproto.repoDeleteRecord", Some(params), None)? } Command::Xrpc { method, @@ -346,7 +359,7 @@ fn run(opt: Opt) -> Result<()> { let body = value_from_fields(fields); match method { XrpcMethod::Get => xrpc_client.get(&nsid, Some(params))?, - XrpcMethod::Post => xrpc_client.post(&nsid, Some(params), body)?, + XrpcMethod::Post => xrpc_client.post(&nsid, Some(params), Some(body))?, } } Command::Account { @@ -359,28 +372,28 @@ fn run(opt: Opt) -> Result<()> { } => xrpc_client.post( "com.atproto.createAccount", None, - json!({ + Some(json!({ "email": email, "username": username, "password": password, - }), + })), )?, Command::Account { cmd: AccountCommand::Login { username, password }, } => xrpc_client.post( "com.atproto.createSession", None, - json!({ + Some(json!({ "username": username, "password": password, - }), + })), )?, Command::Account { cmd: AccountCommand::Logout, - } => xrpc_client.post("com.atproto.deleteSession", None, json!({}))?, + } => xrpc_client.post("com.atproto.deleteSession", None, None)?, Command::Account { cmd: AccountCommand::Delete, - } => xrpc_client.post("com.atproto.deleteAccount", None, json!({}))?, + } => xrpc_client.post("com.atproto.deleteAccount", None, None)?, Command::Account { cmd: AccountCommand::Info, } => xrpc_client.get("com.atproto.getAccount", None)?, @@ -453,9 +466,9 @@ fn run(opt: Opt) -> Result<()> { xrpc_client.post( "com.atproto.repoCreateRecord", Some(params), - json!({ + Some(json!({ "text": text, - }), + })), )? } Command::Bsky { @@ -469,10 +482,10 @@ fn run(opt: Opt) -> Result<()> { xrpc_client.post( "com.atproto.repoCreateRecord", Some(params), - json!({ + Some(json!({ "subject": uri.to_string(), // TODO: "createdAt": now_timestamp(), - }), + })), )? } Command::Bsky { @@ -486,10 +499,10 @@ fn run(opt: Opt) -> Result<()> { xrpc_client.post( "com.atproto.repoCreateRecord", Some(params), - json!({ + Some(json!({ "subject": uri.to_string(), // TODO: "createdAt": now_timestamp(), - }), + })), )? } Command::Bsky { @@ -503,16 +516,20 @@ fn run(opt: Opt) -> Result<()> { xrpc_client.post( "com.atproto.repoCreateRecord", Some(params), - json!({ + Some(json!({ "subject": uri.to_string(), // TODO: "createdAt": now_timestamp(), - }), + })), )? } Command::Bsky { cmd: BskyCommand::Profile { name }, } => { - params.insert("name".to_string(), name.to_string()); + let name = name + .map(|v| v.to_string()) + .or(jwt_did) + .ok_or(anyhow!("expected a name, or self via auth token"))?; + params.insert("user".to_string(), name.to_string()); xrpc_client.get("app.bsky.getProfile", Some(params))? } Command::Bsky { |