/*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.setPassword = function setPassword (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.removePassword = function removePassword(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; } } };