diff options
| author | tv <tv@krebsco.de> | 2026-11-07 22:35:21 +0100 |
|---|---|---|
| committer | tv <tv@krebsco.de> | 2026-11-07 22:35:21 +0100 |
| commit | 046b738c74f62469f7a080415690e2dacd85e1e6 (patch) | |
| tree | d38a6903535d5fcc4f88e697cada351a25a3cf72 /src/api/peers.rs | |
| parent | d7a6bc3ed201ff2ca953f74f62154e5e17728f22 (diff) | |
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.
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())?; |
