security/manager/pki/resources/content/certManager.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/security/manager/pki/resources/content/certManager.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,588 @@
     1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public
     1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this
     1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     1.7 +
     1.8 +const nsIFilePicker = Components.interfaces.nsIFilePicker;
     1.9 +const nsFilePicker = "@mozilla.org/filepicker;1";
    1.10 +const nsIX509CertDB = Components.interfaces.nsIX509CertDB;
    1.11 +const nsX509CertDB = "@mozilla.org/security/x509certdb;1";
    1.12 +const nsIX509Cert = Components.interfaces.nsIX509Cert;
    1.13 +const nsICertTree = Components.interfaces.nsICertTree;
    1.14 +const nsCertTree = "@mozilla.org/security/nsCertTree;1";
    1.15 +const nsIDialogParamBlock = Components.interfaces.nsIDialogParamBlock;
    1.16 +const nsDialogParamBlock = "@mozilla.org/embedcomp/dialogparam;1";
    1.17 +const nsIPKIParamBlock    = Components.interfaces.nsIPKIParamBlock;
    1.18 +const nsPKIParamBlock    = "@mozilla.org/security/pkiparamblock;1";
    1.19 +const nsINSSCertCache = Components.interfaces.nsINSSCertCache;
    1.20 +const nsNSSCertCache = "@mozilla.org/security/nsscertcache;1";
    1.21 +
    1.22 +var key;
    1.23 +
    1.24 +var selected_certs = [];
    1.25 +var selected_tree_items = [];
    1.26 +var selected_index = [];
    1.27 +var certdb;
    1.28 +
    1.29 +var caTreeView;
    1.30 +var serverTreeView;
    1.31 +var emailTreeView;
    1.32 +var userTreeView;
    1.33 +var orphanTreeView;
    1.34 +
    1.35 +function LoadCerts()
    1.36 +{
    1.37 +  window.crypto.enableSmartCardEvents = true;
    1.38 +  document.addEventListener("smartcard-insert", onSmartCardChange, false);
    1.39 +  document.addEventListener("smartcard-remove", onSmartCardChange, false);
    1.40 +
    1.41 +  certdb = Components.classes[nsX509CertDB].getService(nsIX509CertDB);
    1.42 +  var certcache = Components.classes[nsNSSCertCache].createInstance(nsINSSCertCache);
    1.43 +  
    1.44 +  certcache.cacheAllCerts();
    1.45 +
    1.46 +  caTreeView = Components.classes[nsCertTree]
    1.47 +                    .createInstance(nsICertTree);
    1.48 +  caTreeView.loadCertsFromCache(certcache, nsIX509Cert.CA_CERT);
    1.49 +  document.getElementById('ca-tree')
    1.50 +   .treeBoxObject.view = caTreeView;
    1.51 +
    1.52 +  serverTreeView = Components.classes[nsCertTree]
    1.53 +                        .createInstance(nsICertTree);
    1.54 +  serverTreeView.loadCertsFromCache(certcache, nsIX509Cert.SERVER_CERT);
    1.55 +  document.getElementById('server-tree')
    1.56 +   .treeBoxObject.view = serverTreeView;
    1.57 +
    1.58 +  emailTreeView = Components.classes[nsCertTree]
    1.59 +                       .createInstance(nsICertTree);
    1.60 +  emailTreeView.loadCertsFromCache(certcache, nsIX509Cert.EMAIL_CERT);
    1.61 +  document.getElementById('email-tree')
    1.62 +   .treeBoxObject.view = emailTreeView; 
    1.63 +
    1.64 +  userTreeView = Components.classes[nsCertTree]
    1.65 +                      .createInstance(nsICertTree);
    1.66 +  userTreeView.loadCertsFromCache(certcache, nsIX509Cert.USER_CERT);
    1.67 +  document.getElementById('user-tree')
    1.68 +   .treeBoxObject.view = userTreeView;
    1.69 +
    1.70 +  orphanTreeView = Components.classes[nsCertTree]
    1.71 +                      .createInstance(nsICertTree);
    1.72 +  orphanTreeView.loadCertsFromCache(certcache, nsIX509Cert.UNKNOWN_CERT);
    1.73 +  document.getElementById('orphan-tree')
    1.74 +   .treeBoxObject.view = orphanTreeView;
    1.75 +
    1.76 +  enableBackupAllButton();
    1.77 +}
    1.78 +
    1.79 +function enableBackupAllButton()
    1.80 +{
    1.81 +  var rowCnt = userTreeView.rowCount;
    1.82 +  var backupAllButton=document.getElementById('mine_backupAllButton');
    1.83 +  backupAllButton.disabled = (rowCnt < 1);
    1.84 +}
    1.85 +
    1.86 +function getSelectedCerts()
    1.87 +{
    1.88 +  var ca_tab = document.getElementById("ca_tab");
    1.89 +  var mine_tab = document.getElementById("mine_tab");
    1.90 +  var others_tab = document.getElementById("others_tab");
    1.91 +  var websites_tab = document.getElementById("websites_tab");
    1.92 +  var orphan_tab = document.getElementById("orphan_tab");
    1.93 +  var items = null;
    1.94 +  if (ca_tab.selected) {
    1.95 +    items = caTreeView.selection;
    1.96 +  } else if (mine_tab.selected) {
    1.97 +    items = userTreeView.selection;
    1.98 +  } else if (others_tab.selected) {
    1.99 +    items = emailTreeView.selection;
   1.100 +  } else if (websites_tab.selected) {
   1.101 +    items = serverTreeView.selection;
   1.102 +  } else if (orphan_tab.selected) {
   1.103 +    items = orphanTreeView.selection;
   1.104 +  }
   1.105 +  selected_certs = [];
   1.106 +  var cert = null;
   1.107 +  var nr = 0;
   1.108 +  if (items != null) nr = items.getRangeCount();
   1.109 +  if (nr > 0) {
   1.110 +    for (var i=0; i<nr; i++) {
   1.111 +      var o1 = {};
   1.112 +      var o2 = {};
   1.113 +      items.getRangeAt(i, o1, o2);
   1.114 +      var min = o1.value;
   1.115 +      var max = o2.value;
   1.116 +      for (var j=min; j<=max; j++) {
   1.117 +        if (ca_tab.selected) {
   1.118 +          cert = caTreeView.getCert(j);
   1.119 +        } else if (mine_tab.selected) {
   1.120 +          cert = userTreeView.getCert(j);
   1.121 +        } else if (others_tab.selected) {
   1.122 +          cert = emailTreeView.getCert(j);
   1.123 +        } else if (websites_tab.selected) {
   1.124 +          cert = serverTreeView.getCert(j);
   1.125 +        } else if (orphan_tab.selected) {
   1.126 +          cert = orphanTreeView.getCert(j);
   1.127 +        }
   1.128 +        if (cert) {
   1.129 +          var sc = selected_certs.length;
   1.130 +          selected_certs[sc] = cert;
   1.131 +          selected_index[sc] = j;
   1.132 +        }
   1.133 +      }
   1.134 +    }
   1.135 +  }
   1.136 +}
   1.137 +
   1.138 +function getSelectedTreeItems()
   1.139 +{
   1.140 +  var ca_tab = document.getElementById("ca_tab");
   1.141 +  var mine_tab = document.getElementById("mine_tab");
   1.142 +  var others_tab = document.getElementById("others_tab");
   1.143 +  var websites_tab = document.getElementById("websites_tab");
   1.144 +  var orphan_tab = document.getElementById("orphan_tab");
   1.145 +  var items = null;
   1.146 +  if (ca_tab.selected) {
   1.147 +    items = caTreeView.selection;
   1.148 +  } else if (mine_tab.selected) {
   1.149 +    items = userTreeView.selection;
   1.150 +  } else if (others_tab.selected) {
   1.151 +    items = emailTreeView.selection;
   1.152 +  } else if (websites_tab.selected) {
   1.153 +    items = serverTreeView.selection;
   1.154 +  } else if (orphan_tab.selected) {
   1.155 +    items = orphanTreeView.selection;
   1.156 +  }
   1.157 +  selected_certs = [];
   1.158 +  selected_tree_items = [];
   1.159 +  selected_index = [];
   1.160 +  var tree_item = null;
   1.161 +  var nr = 0;
   1.162 +  if (items != null) nr = items.getRangeCount();
   1.163 +  if (nr > 0) {
   1.164 +    for (var i=0; i<nr; i++) {
   1.165 +      var o1 = {};
   1.166 +      var o2 = {};
   1.167 +      items.getRangeAt(i, o1, o2);
   1.168 +      var min = o1.value;
   1.169 +      var max = o2.value;
   1.170 +      for (var j=min; j<=max; j++) {
   1.171 +        if (ca_tab.selected) {
   1.172 +          tree_item = caTreeView.getTreeItem(j);
   1.173 +        } else if (mine_tab.selected) {
   1.174 +          tree_item = userTreeView.getTreeItem(j);
   1.175 +        } else if (others_tab.selected) {
   1.176 +          tree_item = emailTreeView.getTreeItem(j);
   1.177 +        } else if (websites_tab.selected) {
   1.178 +          tree_item = serverTreeView.getTreeItem(j);
   1.179 +        } else if (orphan_tab.selected) {
   1.180 +          tree_item = orphanTreeView.getTreeItem(j);
   1.181 +        }
   1.182 +        if (tree_item) {
   1.183 +          var sc = selected_tree_items.length;
   1.184 +          selected_tree_items[sc] = tree_item;
   1.185 +          selected_index[sc] = j;
   1.186 +        }
   1.187 +      }
   1.188 +    }
   1.189 +  }
   1.190 +}
   1.191 +
   1.192 +function ca_enableButtons()
   1.193 +{
   1.194 +  var items = caTreeView.selection;
   1.195 +  var nr = items.getRangeCount();
   1.196 +  var toggle="false";
   1.197 +  if (nr == 0) {
   1.198 +    toggle="true";
   1.199 +  }
   1.200 +  var edit_toggle=toggle;
   1.201 +/*
   1.202 +  var edit_toggle="true";
   1.203 +  if (nr > 0) {
   1.204 +    for (var i=0; i<nr; i++) {
   1.205 +      var o1 = {};
   1.206 +      var o2 = {};
   1.207 +      items.getRangeAt(i, o1, o2);
   1.208 +      var min = o1.value;
   1.209 +      var max = o2.value;
   1.210 +      var stop = false;
   1.211 +      for (var j=min; j<=max; j++) {
   1.212 +        var tokenName = items.tree.view.getCellText(j, "tokencol");
   1.213 +	if (tokenName == "Builtin Object Token") { stop = true; } break;
   1.214 +      }
   1.215 +      if (stop) break;
   1.216 +    }
   1.217 +    if (i == nr) {
   1.218 +      edit_toggle="false";
   1.219 +    }
   1.220 +  }
   1.221 +*/
   1.222 +  var enableViewButton=document.getElementById('ca_viewButton');
   1.223 +  enableViewButton.setAttribute("disabled",toggle);
   1.224 +  var enableEditButton=document.getElementById('ca_editButton');
   1.225 +  enableEditButton.setAttribute("disabled",edit_toggle);
   1.226 +  var enableExportButton=document.getElementById('ca_exportButton');
   1.227 +  enableExportButton.setAttribute("disabled",toggle);
   1.228 +  var enableDeleteButton=document.getElementById('ca_deleteButton');
   1.229 +  enableDeleteButton.setAttribute("disabled",toggle);
   1.230 +}
   1.231 +
   1.232 +function mine_enableButtons()
   1.233 +{
   1.234 +  var items = userTreeView.selection;
   1.235 +  var toggle="false";
   1.236 +  if (items.getRangeCount() == 0) {
   1.237 +    toggle="true";
   1.238 +  }
   1.239 +  var enableViewButton=document.getElementById('mine_viewButton');
   1.240 +  enableViewButton.setAttribute("disabled",toggle);
   1.241 +  var enableBackupButton=document.getElementById('mine_backupButton');
   1.242 +  enableBackupButton.setAttribute("disabled",toggle);
   1.243 +  var enableDeleteButton=document.getElementById('mine_deleteButton');
   1.244 +  enableDeleteButton.setAttribute("disabled",toggle);
   1.245 +}
   1.246 +
   1.247 +function websites_enableButtons()
   1.248 +{
   1.249 +  var items = serverTreeView.selection;
   1.250 +  var count_ranges = items.getRangeCount();
   1.251 +
   1.252 +  var enable_delete = false;
   1.253 +  var enable_view = false;
   1.254 +
   1.255 +  if (count_ranges > 0) {
   1.256 +    enable_delete = true;
   1.257 +  }
   1.258 +
   1.259 +  if (count_ranges == 1) {
   1.260 +    var o1 = {};
   1.261 +    var o2 = {};
   1.262 +    items.getRangeAt(0, o1, o2); // the first range
   1.263 +    if (o1.value == o2.value) {
   1.264 +      // only a single item is selected
   1.265 +      try {
   1.266 +        var ti = serverTreeView.getTreeItem(o1.value);
   1.267 +        if (ti) {
   1.268 +          if (ti.cert) {
   1.269 +            enable_view = true;
   1.270 +          }
   1.271 +        }
   1.272 +      }
   1.273 +      catch (e) {
   1.274 +      }
   1.275 +    }
   1.276 +  }
   1.277 +
   1.278 +  var enableViewButton=document.getElementById('websites_viewButton');
   1.279 +  enableViewButton.setAttribute("disabled", !enable_view);
   1.280 +  var enableExportButton=document.getElementById('websites_exportButton');
   1.281 +  enableExportButton.setAttribute("disabled", !enable_view);
   1.282 +  var enableDeleteButton=document.getElementById('websites_deleteButton');
   1.283 +  enableDeleteButton.setAttribute("disabled", !enable_delete);
   1.284 +}
   1.285 +
   1.286 +function email_enableButtons()
   1.287 +{
   1.288 +  var items = emailTreeView.selection;
   1.289 +  var toggle="false";
   1.290 +  if (items.getRangeCount() == 0) {
   1.291 +    toggle="true";
   1.292 +  }
   1.293 +  var enableViewButton=document.getElementById('email_viewButton');
   1.294 +  enableViewButton.setAttribute("disabled",toggle);
   1.295 +  var enableEditButton=document.getElementById('email_editButton');
   1.296 +  enableEditButton.setAttribute("disabled",toggle);
   1.297 +  var enableExportButton=document.getElementById('email_exportButton');
   1.298 +  enableExportButton.setAttribute("disabled",toggle);
   1.299 +  var enableDeleteButton=document.getElementById('email_deleteButton');
   1.300 +  enableDeleteButton.setAttribute("disabled",toggle);
   1.301 +}
   1.302 +
   1.303 +function orphan_enableButtons()
   1.304 +{
   1.305 +  var items = orphanTreeView.selection;
   1.306 +  var toggle="false";
   1.307 +  if (items.getRangeCount() == 0) {
   1.308 +    toggle="true";
   1.309 +  }
   1.310 +  var enableViewButton=document.getElementById('orphan_viewButton');
   1.311 +  enableViewButton.setAttribute("disabled",toggle);
   1.312 +  var enableExportButton=document.getElementById('orphan_exportButton');
   1.313 +  enableExportButton.setAttribute("disabled",toggle);
   1.314 +  var enableDeleteButton=document.getElementById('orphan_deleteButton');
   1.315 +  enableDeleteButton.setAttribute("disabled",toggle);
   1.316 +}
   1.317 +
   1.318 +function backupCerts()
   1.319 +{
   1.320 +  getSelectedCerts();
   1.321 +  var numcerts = selected_certs.length;
   1.322 +  if (!numcerts)
   1.323 +    return;
   1.324 +  var bundle = document.getElementById("pippki_bundle");
   1.325 +  var fp = Components.classes[nsFilePicker].createInstance(nsIFilePicker);
   1.326 +  fp.init(window,
   1.327 +          bundle.getString("chooseP12BackupFileDialog"),
   1.328 +          nsIFilePicker.modeSave);
   1.329 +  fp.appendFilter(bundle.getString("file_browse_PKCS12_spec"),
   1.330 +                  "*.p12");
   1.331 +  fp.appendFilters(nsIFilePicker.filterAll);
   1.332 +  var rv = fp.show();
   1.333 +  if (rv == nsIFilePicker.returnOK || rv == nsIFilePicker.returnReplace) {
   1.334 +    certdb.exportPKCS12File(null, fp.file, 
   1.335 +                            selected_certs.length, selected_certs);
   1.336 +  }
   1.337 +}
   1.338 +
   1.339 +function backupAllCerts()
   1.340 +{
   1.341 +  // Select all rows, then call doBackup()
   1.342 +  var items = userTreeView.selection.selectAll();
   1.343 +  backupCerts();
   1.344 +}
   1.345 +
   1.346 +function editCerts()
   1.347 +{
   1.348 +  getSelectedCerts();
   1.349 +  var numcerts = selected_certs.length;
   1.350 +  if (!numcerts)
   1.351 +    return;
   1.352 +  for (var t=0; t<numcerts; t++) {
   1.353 +    var cert = selected_certs[t];
   1.354 +    var certkey = cert.dbKey;
   1.355 +    if (document.getElementById("ca_tab").selected) {
   1.356 +      window.openDialog('chrome://pippki/content/editcacert.xul', certkey,
   1.357 +                        'chrome,centerscreen,modal');
   1.358 +    } else if (document.getElementById("others_tab").selected) {
   1.359 +      window.openDialog('chrome://pippki/content/editemailcert.xul', certkey,
   1.360 +                        'chrome,centerscreen,modal');
   1.361 +    }
   1.362 +  }
   1.363 +}
   1.364 +
   1.365 +function restoreCerts()
   1.366 +{
   1.367 +  var bundle = document.getElementById("pippki_bundle");
   1.368 +  var fp = Components.classes[nsFilePicker].createInstance(nsIFilePicker);
   1.369 +  fp.init(window,
   1.370 +          bundle.getString("chooseP12RestoreFileDialog2"),
   1.371 +          nsIFilePicker.modeOpen);
   1.372 +  fp.appendFilter(bundle.getString("file_browse_PKCS12_spec"),
   1.373 +                  "*.p12; *.pfx");
   1.374 +  fp.appendFilters(nsIFilePicker.filterAll);
   1.375 +  if (fp.show() == nsIFilePicker.returnOK) {
   1.376 +    certdb.importPKCS12File(null, fp.file);
   1.377 +
   1.378 +    var certcache = Components.classes[nsNSSCertCache].createInstance(nsINSSCertCache);
   1.379 +    certcache.cacheAllCerts();
   1.380 +    userTreeView.loadCertsFromCache(certcache, nsIX509Cert.USER_CERT);
   1.381 +    userTreeView.selection.clearSelection();
   1.382 +    caTreeView.loadCertsFromCache(certcache, nsIX509Cert.CA_CERT);
   1.383 +    caTreeView.selection.clearSelection();
   1.384 +    enableBackupAllButton();
   1.385 +  }
   1.386 +}
   1.387 +
   1.388 +function exportCerts()
   1.389 +{
   1.390 +  getSelectedCerts();
   1.391 +  var numcerts = selected_certs.length;
   1.392 +  if (!numcerts)
   1.393 +    return;
   1.394 +
   1.395 +  for (var t=0; t<numcerts; t++) {
   1.396 +    exportToFile(window, selected_certs[t]);
   1.397 +  }
   1.398 +}
   1.399 +
   1.400 +function deleteCerts()
   1.401 +{
   1.402 +  getSelectedTreeItems();
   1.403 +  var numcerts = selected_tree_items.length;
   1.404 +  if (!numcerts)
   1.405 +    return;
   1.406 +
   1.407 +  var params = Components.classes[nsDialogParamBlock].createInstance(nsIDialogParamBlock);
   1.408 +
   1.409 +  var selTab = document.getElementById('certMgrTabbox').selectedItem;
   1.410 +  var selTabID = selTab.getAttribute('id');
   1.411 +  var t;
   1.412 +
   1.413 +  params.SetNumberStrings(numcerts+1);
   1.414 +
   1.415 +  if (selTabID == 'mine_tab') 
   1.416 +  {
   1.417 +    params.SetString(0, selTabID);
   1.418 +  } 
   1.419 +  else if (selTabID == "websites_tab") 
   1.420 +  {
   1.421 +    params.SetString(0, selTabID);
   1.422 +  } 
   1.423 +  else if (selTabID == "ca_tab") 
   1.424 +  {
   1.425 +    params.SetString(0, selTabID);
   1.426 +  }
   1.427 +  else if (selTabID == "others_tab") 
   1.428 +  {
   1.429 +    params.SetString(0, selTabID);
   1.430 +  }
   1.431 +  else if (selTabID == "orphan_tab") 
   1.432 +  {
   1.433 +    params.SetString(0, selTabID);
   1.434 +  }
   1.435 +  else
   1.436 +  {
   1.437 +    return;
   1.438 +  }
   1.439 +
   1.440 +  params.SetInt(0,numcerts);
   1.441 +  for (t=0; t<numcerts; t++) 
   1.442 +  {
   1.443 +    var tree_item = selected_tree_items[t];
   1.444 +    var c = tree_item.cert;
   1.445 +    if (!c) {
   1.446 +      params.SetString(t+1, tree_item.hostPort);
   1.447 +    }
   1.448 +    else {
   1.449 +      params.SetString(t+1, c.commonName);
   1.450 +    }
   1.451 +
   1.452 +  }
   1.453 +
   1.454 +  window.openDialog('chrome://pippki/content/deletecert.xul', "",
   1.455 +                    'chrome,centerscreen,modal', params);
   1.456 + 
   1.457 +  if (params.GetInt(1) == 1) {
   1.458 +    // user closed dialog with OK
   1.459 +    var treeView = null;
   1.460 +    var loadParam = null;
   1.461 +
   1.462 +    selTab = document.getElementById('certMgrTabbox').selectedItem;
   1.463 +    selTabID = selTab.getAttribute('id');
   1.464 +    if (selTabID == 'mine_tab') {
   1.465 +      treeView = userTreeView;
   1.466 +    } else if (selTabID == "others_tab") {
   1.467 +      treeView = emailTreeView;
   1.468 +    } else if (selTabID == "websites_tab") {
   1.469 +      treeView = serverTreeView;
   1.470 +    } else if (selTabID == "ca_tab") {
   1.471 +      treeView = caTreeView;
   1.472 +    } else if (selTabID == "orphan_tab") {
   1.473 +      treeView = orphanTreeView;
   1.474 +    }
   1.475 +
   1.476 +    for (t=numcerts-1; t>=0; t--)
   1.477 +    {
   1.478 +      treeView.deleteEntryObject(selected_index[t]);
   1.479 +    }
   1.480 +
   1.481 +    selected_tree_items = [];
   1.482 +    selected_index = [];
   1.483 +    treeView.selection.clearSelection();
   1.484 +    if (selTabID == 'mine_tab') {
   1.485 +      enableBackupAllButton();
   1.486 +    }
   1.487 +  }
   1.488 +}
   1.489 +
   1.490 +function viewCerts()
   1.491 +{
   1.492 +  getSelectedCerts();
   1.493 +  var numcerts = selected_certs.length;
   1.494 +  if (!numcerts)
   1.495 +    return;
   1.496 +
   1.497 +  for (var t=0; t<numcerts; t++) {
   1.498 +    viewCertHelper(window, selected_certs[t]);
   1.499 +  }
   1.500 +}
   1.501 +
   1.502 +function addCACerts()
   1.503 +{
   1.504 +  var bundle = document.getElementById("pippki_bundle");
   1.505 +  var fp = Components.classes[nsFilePicker].createInstance(nsIFilePicker);
   1.506 +  fp.init(window,
   1.507 +          bundle.getString("importCACertsPrompt"),
   1.508 +          nsIFilePicker.modeOpen);
   1.509 +  fp.appendFilter(bundle.getString("file_browse_Certificate_spec"),
   1.510 +                  "*.crt; *.cert; *.cer; *.pem; *.der");
   1.511 +  fp.appendFilters(nsIFilePicker.filterAll);
   1.512 +  if (fp.show() == nsIFilePicker.returnOK) {
   1.513 +    certdb.importCertsFromFile(null, fp.file, nsIX509Cert.CA_CERT);
   1.514 +    caTreeView.loadCerts(nsIX509Cert.CA_CERT);
   1.515 +    caTreeView.selection.clearSelection();
   1.516 +  }
   1.517 +}
   1.518 +
   1.519 +function onSmartCardChange()
   1.520 +{
   1.521 +  var certcache = Components.classes[nsNSSCertCache].createInstance(nsINSSCertCache);
   1.522 +  // We've change the state of the smart cards inserted or removed
   1.523 +  // that means the available certs may have changed. Update the display
   1.524 +  certcache.cacheAllCerts();
   1.525 +  userTreeView.loadCertsFromCache(certcache, nsIX509Cert.USER_CERT);
   1.526 +  userTreeView.selection.clearSelection();
   1.527 +  caTreeView.loadCertsFromCache(certcache, nsIX509Cert.CA_CERT);
   1.528 +  caTreeView.selection.clearSelection();
   1.529 +  serverTreeView.loadCertsFromCache(certcache, nsIX509Cert.SERVER_CERT);
   1.530 +  serverTreeView.selection.clearSelection();
   1.531 +  emailTreeView.loadCertsFromCache(certcache, nsIX509Cert.EMAIL_CERT);
   1.532 +  emailTreeView.selection.clearSelection();
   1.533 +  orphanTreeView.loadCertsFromCache(certcache, nsIX509Cert.UNKNOWN_CERT);
   1.534 +  orphanTreeView.selection.clearSelection();
   1.535 +}
   1.536 +
   1.537 +function addEmailCert()
   1.538 +{
   1.539 +  var bundle = document.getElementById("pippki_bundle");
   1.540 +  var fp = Components.classes[nsFilePicker].createInstance(nsIFilePicker);
   1.541 +  fp.init(window,
   1.542 +          bundle.getString("importEmailCertPrompt"),
   1.543 +          nsIFilePicker.modeOpen);
   1.544 +  fp.appendFilter(bundle.getString("file_browse_Certificate_spec"),
   1.545 +                  "*.crt; *.cert; *.cer; *.pem; *.der");
   1.546 +  fp.appendFilters(nsIFilePicker.filterAll);
   1.547 +  if (fp.show() == nsIFilePicker.returnOK) {
   1.548 +    certdb.importCertsFromFile(null, fp.file, nsIX509Cert.EMAIL_CERT);
   1.549 +    var certcache = Components.classes[nsNSSCertCache].createInstance(nsINSSCertCache);
   1.550 +    certcache.cacheAllCerts();
   1.551 +    emailTreeView.loadCertsFromCache(certcache, nsIX509Cert.EMAIL_CERT);
   1.552 +    emailTreeView.selection.clearSelection();
   1.553 +    caTreeView.loadCertsFromCache(certcache, nsIX509Cert.CA_CERT);
   1.554 +    caTreeView.selection.clearSelection();
   1.555 +  }
   1.556 +}
   1.557 +
   1.558 +function addWebSiteCert()
   1.559 +{
   1.560 +  var bundle = document.getElementById("pippki_bundle");
   1.561 +  var fp = Components.classes[nsFilePicker].createInstance(nsIFilePicker);
   1.562 +  fp.init(window,
   1.563 +          bundle.getString("importServerCertPrompt"),
   1.564 +          nsIFilePicker.modeOpen);
   1.565 +  fp.appendFilter(bundle.getString("file_browse_Certificate_spec"),
   1.566 +                  "*.crt; *.cert; *.cer; *.pem; *.der");
   1.567 +  fp.appendFilters(nsIFilePicker.filterAll);
   1.568 +  if (fp.show() == nsIFilePicker.returnOK) {
   1.569 +    certdb.importCertsFromFile(null, fp.file, nsIX509Cert.SERVER_CERT);
   1.570 +
   1.571 +    var certcache = Components.classes[nsNSSCertCache].createInstance(nsINSSCertCache);
   1.572 +    certcache.cacheAllCerts();
   1.573 +    serverTreeView.loadCertsFromCache(certcache, nsIX509Cert.SERVER_CERT);
   1.574 +    serverTreeView.selection.clearSelection();
   1.575 +    caTreeView.loadCertsFromCache(certcache, nsIX509Cert.CA_CERT);
   1.576 +    caTreeView.selection.clearSelection();
   1.577 +  }
   1.578 +}
   1.579 +
   1.580 +function addException()
   1.581 +{
   1.582 +  window.openDialog('chrome://pippki/content/exceptionDialog.xul', "",
   1.583 +                    'chrome,centerscreen,modal');
   1.584 +  var certcache = Components.classes[nsNSSCertCache].createInstance(nsINSSCertCache);
   1.585 +  certcache.cacheAllCerts();
   1.586 +  serverTreeView.loadCertsFromCache(certcache, nsIX509Cert.SERVER_CERT);
   1.587 +  serverTreeView.selection.clearSelection();
   1.588 +  orphanTreeView.loadCertsFromCache(certcache, nsIX509Cert.UNKNOWN_CERT);
   1.589 +  orphanTreeView.selection.clearSelection();
   1.590 +}
   1.591 +

mercurial