diff options
| author | Bryan Newbold <bnewbold@robocracy.org> | 2022-11-04 19:22:03 -0700 | 
|---|---|---|
| committer | Bryan Newbold <bnewbold@robocracy.org> | 2022-11-04 19:22:03 -0700 | 
| commit | 0aa684b2bd048adbc02cc82cc2f61ff556efda2d (patch) | |
| tree | 18e8309f28d2e50b3386c5aa9a2e53f24d56b3e4 /adenosine-pds | |
| parent | 05495ede3e4defac165a1f536dfe6d62fc181557 (diff) | |
| download | adenosine-0aa684b2bd048adbc02cc82cc2f61ff556efda2d.tar.gz adenosine-0aa684b2bd048adbc02cc82cc2f61ff556efda2d.zip | |
pds: fix 'put' (not 'Update')
Diffstat (limited to 'adenosine-pds')
| -rw-r--r-- | adenosine-pds/Cargo.toml | 1 | ||||
| -rw-r--r-- | adenosine-pds/src/lib.rs | 28 | 
2 files changed, 29 insertions, 0 deletions
| diff --git a/adenosine-pds/Cargo.toml b/adenosine-pds/Cargo.toml index 190ba00..e7f92ea 100644 --- a/adenosine-pds/Cargo.toml +++ b/adenosine-pds/Cargo.toml @@ -27,6 +27,7 @@ jsonschema = "*"  schemafy = "*"  rouille = "*"  iroh-car = { version = "0.1.0-vendored.0", path = "../iroh-car" } +adenosine-cli = { version = "0.1.0-dev.0", path = "../adenosine-cli" }  tokio = { version = "1", features = ["full"] }  futures = "0.3"  sha256 = "*" diff --git a/adenosine-pds/src/lib.rs b/adenosine-pds/src/lib.rs index 913b089..a4b6114 100644 --- a/adenosine-pds/src/lib.rs +++ b/adenosine-pds/src/lib.rs @@ -438,6 +438,34 @@ fn xrpc_post_handler(              // TODO: next handle updates to database              Ok(json!({}))          } +        "com.atproto.repoPutRecord" => { +            // TODO: validate edits against schemas +            let did = Did::from_str(&xrpc_required_param(request, "did")?)?; +            let collection = Nsid::from_str(&xrpc_required_param(request, "collection")?)?; +            let tid = Tid::from_str(&xrpc_required_param(request, "rkey")?)?; +            let record: Value = rouille::input::json_input(request)?; +            let mut srv = srv.lock().unwrap(); +            let _auth_did = &xrpc_check_auth_header(&mut srv, request, Some(&did))?; +            let commit_cid = &srv.repo.lookup_commit(&did)?.unwrap(); +            let last_commit = srv.repo.get_commit(&commit_cid)?; +            let mutations: Vec<Mutation> = vec![Mutation::Update( +                collection, +                tid, +                json_value_into_ipld(record), +            )]; +            let new_mst_cid = srv +                .repo +                .update_mst(&last_commit.mst_cid, &mutations) +                .context("updating MST in repo")?; +            let new_root_cid = srv.repo.write_root( +                &last_commit.meta_cid, +                Some(&last_commit.commit_cid), +                &new_mst_cid, +            )?; +            srv.repo.write_commit(&did, &new_root_cid, "dummy-sig")?; +            // TODO: next handle updates to database +            Ok(json!({})) +        }          "com.atproto.repoDeleteRecord" => {              let did = Did::from_str(&xrpc_required_param(request, "did")?)?;              let collection = Nsid::from_str(&xrpc_required_param(request, "collection")?)?; | 
