From f36985f45492f74201067ab7aa6096e7723c13d7 Mon Sep 17 00:00:00 2001 From: varjolintu Date: Tue, 12 Mar 2024 15:35:28 +0200 Subject: [PATCH] Fix forwarding to fallback on errors --- keepassxc-browser/content/keepassxc-browser.js | 4 +++- keepassxc-browser/content/passkeys-utils.js | 2 +- keepassxc-browser/content/passkeys.js | 10 +++++++--- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/keepassxc-browser/content/keepassxc-browser.js b/keepassxc-browser/content/keepassxc-browser.js index a267996..c3a07de 100755 --- a/keepassxc-browser/content/keepassxc-browser.js +++ b/keepassxc-browser/content/keepassxc-browser.js @@ -843,7 +843,9 @@ kpxc.enablePasskeys = function() { kpxcUI.createNotification('error', errorMessage); } - if (letTimerRunOut(ret?.response?.errorCode)) { + if (kpxc.settings.passkeysFallback) { + kpxcPasskeysUtils.sendPasskeysResponse(undefined, ret.response?.errorCode, errorMessage); + } else if (letTimerRunOut(ret?.response?.errorCode)) { return; } } diff --git a/keepassxc-browser/content/passkeys-utils.js b/keepassxc-browser/content/passkeys-utils.js index 33d77e4..aa08c26 100644 --- a/keepassxc-browser/content/passkeys-utils.js +++ b/keepassxc-browser/content/passkeys-utils.js @@ -56,7 +56,7 @@ const kpxcPasskeysUtils = {}; // Sends response from KeePassXC back to the injected script kpxcPasskeysUtils.sendPasskeysResponse = function(publicKey, errorCode, errorMessage) { const response = errorCode - ? { errorCode: errorCode, errorMessage: errorMessage } + ? { errorCode: errorCode, errorMessage: errorMessage, fallback: kpxc.settings.passkeysFallback } : { publicKey: publicKey, fallback: kpxc.settings.passkeysFallback }; const details = isFirefox() ? cloneInto(response, document.defaultView) : response; document.dispatchEvent(new CustomEvent('kpxc-passkeys-response', { detail: details })); diff --git a/keepassxc-browser/content/passkeys.js b/keepassxc-browser/content/passkeys.js index 034097a..d2fd106 100644 --- a/keepassxc-browser/content/passkeys.js +++ b/keepassxc-browser/content/passkeys.js @@ -46,7 +46,7 @@ const isSameOriginWithAncestors = function() { }; // Throws errors to a correct exceptions -const handleError = function(errorCode, errorMessage) { +const throwError = function(errorCode, errorMessage) { if ((!errorCode && !errorMessage) || errorCode === PASSKEYS_REQUEST_CANCELED) { // No error or canceled by user. Stop the timer but throw no exception. Fallback with be called instead. return; @@ -103,7 +103,9 @@ const handleError = function(errorCode, errorMessage) { }); if (!response.publicKey) { - handleError(response?.errorCode, response?.errorMessage); + if (!response.fallback) { + throwError(response?.errorCode, response?.errorMessage); + } return response.fallback ? originalCredentials.create(options) : null; } @@ -129,7 +131,9 @@ const handleError = function(errorCode, errorMessage) { }); if (!response.publicKey) { - handleError(response?.errorCode, response?.errorMessage); + if (!response.fallback) { + throwError(response?.errorCode, response?.errorMessage); + } return response.fallback ? originalCredentials.get(options) : null; }