home *** CD-ROM | disk | FTP | other *** search
/ PC World 2003 May / PCWorld_2003-05_cd.bin / Komunik / phoenix / chrome / pippki.jar / content / pippki / pref-crlupdate.js < prev    next >
Text File  |  2002-10-14  |  8KB  |  257 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.  *  Rangan Sen <rangansen@netscape.com>
  21.  */
  22.  
  23. const nsICRLManager = Components.interfaces.nsICRLManager;
  24. const nsCRLManager  = "@mozilla.org/security/crlmanager;1";
  25. const nsIPKIParamBlock    = Components.interfaces.nsIPKIParamBlock;
  26. const nsICRLInfo          = Components.interfaces.nsICRLInfo;
  27. const nsIPref             = Components.interfaces.nsIPref;
  28.  
  29. var crl;
  30. var bundle;
  31. var prefs;
  32. var updateTypeRadio;
  33. var enabledCheckBox;
  34. var timeBasedRadio;
  35. var freqBasedRadio;
  36. var crlManager;
  37.  
  38. var autoupdateEnabledString   = "security.crl.autoupdate.enable.";
  39. var autoupdateTimeTypeString  = "security.crl.autoupdate.timingType.";
  40. var autoupdateTimeString      = "security.crl.autoupdate.nextInstant.";
  41. var autoupdateURLString       = "security.crl.autoupdate.url.";
  42. var autoupdateErrCntString    = "security.crl.autoupdate.errCount.";
  43. var autoupdateErrDetailString = "security.crl.autoupdate.errDetail.";
  44. var autoupdateDayCntString    = "security.crl.autoupdate.dayCnt.";
  45. var autoupdateFreqCntString   = "security.crl.autoupdate.freqCnt.";
  46.  
  47. function onLoad()
  48. {
  49.   crlManager = Components.classes[nsCRLManager].getService(nsICRLManager);
  50.   var pkiParams = window.arguments[0].QueryInterface(nsIPKIParamBlock);  
  51.   var isupport = pkiParams.getISupportAtIndex(1);
  52.   crl = isupport.QueryInterface(nsICRLInfo);
  53.  
  54.   autoupdateEnabledString    = autoupdateEnabledString + crl.nameInDb;
  55.   autoupdateTimeTypeString  = autoupdateTimeTypeString + crl.nameInDb;
  56.   autoupdateTimeString      = autoupdateTimeString + crl.nameInDb;
  57.   autoupdateDayCntString    = autoupdateDayCntString + crl.nameInDb;
  58.   autoupdateFreqCntString   = autoupdateFreqCntString + crl.nameInDb;
  59.   autoupdateURLString       = autoupdateURLString + crl.nameInDb;
  60.   autoupdateErrCntString    = autoupdateErrCntString + crl.nameInDb;
  61.   autoupdateErrDetailString = autoupdateErrDetailString + crl.nameInDb;
  62.  
  63.   bundle = srGetStrBundle("chrome://pippki/locale/pippki.properties");
  64.   prefs = Components.classes["@mozilla.org/preferences;1"].getService(nsIPref);
  65.  
  66.   updateTypeRadio = document.getElementById("autoUpdateType");
  67.   enabledCheckBox = document.getElementById("enableCheckBox");
  68.   timeBasedRadio = document.getElementById("timeBasedRadio");
  69.   freqBasedRadio = document.getElementById("freqBasedRadio");
  70.  
  71.   //Read the existing prefs, if any
  72.   initializeSelection();
  73. }
  74.  
  75. function updateSelectedTimingControls()
  76. {
  77.   var freqBox = document.getElementById("nextUpdateFreq");
  78.   var timeBox = document.getElementById("nextUpdateDay");
  79.   if(updateTypeRadio.selectedItem.id == "freqBasedRadio"){
  80.     freqBox.removeAttribute("disabled");
  81.     timeBox.disabled = true;
  82.   } else {
  83.     timeBox.removeAttribute("disabled");
  84.     freqBox.disabled = true;
  85.   }
  86. }
  87.  
  88. function initializeSelection()
  89. {
  90.   var menuItemNode;
  91.   var hasAdvertisedURL = false;
  92.   var hasNextUpdate = true;
  93.  
  94.   var lastFetchMenuNode;
  95.   var advertisedMenuNode;
  96.   
  97.   try {
  98.     var isEnabled = prefs.GetBoolPref(autoupdateEnabledString);
  99.     enabledCheckBox.checked = isEnabled;
  100.   } catch(exception){
  101.     enabledCheckBox.checked = false;
  102.   }
  103.  
  104.   //Always the last fetch url, for now.
  105.   var URLDisplayed = document.getElementById("urlName"); 
  106.   URLDisplayed.value = crl.lastFetchURL;
  107.   
  108.   //Decide how many update timing types to be shown
  109.   //If no next update specified, hide the first choice. Default shows both
  110.   if(crl.nextUpdateLocale == null || crl.nextUpdateLocale.length == 0) {
  111.     timeBasedRadio.disabled = true;
  112.     hasNextUpdate = false;
  113.   }
  114.   
  115.   //Set up the initial selections based on defaults and prefs, if any
  116.   try{
  117.     var timingPref = prefs.GetIntPref(autoupdateTimeTypeString);
  118.     if(timingPref != null) {
  119.       if(timingPref == crlManager.TYPE_AUTOUPDATE_TIME_BASED) {
  120.         if(hasNextUpdate){
  121.           updateTypeRadio.selectedItem = timeBasedRadio;
  122.         }
  123.       } else {
  124.         updateTypeRadio.selectedItem = freqBasedRadio;
  125.       }
  126.     } else {
  127.       if(hasNextUpdate){
  128.         updateTypeRadio.selectedItem = timeBasedRadio;
  129.       } else {
  130.         updateTypeRadio.selectedItem = freqBasedRadio;
  131.       }
  132.     }
  133.     
  134.   }catch(exception){
  135.     if(!hasNextUpdate) {
  136.       updateTypeRadio.selectedItem = freqBasedRadio;
  137.     } else {
  138.       updateTypeRadio.selectedItem = timeBasedRadio;
  139.     }
  140.   }
  141.  
  142.   updateSelectedTimingControls();
  143.  
  144.   //Now, retrieving the day count
  145.   var timeBasedBox = document.getElementById("nextUpdateDay");
  146.   try {
  147.     var dayCnt = prefs.GetCharPref(autoupdateDayCntString);
  148.     //alert(dayCnt);
  149.     if(dayCnt != null){
  150.       timeBasedBox.value = dayCnt;
  151.     } else {
  152.       timeBasedBox.value = 1; 
  153.     }
  154.   } catch(exception) {
  155.     timeBasedBox.value = 1;
  156.   }
  157.  
  158.   var freqBasedBox = document.getElementById("nextUpdateFreq");
  159.   try {
  160.     var freqCnt = prefs.GetCharPref(autoupdateFreqCntString);
  161.     //alert(freqCnt);
  162.     if(freqCnt != null){
  163.       freqBasedBox.value = freqCnt;
  164.     } else {
  165.       freqBasedBox.value = 1; 
  166.     }
  167.   } catch(exception) {
  168.     freqBasedBox.value = 1;
  169.   }
  170.  
  171.   var errorCountText = document.getElementById("FailureCnt");
  172.   var errorDetailsText = document.getElementById("FailureDetails");
  173.   var cnt = 0;
  174.   var text;
  175.   try{
  176.     cnt = prefs.GetIntPref(autoupdateErrCntString);
  177.     txt = prefs.GetCharPref(autoupdateErrDetailString);
  178.   }catch(exception){}
  179.  
  180.   if( cnt > 0 ){
  181.     errorCountText.setAttribute("value",cnt);
  182.     errorDetailsText.setAttribute("value",txt);
  183.   } else {
  184.     errorCountText.setAttribute("value",bundle.GetStringFromName("NoUpdateFailure"));
  185.     var reasonBox = document.getElementById("reasonbox");
  186.     reasonBox.hidden = true;
  187.   }
  188. }
  189.  
  190. function onCancel()
  191. {
  192.   // Close dialog by returning true
  193.   return true;
  194. }
  195.  
  196. function doHelpButton()
  197. {
  198.   openHelp("validation-crl-auto-update-prefs");
  199. }
  200.  
  201. function onAccept()
  202. {
  203.    if(!validatePrefs())
  204.      return false;
  205.  
  206.    //set enable pref
  207.    prefs.SetBoolPref(autoupdateEnabledString, enabledCheckBox.checked );
  208.    
  209.    //set URL TYPE and value prefs - always to last fetch url - till we have anything else available
  210.    prefs.SetCharPref(autoupdateURLString,crl.lastFetchURL);
  211.    
  212.    var timingTypeId = updateTypeRadio.selectedItem.id;
  213.    var updateTime;
  214.    var dayCnt = (document.getElementById("nextUpdateDay")).value;
  215.    var freqCnt = (document.getElementById("nextUpdateFreq")).value;
  216.  
  217.    if(timingTypeId == "timeBasedRadio"){
  218.      prefs.SetIntPref(autoupdateTimeTypeString,crlManager.TYPE_AUTOUPDATE_TIME_BASED);
  219.      updateTime = crlManager.computeNextAutoUpdateTime(crl, crlManager.TYPE_AUTOUPDATE_TIME_BASED, dayCnt);
  220.    } else {
  221.      prefs.SetIntPref(autoupdateTimeTypeString,crlManager.TYPE_AUTOUPDATE_FREQ_BASED);
  222.      updateTime = crlManager.computeNextAutoUpdateTime(crl, crlManager.TYPE_AUTOUPDATE_FREQ_BASED, freqCnt);
  223.    }
  224.  
  225.    //alert(updateTime);
  226.    prefs.SetCharPref(autoupdateTimeString,updateTime); 
  227.    prefs.SetCharPref(autoupdateDayCntString,dayCnt);
  228.    prefs.SetCharPref(autoupdateFreqCntString,freqCnt);
  229.  
  230.    //Save Now
  231.    prefs.savePrefFile(null);
  232.    
  233.    crlManager.rescheduleCRLAutoUpdate();
  234.    //Close dialog by returning true
  235.    return true;
  236. }
  237.  
  238. function validatePrefs()
  239. {
  240.    var dayCnt = (document.getElementById("nextUpdateDay")).value;
  241.    var freqCnt = (document.getElementById("nextUpdateFreq")).value;
  242.  
  243.    var tmp = parseFloat(dayCnt);
  244.    if(!(tmp > 0.0)){
  245.      alert(bundle.GetStringFromName("crlAutoUpdateDayCntError"));
  246.      return false;
  247.    }
  248.    
  249.    tmp = parseFloat(freqCnt);
  250.    if(!(tmp > 0.0)){
  251.      alert(bundle.GetStringFromName("crlAutoUpdtaeFreqCntError"));
  252.      return false;
  253.    }
  254.    
  255.    return true;
  256. }
  257.