[enh] Support advice with standalone password.py

This commit is contained in:
ljf 2018-08-28 21:34:33 +02:00
parent 783c512628
commit 536b46e527

View file

@ -53,14 +53,18 @@ class PasswordValidator(object):
Validate a password and raise error or display a warning Validate a password and raise error or display a warning
""" """
if self.validation_strength <= 0: if self.validation_strength <= 0:
return return ("success", "")
self.strength = self.compute(password, ACTIVATE_ONLINE_PWNED_LIST) self.strength = self.compute(password, ACTIVATE_ONLINE_PWNED_LIST)
if self.strength < self.validation_strength: if self.strength < self.validation_strength:
if self.listed: if self.listed:
return "password_listed_" + str(self.validation_strength) return ("error", "password_listed_" + str(self.validation_strength))
else: else:
return "password_too_simple_" + str(self.validation_strength) return ("error", "password_too_simple_" + str(self.validation_strength))
if self.strength < 3:
return ("warning", 'password_advice')
return ("success", "")
def compute(self, password, online=False): def compute(self, password, online=False):
# Indicators # Indicators
@ -173,19 +177,21 @@ class LoggerPasswordValidator(ProfilePasswordValidator):
logger = logging.getLogger('yunohost.utils.password') logger = logging.getLogger('yunohost.utils.password')
error = super(LoggerPasswordValidator, self).validate(password) status, msg = super(LoggerPasswordValidator, self).validate(password)
if error is not None: if status == "error":
raise MoulinetteError(1, m18n.n(error)) raise MoulinetteError(1, m18n.n(msg))
elif status == "warning":
if self.strength < 3: logger.info(m18n.n(msg))
logger.info(m18n.n('password_advice'))
if __name__ == '__main__': if __name__ == '__main__':
if len(sys.argv) < 2: if len(sys.argv) < 2:
print("usage: password.py PASSWORD") print("usage: password.py PASSWORD")
result = ProfilePasswordValidator('user').validate(sys.argv[1]) status, msg = ProfilePasswordValidator('user').validate(sys.argv[1])
if result is not None: if status == "error":
sys.exit(result) sys.exit(msg)
elif status == "warning":
print(msg)
sys.exit(0)