Skip to content

Instantly share code, notes, and snippets.

@mormegil-cz
Forked from insin/updatePasswords.js
Last active October 11, 2023 07:45
Show Gist options
  • Save mormegil-cz/c54bfa8298196b352ca64d2f72982a04 to your computer and use it in GitHub Desktop.
Save mormegil-cz/c54bfa8298196b352ca64d2f72982a04 to your computer and use it in GitHub Desktop.
Mass update Firefox passwords (run in Tools → Web Developer → Browser Console) - https://developer.mozilla.org/en-US/docs/Tools/Browser_Toolbox#Enabling_the_Browser_Toolbox
async function updatePasswords() {
let oldPassword = prompt('Old password:')
if (!oldPassword) return
let loginManager = Components.classes['@mozilla.org/login-manager;1']
.getService(Components.interfaces.nsILoginManager)
let matchingLogins = (await loginManager.getAllLogins()).filter(l => l.password === oldPassword)
let matchCount = matchingLogins.length
if (matchCount === 0) return alert('No matching logins found')
let newPassword = prompt('New password:')
if (!newPassword) return
let confirmNewPassword = prompt('Confirm new password:')
if (!confirmNewPassword) return
if (newPassword !== confirmNewPassword) return alert('New passwords do not match')
if (!confirm(`Are you sure you want to update ${matchCount} password${matchCount === 1 ? '' : 's'}?`)) return
// Borrowed from mass_password_reset-1.05-tb+fx/content/oldpassword.xul
let nsLoginInfo = new Components.Constructor('@mozilla.org/login-manager/loginInfo;1',
Components.interfaces.nsILoginInfo,
'init')
for (login of matchingLogins) {
let updatedLogin = new nsLoginInfo(
login.hostname,
login.formSubmitURL,
login.httpRealm,
login.username,
newPassword,
login.usernameField,
login.passwordField
)
loginManager.modifyLogin(login, updatedLogin)
}
alert(`${matchCount} password${matchCount === 1 ? ' has' : 's have'} been updated`)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment