Debian package: Support xulrunner 9+10 in debian/conkeror.bin, drop support for unver...
[conkeror.git] / modules / login.js
blobf1f7a55b634718f16e9e431746d55cbf99171aff
1 /**
2  * (C) Copyright 2011 John J. Foerch
3  *
4  * Use, modification, and distribution are subject to the terms specified in the
5  * COPYING file.
6 **/
8 in_module(null);
10 /**
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.
13  */
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))
21                 return logins[i];
22         } else if (logins[i].hostname == host)
23             return logins[i];
24     }
25     return null;
29 /**
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
32  * RegExp.
33  */
34 function login_find_all (host) {
35     var result = [];
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]);
45     }
46     return result;
50 /**
51  * Remove the given login.  The login must be an nsILoginInfo object,
52  * which can be gotten from login_find or login_find_all.
53  */
54 function login_remove (login_info) {
55     var lm = Cc["@mozilla.org/login-manager;1"]
56         .getService(Ci.nsILoginManager);
57     lm.removeLogin(login_info);
61 /**
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"'.
67  */
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),
80                               (httprealm || null),
81                               username, password,
82                               (username_field || ""),
83                               (password_field || ""));
84     lm.addLogin(info);
88 /**
89  * login_set first removes all existing logins for the given host, then
90  * passes all of its arguments to login_add.
91  */
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);
102 provide("login");