electrum

Electrum Bitcoin wallet
git clone https://git.parazyd.org/electrum
Log | Files | Refs | Submodules

commit db1aa1301525c9982def0e64d9ee883f24657edc
parent 18b7337aeaa96af20b4440eb1d203dae4c0124f7
Author: Neil Booth <kyuupichan@gmail.com>
Date:   Sat,  7 May 2016 10:40:12 +0900

Permit empty passphrases when creating HW wallet

They used to be confused as a user cancel.
Fixes #1788
Also fix Cancel pressed in passphrase dialog when *restoring*
a hardware wallet in install wizard; it used to be taken as an
empty passphrase.  Like the password dialog it now cancels the
wizard.

Diffstat:
Mgui/qt/installwizard.py | 14++++++++------
Mgui/qt/password_dialog.py | 6+++++-
Mlib/wizard.py | 6+++---
Mplugins/hw_wallet/plugin.py | 2+-
4 files changed, 17 insertions(+), 11 deletions(-)

diff --git a/gui/qt/installwizard.py b/gui/qt/installwizard.py @@ -208,13 +208,15 @@ class InstallWizard(QDialog, MessageBoxMixin, WizardBase): self.set_main_layout(playout.layout()) return playout.new_password() - def request_passphrase(self, device_text, restore=True): - """Request a passphrase for a wallet from the given device and - confirm it. restore is True if restoring a wallet. Should return + def request_passphrase(self, device_text): + """When restoring a wallet, request the passphrase that was used for + the wallet on the given device and confirm it. Should return a unicode string.""" - if restore: - msg = MSG_RESTORE_PASSPHRASE % device_text - return unicode(self.pw_layout(msg, PW_PASSPHRASE) or '') + phrase = self.pw_layout(MSG_RESTORE_PASSPHRASE % device_text, + PW_PASSPHRASE) + if phrase is None: + raise UserCancelled + return phrase def request_password(self, msg=None): """Request the user enter a new password and confirm it. Return diff --git a/gui/qt/password_dialog.py b/gui/qt/password_dialog.py @@ -146,7 +146,11 @@ class PasswordLayout(object): return None def new_password(self): - return unicode(self.new_pw.text()) or None + pw = unicode(self.new_pw.text()) + # Empty passphrases are fine and returned empty. + if pw == "" and self.kind != PW_PASSPHRASE: + pw = None + return pw class PasswordDialog(WindowModalDialog): diff --git a/lib/wizard.py b/lib/wizard.py @@ -98,9 +98,9 @@ class WizardBase(PrintError): True on success.""" raise NotImplementedError - def request_passphrase(self, device_text, restore=True): - """Request a passphrase for a wallet from the given device and - confirm it. restore is True if restoring a wallet. Should return + def request_passphrase(self, device_text): + """When restoring a wallet, request the passphrase that was used for + the wallet on the given device and confirm it. Should return a unicode string.""" raise NotImplementedError diff --git a/plugins/hw_wallet/plugin.py b/plugins/hw_wallet/plugin.py @@ -62,7 +62,7 @@ class HW_PluginBase(BasePlugin): wallet.storage.put('wallet_type', wallet_class.wallet_type) wallet = wallet_class(wallet.storage) - passphrase = wizard.request_passphrase(self.device, restore=True) + passphrase = wizard.request_passphrase(self.device) password = wizard.request_password() wallet.add_seed(seed, password) wallet.add_xprv_from_seed(seed, 'x/', password, passphrase)