aboutsummaryrefslogtreecommitdiffstats
path: root/lib/passwords.js
diff options
context:
space:
mode:
authorMatěj Cepl <mcepl@redhat.com>2010-07-16 01:57:10 +0200
committerMatěj Cepl <mcepl@redhat.com>2010-07-16 04:24:35 +0200
commit91aac059810fec3d849bb48eb51f55e64b1cc32b (patch)
treef2b1da249409e413c2bb03279ef46077cb79707e /lib/passwords.js
parent2b1cf2b13c8d75feff30fdcf93bdb390523e1fd9 (diff)
parentff9af9afae670abd2944ad56705032285db08bc0 (diff)
downloadbugzilla-triage-91aac059810fec3d849bb48eb51f55e64b1cc32b.tar.gz
Merge branch 'betterPasswordHandling'
Diffstat (limited to 'lib/passwords.js')
-rw-r--r--lib/passwords.js57
1 files changed, 57 insertions, 0 deletions
diff --git a/lib/passwords.js b/lib/passwords.js
new file mode 100644
index 0000000..49b945f
--- /dev/null
+++ b/lib/passwords.js
@@ -0,0 +1,57 @@
+/*jslint forin: true, rhino: true, onevar: false, browser: true, evil: true, laxbreak: true, undef: true, nomen: true, eqeqeq: true, bitwise: true, maxerr: 1000, immed: false, white: false, plusplus: false, regexp: false, undef: false */
+// Released under the MIT/X11 license
+// http://www.opensource.org/licenses/mit-license.php
+"use strict";
+var {Cc,Ci,components} = require("chrome");
+
+function getLoginInfo(username, pass,
+ domain, realm) {
+ var nsLoginInfo = new components.
+ Constructor("@mozilla.org/login-manager/loginInfo;1",
+ Ci.nsILoginInfo, "init");
+ return new nsLoginInfo(domain,
+ null, realm, username, pass, "", "");
+}
+
+function getPasswordManager() {
+ return Cc["@mozilla.org/login-manager;1"].
+ getService(Ci.nsILoginManager);
+}
+
+exports.setLogin = function setLogin (username, pass,
+ domain, realm) {
+ var lInfo = getLoginInfo(username, pass, domain, realm);
+ getPasswordManager().addLogin(lInfo);
+};
+
+var getPassword = exports.getPassword = function getPassword(username,
+ domain, realm) {
+
+ var pwMgr = getPasswordManager();
+ var logins = pwMgr.findLogins({}, domain, "", realm);
+ var ourLogins = Array.filter(logins, function (x) {
+ return (x.username = username);
+ }, this);
+ // What to do when we have more than one password?
+ if (ourLogins.length > 0) {
+ return ourLogins[0].password;
+ } else {
+ return null;
+ }
+};
+
+exports.removeLogin = function removeLogin(username,
+ domain, realm) {
+ var pass = getPassword(username, domain, realm);
+ var pwMgr = getPasswordManager();
+ var logins = pwMgr.findLogins({}, domain, "", realm);
+
+ // Don't do Array.forEach here ... emulating break there
+ // is an abomination
+ for (var i = 0, ii = logins.length; i < ii; i++) {
+ if (logins[i].username === username) {
+ pwMgr.removeLogin(logins[i]);
+ break;
+ }
+ }
+};