mk4 fix word entry after restore via USB
This commit is contained in:
parent
56180d7961
commit
ec9d6251e4
@ -1189,7 +1189,7 @@ class RemoteRestoreBackup(UserAuthorizedAction):
|
||||
tmp, noun = self.to_tmp()
|
||||
if await ux_confirm("Restore uploaded backup as a %s seed?" % noun):
|
||||
from backups import restore_complete
|
||||
await restore_complete(self.file_len, tmp, self.to_words())
|
||||
await restore_complete(self.file_len, tmp, self.to_words(), usb=True)
|
||||
else:
|
||||
self.refused = True
|
||||
|
||||
|
||||
@ -554,7 +554,7 @@ async def verify_backup_file(fname):
|
||||
await ux_show_story("Backup file CRC checks out okay.\n\nPlease note this is only a check against accidental truncation and similar. Targeted modifications can still pass this test.")
|
||||
|
||||
|
||||
async def restore_complete(fname_or_fd, temporary=False, words=True):
|
||||
async def restore_complete(fname_or_fd, temporary=False, words=True, usb=False):
|
||||
from ux import the_ux
|
||||
|
||||
async def done(words):
|
||||
@ -573,10 +573,15 @@ async def restore_complete(fname_or_fd, temporary=False, words=True):
|
||||
from ux_q1 import seed_word_entry
|
||||
return await seed_word_entry('Enter Password:', num_pw_words,
|
||||
done_cb=done, has_checksum=False)
|
||||
# give them a menu to pick from, and start picking
|
||||
m = seed.WordNestMenu(num_words=num_pw_words, has_checksum=False, done_cb=done)
|
||||
|
||||
the_ux.push(m)
|
||||
# give them a menu to pick from, and start picking
|
||||
if usb:
|
||||
# we're not originating from a menu
|
||||
words = await seed.WordNestMenu.get_n_words(12)
|
||||
await done(words)
|
||||
else:
|
||||
m = seed.WordNestMenu(num_words=num_pw_words, has_checksum=False, done_cb=done)
|
||||
the_ux.push(m)
|
||||
|
||||
else:
|
||||
pwd = [] # cleartext if words=None
|
||||
|
||||
@ -154,7 +154,7 @@ class WordNestMenu(MenuSystem):
|
||||
done_cb = None
|
||||
|
||||
def __init__(self, num_words=None, has_checksum=True, done_cb=commit_new_words,
|
||||
items=None, is_commit=False, menu_cbf=None, prefix=""):
|
||||
items=None, is_commit=False, menu_cbf=None, prefix="", words=None):
|
||||
|
||||
if num_words is not None:
|
||||
WordNestMenu.target_words = num_words
|
||||
@ -163,6 +163,9 @@ class WordNestMenu(MenuSystem):
|
||||
WordNestMenu.done_cb = done_cb
|
||||
is_commit = True
|
||||
|
||||
if words:
|
||||
WordNestMenu.words = words
|
||||
|
||||
if not items:
|
||||
ch = letter_choices(prefix)
|
||||
if menu_cbf:
|
||||
@ -175,7 +178,15 @@ class WordNestMenu(MenuSystem):
|
||||
super(WordNestMenu, self).__init__(items)
|
||||
|
||||
@classmethod
|
||||
async def get_n_words(cls, nwords):
|
||||
async def get_n_words(cls, num_words):
|
||||
rv = []
|
||||
for _ in range(num_words):
|
||||
rv = await cls.get_word(rv, num_words)
|
||||
|
||||
return rv
|
||||
|
||||
@classmethod
|
||||
async def get_word(cls, words=None, target_words=None):
|
||||
# Just block until N words are provided. May only work before menus start?
|
||||
from glob import numpad
|
||||
|
||||
@ -184,17 +195,15 @@ class WordNestMenu(MenuSystem):
|
||||
if c.label[-1] == '-':
|
||||
lc = c.label[0:-1]
|
||||
else:
|
||||
lc = ""
|
||||
cls.words.append(c.label)
|
||||
if len(cls.words) >= nwords:
|
||||
numpad.abort_ux()
|
||||
return
|
||||
numpad.abort_ux()
|
||||
return
|
||||
|
||||
m = cls(prefix=lc, menu_cbf=menu_done_cbf)
|
||||
the_ux.push(m)
|
||||
await m.interact()
|
||||
await the_ux.interact()
|
||||
|
||||
m = cls(num_words=nwords, menu_cbf=menu_done_cbf, has_checksum=False)
|
||||
m = cls(num_words=target_words, menu_cbf=menu_done_cbf, has_checksum=False, words=words)
|
||||
|
||||
the_ux.push(m)
|
||||
await the_ux.interact()
|
||||
|
||||
@ -647,8 +647,8 @@ def test_bkpw_override(reset_seed_words, override_bkpw, goto_home, pick_menu_ite
|
||||
@pytest.mark.parametrize('force_tmp', [True, False])
|
||||
def test_restore_usb_backup(backup_system, set_seed_words, cap_story, verify_ephemeral_secret_ui,
|
||||
settings_slots, reset_seed_words, word_menu_entry, confirm_tmp_seed,
|
||||
dev, microsd_path, press_select, btype, enter_text, force_tmp,
|
||||
unit_test, restore_main_seed, cap_menu):
|
||||
dev, microsd_path, press_select, btype, force_tmp,
|
||||
unit_test, restore_main_seed, cap_menu, is_q1, enter_complex):
|
||||
|
||||
from test_ephemeral import SEEDVAULT_TEST_DATA
|
||||
xfp_str, encoded_str, mnemonic = SEEDVAULT_TEST_DATA[2]
|
||||
@ -698,7 +698,7 @@ def test_restore_usb_backup(backup_system, set_seed_words, cap_story, verify_eph
|
||||
if btype == "classic":
|
||||
word_menu_entry(bk_pw, has_checksum=False)
|
||||
elif password:
|
||||
enter_text(bkpw)
|
||||
enter_complex(bkpw, apply=False, b39pass=False)
|
||||
|
||||
time.sleep(.2)
|
||||
mnemonic = mnemonic.split(" ")
|
||||
|
||||
@ -1412,8 +1412,7 @@ def test_temporary_from_backup(multisig, backup_system, import_ms_wallet, get_se
|
||||
@pytest.mark.parametrize('btype', ["classic", "custom_bkpw", "plaintext"])
|
||||
def test_temporary_from_backup_usb(backup_system, set_seed_words, cap_story, verify_ephemeral_secret_ui,
|
||||
settings_slots, reset_seed_words, word_menu_entry, confirm_tmp_seed,
|
||||
dev, microsd_path, press_select, btype,
|
||||
enter_text):
|
||||
dev, microsd_path, press_select, btype, enter_complex):
|
||||
|
||||
xfp_str, encoded_str, mnemonic = SEEDVAULT_TEST_DATA[0]
|
||||
set_seed_words(mnemonic)
|
||||
@ -1461,7 +1460,7 @@ def test_temporary_from_backup_usb(backup_system, set_seed_words, cap_story, ver
|
||||
if btype == "classic":
|
||||
word_menu_entry(bk_pw, has_checksum=False)
|
||||
elif password:
|
||||
enter_text(bkpw)
|
||||
enter_complex(bkpw, apply=False, b39pass=False)
|
||||
|
||||
time.sleep(.1)
|
||||
confirm_tmp_seed(seedvault=False)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user