mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
126 lines
4.0 KiB
JavaScript
126 lines
4.0 KiB
JavaScript
var MasterPasswordUI = {
|
|
_dialog: null,
|
|
_tokenName: "",
|
|
|
|
get _secModuleDB() {
|
|
delete this._secModuleDB;
|
|
return this._secModuleDB = Cc["@mozilla.org/security/pkcs11moduledb;1"].getService(Ci.nsIPKCS11ModuleDB);
|
|
},
|
|
|
|
get _pk11DB() {
|
|
delete this._pk11DB;
|
|
return this._pk11DB = Cc["@mozilla.org/security/pk11tokendb;1"].getService(Ci.nsIPK11TokenDB);
|
|
},
|
|
|
|
_setPassword: function _setPassword(password) {
|
|
try {
|
|
let status;
|
|
let slot = this._secModuleDB.findSlotByName(this._tokenName);
|
|
if (slot)
|
|
status = slot.status;
|
|
else
|
|
return false;
|
|
|
|
let token = this._pk11DB.findTokenByName(this._tokenName);
|
|
|
|
if (status == Ci.nsIPKCS11Slot.SLOT_UNINITIALIZED) {
|
|
token.initPassword(password);
|
|
} else if (status == Ci.nsIPKCS11Slot.SLOT_READY) {
|
|
token.changePassword("", password);
|
|
}
|
|
return true;
|
|
} catch(e) {
|
|
dump("--- MasterPasswordUI._setPassword exception: " + e + "\n");
|
|
return false;
|
|
}
|
|
},
|
|
|
|
_removePassword: function _removePassword(password) {
|
|
try {
|
|
let token = this._pk11DB.getInternalKeyToken();
|
|
if (token.checkPassword(password)) {
|
|
token.changePassword(password, "");
|
|
return true;
|
|
}
|
|
} catch(e) {
|
|
dump("--- MasterPasswordUI._removePassword exception: " + e + "\n");
|
|
}
|
|
return false;
|
|
},
|
|
|
|
show: function mp_show(aSet) {
|
|
let dialogId = aSet ? "masterpassword-change" : "masterpassword-remove";
|
|
if (document.getElementById(dialogId))
|
|
return;
|
|
|
|
let dialog = aSet ? "chrome://browser/content/masterPassword.xul"
|
|
: "chrome://browser/content/removeMasterPassword.xul";
|
|
this._dialog = importDialog(window, dialog, null);
|
|
BrowserUI.pushPopup(this, this._dialog);
|
|
|
|
if (aSet) {
|
|
this.checkPassword();
|
|
document.getElementById("masterpassword-newpassword1").focus();
|
|
} else {
|
|
document.getElementById("masterpassword-oldpassword").focus();
|
|
}
|
|
},
|
|
|
|
hide: function mp_hide(aValue) {
|
|
this.updatePreference();
|
|
this._dialog.close();
|
|
this._dialog = null;
|
|
BrowserUI.popPopup(this);
|
|
},
|
|
|
|
setPassword: function mp_setPassword() {
|
|
if (!this.checkPassword())
|
|
return;
|
|
|
|
let newPasswordValue = document.getElementById("masterpassword-newpassword1").value;
|
|
if (this._setPassword(newPasswordValue)) {
|
|
this.hide();
|
|
}
|
|
},
|
|
|
|
removePassword: function mp_removePassword() {
|
|
let oldPassword = document.getElementById("masterpassword-oldpassword").value;
|
|
if (this._removePassword(oldPassword)) {
|
|
this.hide();
|
|
}
|
|
},
|
|
|
|
checkPassword: function mp_checkPassword() {
|
|
let newPasswordValue1 = document.getElementById("masterpassword-newpassword1").value;
|
|
let newPasswordValue2 = document.getElementById("masterpassword-newpassword2").value;
|
|
|
|
let buttonOk = this._dialog.getElementsByAttribute("class", "prompt-buttons")[0].firstChild;
|
|
let isPasswordValid = this._secModuleDB.isFIPSEnabled ? (newPasswordValue1 != "" && newPasswordValue1 == newPasswordValue2)
|
|
: (newPasswordValue1 == newPasswordValue2);
|
|
buttonOk.setAttribute("disabled", !isPasswordValid);
|
|
|
|
return isPasswordValid;
|
|
},
|
|
|
|
checkOldPassword: function mp_checkOldPassword() {
|
|
let oldPassword = document.getElementById("masterpassword-oldpassword");
|
|
|
|
let buttonOk = this._dialog.getElementsByAttribute("class", "prompt-buttons")[0].firstChild;
|
|
let isPasswordValid = this._pk11DB.getInternalKeyToken().checkPassword(oldPassword.value);
|
|
buttonOk.setAttribute("disabled", !isPasswordValid);
|
|
},
|
|
|
|
hasMasterPassword: function mp_hasMasterPassword() {
|
|
let slot = this._secModuleDB.findSlotByName(this._tokenName);
|
|
if (slot) {
|
|
let status = slot.status;
|
|
return status != Ci.nsIPKCS11Slot.SLOT_UNINITIALIZED && status != Ci.nsIPKCS11Slot.SLOT_READY;
|
|
}
|
|
return false;
|
|
},
|
|
|
|
updatePreference: function mp_updatePreference() {
|
|
document.getElementById("prefs-master-password").value = this.hasMasterPassword();
|
|
}
|
|
};
|