mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-12-22 14:28:07 +00:00
python: ignore failures of EndSession call, so that end_session() does not raise
This commit is contained in:
parent
e0583dd5cb
commit
ffe3b5487d
@ -216,11 +216,7 @@ def list_devices(no_resolve):
|
|||||||
for transport in enumerate_devices():
|
for transport in enumerate_devices():
|
||||||
client = TrezorClient(transport, ui=ui.ClickUI())
|
client = TrezorClient(transport, ui=ui.ClickUI())
|
||||||
click.echo("{} - {}".format(transport, format_device_name(client.features)))
|
click.echo("{} - {}".format(transport, format_device_name(client.features)))
|
||||||
try:
|
client.end_session()
|
||||||
# firmwares <2.3.4 do not recognize EndSession
|
|
||||||
client.end_session()
|
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
@cli.command()
|
@cli.command()
|
||||||
|
@ -352,7 +352,7 @@ class TrezorClient:
|
|||||||
return self.features.device_id
|
return self.features.device_id
|
||||||
|
|
||||||
@tools.session
|
@tools.session
|
||||||
def lock(self):
|
def lock(self, *, _refresh_features=True):
|
||||||
"""Lock the device.
|
"""Lock the device.
|
||||||
|
|
||||||
If the device does not have a PIN configured, this will do nothing.
|
If the device does not have a PIN configured, this will do nothing.
|
||||||
@ -365,8 +365,12 @@ class TrezorClient:
|
|||||||
To invalidate passphrase cache, use `end_session()`. To lock _and_ invalidate
|
To invalidate passphrase cache, use `end_session()`. To lock _and_ invalidate
|
||||||
passphrase cache, use `clear_session()`.
|
passphrase cache, use `clear_session()`.
|
||||||
"""
|
"""
|
||||||
|
# Private argument _refresh_features can be used internally to avoid
|
||||||
|
# refreshing in cases where we will refresh soon anyway. This is used
|
||||||
|
# in TrezorClient.clear_session()
|
||||||
self.call(messages.LockDevice())
|
self.call(messages.LockDevice())
|
||||||
self.refresh_features()
|
if _refresh_features:
|
||||||
|
self.refresh_features()
|
||||||
|
|
||||||
@tools.session
|
@tools.session
|
||||||
def ensure_unlocked(self):
|
def ensure_unlocked(self):
|
||||||
@ -391,7 +395,13 @@ class TrezorClient:
|
|||||||
If passphrase is enabled, further actions will prompt for it again.
|
If passphrase is enabled, further actions will prompt for it again.
|
||||||
"""
|
"""
|
||||||
# since: 2.3.4, 1.9.4
|
# since: 2.3.4, 1.9.4
|
||||||
self.call(messages.EndSession())
|
try:
|
||||||
|
self.call(messages.EndSession())
|
||||||
|
except exceptions.TrezorFailure:
|
||||||
|
# A failure most likely means that the FW version does not support
|
||||||
|
# the EndSession call. We ignore the failure and clear the local session_id.
|
||||||
|
# The client-side end result is identical.
|
||||||
|
pass
|
||||||
self.session_id = None
|
self.session_id = None
|
||||||
|
|
||||||
@tools.session
|
@tools.session
|
||||||
@ -403,7 +413,6 @@ class TrezorClient:
|
|||||||
|
|
||||||
Equivalent to calling `lock()`, `end_session()` and `init_device()`.
|
Equivalent to calling `lock()`, `end_session()` and `init_device()`.
|
||||||
"""
|
"""
|
||||||
# call LockDevice manually to save one refresh_features() call
|
self.lock(_refresh_features=False)
|
||||||
self.call(messages.LockDevice())
|
|
||||||
self.end_session()
|
self.end_session()
|
||||||
self.init_device(new_session=True)
|
self.init_device(new_session=True)
|
||||||
|
Loading…
Reference in New Issue
Block a user