diff options
Diffstat (limited to 'adenosine-pds/src')
| -rw-r--r-- | adenosine-pds/src/lib.rs | 28 | 
1 files changed, 28 insertions, 0 deletions
| 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")?)?; | 
