diff --git a/gui/qt/installwizard.py b/gui/qt/installwizard.py index 23a5ca6e..21cef999 100644 --- 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 index 97c5f30f..c8ebcbee 100644 --- 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 index 257b8336..3d5fef80 100644 --- 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 index 6e1e47c3..a738c493 100644 --- 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)