From ab4f941ac2cfbd7a9f48cd4469d11a0b23d749de Mon Sep 17 00:00:00 2001 From: Justus Winter Date: Thu, 7 Mar 2019 19:26:59 +0100 Subject: [PATCH] Only delete (address, key) mappings. - We still want to provide the key material for updates, or revocations. - Fixes #73. --- database/src/lib.rs | 42 ++++++++---------------------------------- database/src/test.rs | 2 -- 2 files changed, 8 insertions(+), 36 deletions(-) diff --git a/database/src/lib.rs b/database/src/lib.rs index 7601e11..880e254 100644 --- a/database/src/lib.rs +++ b/database/src/lib.rs @@ -505,13 +505,12 @@ pub trait Database: Sync + Send { } } - // if fpr = pop-token(tok) { - // tpk = by_fpr(fpr) - // for uid in tpk.userids { - // del-uid(uid) - // } - // del-fpr(fpr) - // } + /// Deletes (address, key)-mappings. + /// + /// Given a valid deletion token, this function unlinks all email + /// addresses and strips all UserIDs from the stored TPK. + /// + /// Returns true if the token was valid. fn confirm_deletion(&self, token: &str) -> Result { let _ = self.lock(); @@ -522,33 +521,8 @@ pub trait Database: Sync + Send { return Ok(false); } - loop { - match self.by_fpr(&fpr) { - Some(old) => { - let tpk = match TPK::from_bytes(old.as_bytes()) { - Ok(tpk) => tpk, - Err(e) => { - return Err(failure::format_err!( - "Failed to parse old TPK: {:?}", - e)); - } - }; - - for uid in tpk.userids() { - self.unlink_email( - &Email::try_from(uid.userid())?, - &fpr, - )?; - } - - self.update(&fpr, None)?; - return Ok(true); - } - None => { - return Ok(false); - } - } - } + self.filter_userids(&fpr, |_| false)?; + Ok(true) } None => Ok(false), diff --git a/database/src/test.rs b/database/src/test.rs index 20b2491..cab6a2e 100644 --- a/database/src/test.rs +++ b/database/src/test.rs @@ -418,7 +418,6 @@ pub fn test_uid_deletion_request(db: &mut D) { assert!(db.confirm_deletion(&del).unwrap()); // check it's gone - assert!(db.by_fpr(&fpr).is_none()); assert!(db.by_email(&email1).is_none()); assert!(db.by_email(&email2).is_none()); @@ -426,7 +425,6 @@ pub fn test_uid_deletion_request(db: &mut D) { assert!(!db.confirm_deletion(&del).unwrap()); // check it's still gone - assert!(db.by_fpr(&fpr).is_none()); assert!(db.by_email(&email1).is_none()); assert!(db.by_email(&email2).is_none()); }