From 7e5aaa805dcba09e22aade1ad70085da02db7de0 Mon Sep 17 00:00:00 2001 From: bunnie Date: Thu, 27 Nov 2025 16:54:43 +0800 Subject: [PATCH] implement totp auto-typing also extend totp updater to return the string so we can use that result to type a code --- apps-baosec/vault2/src/ux.rs | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/apps-baosec/vault2/src/ux.rs b/apps-baosec/vault2/src/ux.rs index 6d22dd099..58434cf9d 100644 --- a/apps-baosec/vault2/src/ux.rs +++ b/apps-baosec/vault2/src/ux.rs @@ -85,6 +85,8 @@ pub struct VaultUi { item_height: isize, style: GlyphStyle, storage_manager: Manager, + + usb_dev: usb_bao1x::UsbHid, } impl VaultUi { @@ -118,6 +120,7 @@ impl VaultUi { item_height: height / glyph_height, style, storage_manager: Manager::new(xns), + usb_dev: usb_bao1x::UsbHid::new(), } } @@ -130,17 +133,27 @@ impl VaultUi { } } - pub(crate) fn update_selected_totp_code(&mut self) { + pub(crate) fn update_selected_totp_code(&mut self) -> Option { if self.totp_list.len() > 0 { let selected = self.totp_list.get_selected(); let mut locked_lists = self.item_lists.lock().unwrap(); let full_list = locked_lists.full_list(VaultMode::Totp); if let Some(selected_item) = full_list.iter().find(|item| item.name() == selected) { match crate::totp::db_str_to_code(&selected_item.extra) { - Ok(s) => self.totp_code = Some(s), - _ => self.totp_code = None, + Ok(s) => { + self.totp_code = Some(s.clone()); + Some(s) + } + _ => { + self.totp_code = None; + None + } } + } else { + None } + } else { + None } } @@ -473,7 +486,12 @@ impl VaultUi { NavDir::Down => { self.totp_list.key_action('↓'); } - _ => unimplemented!(), + _ => { + if let Some(code) = self.update_selected_totp_code() { + // ignore USB errors while sending code + self.usb_dev.send_str(&code).ok(); + } + } } self.totp_code = None; }