tuwunel_api/client/backup/
keys_session.rs1use axum::extract::State;
2use ruma::api::client::backup::{
3 add_backup_keys_for_session, delete_backup_keys_for_session, get_backup_keys_for_session,
4};
5use tuwunel_core::{Result, err};
6
7use super::{check_backup_version, get_count_etag};
8use crate::Ruma;
9
10pub(crate) async fn add_backup_keys_for_session_route(
19 State(services): State<crate::State>,
20 body: Ruma<add_backup_keys_for_session::v3::Request>,
21) -> Result<add_backup_keys_for_session::v3::Response> {
22 check_backup_version(&services, body.sender_user(), &body.version).await?;
23
24 services
25 .key_backups
26 .add_key(
27 body.sender_user(),
28 &body.version,
29 &body.room_id,
30 &body.session_id,
31 &body.session_data,
32 )
33 .await?;
34
35 let (count, etag) = get_count_etag(&services, body.sender_user(), &body.version).await?;
36
37 Ok(add_backup_keys_for_session::v3::Response { count, etag })
38}
39
40pub(crate) async fn get_backup_keys_for_session_route(
44 State(services): State<crate::State>,
45 body: Ruma<get_backup_keys_for_session::v3::Request>,
46) -> Result<get_backup_keys_for_session::v3::Response> {
47 let key_data = services
48 .key_backups
49 .get_session(body.sender_user(), &body.version, &body.room_id, &body.session_id)
50 .await
51 .map_err(|_| {
52 err!(Request(NotFound(debug_error!("Backup key not found for this user's session."))))
53 })?;
54
55 Ok(get_backup_keys_for_session::v3::Response { key_data })
56}
57
58pub(crate) async fn delete_backup_keys_for_session_route(
62 State(services): State<crate::State>,
63 body: Ruma<delete_backup_keys_for_session::v3::Request>,
64) -> Result<delete_backup_keys_for_session::v3::Response> {
65 services
66 .key_backups
67 .delete_room_key(body.sender_user(), &body.version, &body.room_id, &body.session_id)
68 .await;
69
70 let (count, etag) = get_count_etag(&services, body.sender_user(), &body.version).await?;
71
72 Ok(delete_backup_keys_for_session::v3::Response { count, etag })
73}