|
@@ -21,13 +21,11 @@ UNUSABLE_PASSWORD_SUFFIX_LENGTH = 40 # number of random chars to add after UNUS
|
|
|
|
|
|
|
|
|
def is_password_usable(encoded):
|
|
|
- if encoded is None or encoded.startswith(UNUSABLE_PASSWORD_PREFIX):
|
|
|
- return False
|
|
|
- try:
|
|
|
- identify_hasher(encoded)
|
|
|
- except ValueError:
|
|
|
- return False
|
|
|
- return True
|
|
|
+ """
|
|
|
+ Return True if this password wasn't generated by
|
|
|
+ User.set_unusable_password(), i.e. make_password(None).
|
|
|
+ """
|
|
|
+ return encoded is None or not encoded.startswith(UNUSABLE_PASSWORD_PREFIX)
|
|
|
|
|
|
|
|
|
def check_password(password, encoded, setter=None, preferred='default'):
|
|
@@ -42,7 +40,11 @@ def check_password(password, encoded, setter=None, preferred='default'):
|
|
|
return False
|
|
|
|
|
|
preferred = get_hasher(preferred)
|
|
|
- hasher = identify_hasher(encoded)
|
|
|
+ try:
|
|
|
+ hasher = identify_hasher(encoded)
|
|
|
+ except ValueError:
|
|
|
+ # encoded is gibberish or uses a hasher that's no longer installed.
|
|
|
+ return False
|
|
|
|
|
|
hasher_changed = hasher.algorithm != preferred.algorithm
|
|
|
must_update = hasher_changed or preferred.must_update(encoded)
|