home *** CD-ROM | disk | FTP | other *** search
/ PC World 2003 May / PCWorld_2003-05_cd.bin / Komunik / phoenix / chrome / pippki.jar / content / pippki / crlManager.js < prev    next >
Text File  |  2002-11-13  |  8KB  |  224 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.  *  David Drinan <ddrinan@netscape.com>
  21.  */
  22.  
  23. const nsICRLManager = Components.interfaces.nsICRLManager;
  24. const nsCRLManager  = "@mozilla.org/security/crlmanager;1";
  25. const nsICRLInfo = Components.interfaces.nsICRLInfo;
  26. const nsISupportsArray = Components.interfaces.nsISupportsArray;
  27. const nsIPKIParamBlock    = Components.interfaces.nsIPKIParamBlock;
  28. const nsPKIParamBlock    = "@mozilla.org/security/pkiparamblock;1";
  29. const nsIPref             = Components.interfaces.nsIPref;
  30.  
  31. var crlManager;
  32. var crls;
  33. var prefs;
  34.  
  35. var autoupdateEnabledBaseString   = "security.crl.autoupdate.enable.";
  36. var autoupdateTimeTypeBaseString  = "security.crl.autoupdate.timingType.";
  37. var autoupdateTimeBaseString      = "security.crl.autoupdate.nextInstant.";
  38. var autoupdateURLBaseString       = "security.crl.autoupdate.url.";
  39. var autoupdateErrCntBaseString    = "security.crl.autoupdate.errCount.";
  40. var autoupdateErrDetailBaseString = "security.crl.autoupdate.errDetail.";
  41. var autoupdateDayCntString        = "security.crl.autoupdate.dayCnt.";
  42. var autoupdateFreqCntString       = "security.crl.autoupdate.freqCnt.";
  43.  
  44. function onLoad()
  45. {
  46.   var crlEntry;
  47.   var i;
  48.  
  49.   crlManager = Components.classes[nsCRLManager].getService(nsICRLManager);
  50.   prefs = Components.classes["@mozilla.org/preferences;1"].getService(nsIPref);
  51.   crls = crlManager.getCrls();
  52.   var bundle = srGetStrBundle("chrome://pippki/locale/pippki.properties");
  53.   var autoupdateEnabledString;
  54.   var autoupdateErrCntString;
  55.  
  56.   for (i=0; i<crls.length; i++) {
  57.     crlEntry = crls.queryElementAt(i, nsICRLInfo);
  58.     var org = crlEntry.organization;
  59.     var orgUnit = crlEntry.organizationalUnit;
  60.     var lastUpdate = crlEntry.lastUpdateLocale;
  61.     var nextUpdate = crlEntry.nextUpdateLocale;
  62.     autoupdateEnabledString    = autoupdateEnabledBaseString + crlEntry.nameInDb;
  63.     autoupdateErrCntString    = autoupdateErrCntBaseString + crlEntry.nameInDb;
  64.     var enabled = false;
  65.     var enabledStr = bundle.GetStringFromName("crlAutoupdateNotEnabled");
  66.     var status = "";
  67.     try{
  68.       enabled = prefs.GetBoolPref(autoupdateEnabledString)
  69.       if(enabled){
  70.         enabledStr = bundle.GetStringFromName("crlAutoupdateEnabled");
  71.       }
  72.       var cnt;
  73.       cnt = prefs.GetIntPref(autoupdateErrCntString);
  74.       if(cnt > 0){
  75.         status = bundle.GetStringFromName("crlAutoupdateFailed");
  76.       } else {
  77.         status = bundle.GetStringFromName("crlAutoupdateOk");
  78.       }
  79.     }catch(exception){}
  80.     
  81.     AddItem("crlList", [org, orgUnit, lastUpdate, nextUpdate, enabledStr, status], "crltree_", i);
  82.   }
  83. }
  84.  
  85. function AddItem(children,cells,prefix,idfier)
  86. {
  87.   var kids = document.getElementById(children);
  88.   var item  = document.createElement("treeitem");
  89.   var row   = document.createElement("treerow");
  90.   for(var i = 0; i < cells.length; i++)
  91.   {
  92.     var cell  = document.createElement("treecell");
  93.     cell.setAttribute("class", "propertylist");
  94.     cell.setAttribute("label", cells[i])
  95.     row.appendChild(cell);
  96.   }
  97.   item.appendChild(row);
  98.   item.setAttribute("id",prefix + idfier);
  99.   kids.appendChild(item);
  100. }
  101.  
  102. function DeleteCrlSelected() {
  103.   var crlEntry;
  104.  
  105.   // delete selected item
  106.   var crltree = document.getElementById("crltree");
  107.   var i = crltree.currentIndex;
  108.   if(i<0){
  109.     return;
  110.   }
  111.   crlEntry = crls.queryElementAt(i, nsICRLInfo);
  112.     
  113.   var autoupdateEnabled = false;
  114.   var autoupdateParamAvailable = false;
  115.   var id = crlEntry.nameInDb;
  116.   
  117.   //First, check if autoupdate was enabled for this crl
  118.   try {
  119.     autoupdateEnabled = prefs.GetBoolPref(autoupdateEnabledBaseString + id);
  120.     //Note, if the pref is not present, we get an exception right here,
  121.     //and autoupdateEnabled remains false
  122.     autoupdateParamAvailable = true;
  123.     prefs.ClearUserPref(autoupdateEnabledBaseString + id);
  124.     prefs.ClearUserPref(autoupdateTimeTypeBaseString + id);
  125.     prefs.ClearUserPref(autoupdateTimeBaseString + id);
  126.     prefs.ClearUserPref(autoupdateURLBaseString + id);
  127.     prefs.ClearUserPref(autoupdateDayCntString + id);
  128.     prefs.ClearUserPref(autoupdateFreqCntString + id);
  129.     prefs.ClearUserPref(autoupdateErrCntBaseString + id);
  130.     prefs.ClearUserPref(autoupdateErrDetailBaseString + id);
  131.   } catch(Exception){}
  132.  
  133.   //Once we have deleted the prefs that can be deleted, we save the 
  134.   //file if relevant, restart the scheduler, and once we are successful 
  135.   //in doind that, we try to delete the crl 
  136.   try{
  137.     if(autoupdateParamAvailable){
  138.       prefs.savePrefFile(null);
  139.     }
  140.  
  141.     if(autoupdateEnabled){
  142.       crlManager.rescheduleCRLAutoUpdate();
  143.     }
  144.           
  145.     // Now, try to delete it
  146.     crlManager.deleteCrl(i);
  147.     DeleteItemSelected("crltree", "crltree_", "crlList");
  148.     //To do: If delete fails, we should be able to retrieve the deleted
  149.     //settings
  150.     //XXXXXXXXXXXXXXXXXXXXX
  151.   
  152.   }catch(exception) {
  153.     //To Do: Possibly show an error ...
  154.     //XXXXXXXXXXXX
  155.   }
  156.  
  157.   EnableCrlActions();
  158. }
  159.  
  160. function EnableCrlActions() {
  161.   var tree = document.getElementById("crltree");
  162.   if (tree.treeBoxObject.selection.count) {
  163.     document.getElementById("deleteCrl").removeAttribute("disabled");
  164.     document.getElementById("editPrefs").removeAttribute("disabled");
  165.     document.getElementById("updateCRL").removeAttribute("disabled");
  166.   } else {
  167.     document.getElementById("deleteCrl").setAttribute("disabled", "true");
  168.     document.getElementById("editPrefs").setAttribute("disabled", "true");
  169.     document.getElementById("updateCRL").setAttribute("disabled", "true");
  170.   }
  171. }
  172.  
  173. function DeleteItemSelected(tree, prefix, kids) {
  174.   var i;
  175.   var delnarray = [];
  176.   var rv = "";
  177.   var cookietree = document.getElementById(tree);
  178.   var rangeCount = cookietree.view.selection.getRangeCount();
  179.   for(i = 0; i < rangeCount; ++i) 
  180.   { 
  181.     var start = {}, end = {};
  182.     cookietree.view.selection.getRangeAt(i, start, end);
  183.     for (var k = start.value; k <= end.value; ++k) {
  184.       var item = cookietree.contentView.getItemAtIndex(k);
  185.       delnarray[i] = document.getElementById(item.id);
  186.       var itemid = parseInt(item.id.substring(prefix.length, item.id.length));
  187.       rv += (itemid + ",");
  188.     }
  189.   }
  190.   for(i = 0; i < delnarray.length; i++) 
  191.   { 
  192.     document.getElementById(kids).removeChild(delnarray[i]);
  193.   }
  194.   return rv;
  195. }
  196.  
  197. function EditAutoUpdatePrefs() {
  198.   var crlEntry;
  199.  
  200.   // delete selected item
  201.   var crltree = document.getElementById("crltree");
  202.   var i = crltree.currentIndex;
  203.   if(i<0){
  204.     return;
  205.   }
  206.   crlEntry = crls.queryElementAt(i, nsICRLInfo);
  207.   var params = Components.classes[nsPKIParamBlock].createInstance(nsIPKIParamBlock);
  208.   params.setISupportAtIndex(1, crlEntry);
  209.   window.openDialog("chrome://pippki/content/pref-crlupdate.xul","",
  210.                                    "chrome,resizable=1,modal=1,dialog=1",params);
  211. }
  212.  
  213. function UpdateCRL()
  214. {
  215.   var crlEntry;
  216.   var crltree = document.getElementById("crltree");
  217.   var i = crltree.currentIndex;
  218.   if(i<0){
  219.     return;
  220.   }
  221.   crlEntry = crls.queryElementAt(i, nsICRLInfo);
  222.   crlManager.updateCRLFromURL(crlEntry.lastFetchURL, crlEntry.nameInDb);
  223. }
  224.