tuwunel_admin/media/
delete_all_from_server.rs1use ruma::{Mxc, OwnedServerName};
2use tuwunel_core::{Err, Result, error, trace, warn};
3
4use crate::admin_command;
5
6#[admin_command]
7pub(super) async fn delete_all_from_server(
8 &self,
9 server_name: OwnedServerName,
10 yes_i_want_to_delete_local_media: bool,
11) -> Result {
12 if server_name == self.services.globals.server_name() && !yes_i_want_to_delete_local_media {
13 return Err!("This command only works for remote media by default.",);
14 }
15
16 let Ok(all_mxcs) = self
17 .services
18 .media
19 .get_all_mxcs()
20 .await
21 .inspect_err(|e| error!("Failed to get MXC URIs from our database: {e}"))
22 else {
23 return Err!("Failed to get MXC URIs from our database",);
24 };
25
26 let mut deleted_count: usize = 0;
27
28 for mxc in all_mxcs {
29 let Ok(mxc_server_name) = mxc.server_name().inspect_err(|e| {
30 warn!(
31 "Failed to parse MXC {mxc} server name from database, ignoring error and \
32 skipping: {e}"
33 );
34 }) else {
35 continue;
36 };
37
38 if mxc_server_name != server_name {
39 trace!("skipping MXC URI {mxc}");
40 continue;
41 }
42
43 let mxc: Mxc<'_> = mxc.as_str().try_into()?;
44
45 match self.services.media.delete(&mxc).await {
46 | Ok(()) => {
47 deleted_count = deleted_count.saturating_add(1);
48 },
49 | Err(e) => {
50 warn!("Failed to delete {mxc}, ignoring error and skipping: {e}");
51 },
52 }
53 }
54
55 write!(self, "Deleted {deleted_count} total files.").await
56}