diff -r 000000000000 -r 6474c204b198 security/manager/pki/resources/content/certManager.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/security/manager/pki/resources/content/certManager.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,588 @@ +/* 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/. */ + +const nsIFilePicker = Components.interfaces.nsIFilePicker; +const nsFilePicker = "@mozilla.org/filepicker;1"; +const nsIX509CertDB = Components.interfaces.nsIX509CertDB; +const nsX509CertDB = "@mozilla.org/security/x509certdb;1"; +const nsIX509Cert = Components.interfaces.nsIX509Cert; +const nsICertTree = Components.interfaces.nsICertTree; +const nsCertTree = "@mozilla.org/security/nsCertTree;1"; +const nsIDialogParamBlock = Components.interfaces.nsIDialogParamBlock; +const nsDialogParamBlock = "@mozilla.org/embedcomp/dialogparam;1"; +const nsIPKIParamBlock = Components.interfaces.nsIPKIParamBlock; +const nsPKIParamBlock = "@mozilla.org/security/pkiparamblock;1"; +const nsINSSCertCache = Components.interfaces.nsINSSCertCache; +const nsNSSCertCache = "@mozilla.org/security/nsscertcache;1"; + +var key; + +var selected_certs = []; +var selected_tree_items = []; +var selected_index = []; +var certdb; + +var caTreeView; +var serverTreeView; +var emailTreeView; +var userTreeView; +var orphanTreeView; + +function LoadCerts() +{ + window.crypto.enableSmartCardEvents = true; + document.addEventListener("smartcard-insert", onSmartCardChange, false); + document.addEventListener("smartcard-remove", onSmartCardChange, false); + + certdb = Components.classes[nsX509CertDB].getService(nsIX509CertDB); + var certcache = Components.classes[nsNSSCertCache].createInstance(nsINSSCertCache); + + certcache.cacheAllCerts(); + + caTreeView = Components.classes[nsCertTree] + .createInstance(nsICertTree); + caTreeView.loadCertsFromCache(certcache, nsIX509Cert.CA_CERT); + document.getElementById('ca-tree') + .treeBoxObject.view = caTreeView; + + serverTreeView = Components.classes[nsCertTree] + .createInstance(nsICertTree); + serverTreeView.loadCertsFromCache(certcache, nsIX509Cert.SERVER_CERT); + document.getElementById('server-tree') + .treeBoxObject.view = serverTreeView; + + emailTreeView = Components.classes[nsCertTree] + .createInstance(nsICertTree); + emailTreeView.loadCertsFromCache(certcache, nsIX509Cert.EMAIL_CERT); + document.getElementById('email-tree') + .treeBoxObject.view = emailTreeView; + + userTreeView = Components.classes[nsCertTree] + .createInstance(nsICertTree); + userTreeView.loadCertsFromCache(certcache, nsIX509Cert.USER_CERT); + document.getElementById('user-tree') + .treeBoxObject.view = userTreeView; + + orphanTreeView = Components.classes[nsCertTree] + .createInstance(nsICertTree); + orphanTreeView.loadCertsFromCache(certcache, nsIX509Cert.UNKNOWN_CERT); + document.getElementById('orphan-tree') + .treeBoxObject.view = orphanTreeView; + + enableBackupAllButton(); +} + +function enableBackupAllButton() +{ + var rowCnt = userTreeView.rowCount; + var backupAllButton=document.getElementById('mine_backupAllButton'); + backupAllButton.disabled = (rowCnt < 1); +} + +function getSelectedCerts() +{ + var ca_tab = document.getElementById("ca_tab"); + var mine_tab = document.getElementById("mine_tab"); + var others_tab = document.getElementById("others_tab"); + var websites_tab = document.getElementById("websites_tab"); + var orphan_tab = document.getElementById("orphan_tab"); + var items = null; + if (ca_tab.selected) { + items = caTreeView.selection; + } else if (mine_tab.selected) { + items = userTreeView.selection; + } else if (others_tab.selected) { + items = emailTreeView.selection; + } else if (websites_tab.selected) { + items = serverTreeView.selection; + } else if (orphan_tab.selected) { + items = orphanTreeView.selection; + } + selected_certs = []; + var cert = null; + var nr = 0; + if (items != null) nr = items.getRangeCount(); + if (nr > 0) { + for (var i=0; i 0) { + for (var i=0; i 0) { + for (var i=0; i 0) { + enable_delete = true; + } + + if (count_ranges == 1) { + var o1 = {}; + var o2 = {}; + items.getRangeAt(0, o1, o2); // the first range + if (o1.value == o2.value) { + // only a single item is selected + try { + var ti = serverTreeView.getTreeItem(o1.value); + if (ti) { + if (ti.cert) { + enable_view = true; + } + } + } + catch (e) { + } + } + } + + var enableViewButton=document.getElementById('websites_viewButton'); + enableViewButton.setAttribute("disabled", !enable_view); + var enableExportButton=document.getElementById('websites_exportButton'); + enableExportButton.setAttribute("disabled", !enable_view); + var enableDeleteButton=document.getElementById('websites_deleteButton'); + enableDeleteButton.setAttribute("disabled", !enable_delete); +} + +function email_enableButtons() +{ + var items = emailTreeView.selection; + var toggle="false"; + if (items.getRangeCount() == 0) { + toggle="true"; + } + var enableViewButton=document.getElementById('email_viewButton'); + enableViewButton.setAttribute("disabled",toggle); + var enableEditButton=document.getElementById('email_editButton'); + enableEditButton.setAttribute("disabled",toggle); + var enableExportButton=document.getElementById('email_exportButton'); + enableExportButton.setAttribute("disabled",toggle); + var enableDeleteButton=document.getElementById('email_deleteButton'); + enableDeleteButton.setAttribute("disabled",toggle); +} + +function orphan_enableButtons() +{ + var items = orphanTreeView.selection; + var toggle="false"; + if (items.getRangeCount() == 0) { + toggle="true"; + } + var enableViewButton=document.getElementById('orphan_viewButton'); + enableViewButton.setAttribute("disabled",toggle); + var enableExportButton=document.getElementById('orphan_exportButton'); + enableExportButton.setAttribute("disabled",toggle); + var enableDeleteButton=document.getElementById('orphan_deleteButton'); + enableDeleteButton.setAttribute("disabled",toggle); +} + +function backupCerts() +{ + getSelectedCerts(); + var numcerts = selected_certs.length; + if (!numcerts) + return; + var bundle = document.getElementById("pippki_bundle"); + var fp = Components.classes[nsFilePicker].createInstance(nsIFilePicker); + fp.init(window, + bundle.getString("chooseP12BackupFileDialog"), + nsIFilePicker.modeSave); + fp.appendFilter(bundle.getString("file_browse_PKCS12_spec"), + "*.p12"); + fp.appendFilters(nsIFilePicker.filterAll); + var rv = fp.show(); + if (rv == nsIFilePicker.returnOK || rv == nsIFilePicker.returnReplace) { + certdb.exportPKCS12File(null, fp.file, + selected_certs.length, selected_certs); + } +} + +function backupAllCerts() +{ + // Select all rows, then call doBackup() + var items = userTreeView.selection.selectAll(); + backupCerts(); +} + +function editCerts() +{ + getSelectedCerts(); + var numcerts = selected_certs.length; + if (!numcerts) + return; + for (var t=0; t=0; t--) + { + treeView.deleteEntryObject(selected_index[t]); + } + + selected_tree_items = []; + selected_index = []; + treeView.selection.clearSelection(); + if (selTabID == 'mine_tab') { + enableBackupAllButton(); + } + } +} + +function viewCerts() +{ + getSelectedCerts(); + var numcerts = selected_certs.length; + if (!numcerts) + return; + + for (var t=0; t