do not allow to delete current active tmp seed from seed vault and purge its settings

(cherry picked from commit 95b13083dc)
This commit is contained in:
scgbckbone 2024-09-27 10:18:35 +02:00
parent 128658e1e6
commit aa154e1d8c
3 changed files with 64 additions and 36 deletions

View File

@ -10,6 +10,7 @@ This lists the new changes that have not yet been published in a normal release.
On Q, result is blank screen, on Mk4, result is three-dots screen.
- Bugfix: Do not allow to enable/disable Seed Vault feature when in temporary seed mode
- Bugfix: Bless Firmware causes hanging progress bar
- Change: Do not allow to purge settings of current active tmp seed when deleting it from Seed Vault
# Mk4 Specific Changes

View File

@ -830,42 +830,37 @@ class SeedVaultMenu(MenuSystem):
async def _remove(menu, label, item):
from glob import dis, settings
esc = ""
tmp_val = False
idx, xfp_str, encoded = item.arg
current_active = (pa.tmp_value == bytes(encoded))
msg = ("Remove seed from seed vault and delete its "
"settings?\n\nPress %s to continue, press (1) to "
"only remove from seed vault and keep "
"encrypted settings for later use.\n\n"
"WARNING: Funds will be lost if wallet is"
" not backed-up elsewhere.") % OK
msg = "Remove seed from seed vault "
if pa.tmp_value and current_active:
tmp_val = True
msg += "?\n\n"
else:
msg += ("and delete its settings?\n\n"
"Press %s to continue, press (1) to "
"only remove from seed vault and keep "
"encrypted settings for later use.\n\n") % OK
esc += "1"
ch = await ux_show_story(title="[" + xfp_str + "]", msg=msg, escape="1")
msg += "WARNING: Funds will be lost if wallet is not backed-up elsewhere."
ch = await ux_show_story(title="[" + xfp_str + "]", msg=msg, escape=esc)
if ch == "x": return
dis.fullscreen("Saving...")
wipe_slot = (ch != "1")
tmp_val = False
if pa.tmp_value:
tmp_val = True
wipe_slot = not current_active and (ch != "1")
if wipe_slot:
# are we deleting current active ephemeral wallet
# and its settings ?
# slot wiping
if tmp_val:
# wipe current settings
settings.blank()
pa.tmp_value = False
settings.return_to_master_seed()
else:
# in main settings
xs = SettingsObject()
xs.set_key(encoded)
xs.load()
xs.blank()
del xs
xs = SettingsObject()
xs.set_key(encoded)
xs.load()
xs.blank()
del xs
# CAUTION: will get shadow copy if in tmp seed mode already
seeds = settings.master_get("seeds", [])

View File

@ -256,7 +256,7 @@ def confirm_tmp_seed(need_keypress, cap_story, press_select):
@pytest.fixture
def seed_vault_delete(pick_menu_item, need_keypress, cap_menu, cap_story,
goto_home, press_select):
goto_home, press_select, settings_get):
def doit(xfp, wipe=True):
# delete it from records
goto_home()
@ -276,12 +276,17 @@ def seed_vault_delete(pick_menu_item, need_keypress, cap_menu, cap_story,
title, story = cap_story()
assert "Remove" in story
assert xfp in title
assert "press (1)" in story
if wipe:
press_select()
else:
# preserve settings - remove just from seed vaul
need_keypress("1")
if xfp2str(settings_get("xfp")) == xfp:
assert "press (1)" not in story
press_select() # will NOT wipe settings
else:
assert "press (1)" in story
# preserve settings - remove just from seed vaul
need_keypress("1")
time.sleep(.1)
goto_home()
@ -1117,16 +1122,21 @@ def test_seed_vault_modifications(settings_set, reset_seed_words, pick_menu_item
m = cap_menu()
assert m[0] == "AAA"
pick_menu_item("Delete")
time.sleep(.1)
title, story = cap_story()
# current active does not offer to purge the slot, only to remove from Seed Vault
assert "delete its settings?" not in story
press_select()
time.sleep(.1)
goto_home()
m = cap_menu()
# after we delete from seed vault together with its settings
# we're back to master secret
assert m[0] == "Ready To Sign"
# still in tmp mode
assert m[0] != "Ready To Sign"
pick_menu_item("Seed Vault")
time.sleep(.1)
m = cap_menu()
assert len(m) == 2
# Ignore Add Current and Restore Master (only SV items are numbered with colon)
assert len([mi for mi in m if ":" in mi]) == 2
press_down()
press_select()
@ -1146,7 +1156,10 @@ def test_seed_vault_modifications(settings_set, reset_seed_words, pick_menu_item
assert "Delete" in m
pick_menu_item("Delete")
need_keypress("1") # only delete from seed vault
time.sleep(.1)
_, story = cap_story()
assert "delete its settings?" not in story
press_select() # only delete from seed vault, no other option provided
time.sleep(.1)
m = cap_menu()
assert len(m) == 3
@ -1164,6 +1177,25 @@ def test_seed_vault_modifications(settings_set, reset_seed_words, pick_menu_item
# still in ephemeral
assert title == m[0]
restore_main_seed()
pick_menu_item("Seed Vault")
press_select()
time.sleep(.1)
m = cap_menu()
assert "Rename" in m
assert "Use This Seed" in m
assert "Delete" in m
pick_menu_item("Delete")
time.sleep(.1)
_, story = cap_story()
assert "delete its settings?" in story
need_keypress("1") # only remove from seed vault, keep settings
time.sleep(.1)
m = cap_menu()
assert all([":" not in mi for mi in m])
assert "(none saved yet)" in m
def test_xfp_collision(reset_seed_words, settings_set, import_ephemeral_xprv,
cap_story, press_cancel, pick_menu_item, cap_menu,