From 0aa684b2bd048adbc02cc82cc2f61ff556efda2d Mon Sep 17 00:00:00 2001 From: Bryan Newbold Date: Fri, 4 Nov 2022 19:22:03 -0700 Subject: pds: fix 'put' (not 'Update') --- adenosine-pds/Cargo.toml | 1 + adenosine-pds/src/lib.rs | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) (limited to 'adenosine-pds') 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 = 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")?)?; -- cgit v1.2.3