1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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;
}
}
|