Skip to main content

tuwunel_api/client/admin/media/
purge_media_cache.rs

1use 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
11/// # `POST /_synapse/admin/v1/purge_media_cache`
12///
13/// Purges cached remote media older than `before_ts`. The cutoff compares file
14/// modification time; last-access times are not tracked.
15pub(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}