summaryrefslogtreecommitdiffstats
path: root/content/modules/passwordManager.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--content/modules/passwordManager.js78
1 files changed, 78 insertions, 0 deletions
diff --git a/content/modules/passwordManager.js b/content/modules/passwordManager.js
new file mode 100644
index 0000000..0145cd1
--- /dev/null
+++ b/content/modules/passwordManager.js
@@ -0,0 +1,78 @@
+/*
+ * 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;
+ }
+}