Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F33290461
D14275.1768728375.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
11 KB
Referenced Files
None
Subscribers
None
D14275.1768728375.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D14275: [comm-lib][backup] Move BackupItem to lib
Attached
Detach File
Event Timeline
Log In to Comment