mirror of https://github.com/jumpserver/jumpserver
fix: 用户手机号没有校验 (#6875)
Co-authored-by: xinwen <coderWen@126.com> Co-authored-by: Jiangjie.Bai <32935519+BaiJiangJie@users.noreply.github.com>pull/6880/head
parent
45aefa6b75
commit
43f30b37da
|
@ -1,5 +1,7 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
#
|
#
|
||||||
|
import re
|
||||||
|
|
||||||
from django.core.validators import RegexValidator
|
from django.core.validators import RegexValidator
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from rest_framework.validators import (
|
from rest_framework.validators import (
|
||||||
|
@ -32,3 +34,12 @@ class NoSpecialChars:
|
||||||
raise serializers.ValidationError(
|
raise serializers.ValidationError(
|
||||||
_("Should not contains special characters")
|
_("Should not contains special characters")
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class PhoneValidator:
|
||||||
|
pattern = re.compile(r"^1[356789]\d{9}$")
|
||||||
|
message = _('The mobile phone number format is incorrect')
|
||||||
|
|
||||||
|
def __call__(self, value):
|
||||||
|
if not self.pattern.match(value):
|
||||||
|
raise serializers.ValidationError(self.message)
|
||||||
|
|
|
@ -2138,18 +2138,22 @@ msgstr "忽略时间"
|
||||||
msgid "Invalid ip"
|
msgid "Invalid ip"
|
||||||
msgstr "无效IP"
|
msgstr "无效IP"
|
||||||
|
|
||||||
#: common/validators.py:13
|
#: common/validators.py:15
|
||||||
msgid "Special char not allowed"
|
msgid "Special char not allowed"
|
||||||
msgstr "不能包含特殊字符"
|
msgstr "不能包含特殊字符"
|
||||||
|
|
||||||
#: common/validators.py:25
|
#: common/validators.py:27
|
||||||
msgid "This field must be unique."
|
msgid "This field must be unique."
|
||||||
msgstr "字段必须唯一"
|
msgstr "字段必须唯一"
|
||||||
|
|
||||||
#: common/validators.py:33
|
#: common/validators.py:35
|
||||||
msgid "Should not contains special characters"
|
msgid "Should not contains special characters"
|
||||||
msgstr "不能包含特殊字符"
|
msgstr "不能包含特殊字符"
|
||||||
|
|
||||||
|
#: common/validators.py:41
|
||||||
|
msgid "The mobile phone number format is incorrect"
|
||||||
|
msgstr "手机号格式不正确"
|
||||||
|
|
||||||
#: jumpserver/context_processor.py:20
|
#: jumpserver/context_processor.py:20
|
||||||
msgid "JumpServer Open Source Bastion Host"
|
msgid "JumpServer Open Source Bastion Host"
|
||||||
msgstr "JumpServer 开源堡垒机"
|
msgstr "JumpServer 开源堡垒机"
|
||||||
|
@ -2400,7 +2404,7 @@ msgstr "组织审计员"
|
||||||
msgid "GLOBAL"
|
msgid "GLOBAL"
|
||||||
msgstr "全局组织"
|
msgstr "全局组织"
|
||||||
|
|
||||||
#: orgs/models.py:434 users/models/user.py:614 users/serializers/user.py:36
|
#: orgs/models.py:434 users/models/user.py:614 users/serializers/user.py:37
|
||||||
#: users/templates/users/_select_user_modal.html:15
|
#: users/templates/users/_select_user_modal.html:15
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr "角色"
|
msgstr "角色"
|
||||||
|
@ -2487,15 +2491,15 @@ msgstr "来自工单"
|
||||||
#: perms/serializers/application/permission.py:18
|
#: perms/serializers/application/permission.py:18
|
||||||
#: perms/serializers/application/permission.py:38
|
#: perms/serializers/application/permission.py:38
|
||||||
#: perms/serializers/asset/permission.py:42
|
#: perms/serializers/asset/permission.py:42
|
||||||
#: perms/serializers/asset/permission.py:68 users/serializers/user.py:77
|
#: perms/serializers/asset/permission.py:68 users/serializers/user.py:78
|
||||||
msgid "Is valid"
|
msgid "Is valid"
|
||||||
msgstr "账户是否有效"
|
msgstr "账户是否有效"
|
||||||
|
|
||||||
#: perms/serializers/application/permission.py:19
|
#: perms/serializers/application/permission.py:19
|
||||||
#: perms/serializers/application/permission.py:37
|
#: perms/serializers/application/permission.py:37
|
||||||
#: perms/serializers/asset/permission.py:43
|
#: perms/serializers/asset/permission.py:43
|
||||||
#: perms/serializers/asset/permission.py:67 users/serializers/user.py:28
|
#: perms/serializers/asset/permission.py:67 users/serializers/user.py:29
|
||||||
#: users/serializers/user.py:78
|
#: users/serializers/user.py:79
|
||||||
msgid "Is expired"
|
msgid "Is expired"
|
||||||
msgstr "是否过期"
|
msgstr "是否过期"
|
||||||
|
|
||||||
|
@ -5263,7 +5267,7 @@ msgstr ""
|
||||||
msgid "The old password is incorrect"
|
msgid "The old password is incorrect"
|
||||||
msgstr "旧密码错误"
|
msgstr "旧密码错误"
|
||||||
|
|
||||||
#: users/serializers/profile.py:36 users/serializers/user.py:138
|
#: users/serializers/profile.py:36 users/serializers/user.py:140
|
||||||
msgid "Password does not match security rules"
|
msgid "Password does not match security rules"
|
||||||
msgstr "密码不满足安全规则"
|
msgstr "密码不满足安全规则"
|
||||||
|
|
||||||
|
@ -5275,85 +5279,85 @@ msgstr "新密码不能是最近 {} 次的密码"
|
||||||
msgid "The newly set password is inconsistent"
|
msgid "The newly set password is inconsistent"
|
||||||
msgstr "两次密码不一致"
|
msgstr "两次密码不一致"
|
||||||
|
|
||||||
#: users/serializers/profile.py:121 users/serializers/user.py:76
|
#: users/serializers/profile.py:121 users/serializers/user.py:77
|
||||||
msgid "Is first login"
|
msgid "Is first login"
|
||||||
msgstr "首次登录"
|
msgstr "首次登录"
|
||||||
|
|
||||||
#: users/serializers/user.py:22
|
#: users/serializers/user.py:23
|
||||||
#: xpack/plugins/change_auth_plan/models/base.py:32
|
#: xpack/plugins/change_auth_plan/models/base.py:32
|
||||||
#: xpack/plugins/change_auth_plan/serializers/base.py:24
|
#: xpack/plugins/change_auth_plan/serializers/base.py:24
|
||||||
msgid "Password strategy"
|
msgid "Password strategy"
|
||||||
msgstr "密码策略"
|
msgstr "密码策略"
|
||||||
|
|
||||||
#: users/serializers/user.py:24
|
#: users/serializers/user.py:25
|
||||||
msgid "MFA enabled"
|
msgid "MFA enabled"
|
||||||
msgstr "是否开启多因子认证"
|
msgstr "是否开启多因子认证"
|
||||||
|
|
||||||
#: users/serializers/user.py:25
|
#: users/serializers/user.py:26
|
||||||
msgid "MFA force enabled"
|
msgid "MFA force enabled"
|
||||||
msgstr "强制启用多因子认证"
|
msgstr "强制启用多因子认证"
|
||||||
|
|
||||||
#: users/serializers/user.py:26
|
#: users/serializers/user.py:27
|
||||||
msgid "MFA level display"
|
msgid "MFA level display"
|
||||||
msgstr "多因子认证等级名称"
|
msgstr "多因子认证等级名称"
|
||||||
|
|
||||||
#: users/serializers/user.py:27
|
#: users/serializers/user.py:28
|
||||||
msgid "Login blocked"
|
msgid "Login blocked"
|
||||||
msgstr "登录被阻塞"
|
msgstr "登录被阻塞"
|
||||||
|
|
||||||
#: users/serializers/user.py:29
|
#: users/serializers/user.py:30
|
||||||
msgid "Can update"
|
msgid "Can update"
|
||||||
msgstr "是否可更新"
|
msgstr "是否可更新"
|
||||||
|
|
||||||
#: users/serializers/user.py:30
|
#: users/serializers/user.py:31
|
||||||
msgid "Can delete"
|
msgid "Can delete"
|
||||||
msgstr "是否可删除"
|
msgstr "是否可删除"
|
||||||
|
|
||||||
#: users/serializers/user.py:31
|
#: users/serializers/user.py:32
|
||||||
msgid "Can public key authentication"
|
msgid "Can public key authentication"
|
||||||
msgstr "能否公钥认证"
|
msgstr "能否公钥认证"
|
||||||
|
|
||||||
#: users/serializers/user.py:33 users/serializers/user.py:83
|
#: users/serializers/user.py:34 users/serializers/user.py:84
|
||||||
msgid "Organization role name"
|
msgid "Organization role name"
|
||||||
msgstr "组织角色名称"
|
msgstr "组织角色名称"
|
||||||
|
|
||||||
#: users/serializers/user.py:79
|
#: users/serializers/user.py:80
|
||||||
msgid "Avatar url"
|
msgid "Avatar url"
|
||||||
msgstr "头像路径"
|
msgstr "头像路径"
|
||||||
|
|
||||||
#: users/serializers/user.py:81
|
#: users/serializers/user.py:82
|
||||||
msgid "Groups name"
|
msgid "Groups name"
|
||||||
msgstr "用户组名"
|
msgstr "用户组名"
|
||||||
|
|
||||||
#: users/serializers/user.py:82
|
#: users/serializers/user.py:83
|
||||||
msgid "Source name"
|
msgid "Source name"
|
||||||
msgstr "用户来源名"
|
msgstr "用户来源名"
|
||||||
|
|
||||||
#: users/serializers/user.py:84
|
#: users/serializers/user.py:85
|
||||||
msgid "Super role name"
|
msgid "Super role name"
|
||||||
msgstr "超级角色名称"
|
msgstr "超级角色名称"
|
||||||
|
|
||||||
#: users/serializers/user.py:85
|
#: users/serializers/user.py:86
|
||||||
msgid "Total role name"
|
msgid "Total role name"
|
||||||
msgstr "汇总角色名称"
|
msgstr "汇总角色名称"
|
||||||
|
|
||||||
#: users/serializers/user.py:87
|
#: users/serializers/user.py:88
|
||||||
msgid "Is wecom bound"
|
msgid "Is wecom bound"
|
||||||
msgstr "是否绑定了企业微信"
|
msgstr "是否绑定了企业微信"
|
||||||
|
|
||||||
#: users/serializers/user.py:88
|
#: users/serializers/user.py:89
|
||||||
msgid "Is dingtalk bound"
|
msgid "Is dingtalk bound"
|
||||||
msgstr "是否绑定了钉钉"
|
msgstr "是否绑定了钉钉"
|
||||||
|
|
||||||
#: users/serializers/user.py:89
|
#: users/serializers/user.py:90
|
||||||
msgid "Is feishu bound"
|
msgid "Is feishu bound"
|
||||||
msgstr "是否绑定了飞书"
|
msgstr "是否绑定了飞书"
|
||||||
|
|
||||||
#: users/serializers/user.py:112
|
#: users/serializers/user.py:114
|
||||||
msgid "Role limit to {}"
|
msgid "Role limit to {}"
|
||||||
msgstr "角色只能为 {}"
|
msgstr "角色只能为 {}"
|
||||||
|
|
||||||
#: users/serializers/user.py:232
|
#: users/serializers/user.py:234
|
||||||
msgid "name not unique"
|
msgid "name not unique"
|
||||||
msgstr "名称重复"
|
msgstr "名称重复"
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@ from rest_framework import serializers
|
||||||
|
|
||||||
from common.mixins import CommonBulkSerializerMixin
|
from common.mixins import CommonBulkSerializerMixin
|
||||||
from common.permissions import CanUpdateDeleteUser
|
from common.permissions import CanUpdateDeleteUser
|
||||||
|
from common.validators import PhoneValidator
|
||||||
from orgs.models import ROLE as ORG_ROLE
|
from orgs.models import ROLE as ORG_ROLE
|
||||||
from ..models import User
|
from ..models import User
|
||||||
from ..const import SystemOrOrgRole, PasswordStrategy
|
from ..const import SystemOrOrgRole, PasswordStrategy
|
||||||
|
@ -87,6 +88,7 @@ class UserSerializer(CommonBulkSerializerMixin, serializers.ModelSerializer):
|
||||||
'is_wecom_bound': {'label': _('Is wecom bound')},
|
'is_wecom_bound': {'label': _('Is wecom bound')},
|
||||||
'is_dingtalk_bound': {'label': _('Is dingtalk bound')},
|
'is_dingtalk_bound': {'label': _('Is dingtalk bound')},
|
||||||
'is_feishu_bound': {'label': _('Is feishu bound')},
|
'is_feishu_bound': {'label': _('Is feishu bound')},
|
||||||
|
'phone': {'validators': [PhoneValidator()]},
|
||||||
}
|
}
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
|
|
Loading…
Reference in New Issue