From ab07314a5b14c4390e4b28873327e81677f31f7f Mon Sep 17 00:00:00 2001 From: 3nt3 Date: Thu, 22 Sep 2022 12:43:34 +0200 Subject: [PATCH] Automatically reconnect on keyboard shortcuts (#1728) Automatically reconnect to database on keyboard shortcut --- .../content/keepassxc-browser.js | 19 +++++++++++++++++++ keepassxc-browser/content/username-field.js | 16 ++++------------ 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/keepassxc-browser/content/keepassxc-browser.js b/keepassxc-browser/content/keepassxc-browser.js index dd3a76e..1ac7767 100755 --- a/keepassxc-browser/content/keepassxc-browser.js +++ b/keepassxc-browser/content/keepassxc-browser.js @@ -833,16 +833,20 @@ browser.runtime.onMessage.addListener(async function(req, sender) { } else if (req.action === 'clear_credentials') { kpxc.clearAllFromPage(); } else if (req.action === 'fill_user_pass_with_specific_login') { + await kpxc.reconnect(); kpxcFill.fillFromPopup(req.id, req.uuid); } else if (req.action === 'fill_username_password') { + await kpxc.reconnect(); sendMessage('page_set_manual_fill', ManualFill.BOTH); await kpxc.receiveCredentialsIfNecessary(); kpxcFill.fillInFromActiveElement(); } else if (req.action === 'fill_password') { + await kpxc.reconnect(); sendMessage('page_set_manual_fill', ManualFill.PASSWORD); await kpxc.receiveCredentialsIfNecessary(); kpxcFill.fillInFromActiveElement(true); // passOnly to true } else if (req.action === 'fill_totp') { + await kpxc.reconnect(); await kpxc.receiveCredentialsIfNecessary(); kpxcFill.fillFromTOTP(); } else if (req.action === 'fill_attribute' && req.args) { @@ -869,3 +873,18 @@ browser.runtime.onMessage.addListener(async function(req, sender) { } } }); + +// Automatically reconnect to KeePassXC +// returns true if connected afterwards +kpxc.reconnect = async function() { + // Try to reconnect if KeePassXC is not currently connected + const connected = await sendMessage('is_connected'); + if (!connected) { + const reconnectResponse = await sendMessage('reconnect'); + if (!reconnectResponse.keePassXCAvailable) { + kpxcUI.createNotification('error', tr('errorNotConnected')); + return false; + } + } + return true; +}; diff --git a/keepassxc-browser/content/username-field.js b/keepassxc-browser/content/username-field.js index 04ea6c0..1b17fe0 100644 --- a/keepassxc-browser/content/username-field.js +++ b/keepassxc-browser/content/username-field.js @@ -123,18 +123,10 @@ const iconClicked = async function(field, icon) { return; } - let reconnected = false; - - // Try to reconnect if KeePassXC is not currently connected - const connected = await sendMessage('is_connected'); + // Try to reconnect if KeePassXC for the case we're not currently connected + const connected = await kpxc.reconnect(); if (!connected) { - const reconnectResponse = await sendMessage('reconnect'); - if (!reconnectResponse.keePassXCAvailable) { - kpxcUI.createNotification('error', tr('errorNotConnected')); - return; - } - - reconnected = true; + return; } const databaseHash = await sendMessage('check_database_hash'); @@ -145,7 +137,7 @@ const iconClicked = async function(field, icon) { field.focus(); } - if (icon.className.includes('unlock') || reconnected) { + if (icon.className.includes('unlock')) { fillCredentials(field); } };