diff options
Diffstat (limited to 'src/api/peers.rs')
| -rw-r--r-- | src/api/peers.rs | 15 |
1 files changed, 11 insertions, 4 deletions
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<AppState>, + user: Option<axum::Extension<crate::api::auth::AuthenticatedUser>>, Path(peer): Path<String>, Query(query): Query<DeletePeerQuery>, ) -> Result<StatusCode, StatusCode> { @@ -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())?; |
