Merge pull request #2143 from keepassxreboot/fix/passkeys_fix_forwarding_to_fallback

Fix forwarding to fallback on errors
This commit is contained in:
Sami Vänttinen 2024-03-13 15:01:31 +02:00 committed by GitHub
commit 0934446d9d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 11 additions and 5 deletions

View file

@ -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;
}
}

View file

@ -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 }));

View file

@ -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;
}