mirror of https://github.com/jumpserver/jumpserver
fix: 修复校验用户密码规则
parent
9a541ebf05
commit
d46f1080f8
|
@ -209,6 +209,11 @@ class RoleMixin:
|
||||||
from orgs.models import ROLE as ORG_ROLE
|
from orgs.models import ROLE as ORG_ROLE
|
||||||
return [str(role.label) for role in self.org_roles if role in ORG_ROLE]
|
return [str(role.label) for role in self.org_roles if role in ORG_ROLE]
|
||||||
|
|
||||||
|
@lazyproperty
|
||||||
|
def org_roles_value_list(self):
|
||||||
|
from orgs.models import ROLE as ORG_ROLE
|
||||||
|
return [str(role.value) for role in self.org_roles if role in ORG_ROLE]
|
||||||
|
|
||||||
@lazyproperty
|
@lazyproperty
|
||||||
def org_role_display(self):
|
def org_role_display(self):
|
||||||
return ' | '.join(self.org_roles_label_list)
|
return ' | '.join(self.org_roles_label_list)
|
||||||
|
|
|
@ -32,7 +32,7 @@ class UserUpdatePasswordSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
def validate_new_password(self, value):
|
def validate_new_password(self, value):
|
||||||
from ..utils import check_password_rules
|
from ..utils import check_password_rules
|
||||||
if not check_password_rules(value, user=self.instance):
|
if not check_password_rules(value, is_org_admin=self.instance.is_org_admin):
|
||||||
msg = _('Password does not match security rules')
|
msg = _('Password does not match security rules')
|
||||||
raise serializers.ValidationError(msg)
|
raise serializers.ValidationError(msg)
|
||||||
if self.instance.is_history_password(value):
|
if self.instance.is_history_password(value):
|
||||||
|
|
|
@ -116,6 +116,18 @@ class UserSerializer(CommonBulkSerializerMixin, serializers.ModelSerializer):
|
||||||
raise serializers.ValidationError(msg)
|
raise serializers.ValidationError(msg)
|
||||||
return value
|
return value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_org_admin(self):
|
||||||
|
roles = []
|
||||||
|
role = self.initial_data.get('role')
|
||||||
|
if role:
|
||||||
|
roles.append(role)
|
||||||
|
org_roles = self.initial_data.get('org_roles')
|
||||||
|
if org_roles:
|
||||||
|
roles.extend(org_roles)
|
||||||
|
is_org_admin = User.ROLE.ADMIN.value in roles
|
||||||
|
return is_org_admin
|
||||||
|
|
||||||
def validate_password(self, password):
|
def validate_password(self, password):
|
||||||
from ..utils import check_password_rules
|
from ..utils import check_password_rules
|
||||||
password_strategy = self.initial_data.get('password_strategy')
|
password_strategy = self.initial_data.get('password_strategy')
|
||||||
|
@ -125,7 +137,7 @@ class UserSerializer(CommonBulkSerializerMixin, serializers.ModelSerializer):
|
||||||
if self.instance and not password:
|
if self.instance and not password:
|
||||||
# 更新用户, 未设置密码
|
# 更新用户, 未设置密码
|
||||||
return
|
return
|
||||||
if not check_password_rules(password, user=self.instance):
|
if not check_password_rules(password, is_org_admin=self.is_org_admin):
|
||||||
msg = _('Password does not match security rules')
|
msg = _('Password does not match security rules')
|
||||||
raise serializers.ValidationError(msg)
|
raise serializers.ValidationError(msg)
|
||||||
return password
|
return password
|
||||||
|
|
|
@ -308,7 +308,7 @@ def get_password_check_rules(user):
|
||||||
return check_rules
|
return check_rules
|
||||||
|
|
||||||
|
|
||||||
def check_password_rules(password, user):
|
def check_password_rules(password, is_org_admin=False):
|
||||||
pattern = r"^"
|
pattern = r"^"
|
||||||
if settings.SECURITY_PASSWORD_UPPER_CASE:
|
if settings.SECURITY_PASSWORD_UPPER_CASE:
|
||||||
pattern += '(?=.*[A-Z])'
|
pattern += '(?=.*[A-Z])'
|
||||||
|
@ -319,7 +319,7 @@ def check_password_rules(password, user):
|
||||||
if settings.SECURITY_PASSWORD_SPECIAL_CHAR:
|
if settings.SECURITY_PASSWORD_SPECIAL_CHAR:
|
||||||
pattern += '(?=.*[`~!@#\$%\^&\*\(\)-=_\+\[\]\{\}\|;:\'\",\.<>\/\?])'
|
pattern += '(?=.*[`~!@#\$%\^&\*\(\)-=_\+\[\]\{\}\|;:\'\",\.<>\/\?])'
|
||||||
pattern += '[a-zA-Z\d`~!@#\$%\^&\*\(\)-=_\+\[\]\{\}\|;:\'\",\.<>\/\?]'
|
pattern += '[a-zA-Z\d`~!@#\$%\^&\*\(\)-=_\+\[\]\{\}\|;:\'\",\.<>\/\?]'
|
||||||
if user.is_org_admin:
|
if is_org_admin:
|
||||||
min_length = settings.SECURITY_ADMIN_USER_PASSWORD_MIN_LENGTH
|
min_length = settings.SECURITY_ADMIN_USER_PASSWORD_MIN_LENGTH
|
||||||
else:
|
else:
|
||||||
min_length = settings.SECURITY_PASSWORD_MIN_LENGTH
|
min_length = settings.SECURITY_PASSWORD_MIN_LENGTH
|
||||||
|
|
|
@ -101,7 +101,7 @@ class UserResetPasswordView(FormView):
|
||||||
return self.form_invalid(form)
|
return self.form_invalid(form)
|
||||||
|
|
||||||
password = form.cleaned_data['new_password']
|
password = form.cleaned_data['new_password']
|
||||||
is_ok = check_password_rules(password, user)
|
is_ok = check_password_rules(password, is_org_admin=user.is_org_admin)
|
||||||
if not is_ok:
|
if not is_ok:
|
||||||
error = _('* Your password does not meet the requirements')
|
error = _('* Your password does not meet the requirements')
|
||||||
form.add_error('new_password', error)
|
form.add_error('new_password', error)
|
||||||
|
|
Loading…
Reference in New Issue