tuwunel_api/client/admin/media/
purge_media_cache.rs1use std::time::Duration;
2
3use axum::extract::State;
4use ruma::UInt;
5use synapse_admin_api::media::purge_media_cache::v1::{Request, Response};
6use tuwunel_core::{Err, Result, utils::time::timepoint_from_epoch};
7
8use super::MIN_BEFORE_TS;
9use crate::{Ruma, client::admin::require_admin};
10
11pub(crate) async fn admin_purge_media_cache_route(
16 State(services): State<crate::State>,
17 body: Ruma<Request>,
18) -> Result<Response> {
19 require_admin(&services, body.sender_user()).await?;
20
21 let before_ts = u64::from(body.before_ts);
22 if before_ts < MIN_BEFORE_TS {
23 return Err!(Request(InvalidParam(
24 "before_ts is before the year 1970, this is likely a mistake"
25 )));
26 }
27
28 let cutoff = timepoint_from_epoch(Duration::from_millis(before_ts))?;
29
30 let deleted = services
31 .media
32 .delete_range(cutoff, true, false, false)
33 .await?;
34
35 let deleted = UInt::try_from(deleted).unwrap_or(UInt::MAX);
36
37 Ok(Response { deleted })
38}