mirror of
https://github.com/keepassxreboot/keepassxc-browser.git
synced 2026-03-11 08:54:43 +00:00
285 lines
9 KiB
JavaScript
Executable file
285 lines
9 KiB
JavaScript
Executable file
'use strict';
|
|
|
|
const kpxcEvent = {};
|
|
|
|
kpxcEvent.onMessage = async function(request, sender) {
|
|
if (request.action in kpxcEvent.messageHandlers) {
|
|
if (!sender.hasOwnProperty('tab') || sender.tab.id < 1) {
|
|
sender.tab = {};
|
|
sender.tab.id = page.currentTabId;
|
|
}
|
|
|
|
return await kpxcEvent.messageHandlers[request.action](sender.tab, request.args);
|
|
}
|
|
};
|
|
|
|
kpxcEvent.showStatus = async function(tab, configured) {
|
|
let keyId = null;
|
|
if (configured && keepass.databaseHash !== '') {
|
|
keyId = keepass.keyRing[keepass.databaseHash].id;
|
|
}
|
|
|
|
browserAction.showDefault(tab);
|
|
const errorMessage = page.tabs[tab.id].errorMessage;
|
|
return {
|
|
identifier: keyId,
|
|
configured: configured,
|
|
databaseClosed: keepass.isDatabaseClosed,
|
|
keePassXCAvailable: keepass.isKeePassXCAvailable,
|
|
encryptionKeyUnrecognized: keepass.isEncryptionKeyUnrecognized,
|
|
associated: keepass.isAssociated(),
|
|
error: errorMessage || null,
|
|
usernameFieldDetected: page.usernameFieldDetected
|
|
};
|
|
};
|
|
|
|
kpxcEvent.onLoadSettings = async function() {
|
|
return await page.initSettings().catch((err) => {
|
|
console.log('onLoadSettings error: ' + err);
|
|
return Promise.reject();
|
|
});
|
|
};
|
|
|
|
kpxcEvent.onLoadKeyRing = async function() {
|
|
const item = await browser.storage.local.get({ 'keyRing': {} }).catch((err) => {
|
|
console.log('kpxcEvent.onLoadKeyRing error: ' + err);
|
|
return Promise.reject();
|
|
});
|
|
|
|
keepass.keyRing = item.keyRing;
|
|
if (keepass.isAssociated() && !keepass.keyRing[keepass.associated.hash]) {
|
|
keepass.associated = {
|
|
'value': false,
|
|
'hash': null
|
|
};
|
|
}
|
|
|
|
return item.keyRing;
|
|
};
|
|
|
|
kpxcEvent.onSaveSettings = async function(tab, args = []) {
|
|
const [ settings ] = args;
|
|
browser.storage.local.set({ 'settings': settings });
|
|
kpxcEvent.onLoadSettings(tab);
|
|
return Promise.resolve();
|
|
};
|
|
|
|
kpxcEvent.onGetStatus = async function(tab, args = []) {
|
|
// When internalPoll is true the event is triggered from content script in intervals -> don't poll KeePassXC
|
|
try {
|
|
const [ internalPoll = false, triggerUnlock = false ] = args;
|
|
if (!internalPoll) {
|
|
const response = await keepass.testAssociation(tab, [ true, triggerUnlock ]);
|
|
if (!response) {
|
|
return kpxcEvent.showStatus(tab, false);
|
|
}
|
|
}
|
|
|
|
const configured = await keepass.isConfigured();
|
|
return kpxcEvent.showStatus(tab, configured);
|
|
} catch (err) {
|
|
console.log('Error: No status shown: ' + err);
|
|
return Promise.reject();
|
|
}
|
|
};
|
|
|
|
kpxcEvent.onReconnect = async function(tab) {
|
|
const configured = await keepass.reconnect(tab);
|
|
if (configured) {
|
|
browser.tabs.sendMessage(tab.id, {
|
|
action: 'redetect_fields'
|
|
}).catch((err) => {
|
|
console.log(err);
|
|
return;
|
|
});
|
|
}
|
|
|
|
return kpxcEvent.showStatus(tab, configured);
|
|
};
|
|
|
|
kpxcEvent.lockDatabase = async function(tab) {
|
|
try {
|
|
await keepass.lockDatabase(tab);
|
|
return kpxcEvent.showStatus(tab, false);
|
|
} catch (err) {
|
|
console.log('kpxcEvent.lockDatabase error: ' + err);
|
|
return false;
|
|
}
|
|
};
|
|
|
|
kpxcEvent.onPopStack = function(tab) {
|
|
browserAction.stackPop(tab.id);
|
|
browserAction.show(tab);
|
|
return Promise.resolve();
|
|
};
|
|
|
|
kpxcEvent.onGetTabInformation = async function(tab) {
|
|
const id = tab.id || page.currentTabId;
|
|
return page.tabs[id];
|
|
};
|
|
|
|
kpxcEvent.onGetConnectedDatabase = function() {
|
|
return Promise.resolve({
|
|
count: Object.keys(keepass.keyRing).length,
|
|
identifier: (keepass.keyRing[keepass.associated.hash]) ? keepass.keyRing[keepass.associated.hash].id : null
|
|
});
|
|
};
|
|
|
|
kpxcEvent.onGetKeePassXCVersions = async function(tab) {
|
|
if (keepass.currentKeePassXC === '') {
|
|
await keepass.getDatabaseHash(tab);
|
|
return { 'current': keepass.currentKeePassXC, 'latest': keepass.latestKeePassXC.version };
|
|
}
|
|
|
|
return { 'current': keepass.currentKeePassXC, 'latest': keepass.latestKeePassXC.version };
|
|
};
|
|
|
|
kpxcEvent.onCheckUpdateKeePassXC = async function() {
|
|
keepass.checkForNewKeePassXCVersion();
|
|
return { current: keepass.currentKeePassXC.version, latest: keepass.latestKeePassXC.version };
|
|
};
|
|
|
|
kpxcEvent.onUpdateAvailableKeePassXC = async function() {
|
|
return (page.settings.checkUpdateKeePassXC > 0) ? keepass.keePassXCUpdateAvailable() : false;
|
|
};
|
|
|
|
kpxcEvent.onRemoveCredentialsFromTabInformation = function(tab) {
|
|
const id = tab.id || page.currentTabId;
|
|
page.clearCredentials(id);
|
|
page.clearSubmittedCredentials();
|
|
return Promise.resolve();
|
|
};
|
|
|
|
kpxcEvent.onLoginPopup = function(tab, logins) {
|
|
const stackData = {
|
|
level: 1,
|
|
iconType: 'questionmark',
|
|
popup: 'popup_login.html'
|
|
};
|
|
|
|
browserAction.stackUnshift(stackData, tab.id);
|
|
page.tabs[tab.id].loginList = logins;
|
|
browserAction.show(tab);
|
|
return Promise.resolve();
|
|
};
|
|
|
|
kpxcEvent.initHttpAuth = function() {
|
|
httpAuth.init();
|
|
return Promise.resolve();
|
|
}
|
|
|
|
kpxcEvent.onHTTPAuthPopup = function(tab, data) {
|
|
const stackData = {
|
|
level: 1,
|
|
iconType: 'questionmark',
|
|
popup: 'popup_httpauth.html'
|
|
};
|
|
|
|
browserAction.stackUnshift(stackData, tab.id);
|
|
page.tabs[tab.id].loginList = data;
|
|
browserAction.show(tab);
|
|
return Promise.resolve();
|
|
};
|
|
|
|
kpxcEvent.onMultipleFieldsPopup = function(tab) {
|
|
const stackData = {
|
|
level: 1,
|
|
iconType: 'normal',
|
|
popup: 'popup_multiple-fields.html'
|
|
};
|
|
|
|
browserAction.stackUnshift(stackData, tab.id);
|
|
browserAction.show(tab);
|
|
return Promise.resolve();
|
|
};
|
|
|
|
kpxcEvent.pageClearLogins = function(tab, alreadyCalled) {
|
|
if (!alreadyCalled) {
|
|
page.clearLogins(tab.id);
|
|
}
|
|
return Promise.resolve();
|
|
};
|
|
|
|
kpxcEvent.pageGetLoginId = async function() {
|
|
return page.loginId;
|
|
};
|
|
|
|
kpxcEvent.pageSetLoginId = function(tab, loginId) {
|
|
page.loginId = loginId;
|
|
return Promise.resolve();
|
|
};
|
|
|
|
kpxcEvent.pageClearSubmitted = function() {
|
|
page.clearSubmittedCredentials();
|
|
return Promise.resolve();
|
|
}
|
|
|
|
kpxcEvent.pageGetSubmitted = async function() {
|
|
return page.submittedCredentials;
|
|
};
|
|
|
|
kpxcEvent.pageSetSubmitted = function(tab, args = []) {
|
|
const [ submitted, username, password, url, oldCredentials ] = args;
|
|
page.setSubmittedCredentials(submitted, username, password, url, oldCredentials);
|
|
return Promise.resolve();
|
|
};
|
|
|
|
kpxcEvent.onUsernameFieldDetected = function(tab, detected) {
|
|
page.usernameFieldDetected = detected;
|
|
};
|
|
|
|
kpxcEvent.passwordGetFilled = async function() {
|
|
return page.passwordFilled;
|
|
};
|
|
|
|
kpxcEvent.passwordSetFilled = function(tab, state) {
|
|
page.passwordFilled = state;
|
|
return Promise.resolve();
|
|
};
|
|
|
|
kpxcEvent.getColorTheme = async function(tab) {
|
|
return page.settings.colorTheme;
|
|
};
|
|
|
|
// All methods named in this object have to be declared BEFORE this!
|
|
kpxcEvent.messageHandlers = {
|
|
'add_credentials': keepass.addCredentials,
|
|
'associate': keepass.associate,
|
|
'check_database_hash': keepass.checkDatabaseHash,
|
|
'check_update_keepassxc': kpxcEvent.onCheckUpdateKeePassXC,
|
|
'create_new_group': keepass.createNewGroup,
|
|
'enable_automatic_reconnect': keepass.enableAutomaticReconnect,
|
|
'disable_automatic_reconnect': keepass.disableAutomaticReconnect,
|
|
'generate_password': keepass.generatePassword,
|
|
'get_color_theme': kpxcEvent.getColorTheme,
|
|
'get_connected_database': kpxcEvent.onGetConnectedDatabase,
|
|
'get_database_hash': keepass.getDatabaseHash,
|
|
'get_database_groups': keepass.getDatabaseGroups,
|
|
'get_keepassxc_versions': kpxcEvent.onGetKeePassXCVersions,
|
|
'get_status': kpxcEvent.onGetStatus,
|
|
'get_tab_information': kpxcEvent.onGetTabInformation,
|
|
'init_http_auth': kpxcEvent.initHttpAuth,
|
|
'is_connected': keepass.getIsKeePassXCAvailable,
|
|
'load_keyring': kpxcEvent.onLoadKeyRing,
|
|
'load_settings': kpxcEvent.onLoadSettings,
|
|
'lock-database': kpxcEvent.lockDatabase,
|
|
'page_clear_logins': kpxcEvent.pageClearLogins,
|
|
'page_clear_submitted': kpxcEvent.pageClearSubmitted,
|
|
'page_get_login_id': kpxcEvent.pageGetLoginId,
|
|
'page_get_submitted': kpxcEvent.pageGetSubmitted,
|
|
'page_set_login_id': kpxcEvent.pageSetLoginId,
|
|
'page_set_submitted': kpxcEvent.pageSetSubmitted,
|
|
'password_get_filled': kpxcEvent.passwordGetFilled,
|
|
'password_set_filled': kpxcEvent.passwordSetFilled,
|
|
'pop_stack': kpxcEvent.onPopStack,
|
|
'popup_login': kpxcEvent.onLoginPopup,
|
|
'popup_multiple-fields': kpxcEvent.onMultipleFieldsPopup,
|
|
'reconnect': kpxcEvent.onReconnect,
|
|
'remove_credentials_from_tab_information': kpxcEvent.onRemoveCredentialsFromTabInformation,
|
|
'retrieve_credentials': keepass.retrieveCredentials,
|
|
'show_default_browseraction': browserAction.showDefault,
|
|
'update_credentials': keepass.updateCredentials,
|
|
'username_field_detected': kpxcEvent.onUsernameFieldDetected,
|
|
'save_settings': kpxcEvent.onSaveSettings,
|
|
'update_available_keepassxc': kpxcEvent.onUpdateAvailableKeePassXC
|
|
};
|