Skip to content

Commit b2f3c40

Browse files
committed
feat(sdk): Loop over and delete all backup versions on identity reset
Signed-off-by: Skye Elliot <actuallyori@gmail.com>
1 parent 390f6c0 commit b2f3c40

2 files changed

Lines changed: 9 additions & 10 deletions

File tree

crates/matrix-sdk/src/encryption/backups/mod.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -279,9 +279,7 @@ impl Backups {
279279

280280
// Create a future so we can catch errors and go back to the `Unknown` state.
281281
let future = async {
282-
let response = self.get_current_version().await?;
283-
284-
if let Some(response) = response {
282+
while let Some(response) = self.get_current_version().await? {
285283
self.delete_backup_from_server(response.version).await?;
286284
}
287285

crates/matrix-sdk/tests/integration/encryption/recovery.rs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -842,6 +842,7 @@ async fn test_recover_and_reset() {
842842
#[async_test]
843843
async fn test_reset_identity() {
844844
let user_id = user_id!("@example:morpheus.localhost");
845+
let backup_count = 4;
845846
let (client, server) = test_client(user_id).await;
846847

847848
enable(user_id, &client, &server, true).await;
@@ -850,16 +851,16 @@ async fn test_reset_identity() {
850851
assert_eq!(client.encryption().backups().state(), BackupState::Enabled);
851852
assert_eq!(client.encryption().recovery().state(), RecoveryState::Enabled);
852853

853-
let did_delete_backup = Arc::new(Mutex::new(false));
854+
let backups_remaining = Arc::new(Mutex::new(backup_count));
854855

855856
// Disabling backups
856857
Mock::given(method("GET"))
857858
.and(path("_matrix/client/r0/room_keys/version"))
858859
.and(header("authorization", "Bearer 1234"))
859860
.respond_with({
860-
let did_delete_backup = did_delete_backup.clone();
861+
let backups_remaining = backups_remaining.clone();
861862
move |_: &wiremock::Request| {
862-
if *did_delete_backup.lock().unwrap() {
863+
if *backups_remaining.lock().unwrap() == 0 {
863864
ResponseTemplate::new(404).set_body_json(json!({
864865
"errcode": "M_NOT_FOUND",
865866
"error": "No current backup version"
@@ -878,7 +879,7 @@ async fn test_reset_identity() {
878879
}
879880
}
880881
})
881-
.expect(3)
882+
.expect(backup_count + 3)
882883
.named("room_keys/version GET")
883884
.mount(&server)
884885
.await;
@@ -887,13 +888,13 @@ async fn test_reset_identity() {
887888
.and(path("_matrix/client/r0/room_keys/version/1"))
888889
.and(header("authorization", "Bearer 1234"))
889890
.respond_with({
890-
let did_delete_backup = did_delete_backup.clone();
891+
let did_delete_backup = backups_remaining.clone();
891892
move |_: &wiremock::Request| {
892-
*did_delete_backup.lock().unwrap() = true;
893+
*did_delete_backup.lock().unwrap() -= 1;
893894
ResponseTemplate::new(200).set_body_json(json!({}))
894895
}
895896
})
896-
.expect(1)
897+
.expect(backup_count)
897898
.mount(&server)
898899
.await;
899900

0 commit comments

Comments
 (0)