tuwunel_api/client/admin/media/
delete_media.rs1use axum::extract::State;
2use ruma::{Mxc, UInt};
3use synapse_admin_api::media::delete_media::v1 as delete_media;
4use tuwunel_core::{Err, Result, err};
5
6use crate::{Ruma, client::admin::require_admin};
7
8pub(crate) async fn admin_delete_media_route(
10 State(services): State<crate::State>,
11 body: Ruma<delete_media::Request>,
12) -> Result<delete_media::Response> {
13 require_admin(&services, body.sender_user()).await?;
14
15 if !services.globals.server_is_ours(&body.server_name) {
16 return Err!(Request(InvalidParam("Can only delete local media")));
17 }
18
19 let mxc = Mxc {
20 server_name: &body.server_name,
21 media_id: &body.media_id,
22 };
23
24 services
25 .media
26 .delete(&mxc)
27 .await
28 .map_err(|_| err!(Request(NotFound("Media not found"))))?;
29
30 Ok(delete_media::Response {
31 deleted_media: vec![body.media_id.clone()],
32 total: UInt::from(1_u32),
33 })
34}