def remove_passphrase(current_passphrase: Optional[str]) -> bool: """ Removes the user's keyring passphrase. The keyring will be re-encrypted to the default passphrase. """ success = False if not Keychain.has_master_passphrase() or using_default_passphrase(): print("Passphrase is not currently set") success = False else: # Try the default passphrase first if using_default_passphrase(): current_passphrase = default_passphrase() # Prompt for the current passphrase, if necessary if not current_passphrase: try: current_passphrase = obtain_current_passphrase( "Current Passphrase: ") except Exception as e: print(f"Unable to confirm current passphrase: {e}") success = False if current_passphrase: try: Keychain.remove_master_passphrase(current_passphrase) success = True except Exception as e: print(f"Unable to remove passphrase: {e}") success = False return success
async def remove_keyring_passphrase(self, request: Dict[str, Any]) -> Dict[str, Any]: success: bool = False error: Optional[str] = None current_passphrase: Optional[str] = None if not Keychain.has_master_passphrase(): return {"success": False, "error": "passphrase not set"} current_passphrase = request.get("current_passphrase", None) if type(current_passphrase) is not str: return {"success": False, "error": "missing current_passphrase"} try: Keychain.remove_master_passphrase(current_passphrase) except KeyringCurrentPassphaseIsInvalid: error = "current passphrase is invalid" except Exception as e: tb = traceback.format_exc() self.log.error(f"Failed to remove keyring passphrase: {e} {tb}") else: success = True # Inform the GUI of keyring status changes self.keyring_status_changed(await self.keyring_status(), "wallet_ui") response: Dict[str, Any] = {"success": success, "error": error} return response