import os from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ from orchestra.contrib.orchestration import Operation def validate_paths_exist(user, paths): operations = [] user.paths_to_validate = paths operations.extend(Operation.create_for_action(user, 'validate_paths_exist')) logs = Operation.execute(operations) stderr = '\n'.join([log.stderr for log in logs]) if 'path does not exists' in stderr: raise ValidationError(stderr) def validate_home(user, data, account): """ validates home based on account and data['shell'] """ if not 'username' in data and not user.pk: # other validation will have been raised for required username return user = type(user)( username=data.get('username') or user.username, shell=data.get('shell') or user.shell, ) if 'home' in data and data['home']: home = os.path.normpath(data['home']) user_home = user.get_base_home() account_home = account.main_systemuser.get_home() if user.has_shell: if home != user_home: raise ValidationError({ 'home': _("Not a valid home directory.") }) elif home not in (user_home, account_home): raise ValidationError({ 'home': _("Not a valid home directory.") }) if 'directory' in data and data['directory']: path = os.path.join(data['home'], data['directory']) try: validate_paths_exist(user, (path,)) except ValidationError as err: raise ValidationError({ 'directory': err, })