Fixed errors with systemuser form and serializer
This commit is contained in:
parent
66fb997f65
commit
3348218c62
|
@ -62,6 +62,7 @@ class SystemUserFormMixin(object):
|
||||||
if home and self.MOCK_USERNAME in home:
|
if home and self.MOCK_USERNAME in home:
|
||||||
username = self.cleaned_data.get('username', '')
|
username = self.cleaned_data.get('username', '')
|
||||||
self.cleaned_data['home'] = home.replace(self.MOCK_USERNAME, username)
|
self.cleaned_data['home'] = home.replace(self.MOCK_USERNAME, username)
|
||||||
|
self.instance.validate_home(self.cleaned_data, self.account)
|
||||||
|
|
||||||
|
|
||||||
class SystemUserCreationForm(SystemUserFormMixin, UserCreationForm):
|
class SystemUserCreationForm(SystemUserFormMixin, UserCreationForm):
|
||||||
|
|
|
@ -88,6 +88,29 @@ class SystemUser(models.Model):
|
||||||
'directory': directory_error,
|
'directory': directory_error,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
def validate_home(self, data, account):
|
||||||
|
""" validates home based on account and data['shell'] """
|
||||||
|
if not 'username' in data and not self.pk:
|
||||||
|
# other validation will have raised for required username
|
||||||
|
return
|
||||||
|
user = type(self)(
|
||||||
|
username=data.get('username') or self.username,
|
||||||
|
shell=data.get('shell') or self.shell,
|
||||||
|
)
|
||||||
|
if 'home' in data and data['home']:
|
||||||
|
home = data['home'].rstrip('/')
|
||||||
|
user_home = user.get_home().rstrip('/')
|
||||||
|
account_home = account.main_systemuser.get_home().rstrip('/')
|
||||||
|
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.")
|
||||||
|
})
|
||||||
|
|
||||||
def set_password(self, raw_password):
|
def set_password(self, raw_password):
|
||||||
self.password = make_password(raw_password)
|
self.password = make_password(raw_password)
|
||||||
|
|
||||||
|
|
|
@ -40,17 +40,7 @@ class SystemUserSerializer(AccountSerializerMixin, HyperlinkedModelSerializer):
|
||||||
username=attrs.get('username') or self.object.username,
|
username=attrs.get('username') or self.object.username,
|
||||||
shell=attrs.get('shell') or self.object.shell,
|
shell=attrs.get('shell') or self.object.shell,
|
||||||
)
|
)
|
||||||
if 'home' in attrs and attrs['home']:
|
user.validate_home(attrs, self.account)
|
||||||
home = attrs['home'].rstrip('/') + '/'
|
|
||||||
if user.has_shell:
|
|
||||||
if home != user.get_base_home():
|
|
||||||
raise ValidationError({
|
|
||||||
'home': _("Not a valid home directory.")
|
|
||||||
})
|
|
||||||
elif home not in (user.get_home(), self.account.main_systemuser.get_home()):
|
|
||||||
raise ValidationError({
|
|
||||||
'home': _("Not a valid home directory.")
|
|
||||||
})
|
|
||||||
return attrs
|
return attrs
|
||||||
|
|
||||||
def validate_password(self, attrs, source):
|
def validate_password(self, attrs, source):
|
||||||
|
|
Loading…
Reference in a new issue