diff --git a/keepassxc-browser/background/event.js b/keepassxc-browser/background/event.js index 14a1f7b..2d6477b 100755 --- a/keepassxc-browser/background/event.js +++ b/keepassxc-browser/background/event.js @@ -191,12 +191,12 @@ kpxcEvent.onGetConnectedDatabase = function(callback, tab) { }; kpxcEvent.onGetKeePassXCVersions = function(callback, tab) { - if(keepass.currentKeePassXC.version == 0) { + if (keepass.currentKeePassXC == '') { keepass.getDatabaseHash((res) => { - callback({"current": keepass.currentKeePassXC.version, "latest": keepass.currentKeePassXC.version}); + callback({'current': keepass.currentKeePassXC, 'latest': keepass.latestKeePassXC.version}); }, tab); } else { - callback({"current": keepass.currentKeePassXC.version, "latest": keepass.currentKeePassXC.version}); + callback({'current': keepass.currentKeePassXC, 'latest': keepass.latestKeePassXC.version}); } }; diff --git a/keepassxc-browser/background/keepass.js b/keepassxc-browser/background/keepass.js index 48d8b66..1499487 100755 --- a/keepassxc-browser/background/keepass.js +++ b/keepassxc-browser/background/keepass.js @@ -1,7 +1,6 @@ 'use strict'; const keepass = {}; - keepass.associated = {'value': false, 'hash': null}; keepass.keyPair = {publicKey: null, secretKey: null}; keepass.serverPublicKey = ''; @@ -10,8 +9,8 @@ keepass.isConnected = false; keepass.isDatabaseClosed = false; keepass.isKeePassXCAvailable = false; keepass.isEncryptionKeyUnrecognized = false; -keepass.currentKeePassXC = {'version': 0, 'versionParsed': 0}; -keepass.requiredKeePassXC = 230; +keepass.currentKeePassXC = ''; +keepass.requiredKeePassXC = '2.3.0'; keepass.nativeHostName = 'org.keepassxc.keepassxc_browser'; keepass.nativePort = null; keepass.keySize = 24; @@ -80,7 +79,7 @@ const kpErrors = { }; browser.storage.local.get({ - 'latestKeePassXC': {'version': 0, 'versionParsed': 0, 'lastChecked': null}, + 'latestKeePassXC': {'version': '', 'lastChecked': null}, 'keyRing': {}}).then((item) => { keepass.latestKeePassXC = item.latestKeePassXC; keepass.keyRing = item.keyRing; @@ -305,7 +304,7 @@ keepass.generatePassword = function(callback, tab, forceCallback) { return; } - if (keepass.currentKeePassXC.versionParsed < keepass.requiredKeePassXC) { + if (!keepass.compareVersion(keepass.requiredKeePassXC, keepass.currentKeePassXC)) { callback([]); return; } @@ -409,7 +408,9 @@ keepass.associate = function(callback, tab) { keepass.handleError(tab, kpErrors.ASSOCIATION_FAILED); } else { - keepass.setCryptoKey(id, idKey); // Save the new identification public key as id key for the database + // Use public key as identification key with older KeePassXC releases + const savedKey = keepass.compareVersion('2.3.4', keepass.currentKeePassXC) ? idKey : key; + keepass.setCryptoKey(id, savedKey); // Save the new identification public key as id key for the database keepass.associated.value = true; keepass.associated.hash = parsed.hash || 0; } @@ -781,10 +782,7 @@ keepass.deleteKey = function(hash) { keepass.setcurrentKeePassXCVersion = function(version) { if (version) { - keepass.currentKeePassXC = { - version: version, - versionParsed: Number(version.replace(/\./g, '')) - }; + keepass.currentKeePassXC = version; } }; @@ -797,7 +795,7 @@ keepass.keePassXCUpdateAvailable = function() { } } - return (keepass.currentKeePassXC.versionParsed > 0 && keepass.currentKeePassXC.versionParsed < keepass.latestKeePassXC.versionParsed); + return keepass.compareVersion(keepass.currentKeePassXC, keepass.latestKeePassXC.version); }; keepass.checkForNewKeePassXCVersion = function() { @@ -810,7 +808,6 @@ keepass.checkForNewKeePassXCVersion = function() { if (json.tag_name) { version = json.tag_name; keepass.latestKeePassXC.version = version; - keepass.latestKeePassXC.versionParsed = Number(version.replace(/\./g, '')); } } @@ -1072,3 +1069,13 @@ keepass.updateDatabase = function() { }); }, null); }; + +keepass.compareVersion = function(minimum, current) { + if (!minimum || !current) { + return false; + } + + const min = minimum.split('.', 3).map(s => s.padStart(4, '0')).join('.'); + const cur = current.split('.', 3).map(s => s.padStart(4, '0')).join('.'); + return min <= cur; +}; diff --git a/keepassxc-browser/options/options.js b/keepassxc-browser/options/options.js index cc9c85a..65bf2e9 100644 --- a/keepassxc-browser/options/options.js +++ b/keepassxc-browser/options/options.js @@ -158,10 +158,10 @@ options.initGeneralSettings = function() { }; options.showKeePassXCVersions = function(response) { - if (response.current <= 0) { + if (response.current === '') { response.current = 'unknown'; } - if (response.latest <= 0) { + if (response.latest === '') { response.latest = 'unknown'; } $('#tab-general-settings .kphVersion:first em.yourVersion:first').text(response.current); diff --git a/keepassxc-browser/popups/popup.js b/keepassxc-browser/popups/popup.js index 98511aa..a22b3b3 100644 --- a/keepassxc-browser/popups/popup.js +++ b/keepassxc-browser/popups/popup.js @@ -8,7 +8,6 @@ function status_response(r) { $('#configured-and-associated').hide(); $('#configured-not-associated').hide(); $('#lock-database-button').hide(); - $('#update-available').hide(); if (!r.keePassXCAvailable) { $('#error-message').html(r.error);