aboutsummaryrefslogtreecommitdiffstats
path: root/src/api
diff options
context:
space:
mode:
Diffstat (limited to 'src/api')
-rw-r--r--src/api/peers.rs15
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())?;