mirror of
https://github.com/keepassxreboot/keepassxc-browser.git
synced 2026-03-11 08:54:43 +00:00
Merge branch 'develop'
This commit is contained in:
commit
e831620661
14 changed files with 145 additions and 174 deletions
|
|
@ -1,3 +1,9 @@
|
|||
0.2.5 (2107-07-21)
|
||||
=========================
|
||||
- Fixed incorrect return value in keepass.getCryptoKey
|
||||
- Added a better error message handling
|
||||
- Added an error message when Native Messaging is disabled in KeePassXC
|
||||
|
||||
0.2.4 (2017-07-11)
|
||||
=========================
|
||||
- Changed comparison operators to strict ones (and some code cleaning)
|
||||
|
|
|
|||
|
|
@ -1,8 +1,4 @@
|
|||
window.browser = (function () {
|
||||
return window.msBrowser ||
|
||||
window.browser ||
|
||||
window.chrome;
|
||||
})();
|
||||
window.browser = (function () { return window.msBrowser || window.browser || window.chrome; })();
|
||||
|
||||
var browserAction = {};
|
||||
|
||||
|
|
|
|||
|
|
@ -1,14 +1,10 @@
|
|||
window.browser = (function () {
|
||||
return window.msBrowser ||
|
||||
window.browser ||
|
||||
window.chrome;
|
||||
})();
|
||||
window.browser = (function () { return window.msBrowser || window.browser || window.chrome; })();
|
||||
|
||||
var event = {};
|
||||
|
||||
event.onMessage = function(request, sender, callback) {
|
||||
if (request.action in event.messageHandlers) {
|
||||
//console.log("onMessage(" + request.action + ") for #" + sender.tab.id);
|
||||
//console.log('onMessage(' + request.action + ') for #' + sender.tab.id);
|
||||
if (!sender.hasOwnProperty('tab') || sender.tab.id < 1) {
|
||||
sender.tab = {};
|
||||
sender.tab.id = page.currentTabId;
|
||||
|
|
@ -48,7 +44,7 @@ event.invoke = function(handler, callback, senderTabId, args, secondTime) {
|
|||
page.removePageInformationFromNotExistingTabs();
|
||||
|
||||
browser.tabs.get(senderTabId, (tab) => {
|
||||
//browser.tabs.query({"active": true, "windowId": browser.windows.WINDOW_ID_CURRENT}, function(tabs) {
|
||||
//browser.tabs.query({'active': true, 'windowId': browser.windows.WINDOW_ID_CURRENT}, function(tabs) {
|
||||
//if (tabs.length === 0)
|
||||
// return; // For example: only the background devtools or a popup are opened
|
||||
//var tab = tabs[0];
|
||||
|
|
@ -92,6 +88,24 @@ event.onShowAlert = function(callback, tab, message) {
|
|||
else { alert(message); }
|
||||
}
|
||||
|
||||
event.showStatus = function(configured, tab, callback) {
|
||||
let keyId = null;
|
||||
if (configured) {
|
||||
keyId = keepass.keyRing[keepass.databaseHash].id;
|
||||
}
|
||||
|
||||
browserAction.showDefault(null, tab);
|
||||
callback({
|
||||
identifier: keyId,
|
||||
configured: configured,
|
||||
databaseClosed: keepass.isDatabaseClosed,
|
||||
keePassXCAvailable: keepass.isKeePassXCAvailable,
|
||||
encryptionKeyUnrecognized: keepass.isEncryptionKeyUnrecognized,
|
||||
associated: keepass.isAssociated(),
|
||||
error: page.tabs[tab.id].errorMessage
|
||||
});
|
||||
}
|
||||
|
||||
event.onLoadSettings = function(callback, tab) {
|
||||
page.settings = (typeof(localStorage.settings) === 'undefined') ? {} : JSON.parse(localStorage.settings);
|
||||
}
|
||||
|
|
@ -119,22 +133,7 @@ event.onSaveSettings = function(callback, tab, settings) {
|
|||
event.onGetStatus = function(callback, tab) {
|
||||
keepass.testAssociation((response) => {
|
||||
keepass.isConfigured((configured) => {
|
||||
let keyId = null;
|
||||
if (configured) {
|
||||
keyId = keepass.keyRing[keepass.databaseHash].id;
|
||||
}
|
||||
|
||||
browserAction.showDefault(null, tab);
|
||||
console.log(page.tabs[tab.id].errorMessage);
|
||||
callback({
|
||||
identifier: keyId,
|
||||
configured: configured,
|
||||
databaseClosed: keepass.isDatabaseClosed,
|
||||
keePassXCAvailable: keepass.isKeePassXCAvailable,
|
||||
encryptionKeyUnrecognized: keepass.isEncryptionKeyUnrecognized,
|
||||
associated: keepass.isAssociated(),
|
||||
error: page.tabs[tab.id].errorMessage
|
||||
});
|
||||
event.showStatus(configured, tab, callback);
|
||||
});
|
||||
}, tab);
|
||||
}
|
||||
|
|
@ -150,22 +149,7 @@ event.onReconnect = function(callback, tab) {
|
|||
if (gdRes) {
|
||||
keepass.testAssociation((response) => {
|
||||
keepass.isConfigured((configured) => {
|
||||
let keyId = null;
|
||||
if (configured) {
|
||||
keyId = keepass.keyRing[keepass.databaseHash].id;
|
||||
}
|
||||
|
||||
browserAction.showDefault(null, tab);
|
||||
console.log(page.tabs[tab.id].errorMessage);
|
||||
callback({
|
||||
identifier: keyId,
|
||||
configured: configured,
|
||||
databaseClosed: keepass.isDatabaseClosed,
|
||||
keePassXCAvailable: keepass.isKeePassXCAvailable,
|
||||
encryptionKeyUnrecognized: keepass.isEncryptionKeyUnrecognized,
|
||||
associated: keepass.isAssociated(),
|
||||
error: page.tabs[tab.id].errorMessage
|
||||
});
|
||||
event.showStatus(configured, tab, callback);
|
||||
});
|
||||
}, tab);
|
||||
}
|
||||
|
|
@ -277,5 +261,5 @@ event.messageHandlers = {
|
|||
'update_available_keepassxc': event.onUpdateAvailableKeePassXC,
|
||||
'generate_password': keepass.generatePassword,
|
||||
'copy_password': keepass.copyPassword,
|
||||
"reconnect": event.onReconnect
|
||||
'reconnect': event.onReconnect
|
||||
};
|
||||
|
|
@ -7,11 +7,7 @@ keepass.changePublicKeys(null, (pkRes) => {
|
|||
keepass.getDatabaseHash((gdRes) => {}, null);
|
||||
});
|
||||
|
||||
window.browser = (function () {
|
||||
return window.msBrowser ||
|
||||
window.browser ||
|
||||
window.chrome;
|
||||
})();
|
||||
window.browser = (function () { return window.msBrowser || window.browser || window.chrome; })();
|
||||
|
||||
// Set initial tab-ID
|
||||
browser.tabs.query({'active': true, 'windowId': browser.windows.WINDOW_ID_CURRENT}, (tabs) => {
|
||||
|
|
@ -30,7 +26,7 @@ let _interval = 250;
|
|||
*/
|
||||
browser.tabs.onCreated.addListener((tab) => {
|
||||
if (tab.id > 0) {
|
||||
//console.log("browser.tabs.onCreated(" + tab.id+ ")");
|
||||
//console.log('browser.tabs.onCreated(' + tab.id+ ')');
|
||||
if (tab.selected) {
|
||||
page.currentTabId = tab.id;
|
||||
event.invoke(page.switchTab, null, tab.id, []);
|
||||
|
|
@ -61,11 +57,11 @@ browser.tabs.onActivated.addListener((activeInfo) => {
|
|||
browserAction.removeRememberPopup(null, {'id': page.currentTabId}, true);
|
||||
|
||||
browser.tabs.get(activeInfo.tabId, (info) => {
|
||||
//console.log(info.id + ": " + info.url);
|
||||
//console.log(info.id + ': ' + info.url);
|
||||
if (info && info.id) {
|
||||
page.currentTabId = info.id;
|
||||
if (info.status === 'complete') {
|
||||
//console.log("event.invoke(page.switchTab, null, "+info.id + ", []);");
|
||||
//console.log('event.invoke(page.switchTab, null, '+info.id + ', []);');
|
||||
event.invoke(page.switchTab, null, info.id, []);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,16 +15,12 @@ keepass.nativePort = null;
|
|||
keepass.keySize = 24;
|
||||
keepass.latestVersionUrl = 'https://api.github.com/repos/keepassxreboot/keepassxc/releases/latest';
|
||||
keepass.cacheTimeout = 30 * 1000; // milliseconds
|
||||
keepass.databaseHash = "no-hash"; //no-hash = KeePassXC is too old and does not return a hash value
|
||||
keepass.databaseHash = 'no-hash'; //no-hash = KeePassXC is too old and does not return a hash value
|
||||
keepass.keyRing = (typeof(localStorage.keyRing) === 'undefined') ? {} : JSON.parse(localStorage.keyRing);
|
||||
keepass.keyId = 'keepassxc-browser-cryptokey-name';
|
||||
keepass.keyBody = 'keepassxc-browser-key';
|
||||
|
||||
window.browser = (function () {
|
||||
return window.msBrowser ||
|
||||
window.browser ||
|
||||
window.chrome;
|
||||
})();
|
||||
window.browser = (function () { return window.msBrowser || window.browser || window.chrome; })();
|
||||
|
||||
const kpActions = {
|
||||
SET_LOGIN: 'set-login',
|
||||
|
|
@ -34,7 +30,36 @@ const kpActions = {
|
|||
TEST_ASSOCIATE: 'test-associate',
|
||||
GET_DATABASE_HASH: 'get-databasehash',
|
||||
CHANGE_PUBLIC_KEYS: 'change-public-keys'
|
||||
}
|
||||
};
|
||||
|
||||
const kpErrors = {
|
||||
UNKNOWN_ERROR: 0,
|
||||
DATABASE_NOT_OPENED: 1,
|
||||
DATABASE_HASH_NOT_RECEIVED: 2,
|
||||
CLIENT_PUBLIC_KEY_NOT_RECEIVED: 3,
|
||||
CANNOT_DECRYPT_MESSAGE: 4,
|
||||
TIMEOUT_OR_NOT_CONNECTED: 5,
|
||||
ACTION_CANCELLED_OR_DENIED: 6,
|
||||
PUBLIC_KEY_NOT_FOUND: 7,
|
||||
ASSOCIATION_FAILED: 8,
|
||||
KEY_CHANGE_FAILED: 9,
|
||||
ENCRYPTION_KEY_UNRECOGNIZED: 10,
|
||||
NO_SAVED_DATABASES_FOUND: 11,
|
||||
errorMessages : {
|
||||
0: { msg: 'Unknown error' },
|
||||
1: { msg: 'Database not opened' },
|
||||
2: { msg: 'Database hash not received' },
|
||||
3: { msg: 'Client public key not reveiced' },
|
||||
4: { msg: 'Cannot decrypt message' },
|
||||
5: { msg: 'Timeout or not connected to KeePassXC' },
|
||||
6: { msg: 'Action cancelled or denied' },
|
||||
7: { msg: 'Cannot encrypt message or public key not found. Is Native Messaging enabled in KeePassXC?' },
|
||||
8: { msg: 'KeePassXC association failed, try again.' },
|
||||
9: { msg: 'Key change was not successful.' },
|
||||
10: { msg: 'Encryption key is not recognized' },
|
||||
11: { msg: 'No saved databases found.' }
|
||||
}
|
||||
};
|
||||
|
||||
keepass.addCredentials = function(callback, tab, username, password, url) {
|
||||
keepass.updateCredentials(callback, tab, null, username, password, url);
|
||||
|
|
@ -150,7 +175,7 @@ keepass.retrieveCredentials = function (callback, tab, url, submiturl, forceCall
|
|||
entries = parsed.entries;
|
||||
keepass.updateLastUsed(keepass.databaseHash);
|
||||
if (entries.length === 0) {
|
||||
//questionmark-icon is not triggered, so we have to trigger for the normal symbol
|
||||
// questionmark-icon is not triggered, so we have to trigger for the normal symbol
|
||||
browserAction.showDefault(null, tab);
|
||||
}
|
||||
callback(entries);
|
||||
|
|
@ -309,7 +334,7 @@ keepass.associate = function(callback, tab) {
|
|||
const id = parsed.id;
|
||||
|
||||
if (!keepass.verifyResponse(parsed, response.nonce)) {
|
||||
page.tabs[tab.id].errorMessage = 'KeePassXC association failed, try again.';
|
||||
keepass.handleError(tab, kpErrors.ERROR_KEEPASS_ASSOCIATION_FAILED);
|
||||
}
|
||||
else {
|
||||
keepass.setCryptoKey(id, key); // Save the current public key as id key for the database
|
||||
|
|
@ -347,9 +372,7 @@ keepass.testAssociation = function (callback, tab, triggerUnlock) {
|
|||
|
||||
if (!keepass.serverPublicKey) {
|
||||
if (tab && page.tabs[tab.id]) {
|
||||
const errorMessage = 'No KeePassXC public key available.';
|
||||
page.tabs[tab.id].errorMessage = errorMessage;
|
||||
console.log(errorMessage);
|
||||
handleError(tab, kpErrors.ERROR_KEEPASS_PUBLIC_KEY_NOT_FOUND);
|
||||
}
|
||||
callback(false);
|
||||
return false;
|
||||
|
|
@ -359,11 +382,9 @@ keepass.testAssociation = function (callback, tab, triggerUnlock) {
|
|||
const nonce = nacl.randomBytes(keepass.keySize);
|
||||
const {dbid, dbkey} = keepass.getCryptoKey();
|
||||
|
||||
if (dbkey === null) {
|
||||
if (dbkey === null || dbid === null) {
|
||||
if (tab && page.tabs[tab.id]) {
|
||||
const errorMessage = 'No saved databases found.';
|
||||
page.tabs[tab.id].errorMessage = errorMessage;
|
||||
console.log(errorMessage);
|
||||
keepass.handleError(tab, kpErrors.ERROR_KEEPASS_NO_SAVED_DATABASES_FOUND);
|
||||
}
|
||||
callback(false);
|
||||
return false;
|
||||
|
|
@ -395,16 +416,12 @@ keepass.testAssociation = function (callback, tab, triggerUnlock) {
|
|||
const hash = response.hash || 0;
|
||||
keepass.deleteKey(hash);
|
||||
keepass.isEncryptionKeyUnrecognized = true;
|
||||
const errMsg = 'Encryption key is not recognized!';
|
||||
console.log(errMsg);
|
||||
page.tabs[tab.id].errorMessage = errMsg;
|
||||
keepass.handleError(tab, kpErrors.ERROR_KEEPASS_ENCRYPTION_KEY_UNRECOGNIZED);
|
||||
keepass.associated.value = false;
|
||||
keepass.associated.hash = null;
|
||||
}
|
||||
else if (!keepass.isAssociated()) {
|
||||
const errMsg = 'Association was not successful!';
|
||||
console.log(errMsg);
|
||||
page.tabs[tab.id].errorMessage = errMsg;
|
||||
keepass.handleError(tab, kpErrors.ERROR_KEEPASS_ASSOCIATION_FAILED);
|
||||
}
|
||||
else {
|
||||
if (tab && page.tabs[tab.id]) {
|
||||
|
|
@ -424,7 +441,7 @@ keepass.testAssociation = function (callback, tab, triggerUnlock) {
|
|||
|
||||
keepass.getDatabaseHash = function (callback, tab, triggerUnlock) {
|
||||
if (!keepass.isConnected) {
|
||||
page.tabs[tab.id].errorMessage = 'Not connected with KeePassXC.';
|
||||
keepass.handleError(tab, kpErrors.ERROR_KEEPASS_TIMEOUT_OR_NOT_CONNECTED);
|
||||
callback([]);
|
||||
return;
|
||||
}
|
||||
|
|
@ -440,9 +457,16 @@ keepass.getDatabaseHash = function (callback, tab, triggerUnlock) {
|
|||
action: kpAction
|
||||
};
|
||||
|
||||
const encrypted = keepass.encrypt(messageData, nonce);
|
||||
if (encrypted.length <= 0) {
|
||||
keepass.handleError(tab, kpErrors.ERROR_KEEPASS_PUBLIC_KEY_NOT_FOUND);
|
||||
callback(keepass.databaseHash);
|
||||
return;
|
||||
}
|
||||
|
||||
const request = {
|
||||
action: kpAction,
|
||||
message: keepass.encrypt(messageData, nonce),
|
||||
message: encrypted,
|
||||
nonce: keepass.b64e(nonce)
|
||||
};
|
||||
|
||||
|
|
@ -453,9 +477,7 @@ keepass.getDatabaseHash = function (callback, tab, triggerUnlock) {
|
|||
const message = nacl.util.encodeUTF8(res);
|
||||
const parsed = JSON.parse(message);
|
||||
|
||||
if (parsed.hash)
|
||||
{
|
||||
console.log('hash reply received: ' + parsed.hash);
|
||||
if (parsed.hash) {
|
||||
const oldDatabaseHash = keepass.databaseHash;
|
||||
keepass.setcurrentKeePassXCVersion(parsed.version);
|
||||
keepass.databaseHash = parsed.hash || 'no-hash';
|
||||
|
|
@ -469,24 +491,17 @@ keepass.getDatabaseHash = function (callback, tab, triggerUnlock) {
|
|||
keepass.isKeePassXCAvailable = true;
|
||||
callback(parsed.hash);
|
||||
}
|
||||
else if (parsed.errorCode)
|
||||
{
|
||||
else if (parsed.errorCode) {
|
||||
keepass.databaseHash = 'no-hash';
|
||||
keepass.isDatabaseClosed = true;
|
||||
console.log('Error: KeePass database is not opened.');
|
||||
if (tab && page.tabs[tab.id]) {
|
||||
page.tabs[tab.id].errorMessage = 'KeePass database is not opened.';
|
||||
}
|
||||
keepass.handleError(tab, ERROR_KEEPASS_DATABASE_NOT_OPENED);
|
||||
callback(keepass.databaseHash);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
keepass.databaseHash = 'no-hash';
|
||||
if (tab && page.tabs[tab.id]) {
|
||||
page.tabs[tab.id].errorMessage = response.error.length > 0 ? response.error : 'Database hash not received.';
|
||||
}
|
||||
keepass.handleError(tab, response.errorCode, response.error);
|
||||
callback(keepass.databaseHash);
|
||||
}
|
||||
});
|
||||
|
|
@ -510,14 +525,12 @@ keepass.changePublicKeys = function(tab, callback) {
|
|||
nonce: nonce
|
||||
}
|
||||
|
||||
keepass.callbackOnId(keepass.nativePort.onMessage, kpAction, function(response) {
|
||||
keepass.callbackOnId(keepass.nativePort.onMessage, kpAction, (response) => {
|
||||
keepass.setcurrentKeePassXCVersion(response.version);
|
||||
|
||||
if (!keepass.verifyKeyResponse(response, key, nonce)) {
|
||||
if (tab && page.tabs[tab.id]) {
|
||||
const errMsg = 'Key change was not successful.';
|
||||
page.tabs[tab.id].errorMessage = errMsg;
|
||||
console.log(errMsg);
|
||||
keepass.handleError(tab, kpErrors.ERROR_KEEPASS_KEY_CHANGE_FAILED);
|
||||
callback(false);
|
||||
}
|
||||
}
|
||||
|
|
@ -525,7 +538,6 @@ keepass.changePublicKeys = function(tab, callback) {
|
|||
console.log('Server public key: ' + keepass.b64e(keepass.serverPublicKey));
|
||||
}
|
||||
callback(true);
|
||||
|
||||
});
|
||||
keepass.nativePort.postMessage(message);
|
||||
}
|
||||
|
|
@ -541,8 +553,7 @@ keepass.isConfigured = function(callback) {
|
|||
callback(keepass.databaseHash in keepass.keyRing);
|
||||
}, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
else {
|
||||
callback(keepass.databaseHash in keepass.keyRing);
|
||||
}
|
||||
}
|
||||
|
|
@ -656,7 +667,7 @@ keepass.connectToNative = function() {
|
|||
}
|
||||
|
||||
keepass.onNativeMessage = function (response) {
|
||||
//console.log("Received message: " + JSON.stringify(response));
|
||||
//console.log('Received message: ' + JSON.stringify(response));
|
||||
}
|
||||
|
||||
function onDisconnected() {
|
||||
|
|
@ -720,9 +731,14 @@ keepass.verifyResponse = function(response, nonce, id) {
|
|||
|
||||
}
|
||||
|
||||
keepass.handleError = function(tabId, errorMessage, errorCode) {
|
||||
console.log('Received error ${errorCode}: ${errorMessage}');
|
||||
page.tabs[tabId].errorMessage = errorMessage;
|
||||
keepass.handleError = function(tab, errorCode, errorMessage = '') {
|
||||
if (errorMessage.length === 0) {
|
||||
errorMessage = kpErrors.errorMessages[errorCode].msg;
|
||||
}
|
||||
console.log('Error ' + errorCode + ': ' + errorMessage);
|
||||
if (tab && page.tabs[tab.id]) {
|
||||
page.tabs[tab.id].errorMessage = errorMessage;
|
||||
}
|
||||
}
|
||||
|
||||
keepass.b64e = function(d) {
|
||||
|
|
@ -734,12 +750,13 @@ keepass.b64d = function(d) {
|
|||
}
|
||||
|
||||
keepass.getCryptoKey = function() {
|
||||
let dbkey = null;
|
||||
let dbid = null;
|
||||
if (!(keepass.databaseHash in keepass.keyRing)) {
|
||||
return null;
|
||||
return {dbid, dbkey};
|
||||
}
|
||||
|
||||
const dbid = keepass.keyRing[keepass.databaseHash].id;
|
||||
let dbkey = null;
|
||||
dbid = keepass.keyRing[keepass.databaseHash].id;
|
||||
|
||||
if (dbid) {
|
||||
dbkey = keepass.keyRing[keepass.databaseHash].key;
|
||||
|
|
@ -761,7 +778,6 @@ keepass.encrypt = function(input, nonce) {
|
|||
return keepass.b64e(message);
|
||||
}
|
||||
}
|
||||
console.log('Cannot encrypt message! Server public key needed.');
|
||||
return '';
|
||||
}
|
||||
|
||||
|
|
@ -769,9 +785,5 @@ keepass.decrypt = function(input, nonce, toStr) {
|
|||
const m = keepass.b64d(input);
|
||||
const n = keepass.b64d(nonce);
|
||||
const res = nacl.box.open(m, n, keepass.serverPublicKey, keepass.keyPair.secretKey);
|
||||
|
||||
if (!res) {
|
||||
console.log('Failed to decrypt message');
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,14 @@
|
|||
window.browser = (function () {
|
||||
return window.msBrowser ||
|
||||
window.browser ||
|
||||
window.chrome;
|
||||
})();
|
||||
window.browser = (function () { return window.msBrowser || window.browser || window.chrome; })();
|
||||
|
||||
const defaultSettings = {
|
||||
checkUpdateKeePassXC: 3,
|
||||
autoCompleteUsernames: true,
|
||||
autoFillAndSend: true,
|
||||
usePasswordGenerator: true,
|
||||
autoFillSingleEntry: false,
|
||||
autoRetrieveCredentials: true,
|
||||
proxyPort: '19700'
|
||||
}
|
||||
|
||||
var page = {};
|
||||
page.tabs = {};
|
||||
|
|
@ -14,25 +20,25 @@ page.blockedTabs = {};
|
|||
page.initSettings = function() {
|
||||
event.onLoadSettings();
|
||||
if (!('checkUpdateKeePassXC' in page.settings)) {
|
||||
page.settings.checkUpdateKeePassXC = 3;
|
||||
page.settings.checkUpdateKeePassXC = defaultSettings.checkUpdateKeePassXC;
|
||||
}
|
||||
if (!('autoCompleteUsernames' in page.settings)) {
|
||||
page.settings.autoCompleteUsernames = true;
|
||||
page.settings.autoCompleteUsernames = defaultSettings.autoCompleteUsernames;
|
||||
}
|
||||
if (!('autoFillAndSend' in page.settings)) {
|
||||
page.settings.autoFillAndSend = true;
|
||||
page.settings.autoFillAndSend = defaultSettings.autoFillAndSend;
|
||||
}
|
||||
if (!('usePasswordGenerator' in page.settings)) {
|
||||
page.settings.usePasswordGenerator = true;
|
||||
page.settings.usePasswordGenerator = defaultSettings.usePasswordGenerator;
|
||||
}
|
||||
if (!('autoFillSingleEntry' in page.settings)) {
|
||||
page.settings.autoFillSingleEntry = false;
|
||||
page.settings.autoFillSingleEntry = defaultSettings.autoFillSingleEntry;
|
||||
}
|
||||
if (!('autoRetrieveCredentials' in page.settings)) {
|
||||
page.settings.autoRetrieveCredentials = true;
|
||||
page.settings.autoRetrieveCredentials = defaultSettings.autoRetrieveCredentials;
|
||||
}
|
||||
if (!('port' in page.settings)) {
|
||||
page.settings.port = '19700';
|
||||
page.settings.port = defaultSettings.proxyPort;
|
||||
}
|
||||
localStorage.settings = JSON.stringify(page.settings);
|
||||
}
|
||||
|
|
@ -74,7 +80,7 @@ page.clearCredentials = function(tabId, complete) {
|
|||
}
|
||||
|
||||
page.createTabEntry = function(tabId) {
|
||||
//console.log("page.createTabEntry("+tabId+")");
|
||||
//console.log('page.createTabEntry('+tabId+')');
|
||||
page.tabs[tabId] = {
|
||||
'stack': [],
|
||||
'errorMessage': null,
|
||||
|
|
|
|||
|
|
@ -3,11 +3,7 @@ if (typeof browser !== 'undefined') {
|
|||
isFirefox = true;
|
||||
}
|
||||
|
||||
window.browser = (function () {
|
||||
return window.msBrowser ||
|
||||
window.browser ||
|
||||
window.chrome;
|
||||
})();
|
||||
window.browser = (function () { return window.msBrowser || window.browser || window.chrome; })();
|
||||
|
||||
// Initialize autocomplete feature
|
||||
$(this.target).find('input').autocomplete();
|
||||
|
|
@ -91,7 +87,7 @@ cipAutocomplete.elements = [];
|
|||
|
||||
cipAutocomplete.init = function(field) {
|
||||
if (field.hasClass('ui-autocomplete-input')) {
|
||||
//_f(credentialInputs[i].username).autocomplete("source", autocompleteSource);
|
||||
//_f(credentialInputs[i].username).autocomplete('source', autocompleteSource);
|
||||
field.autocomplete('destroy');
|
||||
}
|
||||
|
||||
|
|
@ -144,7 +140,7 @@ cipAutocomplete.onBlur = function() {
|
|||
else {
|
||||
const fieldId = cipFields.prepareId(jQuery(this).attr('data-cip-id'));
|
||||
const fields = cipFields.getCombination('username', fieldId);
|
||||
if (_f(fields.password) && _f(fields.password).data('unchanged') !== true && jQuery(this).val() !== "") {
|
||||
if (_f(fields.password) && _f(fields.password).data('unchanged') !== true && jQuery(this).val() !== '') {
|
||||
cip.fillInCredentials(fields, true, true);
|
||||
}
|
||||
}
|
||||
|
|
@ -437,7 +433,7 @@ cipPassword.checkObservedElements = function() {
|
|||
}
|
||||
else if (!field.is(':visible')) {
|
||||
iconField.hide();
|
||||
//field.removeData("cip-password-generator");
|
||||
//field.removeData('cip-password-generator');
|
||||
}
|
||||
else if (field.is(':visible')) {
|
||||
iconField.show();
|
||||
|
|
@ -558,7 +554,7 @@ cipDefine.initDescription = function() {
|
|||
cipDefine.prepareStep2();
|
||||
cipDefine.markAllPasswordFields(jQuery('#b2c-cipDefine-fields'));
|
||||
}
|
||||
else if (jQuery(this).data("step") === 2) {
|
||||
else if (jQuery(this).data('step') === 2) {
|
||||
cipDefine.selection.password = null;
|
||||
cipDefine.prepareStep3();
|
||||
cipDefine.markAllStringFields(jQuery('#b2c-cipDefine-fields'));
|
||||
|
|
@ -716,8 +712,8 @@ cipDefine.markFields = function ($chooser, $pattern) {
|
|||
|
||||
/* skip step if no entry was found
|
||||
if(!$found) {
|
||||
alert("No username field found.\nContinue with choosing a password field.");
|
||||
jQuery("button#b2c-btn-skip").click();
|
||||
alert('No username field found.\nContinue with choosing a password field.'');
|
||||
jQuery('button#b2c-btn-skip').click();
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
|
@ -743,9 +739,9 @@ cipDefine.prepareStep2 = function() {
|
|||
|
||||
cipDefine.prepareStep3 = function() {
|
||||
/* skip step if no entry was found
|
||||
if(!jQuery("div#b2c-cipDefine-fields").data("username") && !jQuery("div#b2c-cipDefine-fields").data("password")) {
|
||||
alert("Neither an username field nor a password field were selected.\nNothing will be changed and chooser will be closed now.");
|
||||
jQuery("button#b2c-btn-dismiss").click();
|
||||
if(!jQuery('div#b2c-cipDefine-fields').data('username') && !jQuery('div#b2c-cipDefine-fields').data('password')) {
|
||||
alert('Neither an username field nor a password field were selected.\nNothing will be changed and chooser will be closed now.'');
|
||||
jQuery('button#b2c-btn-dismiss').click();
|
||||
return;
|
||||
}
|
||||
*/
|
||||
|
|
@ -791,7 +787,7 @@ cipFields.setUniqueId = function(field) {
|
|||
}
|
||||
|
||||
cipFields.prepareId = function(id) {
|
||||
return id.replace(/[:#.,\[\]\(\)' "]/g, function(m) { return "\\"+m });
|
||||
return id.replace(/[:#.,\[\]\(\)' "]/g, function(m) { return '\\'+m });
|
||||
}
|
||||
|
||||
cipFields.getAllFields = function() {
|
||||
|
|
@ -1275,7 +1271,7 @@ cip.fillInCredentials = function(combination, onlyPassword, suppressWarnings) {
|
|||
const fieldId = combination.password || combination.username;
|
||||
const field = _f(fieldId);
|
||||
if (field) {
|
||||
const form2 = field.closest("form");
|
||||
const form2 = field.closest('form');
|
||||
if (form2 && form2.length > 0) {
|
||||
cipForm.init(form2, combination);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"manifest_version": 2,
|
||||
"name": "keepassxc-browser",
|
||||
"version": "0.2.4",
|
||||
"version": "0.2.5",
|
||||
"description": "KeePassXC integration for modern web browsers",
|
||||
"author": "Sami Vänttinen",
|
||||
"icons": {
|
||||
|
|
|
|||
|
|
@ -1,8 +1,4 @@
|
|||
window.browser = (function () {
|
||||
return window.msBrowser ||
|
||||
window.browser ||
|
||||
window.chrome;
|
||||
})();
|
||||
window.browser = (function () { return window.msBrowser || window.browser || window.chrome; })();
|
||||
|
||||
if (jQuery) {
|
||||
var $ = jQuery.noConflict(true);
|
||||
|
|
|
|||
|
|
@ -1,11 +1,6 @@
|
|||
window.browser = (function () {
|
||||
return window.msBrowser ||
|
||||
window.browser ||
|
||||
window.chrome;
|
||||
})();
|
||||
window.browser = (function () { return window.msBrowser || window.browser || window.chrome; })();
|
||||
|
||||
function status_response(r) {
|
||||
console.log(r);
|
||||
$('#initial-state').hide();
|
||||
$('#error-encountered').hide();
|
||||
$('#need-reconfigure').hide();
|
||||
|
|
@ -28,7 +23,7 @@ function status_response(r) {
|
|||
$('#need-reconfigure').show();
|
||||
$('#need-reconfigure-message').html(r.error);
|
||||
}
|
||||
else if (r.error != null) {
|
||||
else if (r.error !== null) {
|
||||
$('#error-encountered').show();
|
||||
$('#error-message').html(r.error);
|
||||
}
|
||||
|
|
@ -63,7 +58,7 @@ $(function() {
|
|||
browser.tabs.query({'active': true, 'windowId': browser.windows.WINDOW_ID_CURRENT}, (tabs) => {
|
||||
if (tabs.length === 0)
|
||||
return; // For example: only the background devtools or a popup are opened
|
||||
var tab = tabs[0];
|
||||
let tab = tabs[0];
|
||||
|
||||
browser.tabs.sendMessage(tab.id, {
|
||||
action: 'redetect_fields'
|
||||
|
|
|
|||
|
|
@ -1,8 +1,4 @@
|
|||
window.browser = (function () {
|
||||
return window.msBrowser ||
|
||||
window.browser ||
|
||||
window.chrome;
|
||||
})();
|
||||
window.browser = (function () { return window.msBrowser || window.browser || window.chrome; })();
|
||||
|
||||
var $ = jQuery.noConflict(true);
|
||||
var _settings = typeof(localStorage.settings) ==='undefined' ? {} : JSON.parse(localStorage.settings);
|
||||
|
|
|
|||
|
|
@ -1,13 +1,9 @@
|
|||
window.browser = (function () {
|
||||
return window.msBrowser ||
|
||||
window.browser ||
|
||||
window.chrome;
|
||||
})();
|
||||
window.browser = (function () { return window.msBrowser || window.browser || window.chrome; })();
|
||||
|
||||
$(function() {
|
||||
browser.runtime.getBackgroundPage(function(global) {
|
||||
browser.tabs.query(null, (tab) => {
|
||||
//var data = global.tab_httpauth_list["tab" + tab.id];
|
||||
//const data = global.tab_httpauth_list['tab' + tab.id];
|
||||
const data = global.page.tabs[tab.id].loginList;
|
||||
let ul = document.getElementById('login-list');
|
||||
for (let i = 0; i < data.logins.length; i++) {
|
||||
|
|
|
|||
|
|
@ -1,8 +1,4 @@
|
|||
window.browser = (function () {
|
||||
return window.msBrowser ||
|
||||
window.browser ||
|
||||
window.chrome;
|
||||
})();
|
||||
window.browser = (function () { return window.msBrowser || window.browser || window.chrome; })();
|
||||
|
||||
$(function() {
|
||||
browser.runtime.getBackgroundPage(function(global) {
|
||||
|
|
|
|||
|
|
@ -1,8 +1,4 @@
|
|||
window.browser = (function () {
|
||||
return window.msBrowser ||
|
||||
window.browser ||
|
||||
window.chrome;
|
||||
})();
|
||||
window.browser = (function () { return window.msBrowser || window.browser || window.chrome; })();
|
||||
|
||||
var _tab;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue