!import
1 //@line 39 "/home/visbrero/mnt/roisin/rev_control/hg/mozilla/toolkit/mozapps/preferences/changemp.js"
2
3 const nsPK11TokenDB = "@mozilla.org/security/pk11tokendb;1";
4 const nsIPK11TokenDB = Components.interfaces.nsIPK11TokenDB;
5 const nsIDialogParamBlock = Components.interfaces.nsIDialogParamBlock;
6 const nsPKCS11ModuleDB = "@mozilla.org/security/pkcs11moduledb;1";
7 const nsIPKCS11ModuleDB = Components.interfaces.nsIPKCS11ModuleDB;
8 const nsIPKCS11Slot = Components.interfaces.nsIPKCS11Slot;
9 const nsIPK11Token = Components.interfaces.nsIPK11Token;
10
11
12 var params;
13 var tokenName="";
14 var pw1;
15
init
16 function init()
17 {
18 pw1 = document.getElementById("pw1");
19
20 process();
21 }
22
23
process
24 function process()
25 {
26 var secmoddb = Components.classes[nsPKCS11ModuleDB].getService(nsIPKCS11ModuleDB);
27 var bundle = document.getElementById("bundlePreferences");
28
29 // If the token is unitialized, don't use the old password box.
30 // Otherwise, do.
31
32 var slot = secmoddb.findSlotByName(tokenName);
33 if (slot) {
34 var oldpwbox = document.getElementById("oldpw");
35 var msgBox = document.getElementById("message");
36 var status = slot.status;
37 if (status == nsIPKCS11Slot.SLOT_UNINITIALIZED
38 || status == nsIPKCS11Slot.SLOT_READY) {
39
40 oldpwbox.setAttribute("hidden", "true");
41 msgBox.setAttribute("value", bundle.getString("password_not_set"));
42 msgBox.setAttribute("hidden", "false");
43
44 if (status == nsIPKCS11Slot.SLOT_READY) {
45 oldpwbox.setAttribute("inited", "empty");
46 } else {
47 oldpwbox.setAttribute("inited", "true");
48 }
49
50 // Select first password field
51 document.getElementById('pw1').focus();
52
53 } else {
54 // Select old password field
55 oldpwbox.setAttribute("hidden", "false");
56 msgBox.setAttribute("hidden", "true");
57 oldpwbox.setAttribute("inited", "false");
58 oldpwbox.focus();
59 }
60 }
61
62 if (params) {
63 // Return value 0 means "canceled"
64 params.SetInt(1, 0);
65 }
66
67 checkPasswords();
68 }
69
setPassword
70 function setPassword()
71 {
72 var pk11db = Components.classes[nsPK11TokenDB].getService(nsIPK11TokenDB);
73 var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
74 .getService(Components.interfaces.nsIPromptService);
75 var token = pk11db.findTokenByName(tokenName);
76 dump("*** TOKEN!!!! (name = |" + token + "|\n");
77
78 var oldpwbox = document.getElementById("oldpw");
79 var initpw = oldpwbox.getAttribute("inited");
80 var bundle = document.getElementById("bundlePreferences");
81
82 var success = false;
83
84 if (initpw == "false" || initpw == "empty") {
85 try {
86 var oldpw = "";
87 var passok = 0;
88
89 if (initpw == "empty") {
90 passok = 1;
91 } else {
92 oldpw = oldpwbox.value;
93 passok = token.checkPassword(oldpw);
94 }
95
96 if (passok) {
97 if (initpw == "empty" && pw1.value == "") {
98 // This makes no sense that we arrive here,
99 // we reached a case that should have been prevented by checkPasswords.
100 } else {
101 if (pw1.value == "") {
102 var secmoddb = Components.classes[nsPKCS11ModuleDB].getService(nsIPKCS11ModuleDB);
103 if (secmoddb.isFIPSEnabled) {
104 // empty passwords are not allowed in FIPS mode
105 promptService.alert(window,
106 bundle.getString("pw_change_failed_title"),
107 bundle.getString("pw_change2empty_in_fips_mode"));
108 passok = 0;
109 }
110 }
111 if (passok) {
112 token.changePassword(oldpw, pw1.value);
113 if (pw1.value == "") {
114 promptService.alert(window,
115 bundle.getString("pw_change_success_title"),
116 bundle.getString("pw_erased_ok")
117 + " " + bundle.getString("pw_empty_warning"));
118 } else {
119 promptService.alert(window,
120 bundle.getString("pw_change_success_title"),
121 bundle.getString("pw_change_ok"));
122 }
123 success = true;
124 }
125 }
126 } else {
127 oldpwbox.focus();
128 oldpwbox.setAttribute("value", "");
129 promptService.alert(window,
130 bundle.getString("pw_change_failed_title"),
131 bundle.getString("incorrect_pw"));
132 }
133 } catch (e) {
134 promptService.alert(window,
135 bundle.getString("pw_change_failed_title"),
136 bundle.getString("failed_pw_change"));
137 }
138 } else {
139 token.initPassword(pw1.value);
140 if (pw1.value == "") {
141 promptService.alert(window,
142 bundle.getString("pw_change_success_title"),
143 bundle.getString("pw_not_wanted")
144 + " " + bundle.getString("pw_empty_warning"));
145 }
146 success = true;
147 }
148
149 // Terminate dialog
150 if (success)
151 window.close();
152 }
153
setPasswordStrength
154 function setPasswordStrength()
155 {
156 // Here is how we weigh the quality of the password
157 // number of characters
158 // numbers
159 // non-alpha-numeric chars
160 // upper and lower case characters
161
162 var pw=document.getElementById('pw1').value;
163
164 //length of the password
165 var pwlength=(pw.length);
166 if (pwlength>5)
167 pwlength=5;
168
169
170 //use of numbers in the password
171 var numnumeric = pw.replace (/[0-9]/g, "");
172 var numeric=(pw.length - numnumeric.length);
173 if (numeric>3)
174 numeric=3;
175
176 //use of symbols in the password
177 var symbols = pw.replace (/\W/g, "");
178 var numsymbols=(pw.length - symbols.length);
179 if (numsymbols>3)
180 numsymbols=3;
181
182 //use of uppercase in the password
183 var numupper = pw.replace (/[A-Z]/g, "");
184 var upper=(pw.length - numupper.length);
185 if (upper>3)
186 upper=3;
187
188
189 var pwstrength=((pwlength*10)-20) + (numeric*10) + (numsymbols*15) + (upper*10);
190
191 // make sure we're give a value between 0 and 100
192 if ( pwstrength < 0 ) {
193 pwstrength = 0;
194 }
195
196 if ( pwstrength > 100 ) {
197 pwstrength = 100;
198 }
199
200 var mymeter=document.getElementById('pwmeter');
201 mymeter.value = pwstrength;
202
203 return;
204 }
205
checkPasswords
206 function checkPasswords()
207 {
208 var pw1=document.getElementById('pw1').value;
209 var pw2=document.getElementById('pw2').value;
210 var ok=document.documentElement.getButton("accept");
211
212 var oldpwbox = document.getElementById("oldpw");
213 if (oldpwbox) {
214 var initpw = oldpwbox.getAttribute("inited");
215
216 if (initpw == "empty" && pw1 == "") {
217 // The token has already been initialized, therefore this dialog
218 // was called with the intention to change the password.
219 // The token currently uses an empty password.
220 // We will not allow changing the password from empty to empty.
221 ok.setAttribute("disabled","true");
222 return;
223 }
224 }
225
226 if (pw1 == pw2){
227 ok.setAttribute("disabled","false");
228 } else
229 {
230 ok.setAttribute("disabled","true");
231 }
232
233 }