2 * (C) Copyright 2011 John J. Foerch
4 * Use, modification, and distribution are subject to the terms specified in the
11 * Find and return a login (an nsILoginInfo) matching the given host. The
12 * host can be given as a string (for an exact match) or as a RegExp.
14 function login_find (host) {
15 var lm = Cc["@mozilla.org/login-manager;1"]
16 .getService(Ci.nsILoginManager);
17 var logins = lm.getAllLogins({});
18 for (var i = 0, n = logins.length; i < n; ++i) {
19 if (host instanceof RegExp) {
20 if (host.test(logins[i].hostname))
22 } else if (logins[i].hostname == host)
30 * Return an array of all logins (nsILoginInfo objects) that match the
31 * given host. Host may be given as a string (for an exact match) or as a
34 function login_find_all (host) {
36 var lm = Cc["@mozilla.org/login-manager;1"]
37 .getService(Ci.nsILoginManager);
38 var logins = lm.getAllLogins({});
39 for (var i = 0, n = logins.length; i < n; ++i) {
40 if (host instanceof RegExp) {
41 if (host.test(logins[i].hostname))
42 result.push(logins[i]);
43 } else if (logins[i].hostname == host)
44 result.push(logins[i]);
51 * Remove the given login. The login must be an nsILoginInfo object,
52 * which can be gotten from login_find or login_find_all.
54 function login_remove (login_info) {
55 var lm = Cc["@mozilla.org/login-manager;1"]
56 .getService(Ci.nsILoginManager);
57 lm.removeLogin(login_info);
62 * host, username, and password are mandatory arguments. one or the other
63 * of form_submit_url and httprealm is also mandatory, but if neither is
64 * given, the host will be used for form_submit_url. httprealm
65 * corresponds to the value of the http header in a 401 Authorization
66 * Required, 'WWW-Authenticate: Basic realm="foo"'.
68 function login_add (host, username, password,
69 httprealm, form_submit_url,
70 username_field, password_field) {
71 if (form_submit_url == null && httprealm == null)
72 form_submit_url = host;
73 var lm = Cc["@mozilla.org/login-manager;1"]
74 .getService(Ci.nsILoginManager);
75 var login_info = new Components.Constructor(
76 "@mozilla.org/login-manager/loginInfo;1",
77 Ci.nsILoginInfo, "init");
78 var info = new login_info(host,
79 (form_submit_url || null),
82 (username_field || ""),
83 (password_field || ""));
89 * login_set first removes all existing logins for the given host, then
90 * passes all of its arguments to login_add.
92 function login_set (host, username, password,
93 httprealm, form_submit_url,
94 username_field, password_field) {
95 login_find_all(host).map(login_remove);
96 login_add(host, username, password,
97 httprealm, form_submit_url,
98 username_field, password_field);