eric7/EricWidgets/EricPasswordMeter.py

branch
eric7
changeset 8358
144a6b854f70
parent 8356
68ec9c3d4de5
child 8881
54e42bc2437a
diff -r a081458cc57b -r 144a6b854f70 eric7/EricWidgets/EricPasswordMeter.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricPasswordMeter.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,102 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2011 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a custom widget indicating the strength of a password.
+"""
+
+from PyQt6.QtWidgets import QProgressBar
+
+from Utilities.PasswordChecker import PasswordChecker
+
+
+class EricPasswordMeter(QProgressBar):
+    """
+    Class implementing a custom widget indicating the strength of a password.
+    """
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget (QWidget)
+        """
+        super().__init__(parent)
+        
+        super().setTextVisible(False)
+        super().setMaximum(100)
+        self.__increment = 100 // (PasswordChecker.Complexity_VeryStrong + 1)
+        
+        self.__indicatorColors = [
+            "#ff0000",      # red
+            "#ff8800",      # orange
+            "#ffff00",      # yellow
+            "#ccff00",      # yellow green
+            "#00ff00",      # green
+        ]
+        self.__noIndicator = "#ffffff"
+        
+        self.__styleSheetTemplate = (
+            "QProgressBar {{"
+            " border: 2px solid black;"
+            " border-radius: 5px;"
+            " text-align: center; }}"
+            "QProgressBar::chunk:horizontal {{"
+            " background-color: {0}; }}"
+        )
+        self.setStyleSheet(
+            self.__styleSheetTemplate.format(self.__noIndicator))
+    
+    def checkPasswordStrength(self, password):
+        """
+        Public slot to check the password strength and update the
+        progress bar accordingly.
+        
+        @param password password to be checked (string)
+        """
+        strength = PasswordChecker().checkPassword(password)
+        self.setStyleSheet(self.__styleSheetTemplate.format(
+            self.__indicatorColors[strength]))
+        super().setValue(
+            (strength + 1) * self.__increment)
+    
+    def setValue(self, value):
+        """
+        Public method to set the value.
+        
+        Overwritten to do nothing.
+        
+        @param value value (integer)
+        """
+        pass
+    
+    def setMaximum(self, value):
+        """
+        Public method to set the maximum value.
+        
+        Overwritten to do nothing.
+        
+        @param value maximum value (integer)
+        """
+        pass
+    
+    def setMinimum(self, value):
+        """
+        Public method to set the minimal value.
+        
+        Overwritten to do nothing.
+        
+        @param value minimum value (integer)
+        """
+        pass
+
+if __name__ == "__main__":
+    import sys
+    from PyQt6.QtWidgets import QApplication
+    
+    app = QApplication(sys.argv)
+    meter = EricPasswordMeter()
+    meter.show()
+    meter.checkPasswordStrength("Blah2+")
+    app.exec()

eric ide

mercurial