mirror of
https://github.com/keepassxreboot/keepassxc-browser.git
synced 2026-03-11 08:54:43 +00:00
Merge pull request #1227 from keepassxreboot/feature/reload_credentials_after_save
Reload credentials after save
This commit is contained in:
commit
80b3c5016d
4 changed files with 32 additions and 12 deletions
|
|
@ -268,14 +268,15 @@ page.removePageInformationFromNotExistingTabs = async function() {
|
|||
|
||||
// Retrieves the credentials. Returns cached values when found.
|
||||
// Page reload or tab switch clears the cache.
|
||||
// If the retrieval is forced (from Credential Banner), get new credentials normally.
|
||||
page.retrieveCredentials = async function(tab, args = []) {
|
||||
const [ url, submitUrl ] = args;
|
||||
if (page.tabs[tab.id] && page.tabs[tab.id].credentials.length > 0) {
|
||||
const [ url, submitUrl, force ] = args;
|
||||
if (page.tabs[tab.id] && page.tabs[tab.id].credentials.length > 0 && !force) {
|
||||
return page.tabs[tab.id].credentials;
|
||||
}
|
||||
|
||||
// Ignore duplicate requests
|
||||
if (page.currentRequest.url === url && page.currentRequest.submitUrl === submitUrl) {
|
||||
if (page.currentRequest.url === url && page.currentRequest.submitUrl === submitUrl && !force) {
|
||||
return [];
|
||||
} else {
|
||||
page.currentRequest.url = url;
|
||||
|
|
|
|||
|
|
@ -9,6 +9,10 @@ kpxcBanner.credentials = {};
|
|||
kpxcBanner.wrapper = undefined;
|
||||
|
||||
kpxcBanner.destroy = async function() {
|
||||
if (!kpxcBanner.created) {
|
||||
return;
|
||||
}
|
||||
|
||||
kpxcBanner.created = false;
|
||||
kpxcBanner.credentials = {};
|
||||
|
||||
|
|
@ -302,13 +306,15 @@ kpxcBanner.updateCredentials = async function(credentials = {}) {
|
|||
}
|
||||
};
|
||||
|
||||
kpxcBanner.verifyResult = function(code) {
|
||||
kpxcBanner.verifyResult = async function(code) {
|
||||
if (code === 'error') {
|
||||
kpxcUI.createNotification('error', tr('rememberErrorCannotSaveCredentials'));
|
||||
} else if (code === 'created') {
|
||||
kpxcUI.createNotification('success', tr('rememberCredentialsSaved', kpxcBanner.credentials.username || tr('rememberEmptyUsername')));
|
||||
await kpxc.retrieveCredentials(true); // Forced reload
|
||||
} else if (code === 'updated') {
|
||||
kpxcUI.createNotification('success', tr('rememberCredentialsUpdated', kpxcBanner.credentials.username || tr('rememberEmptyUsername')));
|
||||
await kpxc.retrieveCredentials(true); // Forced reload
|
||||
} else if (code === 'canceled') {
|
||||
kpxcUI.createNotification('warning', tr('rememberCredentialsNotSaved'));
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -1251,8 +1251,9 @@ kpxc.prepareCredentials = async function() {
|
|||
* @param {string} passwordValue Submitted password
|
||||
* @param {string} urlValue URL of the page where password change was detected
|
||||
* @param {Array} oldCredentials Credentials saved from the password change page, if available
|
||||
* @param {boolean} useBanner If banner is disabled, save directly
|
||||
*/
|
||||
kpxc.rememberCredentials = async function(usernameValue, passwordValue, urlValue, oldCredentials) {
|
||||
kpxc.rememberCredentials = async function(usernameValue, passwordValue, urlValue, oldCredentials, useBanner = true) {
|
||||
const credentials = (oldCredentials !== undefined && oldCredentials.length > 0) ? oldCredentials : kpxc.credentials;
|
||||
if (passwordValue === '') {
|
||||
return undefined;
|
||||
|
|
@ -1302,14 +1303,20 @@ kpxc.rememberCredentials = async function(usernameValue, passwordValue, urlValue
|
|||
}
|
||||
}
|
||||
|
||||
// Show the Credential Banner
|
||||
kpxcBanner.create({
|
||||
const saveCredentials = {
|
||||
username: usernameValue,
|
||||
password: passwordValue,
|
||||
url: urlValue,
|
||||
usernameExists: usernameExists,
|
||||
list: credentialsList
|
||||
});
|
||||
};
|
||||
|
||||
if (useBanner) {
|
||||
kpxcBanner.create(saveCredentials);
|
||||
} else {
|
||||
kpxcBanner.credentials = saveCredentials;
|
||||
kpxcBanner.saveNewCredentials(saveCredentials);
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
|
|
@ -1326,7 +1333,7 @@ kpxc.rememberCredentialsFromContextMenu = async function() {
|
|||
const usernameValue = combination.username ? combination.username.value : '';
|
||||
const passwordValue = combination.password ? combination.password.value : '';
|
||||
|
||||
const result = await kpxc.rememberCredentials(usernameValue, passwordValue);
|
||||
const result = await kpxc.rememberCredentials(usernameValue, passwordValue, undefined, undefined, kpxc.settings.showLoginNotifications);
|
||||
if (result === undefined) {
|
||||
kpxcUI.createNotification('error', tr('rememberNoPassword'));
|
||||
return;
|
||||
|
|
@ -1337,13 +1344,14 @@ kpxc.rememberCredentialsFromContextMenu = async function() {
|
|||
}
|
||||
};
|
||||
|
||||
// The basic function for retrieving credentials from KeePassXC
|
||||
kpxc.retrieveCredentials = async function() {
|
||||
// The basic function for retrieving credentials from KeePassXC.
|
||||
// Credential Banner can force the retrieval for reloading new/modified credentials.
|
||||
kpxc.retrieveCredentials = async function(force = false) {
|
||||
kpxc.url = document.location.href;
|
||||
kpxc.submitUrl = kpxc.getFormActionUrl(kpxc.combinations[0]);
|
||||
|
||||
if (kpxc.settings.autoRetrieveCredentials && kpxc.url && kpxc.submitUrl) {
|
||||
await kpxc.retrieveCredentialsCallback(await sendMessage('retrieve_credentials', [ kpxc.url, kpxc.submitUrl ]));
|
||||
await kpxc.retrieveCredentialsCallback(await sendMessage('retrieve_credentials', [ kpxc.url, kpxc.submitUrl, force ]));
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -1878,6 +1886,8 @@ browser.runtime.onMessage.addListener(async function(req, sender) {
|
|||
kpxc.initCredentialFields();
|
||||
} else if (req.action === 'remember_credentials') {
|
||||
kpxc.rememberCredentialsFromContextMenu();
|
||||
} else if (req.action === 'retrive_credentials_forced') {
|
||||
await kpxc.retrieveCredentials(true);
|
||||
} else if (req.action === 'show_password_generator') {
|
||||
kpxcPasswordDialog.trigger();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -57,6 +57,9 @@ $(async () => {
|
|||
await browser.runtime.sendMessage({
|
||||
action: 'associate'
|
||||
});
|
||||
|
||||
// This does not work with Firefox because of https://bugzilla.mozilla.org/show_bug.cgi?id=1665380
|
||||
await sendMessageToTab('retrive_credentials_forced');
|
||||
close();
|
||||
});
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue