Skip to main content

tuwunel_api/client/admin/media/
delete_media.rs

1use 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
8/// # `DELETE /_synapse/admin/v1/media/{server_name}/{media_id}`
9pub(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}