diff options
Diffstat (limited to 'keepassxc-browser/background/keepass.js')
-rw-r--r-- | keepassxc-browser/background/keepass.js | 56 |
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)); }; |