From 70713af95a2bb330650ce11c63c18a31ac66a01a Mon Sep 17 00:00:00 2001 From: BaiJiangJie Date: Sat, 12 Oct 2019 16:51:09 +0800 Subject: [PATCH] =?UTF-8?q?[Update]=20=E9=99=90=E5=88=B6=E7=BB=84=E7=BB=87?= =?UTF-8?q?=E5=90=8D=E7=A7=B0=E4=B8=AD=E4=BD=BF=E7=94=A8=E7=9A=84=E7=89=B9?= =?UTF-8?q?=E6=AE=8A=E5=AD=97=E7=AC=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/const.py | 14 ++++++++++++++ apps/assets/forms/asset.py | 9 +++------ apps/assets/serializers/asset.py | 8 ++++++-- apps/orgs/serializers.py | 15 ++++++++++++++- 4 files changed, 37 insertions(+), 9 deletions(-) create mode 100644 apps/assets/const.py diff --git a/apps/assets/const.py b/apps/assets/const.py new file mode 100644 index 000000000..c23b700ba --- /dev/null +++ b/apps/assets/const.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- +# + +from django.utils.translation import ugettext_lazy as _ + + +GENERAL_LIMIT_SPECIAL_CHARACTERS_HELP_TEXT = _( + 'Only Numbers、letters、 chinese and characters ( {} ) are allowed' +).format(" ".join(['.', '_', '@', '-'])) + +GENERAL_LIMIT_SPECIAL_CHARACTERS_PATTERN = r"^[\._@\w-]+$" + +GENERAL_LIMIT_SPECIAL_CHARACTERS_ERROR_MSG = \ + _("* The contains characters that are not allowed") diff --git a/apps/assets/forms/asset.py b/apps/assets/forms/asset.py index d83172373..d3d64d602 100644 --- a/apps/assets/forms/asset.py +++ b/apps/assets/forms/asset.py @@ -7,6 +7,7 @@ from common.utils import get_logger from orgs.mixins.forms import OrgModelForm from ..models import Asset, Node +from ..const import GENERAL_LIMIT_SPECIAL_CHARACTERS_HELP_TEXT logger = get_logger(__file__) @@ -14,10 +15,6 @@ __all__ = [ 'AssetCreateForm', 'AssetUpdateForm', 'AssetBulkUpdateForm', 'ProtocolForm', ] -HELP_TEXTS_ASSET_HOSTNAME = _( - 'Only Numbers、letters、 chinese and characters ( {} ) are allowed' -).format(" ".join(['.', '_', '@'])) - class ProtocolForm(forms.Form): name = forms.ChoiceField( @@ -72,7 +69,7 @@ class AssetCreateForm(OrgModelForm): 'nodes': _("Node"), } help_texts = { - 'hostname': HELP_TEXTS_ASSET_HOSTNAME, + 'hostname': GENERAL_LIMIT_SPECIAL_CHARACTERS_HELP_TEXT, 'admin_user': _( 'root or other NOPASSWD sudo privilege user existed in asset,' 'If asset is windows or other set any one, more see admin user left menu' @@ -119,7 +116,7 @@ class AssetUpdateForm(OrgModelForm): 'nodes': _("Node"), } help_texts = { - 'hostname': HELP_TEXTS_ASSET_HOSTNAME, + 'hostname': GENERAL_LIMIT_SPECIAL_CHARACTERS_HELP_TEXT, 'admin_user': _( 'root or other NOPASSWD sudo privilege user existed in asset,' 'If asset is windows or other set any one, more see admin user left menu' diff --git a/apps/assets/serializers/asset.py b/apps/assets/serializers/asset.py index c53b3057d..529ee1fde 100644 --- a/apps/assets/serializers/asset.py +++ b/apps/assets/serializers/asset.py @@ -8,6 +8,10 @@ from django.utils.translation import ugettext_lazy as _ from orgs.mixins.serializers import BulkOrgResourceModelSerializer from common.serializers import AdaptedBulkListSerializer from ..models import Asset, Node, Label +from ..const import ( + GENERAL_LIMIT_SPECIAL_CHARACTERS_PATTERN, + GENERAL_LIMIT_SPECIAL_CHARACTERS_ERROR_MSG +) from .base import ConnectivitySerializer __all__ = [ @@ -94,10 +98,10 @@ class AssetSerializer(BulkOrgResourceModelSerializer): @staticmethod def validate_hostname(hostname): - pattern = r"^[\._@\w-]+$" + pattern = GENERAL_LIMIT_SPECIAL_CHARACTERS_PATTERN res = re.match(pattern, hostname) if res is None: - msg = _("* The hostname contains characters that are not allowed") + msg = GENERAL_LIMIT_SPECIAL_CHARACTERS_ERROR_MSG raise serializers.ValidationError(msg) return hostname diff --git a/apps/orgs/serializers.py b/apps/orgs/serializers.py index 222598c88..8f4df1e10 100644 --- a/apps/orgs/serializers.py +++ b/apps/orgs/serializers.py @@ -1,9 +1,13 @@ +import re from rest_framework.serializers import ModelSerializer from rest_framework import serializers - from users.models import User, UserGroup from assets.models import Asset, Domain, AdminUser, SystemUser, Label +from assets.const import ( + GENERAL_LIMIT_SPECIAL_CHARACTERS_PATTERN, + GENERAL_LIMIT_SPECIAL_CHARACTERS_ERROR_MSG +) from perms.models import AssetPermission from common.serializers import AdaptedBulkListSerializer from .utils import set_current_org, get_current_org @@ -18,6 +22,15 @@ class OrgSerializer(ModelSerializer): fields = '__all__' read_only_fields = ['created_by', 'date_created'] + @staticmethod + def validate_name(name): + pattern = GENERAL_LIMIT_SPECIAL_CHARACTERS_PATTERN + res = re.match(pattern, name) + if res is None: + msg = GENERAL_LIMIT_SPECIAL_CHARACTERS_ERROR_MSG + raise serializers.ValidationError(msg) + return name + class OrgReadSerializer(ModelSerializer): admins = serializers.SlugRelatedField(slug_field='name', many=True, read_only=True)