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,8 +2,11 @@ use aws_sdk_dynamodb::types::AttributeValue; use chrono::{DateTime, Utc}; use comm_lib::{ + backup::BackupVersionInfo, blob::types::BlobInfo, - database::{AttributeExtractor, DBItemError, TryFromAttribute}, + database::{ + parse_int_attribute, AttributeExtractor, DBItemError, TryFromAttribute, + }, }; use std::collections::HashMap; @@ -18,6 +21,8 @@ pub backup_id: String, pub user_keys: BlobInfo, pub siwe_backup_msg: Option, + pub total_size: u64, + pub version_info: BackupVersionInfo, } impl TryFrom> for OrderedBackupItem { @@ -47,12 +52,26 @@ let siwe_backup_msg: Option = value.take_attr(backup_table::attr::SIWE_BACKUP_MSG)?; + let size_attr = value.remove(backup_table::attr::TOTAL_SIZE); + let total_size = if size_attr.is_some() { + parse_int_attribute(backup_table::attr::TOTAL_SIZE, size_attr)? + } else { + 0u64 + }; + + // older backups don't have this attribute + let version_info: BackupVersionInfo = value + .take_attr::>(backup_table::attr::VERSION_INFO)? + .unwrap_or_default(); + Ok(OrderedBackupItem { user_id, created, backup_id, user_keys, siwe_backup_msg, + total_size, + version_info, }) } } diff --git a/services/backup/src/http/handlers/backup.rs b/services/backup/src/http/handlers/backup.rs --- a/services/backup/src/http/handlers/backup.rs +++ b/services/backup/src/http/handlers/backup.rs @@ -277,6 +277,7 @@ keyserver_device_id, total_backup_size, creation_timestamp: backup_item.created.to_rfc3339(), + version_info: backup_item.version_info, }; Ok(web::Json(response)) diff --git a/services/terraform/modules/shared/dynamodb.tf b/services/terraform/modules/shared/dynamodb.tf --- a/services/terraform/modules/shared/dynamodb.tf +++ b/services/terraform/modules/shared/dynamodb.tf @@ -28,7 +28,7 @@ hash_key = "userID" range_key = "created" projection_type = "INCLUDE" - non_key_attributes = ["userKeys", "siweBackupMsg"] + non_key_attributes = ["userKeys", "siweBackupMsg", "totalSize", "versionInfo"] } point_in_time_recovery { @@ -122,6 +122,11 @@ type = "S" } + ttl { + attribute_name = "expirationTimeUnix" + enabled = true + } + point_in_time_recovery { enabled = local.pitr_enabled } 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 @@ -28,6 +28,7 @@ // ISO 8601 / RFC 3339 DateTime string pub creation_timestamp: String, pub total_backup_size: u64, + pub version_info: BackupVersionInfo, } #[derive(Debug, Clone, Serialize, Deserialize)]