diff --git a/native/native_rust_library/src/backup.rs b/native/native_rust_library/src/backup.rs --- a/native/native_rust_library/src/backup.rs +++ b/native/native_rust_library/src/backup.rs @@ -134,8 +134,14 @@ async fn download_backup( backup_secret: String, ) -> Result> { - let backup_client = BackupClient::new(BACKUP_SOCKET_ADDR)?; + let backup_keys = download_backup_keys(backup_secret).await?; + download_backup_data(backup_keys).await +} +async fn download_backup_keys( + backup_secret: String, +) -> Result> { + let backup_client = BackupClient::new(BACKUP_SOCKET_ADDR)?; let user_identity = get_user_identity_from_secure_store()?; let latest_backup_descriptor = BackupDescriptor::Latest { @@ -158,6 +164,25 @@ let user_keys = UserKeys::from_encrypted(&mut encrypted_user_keys, &mut backup_key)?; + Ok(BackupKeysResult { + backup_id, + backup_data_key: user_keys.backup_data_key, + backup_log_data_key: user_keys.backup_log_data_key, + }) +} + +async fn download_backup_data( + backup_keys: BackupKeysResult, +) -> Result> { + let backup_client = BackupClient::new(BACKUP_SOCKET_ADDR)?; + let user_identity = get_user_identity_from_secure_store()?; + + let BackupKeysResult { + backup_id, + backup_data_key, + backup_log_data_key, + } = backup_keys; + let backup_data_descriptor = BackupDescriptor::BackupID { backup_id: backup_id.clone(), user_identity: user_identity.clone(), @@ -173,10 +198,10 @@ tokio::fs::write(&backup_restoration_path, encrypted_user_data).await?; Ok(CompactionDownloadResult { - backup_id, backup_restoration_path, - backup_data_key: user_keys.backup_data_key, - backup_log_data_key: user_keys.backup_log_data_key, + backup_id, + backup_data_key, + backup_log_data_key, }) } @@ -215,6 +240,13 @@ }) } +#[derive(Debug, Serialize)] +struct BackupKeysResult { + backup_id: String, + backup_data_key: String, + backup_log_data_key: String, +} + struct CompactionDownloadResult { backup_id: String, backup_restoration_path: PathBuf,