Page MenuHomePhorge

D14275.1768728375.diff
No OneTemporary

Size
11 KB
Referenced Files
None
Subscribers
None

D14275.1768728375.diff

diff --git a/native/native_rust_library/Cargo.lock b/native/native_rust_library/Cargo.lock
--- a/native/native_rust_library/Cargo.lock
+++ b/native/native_rust_library/Cargo.lock
@@ -298,6 +298,7 @@
"iana-time-zone",
"js-sys",
"num-traits",
+ "serde",
"wasm-bindgen",
"windows-targets 0.52.5",
]
diff --git a/services/backup/src/constants.rs b/services/backup/src/constants.rs
--- a/services/backup/src/constants.rs
+++ b/services/backup/src/constants.rs
@@ -17,20 +17,8 @@
pub const COMM_SERVICES_USE_JSON_LOGS: &str = "COMM_SERVICES_USE_JSON_LOGS";
// DynamoDB constants
-pub mod backup_table {
- pub const TABLE_NAME: &str = "backup-service-backup";
- pub const CREATED_INDEX: &str = "userID-created-index";
- pub mod attr {
- pub const USER_ID: &str = "userID";
- pub const BACKUP_ID: &str = "backupID";
- pub const CREATED: &str = "created";
- pub const USER_DATA: &str = "userData";
- pub const USER_KEYS: &str = "userKeys";
- pub const ATTACHMENTS: &str = "attachments";
- pub const SIWE_BACKUP_MSG: &str = "siweBackupMsg";
- }
-}
+pub use comm_lib::backup::database::backup_table;
pub mod log_table {
pub const TABLE_NAME: &str = "backup-service-log";
diff --git a/services/backup/src/database/backup_item.rs b/services/backup/src/database/backup_item.rs
--- a/services/backup/src/database/backup_item.rs
+++ b/services/backup/src/database/backup_item.rs
@@ -2,181 +2,12 @@
use aws_sdk_dynamodb::types::AttributeValue;
use chrono::{DateTime, Utc};
use comm_lib::{
- blob::{client::BlobServiceClient, types::BlobInfo},
- database::{
- AttributeExtractor, AttributeTryInto, DBItemError, TryFromAttribute,
- },
+ blob::types::BlobInfo,
+ database::{AttributeExtractor, DBItemError, TryFromAttribute},
};
use std::collections::HashMap;
-#[derive(Clone, Debug)]
-pub struct BackupItem {
- pub user_id: String,
- pub backup_id: String,
- pub created: DateTime<Utc>,
- pub user_keys: BlobInfo,
- pub user_data: Option<BlobInfo>,
- pub attachments: Vec<BlobInfo>,
- pub siwe_backup_msg: Option<String>,
-}
-
-impl BackupItem {
- pub fn new(
- user_id: String,
- backup_id: String,
- user_keys: BlobInfo,
- user_data: Option<BlobInfo>,
- attachments: Vec<BlobInfo>,
- siwe_backup_msg: Option<String>,
- ) -> Self {
- BackupItem {
- user_id,
- backup_id,
- created: chrono::Utc::now(),
- user_keys,
- user_data,
- attachments,
- siwe_backup_msg,
- }
- }
-
- pub fn revoke_user_keys_holders(&self, blob_client: &BlobServiceClient) {
- blob_client.schedule_revoke_holder(
- &self.user_keys.blob_hash,
- &self.user_keys.holder,
- );
- }
-
- pub fn revoke_user_data_holders(&self, blob_client: &BlobServiceClient) {
- if let Some(user_data) = &self.user_data {
- blob_client
- .schedule_revoke_holder(&user_data.blob_hash, &user_data.holder);
- }
-
- for attachment_info in &self.attachments {
- blob_client.schedule_revoke_holder(
- &attachment_info.blob_hash,
- &attachment_info.holder,
- );
- }
- }
-
- pub fn item_key(
- user_id: &str,
- backup_id: &str,
- ) -> HashMap<String, AttributeValue> {
- HashMap::from([
- (
- backup_table::attr::USER_ID.to_string(),
- AttributeValue::S(user_id.to_string()),
- ),
- (
- backup_table::attr::BACKUP_ID.to_string(),
- AttributeValue::S(backup_id.to_string()),
- ),
- ])
- }
-}
-
-impl From<BackupItem> for HashMap<String, AttributeValue> {
- fn from(value: BackupItem) -> Self {
- let mut attrs = HashMap::from([
- (
- backup_table::attr::USER_ID.to_string(),
- AttributeValue::S(value.user_id),
- ),
- (
- backup_table::attr::BACKUP_ID.to_string(),
- AttributeValue::S(value.backup_id),
- ),
- (
- backup_table::attr::CREATED.to_string(),
- AttributeValue::S(value.created.to_rfc3339()),
- ),
- (
- backup_table::attr::USER_KEYS.to_string(),
- value.user_keys.into(),
- ),
- ]);
-
- if let Some(user_data) = value.user_data {
- attrs.insert(backup_table::attr::USER_DATA.to_string(), user_data.into());
- }
-
- if !value.attachments.is_empty() {
- attrs.insert(
- backup_table::attr::ATTACHMENTS.to_string(),
- AttributeValue::L(
- value
- .attachments
- .into_iter()
- .map(AttributeValue::from)
- .collect(),
- ),
- );
- }
-
- if let Some(siwe_backup_msg_value) = value.siwe_backup_msg {
- attrs.insert(
- backup_table::attr::SIWE_BACKUP_MSG.to_string(),
- AttributeValue::S(siwe_backup_msg_value),
- );
- }
- attrs
- }
-}
-
-impl TryFrom<HashMap<String, AttributeValue>> for BackupItem {
- type Error = DBItemError;
-
- fn try_from(
- mut value: HashMap<String, AttributeValue>,
- ) -> Result<Self, Self::Error> {
- let user_id = String::try_from_attr(
- backup_table::attr::USER_ID,
- value.remove(backup_table::attr::USER_ID),
- )?;
- let backup_id = String::try_from_attr(
- backup_table::attr::BACKUP_ID,
- value.remove(backup_table::attr::BACKUP_ID),
- )?;
- let created = DateTime::<Utc>::try_from_attr(
- backup_table::attr::CREATED,
- value.remove(backup_table::attr::CREATED),
- )?;
-
- let user_keys = BlobInfo::try_from_attr(
- backup_table::attr::USER_KEYS,
- value.remove(backup_table::attr::USER_KEYS),
- )?;
- let user_data = value
- .remove(backup_table::attr::USER_DATA)
- .map(|attr| {
- BlobInfo::try_from_attr(backup_table::attr::USER_DATA, Some(attr))
- })
- .transpose()?;
-
- let attachments = value.remove(backup_table::attr::ATTACHMENTS);
- let attachments = if attachments.is_some() {
- attachments.attr_try_into(backup_table::attr::ATTACHMENTS)?
- } else {
- Vec::new()
- };
-
- let siwe_backup_msg: Option<String> =
- value.take_attr(backup_table::attr::SIWE_BACKUP_MSG)?;
-
- Ok(BackupItem {
- user_id,
- backup_id,
- created,
- user_keys,
- user_data,
- attachments,
- siwe_backup_msg,
- })
- }
-}
+pub use comm_lib::backup::database::BackupItem;
/// Corresponds to the items in the [`crate::constants::BACKUP_TABLE_INDEX_USERID_CREATED`]
/// global index
diff --git a/shared/comm-lib/Cargo.toml b/shared/comm-lib/Cargo.toml
--- a/shared/comm-lib/Cargo.toml
+++ b/shared/comm-lib/Cargo.toml
@@ -32,7 +32,7 @@
serde = { workspace = true, features = ["derive"] }
serde_json = { workspace = true }
base64 = { workspace = true }
-chrono = { workspace = true }
+chrono = { workspace = true, features = ["serde"] }
constant_time_eq = "0.3"
derive_more = { workspace = true }
grpc_clients = { path = "../grpc_clients", optional = true }
diff --git a/services/backup/src/database/backup_item.rs b/shared/comm-lib/src/backup/database.rs
copy from services/backup/src/database/backup_item.rs
copy to shared/comm-lib/src/backup/database.rs
--- a/services/backup/src/database/backup_item.rs
+++ b/shared/comm-lib/src/backup/database.rs
@@ -1,15 +1,34 @@
-use crate::constants::backup_table;
-use aws_sdk_dynamodb::types::AttributeValue;
use chrono::{DateTime, Utc};
-use comm_lib::{
- blob::{client::BlobServiceClient, types::BlobInfo},
- database::{
- AttributeExtractor, AttributeTryInto, DBItemError, TryFromAttribute,
- },
-};
+use serde::{Deserialize, Serialize};
use std::collections::HashMap;
-#[derive(Clone, Debug)]
+use crate::blob::types::BlobInfo;
+
+#[cfg(feature = "blob-client")]
+use crate::blob::client::BlobServiceClient;
+#[cfg(feature = "aws")]
+use crate::database::{
+ AttributeExtractor, AttributeTryInto, DBItemError, TryFromAttribute,
+};
+#[cfg(feature = "aws")]
+use aws_sdk_dynamodb::types::AttributeValue;
+
+pub mod backup_table {
+ pub const TABLE_NAME: &str = "backup-service-backup";
+ pub const CREATED_INDEX: &str = "userID-created-index";
+
+ pub mod attr {
+ pub const USER_ID: &str = "userID";
+ pub const BACKUP_ID: &str = "backupID";
+ pub const CREATED: &str = "created";
+ pub const USER_DATA: &str = "userData";
+ pub const USER_KEYS: &str = "userKeys";
+ pub const ATTACHMENTS: &str = "attachments";
+ pub const SIWE_BACKUP_MSG: &str = "siweBackupMsg";
+ }
+}
+
+#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct BackupItem {
pub user_id: String,
pub backup_id: String,
@@ -40,6 +59,7 @@
}
}
+ #[cfg(feature = "blob-client")]
pub fn revoke_user_keys_holders(&self, blob_client: &BlobServiceClient) {
blob_client.schedule_revoke_holder(
&self.user_keys.blob_hash,
@@ -47,6 +67,7 @@
);
}
+ #[cfg(feature = "blob-client")]
pub fn revoke_user_data_holders(&self, blob_client: &BlobServiceClient) {
if let Some(user_data) = &self.user_data {
blob_client
@@ -61,6 +82,7 @@
}
}
+ #[cfg(feature = "aws")]
pub fn item_key(
user_id: &str,
backup_id: &str,
@@ -78,6 +100,7 @@
}
}
+#[cfg(feature = "aws")]
impl From<BackupItem> for HashMap<String, AttributeValue> {
fn from(value: BackupItem) -> Self {
let mut attrs = HashMap::from([
@@ -126,6 +149,7 @@
}
}
+#[cfg(feature = "aws")]
impl TryFrom<HashMap<String, AttributeValue>> for BackupItem {
type Error = DBItemError;
@@ -177,51 +201,3 @@
})
}
}
-
-/// Corresponds to the items in the [`crate::constants::BACKUP_TABLE_INDEX_USERID_CREATED`]
-/// global index
-#[derive(Clone, Debug)]
-pub struct OrderedBackupItem {
- pub user_id: String,
- pub created: DateTime<Utc>,
- pub backup_id: String,
- pub user_keys: BlobInfo,
- pub siwe_backup_msg: Option<String>,
-}
-
-impl TryFrom<HashMap<String, AttributeValue>> for OrderedBackupItem {
- type Error = DBItemError;
-
- fn try_from(
- mut value: HashMap<String, AttributeValue>,
- ) -> Result<Self, Self::Error> {
- let user_id = String::try_from_attr(
- backup_table::attr::USER_ID,
- value.remove(backup_table::attr::USER_ID),
- )?;
- let created = DateTime::<Utc>::try_from_attr(
- backup_table::attr::CREATED,
- value.remove(backup_table::attr::CREATED),
- )?;
- let backup_id = String::try_from_attr(
- backup_table::attr::BACKUP_ID,
- value.remove(backup_table::attr::BACKUP_ID),
- )?;
-
- let user_keys = BlobInfo::try_from_attr(
- backup_table::attr::USER_KEYS,
- value.remove(backup_table::attr::USER_KEYS),
- )?;
-
- let siwe_backup_msg: Option<String> =
- value.take_attr(backup_table::attr::SIWE_BACKUP_MSG)?;
-
- Ok(OrderedBackupItem {
- user_id,
- created,
- backup_id,
- user_keys,
- siwe_backup_msg,
- })
- }
-}
diff --git a/shared/comm-lib/src/backup/mod.rs b/shared/comm-lib/src/backup/mod.rs
--- a/shared/comm-lib/src/backup/mod.rs
+++ b/shared/comm-lib/src/backup/mod.rs
@@ -1,6 +1,9 @@
use crate::auth::UserIdentity;
use serde::{Deserialize, Serialize};
+/// shared database types and constants
+pub mod database;
+
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct LatestBackupInfoResponse {
diff --git a/web/backup-client-wasm/Cargo.lock b/web/backup-client-wasm/Cargo.lock
--- a/web/backup-client-wasm/Cargo.lock
+++ b/web/backup-client-wasm/Cargo.lock
@@ -191,6 +191,7 @@
"iana-time-zone",
"js-sys",
"num-traits",
+ "serde",
"wasm-bindgen",
"windows-targets 0.52.3",
]

File Metadata

Mime Type
text/plain
Expires
Sun, Jan 18, 9:26 AM (3 h, 33 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5951221
Default Alt Text
D14275.1768728375.diff (11 KB)

Event Timeline