diff -r c3686b43f76b -r 773ad1f1ed22 src/eric7/Preferences/ConfigurationPages/MainPasswordEntryDialog.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/eric7/Preferences/ConfigurationPages/MainPasswordEntryDialog.py Wed Apr 05 11:58:22 2023 +0200 @@ -0,0 +1,119 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2011 - 2023 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing a dialog to enter or change the main password. +""" + +from PyQt6.QtCore import pyqtSlot +from PyQt6.QtWidgets import QDialog, QDialogButtonBox + +from eric7.Utilities.crypto.py3PBKDF2 import verifyPassword + +from .Ui_MainPasswordEntryDialog import Ui_MainPasswordEntryDialog + + +class MainPasswordEntryDialog(QDialog, Ui_MainPasswordEntryDialog): + """ + Class implementing a dialog to enter or change the main password. + """ + + def __init__(self, oldPasswordHash, parent=None): + """ + Constructor + + @param oldPasswordHash hash of the current password (string) + @param parent reference to the parent widget (QWidget) + """ + super().__init__(parent) + self.setupUi(self) + + self.__oldPasswordHash = oldPasswordHash + if self.__oldPasswordHash == "": + self.currentPasswordEdit.setEnabled(False) + if hasattr(self.currentPasswordEdit, "setPlaceholderText"): + self.currentPasswordEdit.setPlaceholderText( + self.tr("(not defined yet)") + ) + + self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled(False) + + def __updateUI(self): + """ + Private slot to update the variable parts of the UI. + """ + enable = True + error = "" + if self.currentPasswordEdit.isEnabled(): + enable = verifyPassword( + self.currentPasswordEdit.text(), self.__oldPasswordHash + ) + if not enable: + error = error or self.tr("Wrong password entered.") + + if self.newPasswordEdit.text() == "": + enable = False + error = error or self.tr("New password must not be empty.") + + if ( + self.newPasswordEdit.text() != "" + and self.newPasswordEdit.text() != self.newPasswordAgainEdit.text() + ): + enable = False + error = error or self.tr("Repeated password is wrong.") + + if ( + self.currentPasswordEdit.isEnabled() + and self.newPasswordEdit.text() == self.currentPasswordEdit.text() + ): + enable = False + error = error or self.tr("Old and new password must not be the same.") + + self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled(enable) + self.errorLabel.setText(error) + + @pyqtSlot(str) + def on_currentPasswordEdit_textChanged(self, txt): + """ + Private slot to handle changes of the current password. + + @param txt content of the edit widget (string) + """ + self.__updateUI() + + @pyqtSlot(str) + def on_newPasswordEdit_textChanged(self, txt): + """ + Private slot to handle changes of the new password. + + @param txt content of the edit widget (string) + """ + self.passwordMeter.checkPasswordStrength(txt) + self.__updateUI() + + @pyqtSlot(str) + def on_newPasswordAgainEdit_textChanged(self, txt): + """ + Private slot to handle changes of the new again password. + + @param txt content of the edit widget (string) + """ + self.__updateUI() + + def getMainPassword(self): + """ + Public method to get the new main password. + + @return new main password (string) + """ + return self.newPasswordEdit.text() + + def getCurrentPassword(self): + """ + Public method to get the current main password. + + @return current main password (string) + """ + return self.currentPasswordEdit.text()