Skip to content

Commit

Permalink
fix(core): make sure run-time settings are reset after wipe (fixes #1322
Browse files Browse the repository at this point in the history
)
  • Loading branch information
matejcik committed Oct 27, 2020
1 parent b2948ee commit a1beaab
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 5 deletions.
12 changes: 8 additions & 4 deletions core/src/apps/management/apply_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,6 @@ async def apply_settings(ctx: wire.Context, msg: ApplySettings):
raise wire.ProcessError("Auto-lock delay too long")
await require_confirm_change_autolock_delay(ctx, msg.auto_lock_delay_ms)
storage.device.set_autolock_delay_ms(msg.auto_lock_delay_ms)
# use the value that was stored, not the one that was supplied by the user
workflow.idle_timer.set(storage.device.get_autolock_delay_ms(), lock_device)

if msg.safety_checks is not None:
await require_confirm_safety_checks(ctx, msg.safety_checks)
Expand All @@ -90,16 +88,22 @@ async def apply_settings(ctx: wire.Context, msg: ApplySettings):
if msg.display_rotation is not None:
await require_confirm_change_display_rotation(ctx, msg.display_rotation)
storage.device.set_rotation(msg.display_rotation)
ui.display.orientation(storage.device.get_rotation())

if msg.experimental_features is not None:
await require_confirm_experimental_features(ctx, msg.experimental_features)
storage.device.set_experimental_features(msg.experimental_features)
wire.experimental_enabled = msg.experimental_features

reload_settings_from_storage()

return Success(message="Settings applied")


def reload_settings_from_storage() -> None:
workflow.idle_timer.set(storage.device.get_autolock_delay_ms(), lock_device)
ui.display.orientation(storage.device.get_rotation())
wire.experimental_enabled = storage.device.get_experimental_features()


async def require_confirm_change_homescreen(ctx):
text = Text("Set homescreen", ui.ICON_CONFIG)
text.normal("Do you really want to", "change the homescreen", "image?")
Expand Down
3 changes: 3 additions & 0 deletions core/src/apps/management/wipe_device.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@

from apps.common.confirm import require_hold_to_confirm

from .apply_settings import reload_settings_from_storage


async def wipe_device(ctx, msg):
text = Text("Wipe device", ui.ICON_WIPE, ui.RED)
Expand All @@ -22,5 +24,6 @@ async def wipe_device(ctx, msg):
)

storage.wipe()
reload_settings_from_storage()

return Success(message="Device wiped")
30 changes: 29 additions & 1 deletion tests/device_tests/test_msg_wipedevice.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,15 @@
# You should have received a copy of the License along with this library.
# If not, see <https://www.gnu.org/licenses/lgpl-3.0.html>.

import time

import pytest

from trezorlib import device
from trezorlib import device, messages

from ..common import get_test_address

PIN4 = "1234"


@pytest.mark.setup_client(passphrase=True)
Expand All @@ -32,3 +38,25 @@ def test_wipe_device(client):
assert client.features.label is None
assert client.features.passphrase_protection is False
assert client.get_device_id() != device_id


@pytest.mark.setup_client(pin=PIN4)
def test_autolock_not_retained(client):
with client:
client.use_pin_sequence([PIN4])
device.apply_settings(client, auto_lock_delay_ms=10_000)

assert client.features.auto_lock_delay_ms == 10_000

device.wipe(client)
assert client.features.auto_lock_delay_ms > 10_000

with client:
client.use_pin_sequence([PIN4, PIN4])
device.reset(client, skip_backup=True, pin_protection=True)

time.sleep(10.1)
with client:
# after sleeping for the pre-wipe autolock amount, Trezor must still be unlocked
client.set_expected_responses([messages.Address])
get_test_address(client)

0 comments on commit a1beaab

Please sign in to comment.