2022-09-07 13:25:51 +02:00
|
|
|
mod data;
|
|
|
|
pub use data::Data;
|
|
|
|
|
2022-10-08 13:03:07 +02:00
|
|
|
use crate::Result;
|
2020-06-16 12:11:38 +02:00
|
|
|
use ruma::{
|
2022-10-08 13:03:07 +02:00
|
|
|
api::client::backup::{BackupAlgorithm, KeyBackupData, RoomKeyBackup},
|
2021-12-22 19:41:33 +01:00
|
|
|
serde::Raw,
|
2020-07-29 14:28:40 -04:00
|
|
|
RoomId, UserId,
|
2020-06-16 12:11:38 +02:00
|
|
|
};
|
2022-10-08 13:04:55 +02:00
|
|
|
use std::{collections::BTreeMap};
|
2021-06-08 18:10:00 +02:00
|
|
|
|
2022-10-05 12:45:54 +02:00
|
|
|
pub struct Service {
|
2022-10-08 13:02:52 +02:00
|
|
|
pub db: &'static dyn Data,
|
2022-09-07 13:25:51 +02:00
|
|
|
}
|
|
|
|
|
2022-10-05 12:45:54 +02:00
|
|
|
impl Service {
|
2020-06-16 12:11:38 +02:00
|
|
|
pub fn create_backup(
|
|
|
|
&self,
|
|
|
|
user_id: &UserId,
|
2021-12-22 19:41:33 +01:00
|
|
|
backup_metadata: &Raw<BackupAlgorithm>,
|
2020-06-16 12:11:38 +02:00
|
|
|
) -> Result<String> {
|
2022-10-05 09:34:25 +02:00
|
|
|
self.db.create_backup(user_id, backup_metadata)
|
2020-06-16 12:11:38 +02:00
|
|
|
}
|
|
|
|
|
2020-08-27 14:48:20 +02:00
|
|
|
pub fn delete_backup(&self, user_id: &UserId, version: &str) -> Result<()> {
|
2022-10-05 09:34:25 +02:00
|
|
|
self.db.delete_backup(user_id, version)
|
2020-08-27 14:48:20 +02:00
|
|
|
}
|
|
|
|
|
2020-06-16 12:11:38 +02:00
|
|
|
pub fn update_backup(
|
|
|
|
&self,
|
|
|
|
user_id: &UserId,
|
|
|
|
version: &str,
|
2021-12-22 19:41:33 +01:00
|
|
|
backup_metadata: &Raw<BackupAlgorithm>,
|
2020-06-16 12:11:38 +02:00
|
|
|
) -> Result<String> {
|
2022-10-05 09:34:25 +02:00
|
|
|
self.db.update_backup(user_id, version, backup_metadata)
|
2020-06-16 12:11:38 +02:00
|
|
|
}
|
|
|
|
|
2021-08-31 19:14:37 +02:00
|
|
|
pub fn get_latest_backup_version(&self, user_id: &UserId) -> Result<Option<String>> {
|
2022-10-05 09:34:25 +02:00
|
|
|
self.db.get_latest_backup_version(user_id)
|
2021-08-31 19:14:37 +02:00
|
|
|
}
|
|
|
|
|
2021-12-22 19:41:33 +01:00
|
|
|
pub fn get_latest_backup(
|
|
|
|
&self,
|
|
|
|
user_id: &UserId,
|
|
|
|
) -> Result<Option<(String, Raw<BackupAlgorithm>)>> {
|
2022-10-05 09:34:25 +02:00
|
|
|
self.db.get_latest_backup(user_id)
|
2020-06-16 12:11:38 +02:00
|
|
|
}
|
|
|
|
|
2021-12-22 19:41:33 +01:00
|
|
|
pub fn get_backup(
|
|
|
|
&self,
|
|
|
|
user_id: &UserId,
|
|
|
|
version: &str,
|
|
|
|
) -> Result<Option<Raw<BackupAlgorithm>>> {
|
2022-10-05 09:34:25 +02:00
|
|
|
self.db.get_backup(user_id, version)
|
2020-06-16 12:11:38 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
pub fn add_key(
|
|
|
|
&self,
|
|
|
|
user_id: &UserId,
|
|
|
|
version: &str,
|
|
|
|
room_id: &RoomId,
|
|
|
|
session_id: &str,
|
2021-12-22 19:41:33 +01:00
|
|
|
key_data: &Raw<KeyBackupData>,
|
2020-06-16 12:11:38 +02:00
|
|
|
) -> Result<()> {
|
2022-10-05 20:34:31 +02:00
|
|
|
self.db
|
|
|
|
.add_key(user_id, version, room_id, session_id, key_data)
|
2020-06-16 12:11:38 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
pub fn count_keys(&self, user_id: &UserId, version: &str) -> Result<usize> {
|
2022-10-05 09:34:25 +02:00
|
|
|
self.db.count_keys(user_id, version)
|
2020-06-16 12:11:38 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
pub fn get_etag(&self, user_id: &UserId, version: &str) -> Result<String> {
|
2022-10-05 09:34:25 +02:00
|
|
|
self.db.get_etag(user_id, version)
|
2020-06-16 12:11:38 +02:00
|
|
|
}
|
|
|
|
|
2021-02-27 16:09:22 -05:00
|
|
|
pub fn get_all(
|
|
|
|
&self,
|
|
|
|
user_id: &UserId,
|
|
|
|
version: &str,
|
2022-01-27 16:17:55 +01:00
|
|
|
) -> Result<BTreeMap<Box<RoomId>, RoomKeyBackup>> {
|
2022-10-05 09:34:25 +02:00
|
|
|
self.db.get_all(user_id, version)
|
2020-06-16 12:11:38 +02:00
|
|
|
}
|
2020-08-27 14:48:20 +02:00
|
|
|
|
|
|
|
pub fn get_room(
|
|
|
|
&self,
|
|
|
|
user_id: &UserId,
|
|
|
|
version: &str,
|
|
|
|
room_id: &RoomId,
|
2021-12-22 19:41:33 +01:00
|
|
|
) -> Result<BTreeMap<String, Raw<KeyBackupData>>> {
|
2022-10-05 09:34:25 +02:00
|
|
|
self.db.get_room(user_id, version, room_id)
|
2020-08-27 14:48:20 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
pub fn get_session(
|
|
|
|
&self,
|
|
|
|
user_id: &UserId,
|
|
|
|
version: &str,
|
|
|
|
room_id: &RoomId,
|
|
|
|
session_id: &str,
|
2021-12-22 19:41:33 +01:00
|
|
|
) -> Result<Option<Raw<KeyBackupData>>> {
|
2022-10-05 09:34:25 +02:00
|
|
|
self.db.get_session(user_id, version, room_id, session_id)
|
2020-08-27 14:48:20 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
pub fn delete_all_keys(&self, user_id: &UserId, version: &str) -> Result<()> {
|
2022-10-05 09:34:25 +02:00
|
|
|
self.db.delete_all_keys(user_id, version)
|
2020-08-27 14:48:20 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
pub fn delete_room_keys(
|
|
|
|
&self,
|
|
|
|
user_id: &UserId,
|
|
|
|
version: &str,
|
|
|
|
room_id: &RoomId,
|
|
|
|
) -> Result<()> {
|
2022-10-05 09:34:25 +02:00
|
|
|
self.db.delete_room_keys(user_id, version, room_id)
|
2020-08-27 14:48:20 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
pub fn delete_room_key(
|
|
|
|
&self,
|
|
|
|
user_id: &UserId,
|
|
|
|
version: &str,
|
|
|
|
room_id: &RoomId,
|
|
|
|
session_id: &str,
|
|
|
|
) -> Result<()> {
|
2022-10-05 20:34:31 +02:00
|
|
|
self.db
|
|
|
|
.delete_room_key(user_id, version, room_id, session_id)
|
2020-08-27 14:48:20 +02:00
|
|
|
}
|
2020-06-16 12:11:38 +02:00
|
|
|
}
|