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:
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)