/* * This file is part of TbSync. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ "use strict"; var passwordManager = { load: async function () { }, unload: async function () { }, removeLoginInfos: function(origin, realm, users = null) { let nsLoginInfo = new Components.Constructor("@mozilla.org/login-manager/loginInfo;1", Components.interfaces.nsILoginInfo, "init"); let logins = Services.logins.findLogins(origin, null, realm); for (let i = 0; i < logins.length; i++) { if (!users || users.includes(logins[i].username)) { let currentLoginInfo = new nsLoginInfo(origin, null, realm, logins[i].username, logins[i].password, "", ""); try { Services.logins.removeLogin(currentLoginInfo); } catch (e) { TbSync.dump("Error removing loginInfo", e); } } } }, updateLoginInfo: function(origin, realm, oldUser, newUser, newPassword) { let nsLoginInfo = new Components.Constructor("@mozilla.org/login-manager/loginInfo;1", Components.interfaces.nsILoginInfo, "init"); this.removeLoginInfos(origin, realm, [oldUser, newUser]); let newLoginInfo = new nsLoginInfo(origin, null, realm, newUser, newPassword, "", ""); try { Services.logins.addLogin(newLoginInfo); } catch (e) { TbSync.dump("Error adding loginInfo", e); } }, getLoginInfo: function(origin, realm, user) { let logins = Services.logins.findLogins(origin, null, realm); for (let i = 0; i < logins.length; i++) { if (logins[i].username == user) { return logins[i].password; } } return null; }, /** data obj windowID accountName userName userNameLocked reference is an object in which an entry with windowID will be placed to hold a reference to the prompt window (so it can be closed externaly) */ asyncPasswordPrompt: async function(data, reference) { if (data.windowID) { let url = "chrome://tbsync/content/passwordPrompt/passwordPrompt.xhtml"; return await new Promise(function(resolve, reject) { reference[data.windowID] = TbSync.window.openDialog(url, "TbSyncPasswordPrompt:" + data.windowID, "centerscreen,chrome,resizable=no", data, resolve); }); } return false; } }