From 8fb7bbfe2ea03045038ed9d592c194a97c3d808e Mon Sep 17 00:00:00 2001 From: Gregory Schier Date: Tue, 22 Apr 2025 07:23:05 -0700 Subject: [PATCH] Don't prompt user for keychain password more than once --- src-tauri/yaak-crypto/src/manager.rs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src-tauri/yaak-crypto/src/manager.rs b/src-tauri/yaak-crypto/src/manager.rs index 2e690edf..bafa115c 100644 --- a/src-tauri/yaak-crypto/src/manager.rs +++ b/src-tauri/yaak-crypto/src/manager.rs @@ -158,15 +158,14 @@ impl EncryptionManager { } fn get_master_key(&self) -> Result { - { - let master_secret = self.cached_master_key.lock().unwrap(); - if let Some(k) = master_secret.as_ref() { - return Ok(k.to_owned()); - } + // NOTE: This locks the key for the entire function which seems wrong, but this prevents + // concurrent access from prompting the user for a keychain password multiple times. + let mut master_secret = self.cached_master_key.lock().unwrap(); + if let Some(k) = master_secret.as_ref() { + return Ok(k.to_owned()); } let mkey = MasterKey::get_or_create(&self.app_id, KEY_USER)?; - let mut master_secret = self.cached_master_key.lock().unwrap(); *master_secret = Some(mkey.clone()); Ok(mkey) }