home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 December / PCWorld_2005-12_cd.bin / komunikace / netscape / nsb-install-8-0.exe / chrome / pippki.jar / content / pippki / certManager.js < prev    next >
Text File  |  2005-09-26  |  16KB  |  477 lines

  1. /*
  2.  * The contents of this file are subject to the Mozilla Public
  3.  * License Version 1.1 (the "License"); you may not use this file
  4.  * except in compliance with the License. You may obtain a copy of
  5.  * the License at http://www.mozilla.org/MPL/
  6.  *
  7.  * Software distributed under the License is distributed on an "AS
  8.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  9.  * implied. See the License for the specific language governing
  10.  * rights and limitations under the License.
  11.  *
  12.  * The Original Code is mozilla.org code.
  13.  *
  14.  * The Initial Developer of the Original Code is Netscape
  15.  * Communications Corporation.  Portions created by Netscape are
  16.  * Copyright (C) 2001 Netscape Communications Corporation. All
  17.  * Rights Reserved.
  18.  *
  19.  * Contributor(s):
  20.  *  Bob Lord <lord@netscape.com>
  21.  *  Ian McGreer <mcgreer@netscape.com>
  22.  */
  23.  
  24. const nsIFilePicker = Components.interfaces.nsIFilePicker;
  25. const nsFilePicker = "@mozilla.org/filepicker;1";
  26. const nsIX509CertDB = Components.interfaces.nsIX509CertDB;
  27. const nsX509CertDB = "@mozilla.org/security/x509certdb;1";
  28. const nsIX509Cert = Components.interfaces.nsIX509Cert;
  29. const nsICertTree = Components.interfaces.nsICertTree;
  30. const nsCertTree = "@mozilla.org/security/nsCertTree;1";
  31. const nsIDialogParamBlock = Components.interfaces.nsIDialogParamBlock;
  32. const nsDialogParamBlock = "@mozilla.org/embedcomp/dialogparam;1";
  33. const nsIPKIParamBlock    = Components.interfaces.nsIPKIParamBlock;
  34. const nsPKIParamBlock    = "@mozilla.org/security/pkiparamblock;1";
  35. const nsINSSCertCache = Components.interfaces.nsINSSCertCache;
  36. const nsNSSCertCache = "@mozilla.org/security/nsscertcache;1";
  37.  
  38. var key;
  39.  
  40. var selected_certs = [];
  41. var selected_cert_index = [];
  42. var certdb;
  43.  
  44. var caTreeView;
  45. var serverTreeView;
  46. var emailTreeView;
  47. var userTreeView;
  48.  
  49. function LoadCerts()
  50. {
  51.   certdb = Components.classes[nsX509CertDB].getService(nsIX509CertDB);
  52.   var certcache = Components.classes[nsNSSCertCache].createInstance(nsINSSCertCache);
  53.   
  54.   certcache.cacheAllCerts();
  55.  
  56.   caTreeView = Components.classes[nsCertTree]
  57.                     .createInstance(nsICertTree);
  58.   caTreeView.loadCertsFromCache(certcache, nsIX509Cert.CA_CERT);
  59.   document.getElementById('ca-tree')
  60.    .treeBoxObject.view = caTreeView;
  61.  
  62.   serverTreeView = Components.classes[nsCertTree]
  63.                         .createInstance(nsICertTree);
  64.   serverTreeView.loadCertsFromCache(certcache, nsIX509Cert.SERVER_CERT);
  65.   document.getElementById('server-tree')
  66.    .treeBoxObject.view = serverTreeView;
  67.  
  68.   emailTreeView = Components.classes[nsCertTree]
  69.                        .createInstance(nsICertTree);
  70.   emailTreeView.loadCertsFromCache(certcache, nsIX509Cert.EMAIL_CERT);
  71.   document.getElementById('email-tree')
  72.    .treeBoxObject.view = emailTreeView; 
  73.  
  74.   userTreeView = Components.classes[nsCertTree]
  75.                       .createInstance(nsICertTree);
  76.   userTreeView.loadCertsFromCache(certcache, nsIX509Cert.USER_CERT);
  77.   document.getElementById('user-tree')
  78.    .treeBoxObject.view = userTreeView;
  79.  
  80.   var rowCnt = userTreeView.rowCount;
  81.   var enableBackupAllButton=document.getElementById('mine_backupAllButton');
  82.   if(rowCnt < 1) {
  83.     enableBackupAllButton.setAttribute("disabled",true);
  84.   } else  {
  85.     enableBackupAllButton.setAttribute("enabled",true);
  86.   }
  87.  
  88.   if (certdb.isOcspOn) {
  89.     document.getElementById('ocsp_info').removeAttribute("hidden");
  90.   }
  91. }
  92.  
  93. function getSelectedTab()
  94. {
  95.   var selTab = document.getElementById('certMgrTabbox').selectedItem;
  96.   var selTabID = selTab.getAttribute('id');
  97.   if (selTabID == 'mine_tab') {
  98.     key = "my_certs";
  99.   } else if (selTabID == "others_tab") {
  100.     key = "others_certs";
  101.   } else if (selTabID == "websites_tab") {
  102.     key = "web_certs";
  103.   } else if (selTabID == "ca_tab") {
  104.     key = "ca_certs";
  105.   }  
  106.   return key;
  107. }
  108.  
  109.  
  110. function doHelpButton() {
  111.    var uri = getSelectedTab();
  112.    openHelp(uri);
  113. }
  114.  
  115.  
  116. function getSelectedCerts()
  117. {
  118.   var ca_tab = document.getElementById("ca_tab");
  119.   var mine_tab = document.getElementById("mine_tab");
  120.   var others_tab = document.getElementById("others_tab");
  121.   var websites_tab = document.getElementById("websites_tab");
  122.   var items = null;
  123.   if (ca_tab.selected) {
  124.     items = caTreeView.selection;
  125.   } else if (mine_tab.selected) {
  126.     items = userTreeView.selection;
  127.   } else if (others_tab.selected) {
  128.     items = emailTreeView.selection;
  129.   } else if (websites_tab.selected) {
  130.     items = serverTreeView.selection;
  131.   }
  132.   selected_certs = [];
  133.   var cert = null;
  134.   var nr = 0;
  135.   if (items != null) nr = items.getRangeCount();
  136.   if (nr > 0) {
  137.     for (var i=0; i<nr; i++) {
  138.       var o1 = {};
  139.       var o2 = {};
  140.       items.getRangeAt(i, o1, o2);
  141.       var min = o1.value;
  142.       var max = o2.value;
  143.       for (var j=min; j<=max; j++) {
  144.         if (ca_tab.selected) {
  145.           cert = caTreeView.getCert(j);
  146.         } else if (mine_tab.selected) {
  147.           cert = userTreeView.getCert(j);
  148.         } else if (others_tab.selected) {
  149.           cert = emailTreeView.getCert(j);
  150.         } else if (websites_tab.selected) {
  151.           cert = serverTreeView.getCert(j);
  152.         }
  153.         if (cert) {
  154.           var sc = selected_certs.length;
  155.           selected_certs[sc] = cert;
  156.           selected_cert_index[sc] = j;
  157.         }
  158.       }
  159.     }
  160.   }
  161. }
  162.  
  163. function ca_enableButtons()
  164. {
  165.   var items = caTreeView.selection;
  166.   var nr = items.getRangeCount();
  167.   var toggle="false";
  168.   if (nr == 0) {
  169.     toggle="true";
  170.   }
  171.   var edit_toggle=toggle;
  172. /*
  173.   var edit_toggle="true";
  174.   if (nr > 0) {
  175.     for (var i=0; i<nr; i++) {
  176.       var o1 = {};
  177.       var o2 = {};
  178.       items.getRangeAt(i, o1, o2);
  179.       var min = o1.value;
  180.       var max = o2.value;
  181.       var stop = false;
  182.       for (var j=min; j<=max; j++) {
  183.         var tokenName = items.tree.view.getCellText(j, "tokencol");
  184.     if (tokenName == "Builtin Object Token") { stop = true; } break;
  185.       }
  186.       if (stop) break;
  187.     }
  188.     if (i == nr) {
  189.       edit_toggle="false";
  190.     }
  191.   }
  192. */
  193.   var enableViewButton=document.getElementById('ca_viewButton');
  194.   enableViewButton.setAttribute("disabled",toggle);
  195.   var enableEditButton=document.getElementById('ca_editButton');
  196.   enableEditButton.setAttribute("disabled",edit_toggle);
  197.   var enableDeleteButton=document.getElementById('ca_deleteButton');
  198.   enableDeleteButton.setAttribute("disabled",toggle);
  199. }
  200.  
  201. function mine_enableButtons()
  202. {
  203.   var items = userTreeView.selection;
  204.   var toggle="false";
  205.   if (items.getRangeCount() == 0) {
  206.     toggle="true";
  207.   }
  208.   var enableViewButton=document.getElementById('mine_viewButton');
  209.   enableViewButton.setAttribute("disabled",toggle);
  210.   var enableBackupButton=document.getElementById('mine_backupButton');
  211.   enableBackupButton.setAttribute("disabled",toggle);
  212.   var enableDeleteButton=document.getElementById('mine_deleteButton');
  213.   enableDeleteButton.setAttribute("disabled",toggle);
  214. }
  215.  
  216. function websites_enableButtons()
  217. {
  218.   var items = serverTreeView.selection;
  219.   var toggle="false";
  220.   if (items.getRangeCount() == 0) {
  221.     toggle="true";
  222.   }
  223.   var enableViewButton=document.getElementById('websites_viewButton');
  224.   enableViewButton.setAttribute("disabled",toggle);
  225.   var enableEditButton=document.getElementById('websites_editButton');
  226.   enableEditButton.setAttribute("disabled",toggle);
  227.   var enableDeleteButton=document.getElementById('websites_deleteButton');
  228.   enableDeleteButton.setAttribute("disabled",toggle);
  229. }
  230.  
  231. function email_enableButtons()
  232. {
  233.   var items = emailTreeView.selection;
  234.   var toggle="false";
  235.   if (items.getRangeCount() == 0) {
  236.     toggle="true";
  237.   }
  238.   var enableViewButton=document.getElementById('email_viewButton');
  239.   enableViewButton.setAttribute("disabled",toggle);
  240.   var enableEditButton=document.getElementById('email_editButton');
  241.   enableEditButton.setAttribute("disabled",toggle);
  242.   var enableDeleteButton=document.getElementById('email_deleteButton');
  243.   enableDeleteButton.setAttribute("disabled",toggle);
  244. }
  245.  
  246. function backupCerts()
  247. {
  248.   getSelectedCerts();
  249.   var numcerts = selected_certs.length;
  250.   if (!numcerts)
  251.     return;
  252.   var bundle = srGetStrBundle("chrome://pippki/locale/pippki.properties");
  253.   var fp = Components.classes[nsFilePicker].createInstance(nsIFilePicker);
  254.   fp.init(window,
  255.           bundle.GetStringFromName("chooseP12BackupFileDialog"),
  256.           nsIFilePicker.modeSave);
  257.   fp.appendFilter(bundle.GetStringFromName("file_browse_PKCS12_spec"),
  258.                   "*.p12");
  259.   fp.appendFilters(nsIFilePicker.filterAll);
  260.   var rv = fp.show();
  261.   if (rv == nsIFilePicker.returnOK || rv == nsIFilePicker.returnReplace) {
  262.     certdb.exportPKCS12File(null, fp.file, 
  263.                             selected_certs.length, selected_certs);
  264.   }
  265. }
  266.  
  267. function backupAllCerts()
  268. {
  269.   // Select all rows, then call doBackup()
  270.   var items = userTreeView.selection.selectAll();
  271.   backupCerts();
  272. }
  273.  
  274. function editCerts()
  275. {
  276.   getSelectedCerts();
  277.   var numcerts = selected_certs.length;
  278.   if (!numcerts)
  279.     return;
  280.   for (var t=0; t<numcerts; t++) {
  281.     var cert = selected_certs[t];
  282.     var certkey = cert.dbKey;
  283.     var ca_tab = document.getElementById("ca_tab");
  284.     var others_tab = document.getElementById("others_tab");
  285.     if (ca_tab.selected) {
  286.       window.openDialog('chrome://pippki/content/editcacert.xul', certkey,
  287.                         'chrome,centerscreen,modal');
  288.     } else if (others_tab.selected) {
  289.       window.openDialog('chrome://pippki/content/editemailcert.xul', certkey,
  290.                         'chrome,centerscreen,modal');
  291.     } else {
  292.       window.openDialog('chrome://pippki/content/editsslcert.xul', certkey,
  293.                         'chrome,centerscreen,modal');
  294.     }
  295.   }
  296. }
  297.  
  298. function restoreCerts()
  299. {
  300.   var bundle = srGetStrBundle("chrome://pippki/locale/pippki.properties");
  301.   var fp = Components.classes[nsFilePicker].createInstance(nsIFilePicker);
  302.   fp.init(window,
  303.           bundle.GetStringFromName("chooseP12RestoreFileDialog"),
  304.           nsIFilePicker.modeOpen);
  305.   fp.appendFilter(bundle.GetStringFromName("file_browse_PKCS12_spec"),
  306.                   "*.p12; *.pfx");
  307.   fp.appendFilters(nsIFilePicker.filterAll);
  308.   if (fp.show() == nsIFilePicker.returnOK) {
  309.     certdb.importPKCS12File(null, fp.file);
  310.  
  311.     var certcache = Components.classes[nsNSSCertCache].createInstance(nsINSSCertCache);
  312.     certcache.cacheAllCerts();
  313.     userTreeView.loadCertsFromCache(certcache, nsIX509Cert.USER_CERT);
  314.     userTreeView.selection.clearSelection();
  315.     caTreeView.loadCertsFromCache(certcache, nsIX509Cert.CA_CERT);
  316.     caTreeView.selection.clearSelection();
  317.   }
  318. }
  319.  
  320. function deleteCerts()
  321. {
  322.   getSelectedCerts();
  323.   var numcerts = selected_certs.length;
  324.   if (!numcerts)
  325.     return;
  326.  
  327.   var params = Components.classes[nsDialogParamBlock].createInstance(nsIDialogParamBlock);
  328.   
  329.   var bundle = srGetStrBundle("chrome://pippki/locale/pippki.properties");
  330.   var selTab = document.getElementById('certMgrTabbox').selectedItem;
  331.   var selTabID = selTab.getAttribute('id');
  332.   var t;
  333.  
  334.   params.SetNumberStrings(numcerts+1);
  335.  
  336.   if (selTabID == 'mine_tab') 
  337.   {
  338.     params.SetString(0,bundle.GetStringFromName("deleteUserCertFlag"));
  339.   } 
  340.   else if (selTabID == "websites_tab") 
  341.   {
  342.     params.SetString(0,bundle.GetStringFromName("deleteSslCertFlag"));
  343.   } 
  344.   else if (selTabID == "ca_tab") 
  345.   {
  346.     params.SetString(0,bundle.GetStringFromName("deleteCaCertFlag"));
  347.   }
  348.   else if (selTabID == "others_tab") 
  349.   {
  350.     params.SetString(0,bundle.GetStringFromName("deleteEmailCertFlag"));
  351.   }
  352.   else
  353.   {
  354.     return;
  355.   }
  356.  
  357.   params.SetInt(0,numcerts);
  358.   for (t=0; t<numcerts; t++) 
  359.   {
  360.     var cert = selected_certs[t];
  361.     params.SetString(t+1, cert.dbKey);  
  362.   }
  363.   
  364.   // The dialog will modify the params.
  365.   // Every param item where the corresponding cert could get deleted,
  366.   // will still contain the db key.
  367.   // Certs which could not get deleted, will have their corrensponding
  368.   // param string erased.
  369.   window.openDialog('chrome://pippki/content/deletecert.xul', "",
  370.                     'chrome,centerscreen,modal', params);
  371.  
  372.   if (params.GetInt(1) == 1) {
  373.     // user closed dialog with OK
  374.     var treeView = null;
  375.     var loadParam = null;
  376.  
  377.     selTab = document.getElementById('certMgrTabbox').selectedItem;
  378.     selTabID = selTab.getAttribute('id');
  379.     if (selTabID == 'mine_tab') {
  380.       treeView = userTreeView;
  381.       loadParam = nsIX509Cert.USER_CERT;
  382.     } else if (selTabID == "others_tab") {
  383.       treeView = emailTreeView;
  384.       loadParam = nsIX509Cert.EMAIL_CERT;
  385.     } else if (selTabID == "websites_tab") {
  386.       treeView = serverTreeView;
  387.       loadParam = nsIX509Cert.SERVER_CERT;
  388.     } else if (selTabID == "ca_tab") {
  389.       treeView = caTreeView;
  390.       loadParam = nsIX509Cert.CA_CERT;
  391.     }
  392.  
  393.     for (t=numcerts-1; t>=0; t--)
  394.     {
  395.       var s = params.GetString(t+1);
  396.       if (s.length) {
  397.         // This cert was deleted.
  398.         treeView.removeCert(selected_cert_index[t]);
  399.       }
  400.     }
  401.  
  402.     treeView.selection.clearSelection();
  403.   }
  404. }
  405.  
  406. function viewCerts()
  407. {
  408.   getSelectedCerts();
  409.   var numcerts = selected_certs.length;
  410.   if (!numcerts)
  411.     return;
  412.  
  413.   for (var t=0; t<numcerts; t++) {
  414.     viewCertHelper(window, selected_certs[t]);
  415.   }
  416. }
  417.  
  418. function addCACerts()
  419. {
  420.   var bundle = srGetStrBundle("chrome://pippki/locale/pippki.properties");
  421.   var fp = Components.classes[nsFilePicker].createInstance(nsIFilePicker);
  422.   fp.init(window,
  423.           bundle.GetStringFromName("importCACertsPrompt"),
  424.           nsIFilePicker.modeOpen);
  425.   fp.appendFilter(bundle.GetStringFromName("file_browse_Certificate_spec"),
  426.                   "*.crt; *.cert; *.cer; *.pem; *.der");
  427.   fp.appendFilters(nsIFilePicker.filterAll);
  428.   if (fp.show() == nsIFilePicker.returnOK) {
  429.     certdb.importCertsFromFile(null, fp.file, nsIX509Cert.CA_CERT);
  430.     caTreeView.loadCerts(nsIX509Cert.CA_CERT);
  431.     caTreeView.selection.clearSelection();
  432.   }
  433. }
  434.  
  435. function addEmailCert()
  436. {
  437.   var bundle = srGetStrBundle("chrome://pippki/locale/pippki.properties");
  438.   var fp = Components.classes[nsFilePicker].createInstance(nsIFilePicker);
  439.   fp.init(window,
  440.           bundle.GetStringFromName("importEmailCertPrompt"),
  441.           nsIFilePicker.modeOpen);
  442.   fp.appendFilter(bundle.GetStringFromName("file_browse_Certificate_spec"),
  443.                   "*.crt; *.cert; *.cer; *.pem; *.der");
  444.   fp.appendFilters(nsIFilePicker.filterAll);
  445.   if (fp.show() == nsIFilePicker.returnOK) {
  446.     certdb.importCertsFromFile(null, fp.file, nsIX509Cert.EMAIL_CERT);
  447.     var certcache = Components.classes[nsNSSCertCache].createInstance(nsINSSCertCache);
  448.     certcache.cacheAllCerts();
  449.     emailTreeView.loadCertsFromCache(certcache, nsIX509Cert.EMAIL_CERT);
  450.     emailTreeView.selection.clearSelection();
  451.     caTreeView.loadCertsFromCache(certcache, nsIX509Cert.CA_CERT);
  452.     caTreeView.selection.clearSelection();
  453.   }
  454. }
  455.  
  456. function addWebSiteCert()
  457. {
  458.   var bundle = srGetStrBundle("chrome://pippki/locale/pippki.properties");
  459.   var fp = Components.classes[nsFilePicker].createInstance(nsIFilePicker);
  460.   fp.init(window,
  461.           bundle.GetStringFromName("importWebSiteCertPrompt"),
  462.           nsIFilePicker.modeOpen);
  463.   fp.appendFilter(bundle.GetStringFromName("file_browse_Certificate_spec"),
  464.                   "*.crt; *.cert; *.cer; *.pem; *.der");
  465.   fp.appendFilters(nsIFilePicker.filterAll);
  466.   if (fp.show() == nsIFilePicker.returnOK) {
  467.     certdb.importCertsFromFile(null, fp.file, nsIX509Cert.SERVER_CERT);
  468.  
  469.     var certcache = Components.classes[nsNSSCertCache].createInstance(nsINSSCertCache);
  470.     certcache.cacheAllCerts();
  471.     serverTreeView.loadCertsFromCache(certcache, nsIX509Cert.SERVER_CERT);
  472.     serverTreeView.selection.clearSelection();
  473.     caTreeView.loadCertsFromCache(certcache, nsIX509Cert.CA_CERT);
  474.     caTreeView.selection.clearSelection();
  475.   }
  476. }
  477.