Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/keepassxreboot/keepassxc-browser.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'keepassxc-browser/background/keepass.js')
-rw-r--r--keepassxc-browser/background/keepass.js56
1 files changed, 35 insertions, 21 deletions
diff --git a/keepassxc-browser/background/keepass.js b/keepassxc-browser/background/keepass.js
index 8ee12ed..4deb641 100644
--- a/keepassxc-browser/background/keepass.js
+++ b/keepassxc-browser/background/keepass.js
@@ -20,6 +20,7 @@ keepass.databaseHash = 'no-hash'; //no-hash = KeePassXC is too old and does not
keepass.keyRing = (typeof(localStorage.keyRing) === 'undefined') ? {} : JSON.parse(localStorage.keyRing);
keepass.keyId = 'keepassxc-browser-cryptokey-name';
keepass.keyBody = 'keepassxc-browser-key';
+keepass.messageTimeout = 1000; // milliseconds
const kpActions = {
SET_LOGIN: 'set-login',
@@ -106,7 +107,7 @@ keepass.updateCredentials = function(callback, tab, entryId, username, password,
};
console.log(request);
- keepass.callbackOnId(keepass.nativePort.onMessage, kpAction, (response) => {
+ keepass.callbackOnId(keepass.nativePort.onMessage, kpAction, tab, (response) => {
if (response.message && response.nonce) {
const res = keepass.decrypt(response.message, response.nonce);
if (res) {
@@ -116,7 +117,7 @@ keepass.updateCredentials = function(callback, tab, entryId, username, password,
}
}
else if (response.error && response.errorCode) {
- keepass.handleError(tab.id, response.error, response.errorCode);
+ keepass.handleError(tab, response.error, response.errorCode);
}
else {
browserAction.showDefault(null, tab);
@@ -126,7 +127,7 @@ keepass.updateCredentials = function(callback, tab, entryId, username, password,
});
};
-keepass.retrieveCredentials = function (callback, tab, url, submiturl, forceCallback, triggerUnlock) {
+keepass.retrieveCredentials = function(callback, tab, url, submiturl, forceCallback, triggerUnlock) {
page.debug('keepass.retrieveCredentials(callback, {1}, {2}, {3}, {4})', tab.id, url, submiturl, forceCallback);
keepass.testAssociation((response) => {
@@ -168,7 +169,7 @@ keepass.retrieveCredentials = function (callback, tab, url, submiturl, forceCall
clientID: keepass.clientID
};
- keepass.callbackOnId(keepass.nativePort.onMessage, kpAction, (response) => {
+ keepass.callbackOnId(keepass.nativePort.onMessage, kpAction, tab, (response) => {
if (response.message && response.nonce) {
const res = keepass.decrypt(response.message, response.nonce);
if (res) {
@@ -192,7 +193,7 @@ keepass.retrieveCredentials = function (callback, tab, url, submiturl, forceCall
}
}
else if (response.error && response.errorCode) {
- keepass.handleError(tab.id, response.error, response.errorCode);
+ keepass.handleError(tab, response.error, response.errorCode);
}
else {
browserAction.showDefault(null, tab);
@@ -203,20 +204,33 @@ keepass.retrieveCredentials = function (callback, tab, url, submiturl, forceCall
};
// Redirects the callback to a listener (handleReply())
-keepass.callbackOnId = function (ev, id, callback) {
- let listener = ((port, id) => {
+keepass.callbackOnId = function(ev, action, tab, callback) {
+ let listener = ((port, action) => {
let handler = (msg) => {
- if (msg && msg.action === id) {
+ if (msg && msg.action === action) {
ev.removeListener(handler);
+ clearTimeout(timeout);
callback(msg);
}
};
return handler;
- })(ev, id, callback);
+ })(ev, action, tab, callback);
ev.addListener(listener);
+
+ // Handle timeouts
+ let timeout = setTimeout(() => {
+ const errorMessage = {
+ action: action,
+ error: kpErrors.getError(5),
+ errorCode: 5
+ };
+ keepass.isKeePassXCAvailable = false;
+ callback(errorMessage);
+ ev.removeListener(listener.handler);
+ }, keepass.messageTimeout);
};
-keepass.generatePassword = function (callback, tab, forceCallback) {
+keepass.generatePassword = function(callback, tab, forceCallback) {
if (!keepass.isConnected) {
callback([]);
return;
@@ -247,7 +261,7 @@ keepass.generatePassword = function (callback, tab, forceCallback) {
clientID: keepass.clientID
};
- keepass.callbackOnId(keepass.nativePort.onMessage, kpAction, (response) => {
+ keepass.callbackOnId(keepass.nativePort.onMessage, kpAction, tab, (response) => {
if (response.message && response.nonce) {
const res = keepass.decrypt(response.message, response.nonce);
if (res) {
@@ -271,7 +285,7 @@ keepass.generatePassword = function (callback, tab, forceCallback) {
}
}
else if (response.error && response.errorCode) {
- keepass.handleError(tab.id, response.error, response.errorCode);
+ keepass.handleError(tab, response.error, response.errorCode);
}
});
keepass.nativePort.postMessage(request);
@@ -308,7 +322,7 @@ keepass.associate = function(callback, tab) {
clientID: keepass.clientID
};
- keepass.callbackOnId(keepass.nativePort.onMessage, kpAction, (response) => {
+ keepass.callbackOnId(keepass.nativePort.onMessage, kpAction, tab, (response) => {
if (response.message && response.nonce) {
const res = keepass.decrypt(response.message, response.nonce);
if (res) {
@@ -330,14 +344,14 @@ keepass.associate = function(callback, tab) {
}
}
else if (response.error && response.errorCode) {
- keepass.handleError(tab.id, response.error, response.errorCode);
+ keepass.handleError(tab, response.error, response.errorCode);
}
});
keepass.nativePort.postMessage(request);
}, tab);
};
-keepass.testAssociation = function (callback, tab, triggerUnlock) {
+keepass.testAssociation = function(callback, tab, triggerUnlock) {
if (tab && page.tabs[tab.id]) {
page.tabs[tab.id].errorMessage = null;
}
@@ -391,7 +405,7 @@ keepass.testAssociation = function (callback, tab, triggerUnlock) {
clientID: keepass.clientID
};
- keepass.callbackOnId(keepass.nativePort.onMessage, kpAction, (response) => {
+ keepass.callbackOnId(keepass.nativePort.onMessage, kpAction, tab, (response) => {
if (response.message && response.nonce) {
const res = keepass.decrypt(response.message, response.nonce);
if (res) {
@@ -419,7 +433,7 @@ keepass.testAssociation = function (callback, tab, triggerUnlock) {
}
}
else if (response.error && response.errorCode) {
- keepass.handleError(tab.id, response.error, response.errorCode);
+ keepass.handleError(tab, response.error, response.errorCode);
}
callback(keepass.isAssociated());
});
@@ -427,7 +441,7 @@ keepass.testAssociation = function (callback, tab, triggerUnlock) {
}, tab, triggerUnlock);
};
-keepass.getDatabaseHash = function (callback, tab, triggerUnlock) {
+keepass.getDatabaseHash = function(callback, tab, triggerUnlock) {
if (!keepass.isConnected) {
keepass.handleError(tab, kpErrors.TIMEOUT_OR_NOT_CONNECTED);
callback([]);
@@ -459,7 +473,7 @@ keepass.getDatabaseHash = function (callback, tab, triggerUnlock) {
clientID: keepass.clientID
};
- keepass.callbackOnId(keepass.nativePort.onMessage, kpAction, (response) => {
+ keepass.callbackOnId(keepass.nativePort.onMessage, kpAction, tab, (response) => {
if (response.message && response.nonce) {
const res = keepass.decrypt(response.message, response.nonce);
if (res) {
@@ -518,7 +532,7 @@ keepass.changePublicKeys = function(tab, callback) {
clientID: keepass.clientID
};
- keepass.callbackOnId(keepass.nativePort.onMessage, kpAction, (response) => {
+ keepass.callbackOnId(keepass.nativePort.onMessage, kpAction, tab, (response) => {
keepass.setcurrentKeePassXCVersion(response.version);
if (!keepass.verifyKeyResponse(response, key, nonce)) {
@@ -664,7 +678,7 @@ keepass.connectToNative = function() {
}
};
-keepass.onNativeMessage = function (response) {
+keepass.onNativeMessage = function(response) {
//console.log('Received message: ' + JSON.stringify(response));
};