Move UN / PW validation to helper _assert methods.

This commit is contained in:
voussoir 2018-02-16 22:18:19 -08:00
parent 173c07a0bf
commit 16ac6f8b85

View file

@ -785,6 +785,30 @@ class PDBUserMixin:
super().__init__() super().__init__()
self._user_cache = cacheclass.Cache() self._user_cache = cacheclass.Cache()
def _assert_valid_password(self, password):
if len(password) < self.config['user']['min_password_length']:
raise exceptions.PasswordTooShort(min_length=self.config['user']['min_password_length'])
def _assert_valid_username(self, username):
'''
If something is wrong, raise an exception. Otherwise do nothing.
'''
if len(username) < self.config['user']['min_length']:
raise exceptions.UsernameTooShort(
username=username,
min_length=self.config['user']['min_length']
)
if len(username) > self.config['user']['max_length']:
raise exceptions.UsernameTooLong(
username=username,
max_length=self.config['user']['max_length']
)
badchars = [c for c in username if c not in self.config['user']['valid_chars']]
if badchars:
raise exceptions.InvalidUsernameChars(username=username, badchars=badchars)
def generate_user_id(self): def generate_user_id(self):
''' '''
User IDs are randomized instead of integers like the other objects, User IDs are randomized instead of integers like the other objects,
@ -874,28 +898,13 @@ class PDBUserMixin:
@decorators.required_feature('user.new') @decorators.required_feature('user.new')
@decorators.transaction @decorators.transaction
def register_user(self, username, password, commit=True): def register_user(self, username, password, *, commit=True):
if len(username) < self.config['user']['min_length']: self._assert_valid_username(username)
raise exceptions.UsernameTooShort(
username=username,
min_length=self.config['user']['min_length']
)
if len(username) > self.config['user']['max_length']:
raise exceptions.UsernameTooLong(
username=username,
max_length=self.config['user']['max_length']
)
badchars = [c for c in username if c not in self.config['user']['valid_chars']]
if badchars:
raise exceptions.InvalidUsernameChars(username=username, badchars=badchars)
if not isinstance(password, bytes): if not isinstance(password, bytes):
password = password.encode('utf-8') password = password.encode('utf-8')
if len(password) < self.config['user']['min_password_length']: self._assert_valid_password(password)
raise exceptions.PasswordTooShort(min_length=self.config['user']['min_password_length'])
try: try:
existing_user = self.get_user(username=username) existing_user = self.get_user(username=username)