As per dshea's recommendations, here's a new/revised version with appropriate edits.
This is in keeping some consistency with GUI behavior, check a user's pw quality score and warn/prompt them to confirm whether they are ok with using a weak pw.
Resolves: rhbz#1001039 --- pyanaconda/ui/gui/spokes/password.py | 12 +++--------- pyanaconda/ui/tui/spokes/__init__.py | 5 ++++- pyanaconda/users.py | 8 ++++++++ 3 files changed, 15 insertions(+), 10 deletions(-)
diff --git a/pyanaconda/ui/gui/spokes/password.py b/pyanaconda/ui/gui/spokes/password.py index c67979b..55bf116 100644 --- a/pyanaconda/ui/gui/spokes/password.py +++ b/pyanaconda/ui/gui/spokes/password.py @@ -20,15 +20,13 @@ #
from pyanaconda.i18n import _, N_ -from pyanaconda.users import cryptPassword, validatePassword +from pyanaconda.users import cryptPassword, validatePassword, checkPassword from pwquality import PWQError
from pyanaconda.ui.gui.spokes import NormalSpoke from pyanaconda.ui.gui.categories.user_settings import UserSettingsCategory from pyanaconda.ui.common import FirstbootSpokeMixIn
-import pwquality - __all__ = ["PasswordSpoke"]
@@ -61,10 +59,6 @@ class PasswordSpoke(FirstbootSpokeMixIn, NormalSpoke): self.pw.set_placeholder_text(_("The password is set.")) self.confirm.set_placeholder_text(_("The password is set."))
- # set up passphrase quality checker - self._pwq = pwquality.PWQSettings() - self._pwq.read_config() - self.pw_bar = self.builder.get_object("password_bar") self.pw_label = self.builder.get_object("password_label")
@@ -113,9 +107,9 @@ class PasswordSpoke(FirstbootSpokeMixIn, NormalSpoke): the changed Gtk event handler. """ try: - strength = self._pwq.check(self.pw.get_text(), None, None) + strength = checkPassword(self.pw.get_text()) _pwq_error = None - except pwquality.PWQError as e: + except PWQError as e: _pwq_error = e.message strength = 0
diff --git a/pyanaconda/ui/tui/spokes/__init__.py b/pyanaconda/ui/tui/spokes/__init__.py index 2f92126..087199b 100644 --- a/pyanaconda/ui/tui/spokes/__init__.py +++ b/pyanaconda/ui/tui/spokes/__init__.py @@ -21,7 +21,7 @@ from pyanaconda.ui.tui import simpleline as tui from pyanaconda.ui.tui.tuiobject import TUIObject, YesNoDialog from pyanaconda.ui.common import Spoke, StandaloneSpoke, NormalSpoke, PersonalizationSpoke, collect -from pyanaconda.users import validatePassword +from pyanaconda.users import validatePassword, checkPassword from pwquality import PWQError import re from collections import namedtuple @@ -118,6 +118,9 @@ class EditTUIDialog(NormalTUISpoke): if error: print(error) return None + strength = checkPassword(pw) + if strength < 50: + raise PWQError("The password you have provided is weak.") except PWQError as e: error = _("You have provided a weak password: %s. " % e.message) error += _("\nWould you like to use it anyway?") diff --git a/pyanaconda/users.py b/pyanaconda/users.py index 33f86fe..ba5427a 100644 --- a/pyanaconda/users.py +++ b/pyanaconda/users.py @@ -145,6 +145,14 @@ def validatePassword(pw, confirm=None, minlen=6, user="root"):
return None
+def checkPassword(pw): + """ Check the quality of a password passed in and return a numeric + value. + """ + pwq = pwquality.PWQSettings() + pwq.read_config() + return pwq.check(pw, None, None) + def guess_username(fullname): fullname = fullname.split()