added password validation; changed create account layout

Password validation added, configurable under the [password_validation]
section in config.ini. Each criterion is displayed next to the form, in
red or green depending on whether the password passes it. form.html now
looks different because of it, whether it is enabled or disabled. An
error message is now displayed if the user already exists.
This commit is contained in:
2020-04-14 21:31:44 +01:00
parent 0ab93990e8
commit 690de58e9f
7 changed files with 261 additions and 56 deletions

View File

@@ -0,0 +1,45 @@
specials = ['[', '@', '_', '!', '#', '$', '%', '^', '&', '*', '(', ')',
'<', '>', '?', '/', '\\', '|', '}', '{', '~', ':', ']']
class PasswordValidator:
def __init__(self, min_length, upper, number, special):
self.criteria = {'characters': int(min_length),
'uppercase characters': int(upper),
'numbers': int(number),
'special characters': int(special)}
def validate(self, password):
count = {'characters': 0,
'uppercase characters': 0,
'numbers': 0,
'special characters': 0}
for c in password:
count['characters'] += 1
if c.isupper():
count['uppercase characters'] += 1
elif c.isnumeric():
count['numbers'] += 1
elif c in specials:
count['special characters'] += 1
for criterion in count:
if count[criterion] < self.criteria[criterion]:
count[criterion] = False
else:
count[criterion] = True
return count
def getCriteria(self):
lines = {}
for criterion in self.criteria:
min = self.criteria[criterion]
if min > 0:
text = f"Must have at least {min} "
if min == 1:
text += criterion[:-1]
else:
text += criterion
lines[criterion] = text
return lines