|
1 /* This Source Code Form is subject to the terms of the Mozilla Public |
|
2 * License, v. 2.0. If a copy of the MPL was not distributed with this |
|
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
4 |
|
5 const nsIFilePicker = Components.interfaces.nsIFilePicker; |
|
6 const nsFilePicker = "@mozilla.org/filepicker;1"; |
|
7 const nsIX509CertDB = Components.interfaces.nsIX509CertDB; |
|
8 const nsX509CertDB = "@mozilla.org/security/x509certdb;1"; |
|
9 const nsIX509Cert = Components.interfaces.nsIX509Cert; |
|
10 const nsICertTree = Components.interfaces.nsICertTree; |
|
11 const nsCertTree = "@mozilla.org/security/nsCertTree;1"; |
|
12 const nsIDialogParamBlock = Components.interfaces.nsIDialogParamBlock; |
|
13 const nsDialogParamBlock = "@mozilla.org/embedcomp/dialogparam;1"; |
|
14 const nsIPKIParamBlock = Components.interfaces.nsIPKIParamBlock; |
|
15 const nsPKIParamBlock = "@mozilla.org/security/pkiparamblock;1"; |
|
16 const nsINSSCertCache = Components.interfaces.nsINSSCertCache; |
|
17 const nsNSSCertCache = "@mozilla.org/security/nsscertcache;1"; |
|
18 |
|
19 var key; |
|
20 |
|
21 var selected_certs = []; |
|
22 var selected_tree_items = []; |
|
23 var selected_index = []; |
|
24 var certdb; |
|
25 |
|
26 var caTreeView; |
|
27 var serverTreeView; |
|
28 var emailTreeView; |
|
29 var userTreeView; |
|
30 var orphanTreeView; |
|
31 |
|
32 function LoadCerts() |
|
33 { |
|
34 window.crypto.enableSmartCardEvents = true; |
|
35 document.addEventListener("smartcard-insert", onSmartCardChange, false); |
|
36 document.addEventListener("smartcard-remove", onSmartCardChange, false); |
|
37 |
|
38 certdb = Components.classes[nsX509CertDB].getService(nsIX509CertDB); |
|
39 var certcache = Components.classes[nsNSSCertCache].createInstance(nsINSSCertCache); |
|
40 |
|
41 certcache.cacheAllCerts(); |
|
42 |
|
43 caTreeView = Components.classes[nsCertTree] |
|
44 .createInstance(nsICertTree); |
|
45 caTreeView.loadCertsFromCache(certcache, nsIX509Cert.CA_CERT); |
|
46 document.getElementById('ca-tree') |
|
47 .treeBoxObject.view = caTreeView; |
|
48 |
|
49 serverTreeView = Components.classes[nsCertTree] |
|
50 .createInstance(nsICertTree); |
|
51 serverTreeView.loadCertsFromCache(certcache, nsIX509Cert.SERVER_CERT); |
|
52 document.getElementById('server-tree') |
|
53 .treeBoxObject.view = serverTreeView; |
|
54 |
|
55 emailTreeView = Components.classes[nsCertTree] |
|
56 .createInstance(nsICertTree); |
|
57 emailTreeView.loadCertsFromCache(certcache, nsIX509Cert.EMAIL_CERT); |
|
58 document.getElementById('email-tree') |
|
59 .treeBoxObject.view = emailTreeView; |
|
60 |
|
61 userTreeView = Components.classes[nsCertTree] |
|
62 .createInstance(nsICertTree); |
|
63 userTreeView.loadCertsFromCache(certcache, nsIX509Cert.USER_CERT); |
|
64 document.getElementById('user-tree') |
|
65 .treeBoxObject.view = userTreeView; |
|
66 |
|
67 orphanTreeView = Components.classes[nsCertTree] |
|
68 .createInstance(nsICertTree); |
|
69 orphanTreeView.loadCertsFromCache(certcache, nsIX509Cert.UNKNOWN_CERT); |
|
70 document.getElementById('orphan-tree') |
|
71 .treeBoxObject.view = orphanTreeView; |
|
72 |
|
73 enableBackupAllButton(); |
|
74 } |
|
75 |
|
76 function enableBackupAllButton() |
|
77 { |
|
78 var rowCnt = userTreeView.rowCount; |
|
79 var backupAllButton=document.getElementById('mine_backupAllButton'); |
|
80 backupAllButton.disabled = (rowCnt < 1); |
|
81 } |
|
82 |
|
83 function getSelectedCerts() |
|
84 { |
|
85 var ca_tab = document.getElementById("ca_tab"); |
|
86 var mine_tab = document.getElementById("mine_tab"); |
|
87 var others_tab = document.getElementById("others_tab"); |
|
88 var websites_tab = document.getElementById("websites_tab"); |
|
89 var orphan_tab = document.getElementById("orphan_tab"); |
|
90 var items = null; |
|
91 if (ca_tab.selected) { |
|
92 items = caTreeView.selection; |
|
93 } else if (mine_tab.selected) { |
|
94 items = userTreeView.selection; |
|
95 } else if (others_tab.selected) { |
|
96 items = emailTreeView.selection; |
|
97 } else if (websites_tab.selected) { |
|
98 items = serverTreeView.selection; |
|
99 } else if (orphan_tab.selected) { |
|
100 items = orphanTreeView.selection; |
|
101 } |
|
102 selected_certs = []; |
|
103 var cert = null; |
|
104 var nr = 0; |
|
105 if (items != null) nr = items.getRangeCount(); |
|
106 if (nr > 0) { |
|
107 for (var i=0; i<nr; i++) { |
|
108 var o1 = {}; |
|
109 var o2 = {}; |
|
110 items.getRangeAt(i, o1, o2); |
|
111 var min = o1.value; |
|
112 var max = o2.value; |
|
113 for (var j=min; j<=max; j++) { |
|
114 if (ca_tab.selected) { |
|
115 cert = caTreeView.getCert(j); |
|
116 } else if (mine_tab.selected) { |
|
117 cert = userTreeView.getCert(j); |
|
118 } else if (others_tab.selected) { |
|
119 cert = emailTreeView.getCert(j); |
|
120 } else if (websites_tab.selected) { |
|
121 cert = serverTreeView.getCert(j); |
|
122 } else if (orphan_tab.selected) { |
|
123 cert = orphanTreeView.getCert(j); |
|
124 } |
|
125 if (cert) { |
|
126 var sc = selected_certs.length; |
|
127 selected_certs[sc] = cert; |
|
128 selected_index[sc] = j; |
|
129 } |
|
130 } |
|
131 } |
|
132 } |
|
133 } |
|
134 |
|
135 function getSelectedTreeItems() |
|
136 { |
|
137 var ca_tab = document.getElementById("ca_tab"); |
|
138 var mine_tab = document.getElementById("mine_tab"); |
|
139 var others_tab = document.getElementById("others_tab"); |
|
140 var websites_tab = document.getElementById("websites_tab"); |
|
141 var orphan_tab = document.getElementById("orphan_tab"); |
|
142 var items = null; |
|
143 if (ca_tab.selected) { |
|
144 items = caTreeView.selection; |
|
145 } else if (mine_tab.selected) { |
|
146 items = userTreeView.selection; |
|
147 } else if (others_tab.selected) { |
|
148 items = emailTreeView.selection; |
|
149 } else if (websites_tab.selected) { |
|
150 items = serverTreeView.selection; |
|
151 } else if (orphan_tab.selected) { |
|
152 items = orphanTreeView.selection; |
|
153 } |
|
154 selected_certs = []; |
|
155 selected_tree_items = []; |
|
156 selected_index = []; |
|
157 var tree_item = null; |
|
158 var nr = 0; |
|
159 if (items != null) nr = items.getRangeCount(); |
|
160 if (nr > 0) { |
|
161 for (var i=0; i<nr; i++) { |
|
162 var o1 = {}; |
|
163 var o2 = {}; |
|
164 items.getRangeAt(i, o1, o2); |
|
165 var min = o1.value; |
|
166 var max = o2.value; |
|
167 for (var j=min; j<=max; j++) { |
|
168 if (ca_tab.selected) { |
|
169 tree_item = caTreeView.getTreeItem(j); |
|
170 } else if (mine_tab.selected) { |
|
171 tree_item = userTreeView.getTreeItem(j); |
|
172 } else if (others_tab.selected) { |
|
173 tree_item = emailTreeView.getTreeItem(j); |
|
174 } else if (websites_tab.selected) { |
|
175 tree_item = serverTreeView.getTreeItem(j); |
|
176 } else if (orphan_tab.selected) { |
|
177 tree_item = orphanTreeView.getTreeItem(j); |
|
178 } |
|
179 if (tree_item) { |
|
180 var sc = selected_tree_items.length; |
|
181 selected_tree_items[sc] = tree_item; |
|
182 selected_index[sc] = j; |
|
183 } |
|
184 } |
|
185 } |
|
186 } |
|
187 } |
|
188 |
|
189 function ca_enableButtons() |
|
190 { |
|
191 var items = caTreeView.selection; |
|
192 var nr = items.getRangeCount(); |
|
193 var toggle="false"; |
|
194 if (nr == 0) { |
|
195 toggle="true"; |
|
196 } |
|
197 var edit_toggle=toggle; |
|
198 /* |
|
199 var edit_toggle="true"; |
|
200 if (nr > 0) { |
|
201 for (var i=0; i<nr; i++) { |
|
202 var o1 = {}; |
|
203 var o2 = {}; |
|
204 items.getRangeAt(i, o1, o2); |
|
205 var min = o1.value; |
|
206 var max = o2.value; |
|
207 var stop = false; |
|
208 for (var j=min; j<=max; j++) { |
|
209 var tokenName = items.tree.view.getCellText(j, "tokencol"); |
|
210 if (tokenName == "Builtin Object Token") { stop = true; } break; |
|
211 } |
|
212 if (stop) break; |
|
213 } |
|
214 if (i == nr) { |
|
215 edit_toggle="false"; |
|
216 } |
|
217 } |
|
218 */ |
|
219 var enableViewButton=document.getElementById('ca_viewButton'); |
|
220 enableViewButton.setAttribute("disabled",toggle); |
|
221 var enableEditButton=document.getElementById('ca_editButton'); |
|
222 enableEditButton.setAttribute("disabled",edit_toggle); |
|
223 var enableExportButton=document.getElementById('ca_exportButton'); |
|
224 enableExportButton.setAttribute("disabled",toggle); |
|
225 var enableDeleteButton=document.getElementById('ca_deleteButton'); |
|
226 enableDeleteButton.setAttribute("disabled",toggle); |
|
227 } |
|
228 |
|
229 function mine_enableButtons() |
|
230 { |
|
231 var items = userTreeView.selection; |
|
232 var toggle="false"; |
|
233 if (items.getRangeCount() == 0) { |
|
234 toggle="true"; |
|
235 } |
|
236 var enableViewButton=document.getElementById('mine_viewButton'); |
|
237 enableViewButton.setAttribute("disabled",toggle); |
|
238 var enableBackupButton=document.getElementById('mine_backupButton'); |
|
239 enableBackupButton.setAttribute("disabled",toggle); |
|
240 var enableDeleteButton=document.getElementById('mine_deleteButton'); |
|
241 enableDeleteButton.setAttribute("disabled",toggle); |
|
242 } |
|
243 |
|
244 function websites_enableButtons() |
|
245 { |
|
246 var items = serverTreeView.selection; |
|
247 var count_ranges = items.getRangeCount(); |
|
248 |
|
249 var enable_delete = false; |
|
250 var enable_view = false; |
|
251 |
|
252 if (count_ranges > 0) { |
|
253 enable_delete = true; |
|
254 } |
|
255 |
|
256 if (count_ranges == 1) { |
|
257 var o1 = {}; |
|
258 var o2 = {}; |
|
259 items.getRangeAt(0, o1, o2); // the first range |
|
260 if (o1.value == o2.value) { |
|
261 // only a single item is selected |
|
262 try { |
|
263 var ti = serverTreeView.getTreeItem(o1.value); |
|
264 if (ti) { |
|
265 if (ti.cert) { |
|
266 enable_view = true; |
|
267 } |
|
268 } |
|
269 } |
|
270 catch (e) { |
|
271 } |
|
272 } |
|
273 } |
|
274 |
|
275 var enableViewButton=document.getElementById('websites_viewButton'); |
|
276 enableViewButton.setAttribute("disabled", !enable_view); |
|
277 var enableExportButton=document.getElementById('websites_exportButton'); |
|
278 enableExportButton.setAttribute("disabled", !enable_view); |
|
279 var enableDeleteButton=document.getElementById('websites_deleteButton'); |
|
280 enableDeleteButton.setAttribute("disabled", !enable_delete); |
|
281 } |
|
282 |
|
283 function email_enableButtons() |
|
284 { |
|
285 var items = emailTreeView.selection; |
|
286 var toggle="false"; |
|
287 if (items.getRangeCount() == 0) { |
|
288 toggle="true"; |
|
289 } |
|
290 var enableViewButton=document.getElementById('email_viewButton'); |
|
291 enableViewButton.setAttribute("disabled",toggle); |
|
292 var enableEditButton=document.getElementById('email_editButton'); |
|
293 enableEditButton.setAttribute("disabled",toggle); |
|
294 var enableExportButton=document.getElementById('email_exportButton'); |
|
295 enableExportButton.setAttribute("disabled",toggle); |
|
296 var enableDeleteButton=document.getElementById('email_deleteButton'); |
|
297 enableDeleteButton.setAttribute("disabled",toggle); |
|
298 } |
|
299 |
|
300 function orphan_enableButtons() |
|
301 { |
|
302 var items = orphanTreeView.selection; |
|
303 var toggle="false"; |
|
304 if (items.getRangeCount() == 0) { |
|
305 toggle="true"; |
|
306 } |
|
307 var enableViewButton=document.getElementById('orphan_viewButton'); |
|
308 enableViewButton.setAttribute("disabled",toggle); |
|
309 var enableExportButton=document.getElementById('orphan_exportButton'); |
|
310 enableExportButton.setAttribute("disabled",toggle); |
|
311 var enableDeleteButton=document.getElementById('orphan_deleteButton'); |
|
312 enableDeleteButton.setAttribute("disabled",toggle); |
|
313 } |
|
314 |
|
315 function backupCerts() |
|
316 { |
|
317 getSelectedCerts(); |
|
318 var numcerts = selected_certs.length; |
|
319 if (!numcerts) |
|
320 return; |
|
321 var bundle = document.getElementById("pippki_bundle"); |
|
322 var fp = Components.classes[nsFilePicker].createInstance(nsIFilePicker); |
|
323 fp.init(window, |
|
324 bundle.getString("chooseP12BackupFileDialog"), |
|
325 nsIFilePicker.modeSave); |
|
326 fp.appendFilter(bundle.getString("file_browse_PKCS12_spec"), |
|
327 "*.p12"); |
|
328 fp.appendFilters(nsIFilePicker.filterAll); |
|
329 var rv = fp.show(); |
|
330 if (rv == nsIFilePicker.returnOK || rv == nsIFilePicker.returnReplace) { |
|
331 certdb.exportPKCS12File(null, fp.file, |
|
332 selected_certs.length, selected_certs); |
|
333 } |
|
334 } |
|
335 |
|
336 function backupAllCerts() |
|
337 { |
|
338 // Select all rows, then call doBackup() |
|
339 var items = userTreeView.selection.selectAll(); |
|
340 backupCerts(); |
|
341 } |
|
342 |
|
343 function editCerts() |
|
344 { |
|
345 getSelectedCerts(); |
|
346 var numcerts = selected_certs.length; |
|
347 if (!numcerts) |
|
348 return; |
|
349 for (var t=0; t<numcerts; t++) { |
|
350 var cert = selected_certs[t]; |
|
351 var certkey = cert.dbKey; |
|
352 if (document.getElementById("ca_tab").selected) { |
|
353 window.openDialog('chrome://pippki/content/editcacert.xul', certkey, |
|
354 'chrome,centerscreen,modal'); |
|
355 } else if (document.getElementById("others_tab").selected) { |
|
356 window.openDialog('chrome://pippki/content/editemailcert.xul', certkey, |
|
357 'chrome,centerscreen,modal'); |
|
358 } |
|
359 } |
|
360 } |
|
361 |
|
362 function restoreCerts() |
|
363 { |
|
364 var bundle = document.getElementById("pippki_bundle"); |
|
365 var fp = Components.classes[nsFilePicker].createInstance(nsIFilePicker); |
|
366 fp.init(window, |
|
367 bundle.getString("chooseP12RestoreFileDialog2"), |
|
368 nsIFilePicker.modeOpen); |
|
369 fp.appendFilter(bundle.getString("file_browse_PKCS12_spec"), |
|
370 "*.p12; *.pfx"); |
|
371 fp.appendFilters(nsIFilePicker.filterAll); |
|
372 if (fp.show() == nsIFilePicker.returnOK) { |
|
373 certdb.importPKCS12File(null, fp.file); |
|
374 |
|
375 var certcache = Components.classes[nsNSSCertCache].createInstance(nsINSSCertCache); |
|
376 certcache.cacheAllCerts(); |
|
377 userTreeView.loadCertsFromCache(certcache, nsIX509Cert.USER_CERT); |
|
378 userTreeView.selection.clearSelection(); |
|
379 caTreeView.loadCertsFromCache(certcache, nsIX509Cert.CA_CERT); |
|
380 caTreeView.selection.clearSelection(); |
|
381 enableBackupAllButton(); |
|
382 } |
|
383 } |
|
384 |
|
385 function exportCerts() |
|
386 { |
|
387 getSelectedCerts(); |
|
388 var numcerts = selected_certs.length; |
|
389 if (!numcerts) |
|
390 return; |
|
391 |
|
392 for (var t=0; t<numcerts; t++) { |
|
393 exportToFile(window, selected_certs[t]); |
|
394 } |
|
395 } |
|
396 |
|
397 function deleteCerts() |
|
398 { |
|
399 getSelectedTreeItems(); |
|
400 var numcerts = selected_tree_items.length; |
|
401 if (!numcerts) |
|
402 return; |
|
403 |
|
404 var params = Components.classes[nsDialogParamBlock].createInstance(nsIDialogParamBlock); |
|
405 |
|
406 var selTab = document.getElementById('certMgrTabbox').selectedItem; |
|
407 var selTabID = selTab.getAttribute('id'); |
|
408 var t; |
|
409 |
|
410 params.SetNumberStrings(numcerts+1); |
|
411 |
|
412 if (selTabID == 'mine_tab') |
|
413 { |
|
414 params.SetString(0, selTabID); |
|
415 } |
|
416 else if (selTabID == "websites_tab") |
|
417 { |
|
418 params.SetString(0, selTabID); |
|
419 } |
|
420 else if (selTabID == "ca_tab") |
|
421 { |
|
422 params.SetString(0, selTabID); |
|
423 } |
|
424 else if (selTabID == "others_tab") |
|
425 { |
|
426 params.SetString(0, selTabID); |
|
427 } |
|
428 else if (selTabID == "orphan_tab") |
|
429 { |
|
430 params.SetString(0, selTabID); |
|
431 } |
|
432 else |
|
433 { |
|
434 return; |
|
435 } |
|
436 |
|
437 params.SetInt(0,numcerts); |
|
438 for (t=0; t<numcerts; t++) |
|
439 { |
|
440 var tree_item = selected_tree_items[t]; |
|
441 var c = tree_item.cert; |
|
442 if (!c) { |
|
443 params.SetString(t+1, tree_item.hostPort); |
|
444 } |
|
445 else { |
|
446 params.SetString(t+1, c.commonName); |
|
447 } |
|
448 |
|
449 } |
|
450 |
|
451 window.openDialog('chrome://pippki/content/deletecert.xul', "", |
|
452 'chrome,centerscreen,modal', params); |
|
453 |
|
454 if (params.GetInt(1) == 1) { |
|
455 // user closed dialog with OK |
|
456 var treeView = null; |
|
457 var loadParam = null; |
|
458 |
|
459 selTab = document.getElementById('certMgrTabbox').selectedItem; |
|
460 selTabID = selTab.getAttribute('id'); |
|
461 if (selTabID == 'mine_tab') { |
|
462 treeView = userTreeView; |
|
463 } else if (selTabID == "others_tab") { |
|
464 treeView = emailTreeView; |
|
465 } else if (selTabID == "websites_tab") { |
|
466 treeView = serverTreeView; |
|
467 } else if (selTabID == "ca_tab") { |
|
468 treeView = caTreeView; |
|
469 } else if (selTabID == "orphan_tab") { |
|
470 treeView = orphanTreeView; |
|
471 } |
|
472 |
|
473 for (t=numcerts-1; t>=0; t--) |
|
474 { |
|
475 treeView.deleteEntryObject(selected_index[t]); |
|
476 } |
|
477 |
|
478 selected_tree_items = []; |
|
479 selected_index = []; |
|
480 treeView.selection.clearSelection(); |
|
481 if (selTabID == 'mine_tab') { |
|
482 enableBackupAllButton(); |
|
483 } |
|
484 } |
|
485 } |
|
486 |
|
487 function viewCerts() |
|
488 { |
|
489 getSelectedCerts(); |
|
490 var numcerts = selected_certs.length; |
|
491 if (!numcerts) |
|
492 return; |
|
493 |
|
494 for (var t=0; t<numcerts; t++) { |
|
495 viewCertHelper(window, selected_certs[t]); |
|
496 } |
|
497 } |
|
498 |
|
499 function addCACerts() |
|
500 { |
|
501 var bundle = document.getElementById("pippki_bundle"); |
|
502 var fp = Components.classes[nsFilePicker].createInstance(nsIFilePicker); |
|
503 fp.init(window, |
|
504 bundle.getString("importCACertsPrompt"), |
|
505 nsIFilePicker.modeOpen); |
|
506 fp.appendFilter(bundle.getString("file_browse_Certificate_spec"), |
|
507 "*.crt; *.cert; *.cer; *.pem; *.der"); |
|
508 fp.appendFilters(nsIFilePicker.filterAll); |
|
509 if (fp.show() == nsIFilePicker.returnOK) { |
|
510 certdb.importCertsFromFile(null, fp.file, nsIX509Cert.CA_CERT); |
|
511 caTreeView.loadCerts(nsIX509Cert.CA_CERT); |
|
512 caTreeView.selection.clearSelection(); |
|
513 } |
|
514 } |
|
515 |
|
516 function onSmartCardChange() |
|
517 { |
|
518 var certcache = Components.classes[nsNSSCertCache].createInstance(nsINSSCertCache); |
|
519 // We've change the state of the smart cards inserted or removed |
|
520 // that means the available certs may have changed. Update the display |
|
521 certcache.cacheAllCerts(); |
|
522 userTreeView.loadCertsFromCache(certcache, nsIX509Cert.USER_CERT); |
|
523 userTreeView.selection.clearSelection(); |
|
524 caTreeView.loadCertsFromCache(certcache, nsIX509Cert.CA_CERT); |
|
525 caTreeView.selection.clearSelection(); |
|
526 serverTreeView.loadCertsFromCache(certcache, nsIX509Cert.SERVER_CERT); |
|
527 serverTreeView.selection.clearSelection(); |
|
528 emailTreeView.loadCertsFromCache(certcache, nsIX509Cert.EMAIL_CERT); |
|
529 emailTreeView.selection.clearSelection(); |
|
530 orphanTreeView.loadCertsFromCache(certcache, nsIX509Cert.UNKNOWN_CERT); |
|
531 orphanTreeView.selection.clearSelection(); |
|
532 } |
|
533 |
|
534 function addEmailCert() |
|
535 { |
|
536 var bundle = document.getElementById("pippki_bundle"); |
|
537 var fp = Components.classes[nsFilePicker].createInstance(nsIFilePicker); |
|
538 fp.init(window, |
|
539 bundle.getString("importEmailCertPrompt"), |
|
540 nsIFilePicker.modeOpen); |
|
541 fp.appendFilter(bundle.getString("file_browse_Certificate_spec"), |
|
542 "*.crt; *.cert; *.cer; *.pem; *.der"); |
|
543 fp.appendFilters(nsIFilePicker.filterAll); |
|
544 if (fp.show() == nsIFilePicker.returnOK) { |
|
545 certdb.importCertsFromFile(null, fp.file, nsIX509Cert.EMAIL_CERT); |
|
546 var certcache = Components.classes[nsNSSCertCache].createInstance(nsINSSCertCache); |
|
547 certcache.cacheAllCerts(); |
|
548 emailTreeView.loadCertsFromCache(certcache, nsIX509Cert.EMAIL_CERT); |
|
549 emailTreeView.selection.clearSelection(); |
|
550 caTreeView.loadCertsFromCache(certcache, nsIX509Cert.CA_CERT); |
|
551 caTreeView.selection.clearSelection(); |
|
552 } |
|
553 } |
|
554 |
|
555 function addWebSiteCert() |
|
556 { |
|
557 var bundle = document.getElementById("pippki_bundle"); |
|
558 var fp = Components.classes[nsFilePicker].createInstance(nsIFilePicker); |
|
559 fp.init(window, |
|
560 bundle.getString("importServerCertPrompt"), |
|
561 nsIFilePicker.modeOpen); |
|
562 fp.appendFilter(bundle.getString("file_browse_Certificate_spec"), |
|
563 "*.crt; *.cert; *.cer; *.pem; *.der"); |
|
564 fp.appendFilters(nsIFilePicker.filterAll); |
|
565 if (fp.show() == nsIFilePicker.returnOK) { |
|
566 certdb.importCertsFromFile(null, fp.file, nsIX509Cert.SERVER_CERT); |
|
567 |
|
568 var certcache = Components.classes[nsNSSCertCache].createInstance(nsINSSCertCache); |
|
569 certcache.cacheAllCerts(); |
|
570 serverTreeView.loadCertsFromCache(certcache, nsIX509Cert.SERVER_CERT); |
|
571 serverTreeView.selection.clearSelection(); |
|
572 caTreeView.loadCertsFromCache(certcache, nsIX509Cert.CA_CERT); |
|
573 caTreeView.selection.clearSelection(); |
|
574 } |
|
575 } |
|
576 |
|
577 function addException() |
|
578 { |
|
579 window.openDialog('chrome://pippki/content/exceptionDialog.xul', "", |
|
580 'chrome,centerscreen,modal'); |
|
581 var certcache = Components.classes[nsNSSCertCache].createInstance(nsINSSCertCache); |
|
582 certcache.cacheAllCerts(); |
|
583 serverTreeView.loadCertsFromCache(certcache, nsIX509Cert.SERVER_CERT); |
|
584 serverTreeView.selection.clearSelection(); |
|
585 orphanTreeView.loadCertsFromCache(certcache, nsIX509Cert.UNKNOWN_CERT); |
|
586 orphanTreeView.selection.clearSelection(); |
|
587 } |
|
588 |