From 046b738c74f62469f7a080415690e2dacd85e1e6 Mon Sep 17 00:00:00 2001 From: tv Date: Sat, 7 Nov 2026 22:35:21 +0100 Subject: remake: forgetting and releasing name their user Forget records and released quarantines name the user who made them, so they are judged by its capabilities. Auth plan M6. --- src/api/peers.rs | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'src/api/peers.rs') diff --git a/src/api/peers.rs b/src/api/peers.rs index b00593f..cd9381f 100644 --- a/src/api/peers.rs +++ b/src/api/peers.rs @@ -252,6 +252,7 @@ pub(crate) async fn peer_list(state: &AppState) -> PeerListResponse { /// `DELETE /peers/{pk}`: forgets a peer swarm-wide. pub(crate) async fn delete_peer( State(state): State, + user: Option>, Path(peer): Path, Query(query): Query, ) -> Result { @@ -279,11 +280,17 @@ pub(crate) async fn delete_peer( serde_json::json!({ "at": state.clock.now_millis().as_u64(), "by": state.local_id() }); let peer_clone = peer.clone(); + // Named as who asked: rules by path judge the change by them (`access::rules`). + let user = user.map(|axum::Extension(user)| user.0); state - .mutate_doc(move |doc| { - store::write_path(doc, &forgotten_path(&peer_clone), &record)?; - crate::swarm::members::unregister(doc, &peer_clone) - }) + .mutate_doc_for( + user, + crate::document::signatures::Sign::Protocol, + move |doc| { + store::write_path(doc, &forgotten_path(&peer_clone), &record)?; + crate::swarm::members::unregister(doc, &peer_clone) + }, + ) .await .map_err(|e| store_status(e, "Failed to write forget record").status())?; -- cgit v1.3.1