Skip to main content

tuwunel_api_admin/media/
purge_media_cache.rs

1use std::time::Duration;
2
3use axum::extract::State;
4use synapse_admin_api::media::purge_media_cache::v1::{Request, Response};
5use tuwunel_core::{
6	Err, Result,
7	utils::{math::ruma_from_usize_saturating, time::timepoint_from_epoch},
8};
9
10use super::MIN_BEFORE_TS;
11use crate::{Ruma, require_admin};
12
13/// # `POST /_synapse/admin/v1/purge_media_cache`
14///
15/// Purges cached remote media older than `before_ts`. The cutoff compares file
16/// modification time; last-access times are not tracked.
17pub(crate) async fn admin_purge_media_cache_route(
18	State(services): State<crate::State>,
19	body: Ruma<Request>,
20) -> Result<Response> {
21	require_admin(&services, body.sender_user()).await?;
22
23	let before_ts = u64::from(body.before_ts);
24	if before_ts < MIN_BEFORE_TS {
25		return Err!(Request(InvalidParam(
26			"before_ts is before the year 1970, this is likely a mistake"
27		)));
28	}
29
30	let cutoff = timepoint_from_epoch(Duration::from_millis(before_ts))?;
31
32	let deleted = services
33		.media
34		.delete_range(cutoff, true, false, false)
35		.await?;
36
37	let deleted = ruma_from_usize_saturating(deleted);
38
39	Ok(Response { deleted })
40}