--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric7/WebBrowser/Sync/SyncEncryptionPage.py Sat May 15 18:45:04 2021 +0200 @@ -0,0 +1,147 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2012 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing encryption settings wizard page. +""" + +from PyQt5.QtCore import pyqtSlot +from PyQt5.QtWidgets import QWizardPage + +from .Ui_SyncEncryptionPage import Ui_SyncEncryptionPage + +import Preferences + + +class SyncEncryptionPage(QWizardPage, Ui_SyncEncryptionPage): + """ + Class implementing encryption settings wizard page. + """ + def __init__(self, parent=None): + """ + Constructor + + @param parent reference to the parent widget (QWidget) + """ + super().__init__(parent) + self.setupUi(self) + + self.keySizeComboBox.addItem(self.tr("128 Bits"), 16) + self.keySizeComboBox.addItem(self.tr("192 Bits"), 24) + self.keySizeComboBox.addItem(self.tr("256 Bits"), 32) + + self.registerField("ReencryptData", self.reencryptCheckBox) + + self.encryptionGroupBox.setChecked( + Preferences.getWebBrowser("SyncEncryptData")) + self.encryptionKeyEdit.setText( + Preferences.getWebBrowser("SyncEncryptionKey")) + self.encryptionKeyAgainEdit.setEnabled(False) + self.keySizeComboBox.setCurrentIndex(self.keySizeComboBox.findData( + Preferences.getWebBrowser("SyncEncryptionKeyLength"))) + self.loginsOnlyCheckBox.setChecked( + Preferences.getWebBrowser("SyncEncryptPasswordsOnly")) + + def nextId(self): + """ + Public method returning the ID of the next wizard page. + + @return next wizard page ID (integer) + """ + Preferences.setWebBrowser( + "SyncEncryptData", self.encryptionGroupBox.isChecked()) + Preferences.setWebBrowser( + "SyncEncryptionKey", self.encryptionKeyEdit.text()) + Preferences.setWebBrowser( + "SyncEncryptionKeyLength", self.keySizeComboBox.itemData( + self.keySizeComboBox.currentIndex())) + Preferences.setWebBrowser( + "SyncEncryptPasswordsOnly", self.loginsOnlyCheckBox.isChecked()) + + from . import SyncGlobals + return SyncGlobals.PageType + + def isComplete(self): + """ + Public method to check the completeness of the page. + + @return flag indicating completeness (boolean) + """ + if self.encryptionGroupBox.isChecked(): + if self.encryptionKeyEdit.text() == "": + complete = False + else: + if self.reencryptCheckBox.isChecked(): + complete = (self.encryptionKeyEdit.text() == + self.encryptionKeyAgainEdit.text()) + else: + complete = True + else: + complete = True + + return complete + + def __updateUI(self): + """ + Private slot to update the variable parts of the UI. + """ + error = "" + + if self.encryptionGroupBox.isChecked(): + self.encryptionKeyAgainEdit.setEnabled( + self.reencryptCheckBox.isChecked()) + + if self.encryptionKeyEdit.text() == "": + error = error or self.tr( + "Encryption key must not be empty.") + + if ( + self.encryptionKeyEdit.text() != "" and + self.reencryptCheckBox.isChecked() and + (self.encryptionKeyEdit.text() != + self.encryptionKeyAgainEdit.text()) + ): + error = error or self.tr( + "Repeated encryption key is wrong.") + + self.errorLabel.setText(error) + self.completeChanged.emit() + + @pyqtSlot(str) + def on_encryptionKeyEdit_textChanged(self, txt): + """ + Private slot to handle changes of the encryption key. + + @param txt content of the edit widget (string) + """ + self.passwordMeter.checkPasswordStrength(txt) + self.__updateUI() + + @pyqtSlot(str) + def on_encryptionKeyAgainEdit_textChanged(self, txt): + """ + Private slot to handle changes of the encryption key repetition. + + @param txt content of the edit widget (string) + """ + self.__updateUI() + + @pyqtSlot(bool) + def on_encryptionGroupBox_toggled(self, on): + """ + Private slot to handle changes of the encryption selection. + + @param on state of the group box (boolean) + """ + self.__updateUI() + + @pyqtSlot(bool) + def on_reencryptCheckBox_toggled(self, on): + """ + Private slot to handle changes of the re-encryption selection. + + @param on state of the check box (boolean) + """ + self.__updateUI()