1
0

wizard: handle UserFacingException in WCWalletPasswordHardware

Handles `UserFacingException` in the `WCWalletPasswordHardware` step of
the hardware wallet wizard flow. This fixes the previous FIXME and
prevents the crash reporter from getting triggered if the the user e.g.
disconnects his hardware wallet during the wallet encryption step.
This commit is contained in:
f321x
2025-12-10 16:58:54 +01:00
parent aa47a960a7
commit 4712417969

View File

@@ -1275,19 +1275,40 @@ class WCWalletPasswordHardware(WalletWizardComponent):
self.layout().addLayout(self.playout.layout())
self.layout().addStretch(1)
self._valid = True
self._hw_password = None # type: Optional[str]
self._valid = False
def on_ready(self):
_name, info = self.wizard_data['hardware_device']
device_id = info.device.id_
client = self.plugins.device_manager.client_by_id(device_id, scan_now=False)
if client is None:
self.valid = False
self.error = _("Client for hardware device was unpaired.")
return
def retrieve_password_task():
try:
self._hw_password = client.get_password_for_storage_encryption()
self.valid = True
except UserFacingException as e:
self.error = str(e)
self.valid = False
finally:
self.busy = False
self.busy = True
t = threading.Thread(target=retrieve_password_task, daemon=True)
t.start()
def apply(self):
if not self.valid:
return
self.wizard_data['encrypt'] = True
if self.playout.should_encrypt_storage_with_xpub():
self.wizard_data['xpub_encrypt'] = True
_name, _info = self.wizard_data['hardware_device']
device_id = _info.device.id_
client = self.plugins.device_manager.client_by_id(device_id, scan_now=False)
# client.handler = self.plugin.create_handler(self.wizard)
# FIXME client can be None if it was recently disconnected.
# also, even if not None, this might raise (e.g. if it disconnected *just now*):
self.wizard_data['password'] = client.get_password_for_storage_encryption()
assert self._hw_password
self.wizard_data['password'] = self._hw_password
else:
self.wizard_data['xpub_encrypt'] = False
self.wizard_data['password'] = self.playout.new_password()