Fix forwarding to fallback on errors

This commit is contained in:
varjolintu 2024-03-12 15:35:28 +02:00
parent 22af4ac343
commit f36985f454
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;
}