home *** CD-ROM | disk | FTP | other *** search
- const nsPK11TokenDB = "@mozilla.org/security/pk11tokendb;1";
- const nsIPK11TokenDB = Components.interfaces.nsIPK11TokenDB;
- const nsIPK11Token = Components.interfaces.nsIPK11Token;
- const nsPrefService = "@mozilla.org/preferences-service;1";
- const nsIPrefService = Components.interfaces.nsIPrefBranch;
-
- const masterPasswordPref = "masterpassword.timeout.init";
- const askForPref = "security.ask_for_password";
- const lifetimePref = "security.password_lifetime";
- const defaultTimeout = 120;
- const defaultTimeoutType = 1;
-
- var gPK11Token = null;
- var gAskEveryTimeHidden = false;
- var gAskTimes = 0;
- var gTimeout = 0;
-
- /*
- Defined in http://lxr.mozilla.org/aviarybranch/source/security/manager/ssl/public/nsIPK11Token.idl
- ASK_FIRST_TIME = 0;
- ASK_EVERY_TIME = -1;
- ASK_EXPIRE_TIME = 1;
- */
-
- /*
- * On Load
- */
- function setTimeoutOnLoad()
- {
- if (!GetPK11Token())
- return;
-
- var prefService = Components.classes[nsPrefService].getService(nsIPrefService);
- if (prefService &&
- prefService.getPrefType(masterPasswordPref) == prefService.PREF_BOOL &&
- prefService.getBoolPref(masterPasswordPref))
- {
- // retrieve the default values from security-prefs.js
- // if this is the first time Master Password is used
- gAskTimes = defaultTimeoutType;
- gTimeout = defaultTimeout;
-
- if (prefService.getPrefType(askForPref) == prefService.PREF_INT)
- gAskTimes = prefService.getIntPref(askForPref);
- if (prefService.getPrefType(lifetimePref) == prefService.PREF_INT)
- gTimeout = prefService.getIntPref(lifetimePref);
-
- // next time, retrieve the values from security token
- prefService.setBoolPref(masterPasswordPref, false);
- }
- else
- {
- // retrieve the values from security token
- gAskTimes = GetPK11Token().getAskPasswordTimes();
- gTimeout = GetPK11Token().getAskPasswordTimeout();
- }
-
- switch (gAskTimes) {
- case nsIPK11Token.ASK_FIRST_TIME: gAskTimes = 0; break;
- // MERC JVL - Bug in Mozilla? Remove for now. case nsIPK11Token.ASK_EVERY_TIME: gAskTimes = 1; break;
- case nsIPK11Token.ASK_EXPIRE_TIME: gAskTimes = 2; break;
- }
- var radioitem;
- switch (gAskTimes) {
- case 0: radioitem = document.getElementById("askFirstTime"); break;
- // MERC JVL - Bug in Mozilla? Remove for now. case 1: radioitem = document.getElementById("askEveryTime"); break;
- case 2: radioitem = document.getElementById("askTimeout"); break;
- }
- var radiogroup = document.getElementById("passwordAskTimes");
- radiogroup.selectedItem = radioitem;
- var timeoutField = document.getElementById("passwordTimeout");
- timeoutField.setAttribute("value", gTimeout);
-
- changePasswordSettings(false);
- }
-
- /*
- * Update state
- */
- function changePasswordSettings(setFocus)
- {
- var timeoutField = document.getElementById("passwordTimeout");
- var radiogroup = document.getElementById("passwordAskTimes");
- switch ( radiogroup.value ) {
- case "0":
- timeoutField.setAttribute("disabled", true);
- gAskTimes = nsIPK11Token.ASK_FIRST_TIME;
- break;
- /* MERC JVL - Bug in Mozilla? Remove for now.
- case "1":
- timeoutField.setAttribute("disabled", true);
- gAskTimes = nsIPK11Token.ASK_EVERY_TIME;
- break;
- */
- case "2":
- timeoutField.removeAttribute("disabled");
- if ( setFocus ) {
- timeoutField.focus();
- }
- gTimeout = timeoutField.value;
- var re = new RegExp("^[0-9]+$");
- if (!re.test(gTimeout)) {
- gTimeout = "1";
- }
- gAskTimes = nsIPK11Token.ASK_EXPIRE_TIME;
- break;
- }
-
- // MERC JVL - Bug in Mozilla? Remove for now. gAskEveryTimeHidden = (radiogroup.value == 1) ? true : false;
- }
-
- /*
- * Handle OK
- */
- function setTimeoutOnAccept()
- {
- // save values in security token
- GetPK11Token().setAskPasswordDefaults(gAskTimes, gTimeout);
-
- // set hidden elements in the caller window
- var contentDoc = window.opener.document;
- if (contentDoc)
- {
- var timeoutField = contentDoc.getElementById("passwordTimeout");
- timeoutField.setAttribute("value", gTimeout);
- var timeoutSelect = contentDoc.getElementById("passwordAskTimes");
- timeoutSelect.setAttribute("value", gAskTimes);
- var askEveryTimeHidden = contentDoc.getElementById("askEveryTimeHidden");
- askEveryTimeHidden.checked = gAskEveryTimeHidden;
- }
- }
-
- /*
- * Get security token
- */
- function GetPK11Token()
- {
- if (!gPK11Token)
- {
- var service = Components.classes[nsPK11TokenDB].getService(nsIPK11TokenDB);
- if (service)
- gPK11Token = service.getInternalKeyToken();
- }
- return gPK11Token;
- }
-