Also reword safety checks confirmation dialogs.pull/1277/head
parent
7d37b2c90f
commit
cff4955f93
@ -0,0 +1,52 @@
|
||||
import storage.cache
|
||||
import storage.device
|
||||
from storage.cache import APP_COMMON_SAFETY_CHECKS_TEMPORARY
|
||||
from storage.device import SAFETY_CHECK_LEVEL_PROMPT, SAFETY_CHECK_LEVEL_STRICT
|
||||
from trezor.messages import SafetyCheckLevel
|
||||
|
||||
if False:
|
||||
from typing import Optional
|
||||
from trezor.messages.ApplySettings import EnumTypeSafetyCheckLevel
|
||||
|
||||
|
||||
def read_setting() -> EnumTypeSafetyCheckLevel:
|
||||
"""
|
||||
Returns the effective safety check level.
|
||||
"""
|
||||
temporary_safety_check_level = storage.cache.get(
|
||||
APP_COMMON_SAFETY_CHECKS_TEMPORARY
|
||||
) # type: Optional[EnumTypeSafetyCheckLevel]
|
||||
if temporary_safety_check_level is not None:
|
||||
return temporary_safety_check_level
|
||||
else:
|
||||
stored = storage.device.safety_check_level()
|
||||
if stored == SAFETY_CHECK_LEVEL_STRICT:
|
||||
return SafetyCheckLevel.Strict
|
||||
elif stored == SAFETY_CHECK_LEVEL_PROMPT:
|
||||
return SafetyCheckLevel.PromptAlways
|
||||
else:
|
||||
raise ValueError("Unknown SafetyCheckLevel")
|
||||
|
||||
|
||||
def apply_setting(level: EnumTypeSafetyCheckLevel) -> None:
|
||||
"""
|
||||
Changes the safety level settings.
|
||||
"""
|
||||
if level == SafetyCheckLevel.Strict:
|
||||
storage.cache.delete(APP_COMMON_SAFETY_CHECKS_TEMPORARY)
|
||||
storage.device.set_safety_check_level(SAFETY_CHECK_LEVEL_STRICT)
|
||||
elif level == SafetyCheckLevel.PromptAlways:
|
||||
storage.cache.delete(APP_COMMON_SAFETY_CHECKS_TEMPORARY)
|
||||
storage.device.set_safety_check_level(SAFETY_CHECK_LEVEL_PROMPT)
|
||||
elif level == SafetyCheckLevel.PromptTemporarily:
|
||||
storage.device.set_safety_check_level(SAFETY_CHECK_LEVEL_STRICT)
|
||||
storage.cache.set(APP_COMMON_SAFETY_CHECKS_TEMPORARY, level)
|
||||
else:
|
||||
raise ValueError("Unknown SafetyCheckLevel")
|
||||
|
||||
|
||||
def is_strict() -> bool:
|
||||
"""
|
||||
Shorthand for checking whether the effective level is Strict.
|
||||
"""
|
||||
return read_setting() == SafetyCheckLevel.Strict
|
@ -0,0 +1,41 @@
|
||||
import pytest
|
||||
|
||||
from trezorlib import debuglink, device
|
||||
from trezorlib.messages import SafetyCheckLevel
|
||||
|
||||
from ..common import MNEMONIC12
|
||||
from ..emulators import EmulatorWrapper
|
||||
from ..upgrade_tests import core_only
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def emulator():
|
||||
with EmulatorWrapper("core") as emu:
|
||||
yield emu
|
||||
|
||||
|
||||
@core_only
|
||||
@pytest.mark.parametrize(
|
||||
"set_level,after_level",
|
||||
[
|
||||
(SafetyCheckLevel.Strict, SafetyCheckLevel.Strict),
|
||||
(SafetyCheckLevel.PromptTemporarily, SafetyCheckLevel.Strict),
|
||||
(SafetyCheckLevel.PromptAlways, SafetyCheckLevel.PromptAlways),
|
||||
],
|
||||
)
|
||||
def test_safety_checks_level_after_reboot(emulator, set_level, after_level):
|
||||
device.wipe(emulator.client)
|
||||
debuglink.load_device(
|
||||
emulator.client,
|
||||
mnemonic=MNEMONIC12,
|
||||
pin="",
|
||||
passphrase_protection=False,
|
||||
label="SAFETYLEVEL",
|
||||
)
|
||||
|
||||
device.apply_settings(emulator.client, safety_checks=set_level)
|
||||
assert emulator.client.features.safety_checks == set_level
|
||||
|
||||
emulator.restart()
|
||||
|
||||
assert emulator.client.features.safety_checks == after_level
|
Loading…
Reference in new issue