зеркало из https://github.com/mozilla/gecko-dev.git
261 строка
8.1 KiB
JavaScript
261 строка
8.1 KiB
JavaScript
/*
|
|
* The contents of this file are subject to the Mozilla Public
|
|
* License Version 1.1 (the "License"); you may not use this file
|
|
* except in compliance with the License. You may obtain a copy of
|
|
* the License at http://www.mozilla.org/MPL/
|
|
*
|
|
* Software distributed under the License is distributed on an "AS
|
|
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
* implied. See the License for the specific language governing
|
|
* rights and limitations under the License.
|
|
*
|
|
* The Original Code is mozilla.org code.
|
|
*
|
|
* The Initial Developer of the Original Code is Netscape
|
|
* Communications Corporation. Portions created by Netscape are
|
|
* Copyright (C) 2001 Netscape Communications Corporation. All
|
|
* Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
* Rangan Sen <rangansen@netscape.com>
|
|
*/
|
|
|
|
const nsIX509CertDB = Components.interfaces.nsIX509CertDB;
|
|
const nsX509CertDB = "@mozilla.org/security/x509certdb;1";
|
|
const nsIPKIParamBlock = Components.interfaces.nsIPKIParamBlock;
|
|
const nsIX509Cert = Components.interfaces.nsIX509Cert;
|
|
const nsICrlEntry = Components.interfaces.nsICrlEntry;
|
|
const nsIPref = Components.interfaces.nsIPref;
|
|
|
|
var crl;
|
|
var bundle;
|
|
var prefs;
|
|
var updateTypeRadio;
|
|
var enabledCheckBox;
|
|
var timeBasedRadio;
|
|
var freqBasedRadio;
|
|
var certdb;
|
|
|
|
var autoupdateEnabledString = "security.crl.autoupdate.enable.";
|
|
var autoupdateTimeTypeString = "security.crl.autoupdate.timingType.";
|
|
var autoupdateTimeString = "security.crl.autoupdate.nextInstant.";
|
|
var autoupdateURLString = "security.crl.autoupdate.url.";
|
|
var autoupdateErrCntString = "security.crl.autoupdate.errCount.";
|
|
var autoupdateErrDetailString = "security.crl.autoupdate.errDetail.";
|
|
var autoupdateDayCntString = "security.crl.autoupdate.dayCnt.";
|
|
var autoupdateFreqCntString = "security.crl.autoupdate.freqCnt.";
|
|
|
|
function onLoad()
|
|
{
|
|
certdb = Components.classes[nsX509CertDB].getService(nsIX509CertDB);
|
|
var pkiParams = window.arguments[0].QueryInterface(nsIPKIParamBlock);
|
|
var isupport = pkiParams.getISupportAtIndex(1);
|
|
crl = isupport.QueryInterface(nsICrlEntry);
|
|
|
|
autoupdateEnabledString = autoupdateEnabledString + crl.nameInDb;
|
|
autoupdateTimeTypeString = autoupdateTimeTypeString + crl.nameInDb;
|
|
autoupdateTimeString = autoupdateTimeString + crl.nameInDb;
|
|
autoupdateDayCntString = autoupdateDayCntString + crl.nameInDb;
|
|
autoupdateFreqCntString = autoupdateFreqCntString + crl.nameInDb;
|
|
autoupdateURLString = autoupdateURLString + crl.nameInDb;
|
|
autoupdateErrCntString = autoupdateErrCntString + crl.nameInDb;
|
|
autoupdateErrDetailString = autoupdateErrDetailString + crl.nameInDb;
|
|
|
|
bundle = srGetStrBundle("chrome://pippki/locale/pippki.properties");
|
|
prefs = Components.classes["@mozilla.org/preferences;1"].getService(nsIPref);
|
|
|
|
updateTypeRadio = document.getElementById("autoUpdateType");
|
|
enabledCheckBox = document.getElementById("enableCheckBox");
|
|
timeBasedRadio = document.getElementById("timeBasedRadio");
|
|
freqBasedRadio = document.getElementById("freqBasedRadio");
|
|
|
|
//Read the existing prefs, if any
|
|
initializeSelection();
|
|
|
|
//Set Values for the update url
|
|
updateSelectedURLControls();
|
|
}
|
|
|
|
function updateSelectedTimingControls()
|
|
{
|
|
var freqBox = document.getElementById("nextUpdateFreq");
|
|
var timeBox = document.getElementById("nextUpdateDay");
|
|
if(updateTypeRadio.selectedItem.id == "freqBasedRadio"){
|
|
freqBox.removeAttribute("disabled");
|
|
timeBox.disabled = true;
|
|
} else {
|
|
timeBox.removeAttribute("disabled");
|
|
freqBox.disabled = true;
|
|
}
|
|
}
|
|
|
|
function initializeSelection()
|
|
{
|
|
var menuItemNode;
|
|
var hasAdvertisedURL = false;
|
|
var hasNextUpdate = true;
|
|
|
|
var lastFetchMenuNode;
|
|
var advertisedMenuNode;
|
|
|
|
try {
|
|
var isEnabled = prefs.GetBoolPref(autoupdateEnabledString);
|
|
enabledCheckBox.checked = isEnabled;
|
|
} catch(exception){
|
|
enabledCheckBox.checked = false;
|
|
}
|
|
|
|
//Always the last fetch url, for now.
|
|
var URLDisplayed = document.getElementById("urlName");
|
|
URLDisplayed.value = crl.lastFetchURL;
|
|
|
|
//Decide how many update timing types to be shown
|
|
//If no next update specified, hide the first choice. Default shows both
|
|
if(crl.nextUpdateLocale == null || crl.nextUpdateLocale.length == 0) {
|
|
timeBasedRadio.disabled = true;
|
|
hasNextUpdate = false;
|
|
}
|
|
|
|
//Set up the initial selections based on defaults and prefs, if any
|
|
try{
|
|
var timingPref = prefs.GetIntPref(autoupdateTimeTypeString);
|
|
if(timingPref != null) {
|
|
if(timingPref == crl.TYPE_AUTOUPDATE_TIME_BASED) {
|
|
if(hasNextUpdate){
|
|
updateTypeRadio.selectedItem = timeBasedRadio;
|
|
}
|
|
} else {
|
|
updateTypeRadio.selectedItem = freqBasedRadio;
|
|
}
|
|
} else {
|
|
if(hasNextUpdate){
|
|
updateTypeRadio.selectedItem = timeBasedRadio;
|
|
} else {
|
|
updateTypeRadio.selectedItem = freqBasedRadio;
|
|
}
|
|
}
|
|
|
|
}catch(exception){
|
|
if(!hasNextUpdate) {
|
|
updateTypeRadio.selectedItem = freqBasedRadio;
|
|
} else {
|
|
updateTypeRadio.selectedItem = timeBasedRadio;
|
|
}
|
|
}
|
|
|
|
updateSelectedTimingControls();
|
|
|
|
//Now, retrieving the day count
|
|
var timeBasedBox = document.getElementById("nextUpdateDay");
|
|
try {
|
|
var dayCnt = prefs.GetCharPref(autoupdateDayCntString);
|
|
//alert(dayCnt);
|
|
if(dayCnt != null){
|
|
timeBasedBox.value = dayCnt;
|
|
} else {
|
|
timeBasedBox.value = 1;
|
|
}
|
|
} catch(exception) {
|
|
timeBasedBox.value = 1;
|
|
}
|
|
|
|
var freqBasedBox = document.getElementById("nextUpdateFreq");
|
|
try {
|
|
var freqCnt = prefs.GetCharPref(autoupdateFreqCntString);
|
|
//alert(freqCnt);
|
|
if(freqCnt != null){
|
|
freqBasedBox.value = freqCnt;
|
|
} else {
|
|
freqBasedBox.value = 1;
|
|
}
|
|
} catch(exception) {
|
|
freqBasedBox.value = 1;
|
|
}
|
|
|
|
var errorCountText = document.getElementById("FailureCnt");
|
|
var errorDetailsText = document.getElementById("FailureDetails");
|
|
var cnt = 0;
|
|
var text;
|
|
try{
|
|
cnt = prefs.GetIntPref(autoupdateErrCntString);
|
|
txt = prefs.GetCharPref(autoupdateErrDetailString);
|
|
}catch(exception){}
|
|
|
|
if( cnt > 0 ){
|
|
errorCountText.setAttribute("value",cnt);
|
|
errorDetailsText.setAttribute("value",txt);
|
|
} else {
|
|
errorCountText.setAttribute("value",bundle.GetStringFromName("NoUpdateFailure"));
|
|
var reasonBox = document.getElementById("reasonbox");
|
|
reasonBox.hidden = true;
|
|
}
|
|
}
|
|
|
|
function onCancel()
|
|
{
|
|
// Close dialog by returning true
|
|
return true;
|
|
}
|
|
|
|
function doHelpButton()
|
|
{
|
|
openHelp("validation-crl-auto-update-prefs");
|
|
}
|
|
|
|
function onAccept()
|
|
{
|
|
if(!validatePrefs())
|
|
return false;
|
|
|
|
//set enable pref
|
|
prefs.SetBoolPref(autoupdateEnabledString, enabledCheckBox.checked );
|
|
|
|
//set URL TYPE and value prefs - always to last fetch url - till we have anything else available
|
|
prefs.SetCharPref(autoupdateURLString,crl.lastFetchURL);
|
|
|
|
var timingTypeId = updateTypeRadio.selectedItem.id;
|
|
var updateTime;
|
|
var dayCnt = (document.getElementById("nextUpdateDay")).value;
|
|
var freqCnt = (document.getElementById("nextUpdateFreq")).value;
|
|
|
|
if(timingTypeId == "timeBasedRadio"){
|
|
prefs.SetIntPref(autoupdateTimeTypeString,crl.TYPE_AUTOUPDATE_TIME_BASED);
|
|
updateTime = crl.ComputeNextAutoUpdateTime(crl.TYPE_AUTOUPDATE_TIME_BASED, dayCnt);
|
|
} else {
|
|
prefs.SetIntPref(autoupdateTimeTypeString,crl.TYPE_AUTOUPDATE_FREQ_BASED);
|
|
updateTime = crl.ComputeNextAutoUpdateTime(crl.TYPE_AUTOUPDATE_FREQ_BASED, freqCnt);
|
|
}
|
|
|
|
//alert(updateTime);
|
|
prefs.SetCharPref(autoupdateTimeString,updateTime);
|
|
prefs.SetCharPref(autoupdateDayCntString,dayCnt);
|
|
prefs.SetCharPref(autoupdateFreqCntString,freqCnt);
|
|
|
|
//Save Now
|
|
prefs.savePrefFile(null);
|
|
|
|
certdb.rescheduleCRLAutoUpdate();
|
|
//Close dialog by returning true
|
|
return true;
|
|
}
|
|
|
|
function validatePrefs()
|
|
{
|
|
var dayCnt = (document.getElementById("nextUpdateDay")).value;
|
|
var freqCnt = (document.getElementById("nextUpdateFreq")).value;
|
|
|
|
var tmp = parseFloat(dayCnt);
|
|
if(!(tmp > 0.0)){
|
|
alert(bundle.GetStringFromName("crlAutoUpdateDayCntError"));
|
|
return false;
|
|
}
|
|
|
|
tmp = parseFloat(freqCnt);
|
|
if(!(tmp > 0.0)){
|
|
alert(bundle.GetStringFromName("crlAutoUpdtaeFreqCntError"));
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|