Commit fbe4f4c1 authored by ibuler's avatar ibuler

Merge branch 'dev' of github.com:jumpserver/jumpserver into dev

parents 4d53b6f0 39b41458
...@@ -4,11 +4,11 @@ ...@@ -4,11 +4,11 @@
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
GENERAL_LIMIT_SPECIAL_CHARACTERS_HELP_TEXT = _( GENERAL_FORBIDDEN_SPECIAL_CHARACTERS_HELP_TEXT = _(
'Only Numbers、letters、 chinese and characters ( {} ) are allowed' 'Cannot contain special characters: [ {} ]'
).format(" ".join(['.', '_', '@', '-'])) ).format(" ".join(['/', '\\']))
GENERAL_LIMIT_SPECIAL_CHARACTERS_PATTERN = r"^[\._@\w-]+$" GENERAL_FORBIDDEN_SPECIAL_CHARACTERS_PATTERN = r"[/\\]"
GENERAL_LIMIT_SPECIAL_CHARACTERS_ERROR_MSG = \ GENERAL_FORBIDDEN_SPECIAL_CHARACTERS_ERROR_MSG = \
_("* The contains characters that are not allowed") _("* The contains characters that are not allowed")
...@@ -7,7 +7,7 @@ from common.utils import get_logger ...@@ -7,7 +7,7 @@ from common.utils import get_logger
from orgs.mixins.forms import OrgModelForm from orgs.mixins.forms import OrgModelForm
from ..models import Asset, Node from ..models import Asset, Node
from ..const import GENERAL_LIMIT_SPECIAL_CHARACTERS_HELP_TEXT from ..const import GENERAL_FORBIDDEN_SPECIAL_CHARACTERS_HELP_TEXT
logger = get_logger(__file__) logger = get_logger(__file__)
...@@ -69,7 +69,7 @@ class AssetCreateForm(OrgModelForm): ...@@ -69,7 +69,7 @@ class AssetCreateForm(OrgModelForm):
'nodes': _("Node"), 'nodes': _("Node"),
} }
help_texts = { help_texts = {
'hostname': GENERAL_LIMIT_SPECIAL_CHARACTERS_HELP_TEXT, 'hostname': GENERAL_FORBIDDEN_SPECIAL_CHARACTERS_HELP_TEXT,
'admin_user': _( 'admin_user': _(
'root or other NOPASSWD sudo privilege user existed in asset,' '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' 'If asset is windows or other set any one, more see admin user left menu'
...@@ -116,7 +116,7 @@ class AssetUpdateForm(OrgModelForm): ...@@ -116,7 +116,7 @@ class AssetUpdateForm(OrgModelForm):
'nodes': _("Node"), 'nodes': _("Node"),
} }
help_texts = { help_texts = {
'hostname': GENERAL_LIMIT_SPECIAL_CHARACTERS_HELP_TEXT, 'hostname': GENERAL_FORBIDDEN_SPECIAL_CHARACTERS_HELP_TEXT,
'admin_user': _( 'admin_user': _(
'root or other NOPASSWD sudo privilege user existed in asset,' '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' 'If asset is windows or other set any one, more see admin user left menu'
......
...@@ -6,7 +6,7 @@ from django.utils.translation import gettext_lazy as _ ...@@ -6,7 +6,7 @@ from django.utils.translation import gettext_lazy as _
from common.utils import validate_ssh_private_key, ssh_pubkey_gen, get_logger from common.utils import validate_ssh_private_key, ssh_pubkey_gen, get_logger
from orgs.mixins.forms import OrgModelForm from orgs.mixins.forms import OrgModelForm
from ..models import AdminUser, SystemUser from ..models import AdminUser, SystemUser
from ..const import GENERAL_LIMIT_SPECIAL_CHARACTERS_HELP_TEXT from ..const import GENERAL_FORBIDDEN_SPECIAL_CHARACTERS_HELP_TEXT
logger = get_logger(__file__) logger = get_logger(__file__)
__all__ = [ __all__ = [
...@@ -99,7 +99,7 @@ class SystemUserForm(OrgModelForm, PasswordAndKeyAuthForm): ...@@ -99,7 +99,7 @@ class SystemUserForm(OrgModelForm, PasswordAndKeyAuthForm):
}), }),
} }
help_texts = { help_texts = {
'name': GENERAL_LIMIT_SPECIAL_CHARACTERS_HELP_TEXT, 'name': GENERAL_FORBIDDEN_SPECIAL_CHARACTERS_HELP_TEXT,
'auto_push': _('Auto push system user to asset'), 'auto_push': _('Auto push system user to asset'),
'priority': _('1-100, High level will be using login asset as default, ' 'priority': _('1-100, High level will be using login asset as default, '
'if user was granted more than 2 system user'), 'if user was granted more than 2 system user'),
......
...@@ -9,8 +9,8 @@ from orgs.mixins.serializers import BulkOrgResourceModelSerializer ...@@ -9,8 +9,8 @@ from orgs.mixins.serializers import BulkOrgResourceModelSerializer
from common.serializers import AdaptedBulkListSerializer from common.serializers import AdaptedBulkListSerializer
from ..models import Asset, Node, Label from ..models import Asset, Node, Label
from ..const import ( from ..const import (
GENERAL_LIMIT_SPECIAL_CHARACTERS_PATTERN, GENERAL_FORBIDDEN_SPECIAL_CHARACTERS_PATTERN,
GENERAL_LIMIT_SPECIAL_CHARACTERS_ERROR_MSG GENERAL_FORBIDDEN_SPECIAL_CHARACTERS_ERROR_MSG
) )
from .base import ConnectivitySerializer from .base import ConnectivitySerializer
...@@ -98,10 +98,10 @@ class AssetSerializer(BulkOrgResourceModelSerializer): ...@@ -98,10 +98,10 @@ class AssetSerializer(BulkOrgResourceModelSerializer):
@staticmethod @staticmethod
def validate_hostname(hostname): def validate_hostname(hostname):
pattern = GENERAL_LIMIT_SPECIAL_CHARACTERS_PATTERN pattern = GENERAL_FORBIDDEN_SPECIAL_CHARACTERS_PATTERN
res = re.match(pattern, hostname) res = re.search(pattern, hostname)
if res is None: if res is not None:
msg = GENERAL_LIMIT_SPECIAL_CHARACTERS_ERROR_MSG msg = GENERAL_FORBIDDEN_SPECIAL_CHARACTERS_ERROR_MSG
raise serializers.ValidationError(msg) raise serializers.ValidationError(msg)
return hostname return hostname
......
...@@ -8,8 +8,8 @@ from common.utils import ssh_pubkey_gen ...@@ -8,8 +8,8 @@ from common.utils import ssh_pubkey_gen
from orgs.mixins.serializers import BulkOrgResourceModelSerializer from orgs.mixins.serializers import BulkOrgResourceModelSerializer
from ..models import SystemUser from ..models import SystemUser
from ..const import ( from ..const import (
GENERAL_LIMIT_SPECIAL_CHARACTERS_PATTERN, GENERAL_FORBIDDEN_SPECIAL_CHARACTERS_PATTERN,
GENERAL_LIMIT_SPECIAL_CHARACTERS_ERROR_MSG GENERAL_FORBIDDEN_SPECIAL_CHARACTERS_ERROR_MSG
) )
from .base import AuthSerializer, AuthSerializerMixin from .base import AuthSerializer, AuthSerializerMixin
...@@ -41,10 +41,10 @@ class SystemUserSerializer(AuthSerializerMixin, BulkOrgResourceModelSerializer): ...@@ -41,10 +41,10 @@ class SystemUserSerializer(AuthSerializerMixin, BulkOrgResourceModelSerializer):
@staticmethod @staticmethod
def validate_name(name): def validate_name(name):
pattern = GENERAL_LIMIT_SPECIAL_CHARACTERS_PATTERN pattern = GENERAL_FORBIDDEN_SPECIAL_CHARACTERS_PATTERN
res = re.match(pattern, name) res = re.search(pattern, name)
if res is None: if res is not None:
msg = GENERAL_LIMIT_SPECIAL_CHARACTERS_ERROR_MSG msg = GENERAL_FORBIDDEN_SPECIAL_CHARACTERS_ERROR_MSG
raise serializers.ValidationError(msg) raise serializers.ValidationError(msg)
return name return name
......
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
VERSION = '1.5.3' VERSION = '1.5.4'
...@@ -8,7 +8,7 @@ msgid "" ...@@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Jumpserver 0.3.3\n" "Project-Id-Version: Jumpserver 0.3.3\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-10-21 17:00+0800\n" "POT-Creation-Date: 2019-10-25 10:52+0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: ibuler <ibuler@qq.com>\n" "Last-Translator: ibuler <ibuler@qq.com>\n"
"Language-Team: Jumpserver team<ibuler@qq.com>\n" "Language-Team: Jumpserver team<ibuler@qq.com>\n"
...@@ -78,15 +78,15 @@ msgstr "运行参数" ...@@ -78,15 +78,15 @@ msgstr "运行参数"
#: assets/forms/domain.py:15 assets/forms/label.py:13 #: assets/forms/domain.py:15 assets/forms/label.py:13
#: assets/models/asset.py:295 assets/models/authbook.py:24 #: assets/models/asset.py:295 assets/models/authbook.py:24
#: assets/models/gathered_user.py:14 assets/serializers/admin_user.py:32 #: assets/models/gathered_user.py:14 assets/serializers/admin_user.py:32
#: assets/serializers/asset_user.py:82 assets/serializers/system_user.py:36 #: assets/serializers/asset_user.py:82 assets/serializers/system_user.py:37
#: assets/templates/assets/admin_user_list.html:46 #: assets/templates/assets/admin_user_list.html:46
#: assets/templates/assets/domain_detail.html:60 #: assets/templates/assets/domain_detail.html:60
#: assets/templates/assets/domain_list.html:26 #: assets/templates/assets/domain_list.html:26
#: assets/templates/assets/label_list.html:16 #: assets/templates/assets/label_list.html:16
#: assets/templates/assets/system_user_list.html:55 audits/models.py:19 #: assets/templates/assets/system_user_list.html:51 audits/models.py:19
#: audits/templates/audits/ftp_log_list.html:44 #: audits/templates/audits/ftp_log_list.html:44
#: audits/templates/audits/ftp_log_list.html:74 #: audits/templates/audits/ftp_log_list.html:74
#: perms/forms/asset_permission.py:80 perms/models/asset_permission.py:80 #: perms/forms/asset_permission.py:84 perms/models/asset_permission.py:80
#: perms/templates/perms/asset_permission_create_update.html:45 #: perms/templates/perms/asset_permission_create_update.html:45
#: perms/templates/perms/asset_permission_list.html:52 #: perms/templates/perms/asset_permission_list.html:52
#: perms/templates/perms/asset_permission_list.html:121 #: perms/templates/perms/asset_permission_list.html:121
...@@ -125,7 +125,7 @@ msgstr "资产" ...@@ -125,7 +125,7 @@ msgstr "资产"
#: assets/templates/assets/domain_list.html:25 #: assets/templates/assets/domain_list.html:25
#: assets/templates/assets/label_list.html:14 #: assets/templates/assets/label_list.html:14
#: assets/templates/assets/system_user_detail.html:58 #: assets/templates/assets/system_user_detail.html:58
#: assets/templates/assets/system_user_list.html:51 ops/models/adhoc.py:37 #: assets/templates/assets/system_user_list.html:47 ops/models/adhoc.py:37
#: ops/templates/ops/task_detail.html:60 ops/templates/ops/task_list.html:11 #: ops/templates/ops/task_detail.html:60 ops/templates/ops/task_list.html:11
#: orgs/models.py:12 perms/models/base.py:48 #: orgs/models.py:12 perms/models/base.py:48
#: perms/templates/perms/asset_permission_detail.html:62 #: perms/templates/perms/asset_permission_detail.html:62
...@@ -252,7 +252,7 @@ msgstr "创建日期" ...@@ -252,7 +252,7 @@ msgstr "创建日期"
#: assets/templates/assets/domain_gateway_list.html:72 #: assets/templates/assets/domain_gateway_list.html:72
#: assets/templates/assets/domain_list.html:28 #: assets/templates/assets/domain_list.html:28
#: assets/templates/assets/system_user_detail.html:104 #: assets/templates/assets/system_user_detail.html:104
#: assets/templates/assets/system_user_list.html:59 ops/models/adhoc.py:43 #: assets/templates/assets/system_user_list.html:55 ops/models/adhoc.py:43
#: orgs/models.py:18 perms/models/base.py:56 #: orgs/models.py:18 perms/models/base.py:56
#: perms/templates/perms/asset_permission_detail.html:102 #: perms/templates/perms/asset_permission_detail.html:102
#: perms/templates/perms/remote_app_permission_detail.html:94 #: perms/templates/perms/remote_app_permission_detail.html:94
...@@ -393,10 +393,10 @@ msgstr "详情" ...@@ -393,10 +393,10 @@ msgstr "详情"
#: applications/templates/applications/remote_app_detail.html:21 #: applications/templates/applications/remote_app_detail.html:21
#: applications/templates/applications/remote_app_list.html:54 #: applications/templates/applications/remote_app_list.html:54
#: assets/templates/assets/_asset_user_list.html:74 #: assets/templates/assets/_asset_user_list.html:75
#: assets/templates/assets/admin_user_detail.html:24 #: assets/templates/assets/admin_user_detail.html:24
#: assets/templates/assets/admin_user_list.html:26 #: assets/templates/assets/admin_user_list.html:26
#: assets/templates/assets/admin_user_list.html:111 #: assets/templates/assets/admin_user_list.html:74
#: assets/templates/assets/asset_detail.html:26 #: assets/templates/assets/asset_detail.html:26
#: assets/templates/assets/asset_list.html:78 #: assets/templates/assets/asset_list.html:78
#: assets/templates/assets/asset_list.html:167 #: assets/templates/assets/asset_list.html:167
...@@ -409,8 +409,8 @@ msgstr "详情" ...@@ -409,8 +409,8 @@ msgstr "详情"
#: assets/templates/assets/domain_list.html:54 #: assets/templates/assets/domain_list.html:54
#: assets/templates/assets/label_list.html:39 #: assets/templates/assets/label_list.html:39
#: assets/templates/assets/system_user_detail.html:26 #: assets/templates/assets/system_user_detail.html:26
#: assets/templates/assets/system_user_list.html:33 #: assets/templates/assets/system_user_list.html:29
#: assets/templates/assets/system_user_list.html:85 audits/models.py:33 #: assets/templates/assets/system_user_list.html:81 audits/models.py:33
#: perms/templates/perms/asset_permission_detail.html:30 #: perms/templates/perms/asset_permission_detail.html:30
#: perms/templates/perms/asset_permission_list.html:178 #: perms/templates/perms/asset_permission_list.html:178
#: perms/templates/perms/remote_app_permission_detail.html:30 #: perms/templates/perms/remote_app_permission_detail.html:30
...@@ -442,7 +442,7 @@ msgstr "更新" ...@@ -442,7 +442,7 @@ msgstr "更新"
#: applications/templates/applications/remote_app_detail.html:25 #: applications/templates/applications/remote_app_detail.html:25
#: applications/templates/applications/remote_app_list.html:55 #: applications/templates/applications/remote_app_list.html:55
#: assets/templates/assets/admin_user_detail.html:28 #: assets/templates/assets/admin_user_detail.html:28
#: assets/templates/assets/admin_user_list.html:112 #: assets/templates/assets/admin_user_list.html:75
#: assets/templates/assets/asset_detail.html:30 #: assets/templates/assets/asset_detail.html:30
#: assets/templates/assets/asset_list.html:168 #: assets/templates/assets/asset_list.html:168
#: assets/templates/assets/cmd_filter_detail.html:33 #: assets/templates/assets/cmd_filter_detail.html:33
...@@ -454,7 +454,7 @@ msgstr "更新" ...@@ -454,7 +454,7 @@ msgstr "更新"
#: assets/templates/assets/domain_list.html:55 #: assets/templates/assets/domain_list.html:55
#: assets/templates/assets/label_list.html:40 #: assets/templates/assets/label_list.html:40
#: assets/templates/assets/system_user_detail.html:30 #: assets/templates/assets/system_user_detail.html:30
#: assets/templates/assets/system_user_list.html:86 audits/models.py:34 #: assets/templates/assets/system_user_list.html:82 audits/models.py:34
#: authentication/templates/authentication/_access_key_modal.html:65 #: authentication/templates/authentication/_access_key_modal.html:65
#: ops/templates/ops/task_list.html:69 #: ops/templates/ops/task_list.html:69
#: perms/templates/perms/asset_permission_detail.html:34 #: perms/templates/perms/asset_permission_detail.html:34
...@@ -510,7 +510,7 @@ msgstr "创建远程应用" ...@@ -510,7 +510,7 @@ msgstr "创建远程应用"
#: assets/templates/assets/domain_gateway_list.html:73 #: assets/templates/assets/domain_gateway_list.html:73
#: assets/templates/assets/domain_list.html:29 #: assets/templates/assets/domain_list.html:29
#: assets/templates/assets/label_list.html:17 #: assets/templates/assets/label_list.html:17
#: assets/templates/assets/system_user_list.html:60 audits/models.py:38 #: assets/templates/assets/system_user_list.html:56 audits/models.py:38
#: audits/templates/audits/operate_log_list.html:47 #: audits/templates/audits/operate_log_list.html:47
#: audits/templates/audits/operate_log_list.html:73 #: audits/templates/audits/operate_log_list.html:73
#: authentication/templates/authentication/_access_key_modal.html:34 #: authentication/templates/authentication/_access_key_modal.html:34
...@@ -583,8 +583,8 @@ msgid "Test if the assets under the node are connectable: {}" ...@@ -583,8 +583,8 @@ msgid "Test if the assets under the node are connectable: {}"
msgstr "测试节点下资产是否可连接: {}" msgstr "测试节点下资产是否可连接: {}"
#: assets/const.py:8 #: assets/const.py:8
msgid "Only Numbers、letters、 chinese and characters ( {} ) are allowed" msgid "Cannot contain special characters: [ {} ]"
msgstr "只允许包含数字、字母、中文和特殊字符( {} )" msgstr "不能包含特殊字符:[ {} ]"
#: assets/const.py:14 #: assets/const.py:14
msgid "* The contains characters that are not allowed" msgid "* The contains characters that are not allowed"
...@@ -635,8 +635,9 @@ msgstr "网域" ...@@ -635,8 +635,9 @@ msgstr "网域"
#: assets/forms/asset.py:69 assets/forms/asset.py:103 assets/forms/asset.py:116 #: assets/forms/asset.py:69 assets/forms/asset.py:103 assets/forms/asset.py:116
#: assets/forms/asset.py:152 assets/models/node.py:421 #: assets/forms/asset.py:152 assets/models/node.py:421
#: assets/serializers/system_user.py:36
#: assets/templates/assets/asset_create.html:42 #: assets/templates/assets/asset_create.html:42
#: perms/forms/asset_permission.py:83 perms/forms/asset_permission.py:90 #: perms/forms/asset_permission.py:87 perms/forms/asset_permission.py:94
#: perms/templates/perms/asset_permission_list.html:53 #: perms/templates/perms/asset_permission_list.html:53
#: perms/templates/perms/asset_permission_list.html:74 #: perms/templates/perms/asset_permission_list.html:74
#: perms/templates/perms/asset_permission_list.html:124 #: perms/templates/perms/asset_permission_list.html:124
...@@ -695,7 +696,7 @@ msgstr "SSH网关,支持代理SSH,RDP和VNC" ...@@ -695,7 +696,7 @@ msgstr "SSH网关,支持代理SSH,RDP和VNC"
#: assets/templates/assets/admin_user_list.html:45 #: assets/templates/assets/admin_user_list.html:45
#: assets/templates/assets/domain_gateway_list.html:71 #: assets/templates/assets/domain_gateway_list.html:71
#: assets/templates/assets/system_user_detail.html:62 #: assets/templates/assets/system_user_detail.html:62
#: assets/templates/assets/system_user_list.html:52 audits/models.py:80 #: assets/templates/assets/system_user_list.html:48 audits/models.py:80
#: audits/templates/audits/login_log_list.html:57 authentication/forms.py:13 #: audits/templates/audits/login_log_list.html:57 authentication/forms.py:13
#: authentication/templates/authentication/login.html:65 #: authentication/templates/authentication/login.html:65
#: authentication/templates/authentication/new_login.html:92 #: authentication/templates/authentication/new_login.html:92
...@@ -820,7 +821,7 @@ msgstr "主机名" ...@@ -820,7 +821,7 @@ msgstr "主机名"
#: assets/models/user.py:113 assets/templates/assets/asset_detail.html:70 #: assets/models/user.py:113 assets/templates/assets/asset_detail.html:70
#: assets/templates/assets/domain_gateway_list.html:70 #: assets/templates/assets/domain_gateway_list.html:70
#: assets/templates/assets/system_user_detail.html:70 #: assets/templates/assets/system_user_detail.html:70
#: assets/templates/assets/system_user_list.html:53 #: assets/templates/assets/system_user_list.html:49
#: terminal/templates/terminal/session_list.html:31 #: terminal/templates/terminal/session_list.html:31
#: terminal/templates/terminal/session_list.html:75 #: terminal/templates/terminal/session_list.html:75
msgid "Protocol" msgid "Protocol"
...@@ -1098,7 +1099,7 @@ msgstr "默认资产组" ...@@ -1098,7 +1099,7 @@ msgstr "默认资产组"
#: audits/templates/audits/password_change_log_list.html:56 #: audits/templates/audits/password_change_log_list.html:56
#: ops/templates/ops/command_execution_list.html:38 #: ops/templates/ops/command_execution_list.html:38
#: ops/templates/ops/command_execution_list.html:63 #: ops/templates/ops/command_execution_list.html:63
#: perms/forms/asset_permission.py:74 perms/forms/remote_app_permission.py:34 #: perms/forms/asset_permission.py:78 perms/forms/remote_app_permission.py:34
#: perms/models/base.py:49 #: perms/models/base.py:49
#: perms/templates/perms/asset_permission_create_update.html:41 #: perms/templates/perms/asset_permission_create_update.html:41
#: perms/templates/perms/asset_permission_list.html:50 #: perms/templates/perms/asset_permission_list.html:50
...@@ -1194,14 +1195,14 @@ msgid "Shell" ...@@ -1194,14 +1195,14 @@ msgid "Shell"
msgstr "Shell" msgstr "Shell"
#: assets/models/user.py:117 assets/templates/assets/system_user_detail.html:66 #: assets/models/user.py:117 assets/templates/assets/system_user_detail.html:66
#: assets/templates/assets/system_user_list.html:54 #: assets/templates/assets/system_user_list.html:50
msgid "Login mode" msgid "Login mode"
msgstr "登录模式" msgstr "登录模式"
#: assets/models/user.py:162 assets/templates/assets/user_asset_list.html:79 #: assets/models/user.py:166 assets/templates/assets/user_asset_list.html:79
#: audits/models.py:20 audits/templates/audits/ftp_log_list.html:52 #: audits/models.py:20 audits/templates/audits/ftp_log_list.html:52
#: audits/templates/audits/ftp_log_list.html:75 #: audits/templates/audits/ftp_log_list.html:75
#: perms/forms/asset_permission.py:86 perms/forms/remote_app_permission.py:43 #: perms/forms/asset_permission.py:90 perms/forms/remote_app_permission.py:43
#: perms/models/asset_permission.py:82 perms/models/remote_app_permission.py:16 #: perms/models/asset_permission.py:82 perms/models/remote_app_permission.py:16
#: perms/templates/perms/asset_permission_detail.html:140 #: perms/templates/perms/asset_permission_detail.html:140
#: perms/templates/perms/asset_permission_list.html:54 #: perms/templates/perms/asset_permission_list.html:54
...@@ -1290,15 +1291,15 @@ msgstr "值" ...@@ -1290,15 +1291,15 @@ msgstr "值"
msgid "The same level node name cannot be the same" msgid "The same level node name cannot be the same"
msgstr "同级别节点名字不能重复" msgstr "同级别节点名字不能重复"
#: assets/serializers/system_user.py:37 #: assets/serializers/system_user.py:38
msgid "Login mode display" msgid "Login mode display"
msgstr "登录模式显示" msgstr "登录模式显示"
#: assets/serializers/system_user.py:81 #: assets/serializers/system_user.py:82
msgid "* Automatic login mode must fill in the username." msgid "* Automatic login mode must fill in the username."
msgstr "自动登录模式,必须填写用户名" msgstr "自动登录模式,必须填写用户名"
#: assets/serializers/system_user.py:92 #: assets/serializers/system_user.py:93
msgid "Password or private key required" msgid "Password or private key required"
msgstr "密码或密钥密码需要一个" msgstr "密码或密钥密码需要一个"
...@@ -1436,8 +1437,8 @@ msgstr "资产列表" ...@@ -1436,8 +1437,8 @@ msgstr "资产列表"
#: assets/templates/assets/_asset_list_modal.html:33 #: assets/templates/assets/_asset_list_modal.html:33
#: assets/templates/assets/_node_tree.html:40 #: assets/templates/assets/_node_tree.html:40
#: ops/templates/ops/command_execution_create.html:49 #: ops/templates/ops/command_execution_create.html:70
#: ops/templates/ops/command_execution_create.html:143 #: ops/templates/ops/command_execution_create.html:127
#: users/templates/users/_granted_assets.html:7 #: users/templates/users/_granted_assets.html:7
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_create_update.html:66 #: xpack/plugins/cloud/templates/cloud/sync_instance_task_create_update.html:66
msgid "Loading" msgid "Loading"
...@@ -1499,11 +1500,11 @@ msgstr "日期" ...@@ -1499,11 +1500,11 @@ msgstr "日期"
msgid "Test datetime: " msgid "Test datetime: "
msgstr "测试日期: " msgstr "测试日期: "
#: assets/templates/assets/_asset_user_list.html:73 #: assets/templates/assets/_asset_user_list.html:74
msgid "View" msgid "View"
msgstr "查看" msgstr "查看"
#: assets/templates/assets/_asset_user_list.html:75 #: assets/templates/assets/_asset_user_list.html:76
#: assets/templates/assets/admin_user_assets.html:61 #: assets/templates/assets/admin_user_assets.html:61
#: assets/templates/assets/asset_asset_user_list.html:57 #: assets/templates/assets/asset_asset_user_list.html:57
#: assets/templates/assets/asset_detail.html:176 #: assets/templates/assets/asset_detail.html:176
...@@ -1512,7 +1513,7 @@ msgstr "查看" ...@@ -1512,7 +1513,7 @@ msgstr "查看"
msgid "Test" msgid "Test"
msgstr "测试" msgstr "测试"
#: assets/templates/assets/_asset_user_list.html:76 #: assets/templates/assets/_asset_user_list.html:77
#: assets/templates/assets/system_user_assets.html:72 #: assets/templates/assets/system_user_assets.html:72
#: assets/templates/assets/system_user_detail.html:142 #: assets/templates/assets/system_user_detail.html:142
msgid "Push" msgid "Push"
...@@ -1646,11 +1647,11 @@ msgstr "选择节点" ...@@ -1646,11 +1647,11 @@ msgstr "选择节点"
#: assets/templates/assets/admin_user_detail.html:100 #: assets/templates/assets/admin_user_detail.html:100
#: assets/templates/assets/asset_detail.html:202 #: assets/templates/assets/asset_detail.html:202
#: assets/templates/assets/asset_list.html:422 #: assets/templates/assets/asset_list.html:423
#: assets/templates/assets/cmd_filter_detail.html:106 #: assets/templates/assets/cmd_filter_detail.html:106
#: assets/templates/assets/system_user_assets.html:97 #: assets/templates/assets/system_user_assets.html:97
#: assets/templates/assets/system_user_detail.html:182 #: assets/templates/assets/system_user_detail.html:182
#: assets/templates/assets/system_user_list.html:139 #: assets/templates/assets/system_user_list.html:135
#: authentication/templates/authentication/_mfa_confirm_modal.html:20 #: authentication/templates/authentication/_mfa_confirm_modal.html:20
#: settings/templates/settings/terminal_setting.html:168 #: settings/templates/settings/terminal_setting.html:168
#: templates/_modal.html:23 terminal/templates/terminal/session_detail.html:112 #: templates/_modal.html:23 terminal/templates/terminal/session_detail.html:112
...@@ -1684,7 +1685,7 @@ msgstr "Jumpserver 使用该用户来 `推送系统用户`、`获取资产硬件 ...@@ -1684,7 +1685,7 @@ msgstr "Jumpserver 使用该用户来 `推送系统用户`、`获取资产硬件
#: assets/templates/assets/admin_user_list.html:16 #: assets/templates/assets/admin_user_list.html:16
#: assets/templates/assets/asset_list.html:68 #: assets/templates/assets/asset_list.html:68
#: assets/templates/assets/system_user_list.html:23 #: assets/templates/assets/system_user_list.html:19
#: audits/templates/audits/login_log_list.html:91 #: audits/templates/audits/login_log_list.html:91
#: users/templates/users/user_group_list.html:10 #: users/templates/users/user_group_list.html:10
#: users/templates/users/user_list.html:10 #: users/templates/users/user_list.html:10
...@@ -1695,7 +1696,7 @@ msgstr "导出" ...@@ -1695,7 +1696,7 @@ msgstr "导出"
#: assets/templates/assets/admin_user_list.html:21 #: assets/templates/assets/admin_user_list.html:21
#: assets/templates/assets/asset_list.html:73 #: assets/templates/assets/asset_list.html:73
#: assets/templates/assets/system_user_list.html:28 #: assets/templates/assets/system_user_list.html:24
#: settings/templates/settings/_ldap_list_users_modal.html:93 #: settings/templates/settings/_ldap_list_users_modal.html:93
#: users/templates/users/user_group_list.html:15 #: users/templates/users/user_group_list.html:15
#: users/templates/users/user_list.html:15 #: users/templates/users/user_list.html:15
...@@ -1709,12 +1710,12 @@ msgstr "导入" ...@@ -1709,12 +1710,12 @@ msgstr "导入"
msgid "Create admin user" msgid "Create admin user"
msgstr "创建管理用户" msgstr "创建管理用户"
#: assets/templates/assets/admin_user_list.html:162 #: assets/templates/assets/admin_user_list.html:125
#: assets/templates/assets/admin_user_list.html:193 #: assets/templates/assets/admin_user_list.html:156
#: assets/templates/assets/asset_list.html:303 #: assets/templates/assets/asset_list.html:304
#: assets/templates/assets/asset_list.html:340 #: assets/templates/assets/asset_list.html:341
#: assets/templates/assets/system_user_list.html:192 #: assets/templates/assets/system_user_list.html:188
#: assets/templates/assets/system_user_list.html:223 #: assets/templates/assets/system_user_list.html:219
#: users/templates/users/user_group_list.html:164 #: users/templates/users/user_group_list.html:164
#: users/templates/users/user_group_list.html:195 #: users/templates/users/user_group_list.html:195
#: users/templates/users/user_list.html:165 #: users/templates/users/user_list.html:165
...@@ -1854,8 +1855,8 @@ msgstr "仅显示当前节点资产" ...@@ -1854,8 +1855,8 @@ msgstr "仅显示当前节点资产"
msgid "Displays all child node assets" msgid "Displays all child node assets"
msgstr "显示所有子节点资产" msgstr "显示所有子节点资产"
#: assets/templates/assets/asset_list.html:416 #: assets/templates/assets/asset_list.html:417
#: assets/templates/assets/system_user_list.html:133 #: assets/templates/assets/system_user_list.html:129
#: users/templates/users/user_detail.html:388 #: users/templates/users/user_detail.html:388
#: users/templates/users/user_detail.html:414 #: users/templates/users/user_detail.html:414
#: users/templates/users/user_detail.html:482 #: users/templates/users/user_detail.html:482
...@@ -1865,12 +1866,12 @@ msgstr "显示所有子节点资产" ...@@ -1865,12 +1866,12 @@ msgstr "显示所有子节点资产"
msgid "Are you sure?" msgid "Are you sure?"
msgstr "你确认吗?" msgstr "你确认吗?"
#: assets/templates/assets/asset_list.html:417 #: assets/templates/assets/asset_list.html:418
msgid "This will delete the selected assets !!!" msgid "This will delete the selected assets !!!"
msgstr "删除选择资产" msgstr "删除选择资产"
#: assets/templates/assets/asset_list.html:420 #: assets/templates/assets/asset_list.html:421
#: assets/templates/assets/system_user_list.html:137 #: assets/templates/assets/system_user_list.html:133
#: settings/templates/settings/terminal_setting.html:166 #: settings/templates/settings/terminal_setting.html:166
#: users/templates/users/user_detail.html:392 #: users/templates/users/user_detail.html:392
#: users/templates/users/user_detail.html:418 #: users/templates/users/user_detail.html:418
...@@ -1881,16 +1882,16 @@ msgstr "删除选择资产" ...@@ -1881,16 +1882,16 @@ msgstr "删除选择资产"
msgid "Cancel" msgid "Cancel"
msgstr "取消" msgstr "取消"
#: assets/templates/assets/asset_list.html:433 #: assets/templates/assets/asset_list.html:434
msgid "Asset Deleted." msgid "Asset Deleted."
msgstr "已被删除" msgstr "已被删除"
#: assets/templates/assets/asset_list.html:434 #: assets/templates/assets/asset_list.html:435
#: assets/templates/assets/asset_list.html:438 #: assets/templates/assets/asset_list.html:439
msgid "Asset Delete" msgid "Asset Delete"
msgstr "删除" msgstr "删除"
#: assets/templates/assets/asset_list.html:437 #: assets/templates/assets/asset_list.html:438
msgid "Asset Deleting failed." msgid "Asset Deleting failed."
msgstr "删除失败" msgstr "删除失败"
...@@ -2037,7 +2038,7 @@ msgstr "Uid" ...@@ -2037,7 +2038,7 @@ msgstr "Uid"
msgid "Binding command filters" msgid "Binding command filters"
msgstr "绑定命令过滤器" msgstr "绑定命令过滤器"
#: assets/templates/assets/system_user_list.html:10 #: assets/templates/assets/system_user_list.html:6
msgid "" msgid ""
"System user is Jumpserver jump login assets used by the users, can be " "System user is Jumpserver jump login assets used by the users, can be "
"understood as the user login assets, such as web, sa, the dba (` ssh " "understood as the user login assets, such as web, sa, the dba (` ssh "
...@@ -2048,7 +2049,7 @@ msgstr "" ...@@ -2048,7 +2049,7 @@ msgstr ""
"web,sa,dba(`ssh web@some-host`),而不是使用某个用户的用户名跳转登录服务器" "web,sa,dba(`ssh web@some-host`),而不是使用某个用户的用户名跳转登录服务器"
"(`ssh xiaoming@some-host`);" "(`ssh xiaoming@some-host`);"
#: assets/templates/assets/system_user_list.html:11 #: assets/templates/assets/system_user_list.html:7
msgid "" msgid ""
"In simple terms, users log into Jumpserver using their own username, and " "In simple terms, users log into Jumpserver using their own username, and "
"Jumpserver uses system users to log into assets. " "Jumpserver uses system users to log into assets. "
...@@ -2056,7 +2057,7 @@ msgstr "" ...@@ -2056,7 +2057,7 @@ msgstr ""
"简单来说是用户使用自己的用户名登录 Jumpserver,Jumpserver 使用系统用户登录资" "简单来说是用户使用自己的用户名登录 Jumpserver,Jumpserver 使用系统用户登录资"
"产。" "产。"
#: assets/templates/assets/system_user_list.html:12 #: assets/templates/assets/system_user_list.html:8
msgid "" msgid ""
"When system users are created, if you choose auto push Jumpserver to use " "When system users are created, if you choose auto push Jumpserver to use "
"Ansible push system users into the asset, if the asset (Switch) does not " "Ansible push system users into the asset, if the asset (Switch) does not "
...@@ -2065,25 +2066,25 @@ msgstr "" ...@@ -2065,25 +2066,25 @@ msgstr ""
"系统用户创建时,如果选择了自动推送,Jumpserver 会使用 Ansible 自动推送系统用" "系统用户创建时,如果选择了自动推送,Jumpserver 会使用 Ansible 自动推送系统用"
"户到资产中,如果资产(交换机)不支持 Ansible,请手动填写账号密码。" "户到资产中,如果资产(交换机)不支持 Ansible,请手动填写账号密码。"
#: assets/templates/assets/system_user_list.html:43 #: assets/templates/assets/system_user_list.html:39
#: assets/views/system_user.py:47 #: assets/views/system_user.py:47
msgid "Create system user" msgid "Create system user"
msgstr "创建系统用户" msgstr "创建系统用户"
#: assets/templates/assets/system_user_list.html:134 #: assets/templates/assets/system_user_list.html:130
msgid "This will delete the selected System Users !!!" msgid "This will delete the selected System Users !!!"
msgstr "删除选择系统用户" msgstr "删除选择系统用户"
#: assets/templates/assets/system_user_list.html:143 #: assets/templates/assets/system_user_list.html:139
msgid "System Users Deleted." msgid "System Users Deleted."
msgstr "已被删除" msgstr "已被删除"
#: assets/templates/assets/system_user_list.html:144 #: assets/templates/assets/system_user_list.html:140
#: assets/templates/assets/system_user_list.html:149 #: assets/templates/assets/system_user_list.html:145
msgid "System Users Delete" msgid "System Users Delete"
msgstr "删除系统用户" msgstr "删除系统用户"
#: assets/templates/assets/system_user_list.html:148 #: assets/templates/assets/system_user_list.html:144
msgid "System Users Deleting failed." msgid "System Users Deleting failed."
msgstr "系统用户删除失败" msgstr "系统用户删除失败"
...@@ -2995,39 +2996,39 @@ msgstr "成功资产" ...@@ -2995,39 +2996,39 @@ msgstr "成功资产"
msgid "Task log" msgid "Task log"
msgstr "任务列表" msgstr "任务列表"
#: ops/templates/ops/command_execution_create.html:90 #: ops/templates/ops/command_execution_create.html:109
#: terminal/templates/terminal/session_detail.html:95 #: terminal/templates/terminal/session_detail.html:95
#: terminal/templates/terminal/session_detail.html:104 #: terminal/templates/terminal/session_detail.html:104
msgid "Go" msgid "Go"
msgstr "" msgstr ""
#: ops/templates/ops/command_execution_create.html:216 #: ops/templates/ops/command_execution_create.html:194
msgid "Selected assets" msgid "Selected assets"
msgstr "已选择资产" msgstr "已选择资产"
#: ops/templates/ops/command_execution_create.html:219 #: ops/templates/ops/command_execution_create.html:197
msgid "In total" msgid "In total"
msgstr "总共" msgstr "总共"
#: ops/templates/ops/command_execution_create.html:256 #: ops/templates/ops/command_execution_create.html:234
msgid "" msgid ""
"Select the left asset, select the running system user, execute command in " "Select the left asset, select the running system user, execute command in "
"batch" "batch"
msgstr "选择左侧资产, 选择运行的系统用户,批量执行命令" msgstr "选择左侧资产, 选择运行的系统用户,批量执行命令"
#: ops/templates/ops/command_execution_create.html:299 #: ops/templates/ops/command_execution_create.html:278
msgid "Unselected assets" msgid "Unselected assets"
msgstr "没有选中资产" msgstr "没有选中资产"
#: ops/templates/ops/command_execution_create.html:303 #: ops/templates/ops/command_execution_create.html:282
msgid "No input command" msgid "No input command"
msgstr "没有输入命令" msgstr "没有输入命令"
#: ops/templates/ops/command_execution_create.html:307 #: ops/templates/ops/command_execution_create.html:286
msgid "No system user was selected" msgid "No system user was selected"
msgstr "没有选择系统用户" msgstr "没有选择系统用户"
#: ops/templates/ops/command_execution_create.html:317 #: ops/templates/ops/command_execution_create.html:296
msgid "Pending" msgid "Pending"
msgstr "等待" msgstr "等待"
...@@ -3123,7 +3124,13 @@ msgstr "未分组" ...@@ -3123,7 +3124,13 @@ msgstr "未分组"
msgid "Empty" msgid "Empty"
msgstr "空" msgstr "空"
#: perms/forms/asset_permission.py:77 perms/forms/remote_app_permission.py:37 #: perms/forms/asset_permission.py:24
msgid ""
"Tips: The RDP protocol does not support separate controls for uploading or "
"downloading files"
msgstr "提示:RDP 协议不支持单独控制上传或下载文件"
#: perms/forms/asset_permission.py:81 perms/forms/remote_app_permission.py:37
#: perms/models/base.py:50 perms/templates/perms/asset_permission_list.html:51 #: perms/models/base.py:50 perms/templates/perms/asset_permission_list.html:51
#: perms/templates/perms/asset_permission_list.html:71 #: perms/templates/perms/asset_permission_list.html:71
#: perms/templates/perms/asset_permission_list.html:118 #: perms/templates/perms/asset_permission_list.html:118
...@@ -3136,12 +3143,6 @@ msgstr "空" ...@@ -3136,12 +3143,6 @@ msgstr "空"
msgid "User group" msgid "User group"
msgstr "用户组" msgstr "用户组"
#: perms/forms/asset_permission.py:93
msgid ""
"Tips: The RDP protocol does not support separate controls for uploading or "
"downloading files"
msgstr "提示:RDP 协议不支持单独控制上传或下载文件"
#: perms/forms/asset_permission.py:103 perms/forms/remote_app_permission.py:53 #: perms/forms/asset_permission.py:103 perms/forms/remote_app_permission.py:53
msgid "User or group at least one required" msgid "User or group at least one required"
msgstr "用户和用户组至少选一个" msgstr "用户和用户组至少选一个"
...@@ -3218,7 +3219,7 @@ msgstr "添加资产" ...@@ -3218,7 +3219,7 @@ msgstr "添加资产"
#: perms/templates/perms/remote_app_permission_user.html:124 #: perms/templates/perms/remote_app_permission_user.html:124
#: settings/templates/settings/terminal_setting.html:98 #: settings/templates/settings/terminal_setting.html:98
#: settings/templates/settings/terminal_setting.html:120 #: settings/templates/settings/terminal_setting.html:120
#: users/templates/users/user_group_detail.html:95 #: users/templates/users/user_group_detail.html:92
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_asset_list.html:80 #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_asset_list.html:80
#: xpack/plugins/orgs/templates/orgs/org_detail.html:93 #: xpack/plugins/orgs/templates/orgs/org_detail.html:93
#: xpack/plugins/orgs/templates/orgs/org_detail.html:130 #: xpack/plugins/orgs/templates/orgs/org_detail.html:130
......
...@@ -5,8 +5,8 @@ from rest_framework import serializers ...@@ -5,8 +5,8 @@ from rest_framework import serializers
from users.models import User, UserGroup from users.models import User, UserGroup
from assets.models import Asset, Domain, AdminUser, SystemUser, Label from assets.models import Asset, Domain, AdminUser, SystemUser, Label
from assets.const import ( from assets.const import (
GENERAL_LIMIT_SPECIAL_CHARACTERS_PATTERN, GENERAL_FORBIDDEN_SPECIAL_CHARACTERS_PATTERN,
GENERAL_LIMIT_SPECIAL_CHARACTERS_ERROR_MSG GENERAL_FORBIDDEN_SPECIAL_CHARACTERS_ERROR_MSG
) )
from perms.models import AssetPermission from perms.models import AssetPermission
from common.serializers import AdaptedBulkListSerializer from common.serializers import AdaptedBulkListSerializer
...@@ -24,10 +24,10 @@ class OrgSerializer(ModelSerializer): ...@@ -24,10 +24,10 @@ class OrgSerializer(ModelSerializer):
@staticmethod @staticmethod
def validate_name(name): def validate_name(name):
pattern = GENERAL_LIMIT_SPECIAL_CHARACTERS_PATTERN pattern = GENERAL_FORBIDDEN_SPECIAL_CHARACTERS_PATTERN
res = re.match(pattern, name) res = re.search(pattern, name)
if res is None: if res is not None:
msg = GENERAL_LIMIT_SPECIAL_CHARACTERS_ERROR_MSG msg = GENERAL_FORBIDDEN_SPECIAL_CHARACTERS_ERROR_MSG
raise serializers.ValidationError(msg) raise serializers.ValidationError(msg)
return name return name
......
...@@ -20,6 +20,10 @@ class ActionField(forms.MultipleChoiceField): ...@@ -20,6 +20,10 @@ class ActionField(forms.MultipleChoiceField):
kwargs['initial'] = Action.ALL kwargs['initial'] = Action.ALL
kwargs['label'] = _("Action") kwargs['label'] = _("Action")
kwargs['widget'] = forms.CheckboxSelectMultiple() kwargs['widget'] = forms.CheckboxSelectMultiple()
kwargs['help_text'] = _(
'Tips: The RDP protocol does not support separate controls '
'for uploading or downloading files'
)
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
def to_python(self, value): def to_python(self, value):
...@@ -89,10 +93,6 @@ class AssetPermissionForm(OrgModelForm): ...@@ -89,10 +93,6 @@ class AssetPermissionForm(OrgModelForm):
labels = { labels = {
'nodes': _("Node"), 'nodes': _("Node"),
} }
help_texts = {
'actions': _('Tips: The RDP protocol does not support separate '
'controls for uploading or downloading files')
}
def clean_user_groups(self): def clean_user_groups(self):
users = self.cleaned_data.get('users') users = self.cleaned_data.get('users')
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
<script src="{% static "js/plugins/toastr/toastr.min.js" %}"></script> <script src="{% static "js/plugins/toastr/toastr.min.js" %}"></script>
<script src="{% static "js/inspinia.js" %}"></script> <script src="{% static "js/inspinia.js" %}"></script>
<script type="text/javascript" src="{% url 'javascript-catalog' %}"></script> <script type="text/javascript" src="{% url 'javascript-catalog' %}"></script>
<script src="{% static "js/jumpserver.js" %}?v=4"></script> <script src="{% static "js/jumpserver.js" %}?v=5"></script>
<script> <script>
activeNav(); activeNav();
$(document).ready(function(){ $(document).ready(function(){
......
amqp==2.1.4 amqp==2.1.4
ansible==2.8.0 ansible==2.8.2
asn1crypto==0.24.0 asn1crypto==0.24.0
bcrypt==3.1.4 bcrypt==3.1.4
billiard==3.5.0.3 billiard==3.5.0.3
...@@ -14,7 +14,7 @@ coreapi==2.3.3 ...@@ -14,7 +14,7 @@ coreapi==2.3.3
coreschema==0.0.4 coreschema==0.0.4
cryptography==2.3.1 cryptography==2.3.1
decorator==4.1.2 decorator==4.1.2
Django==2.1.7 Django==2.1.11
django-auth-ldap==1.7.0 django-auth-ldap==1.7.0
django-bootstrap3==9.1.0 django-bootstrap3==9.1.0
django-celery-beat==1.4.0 django-celery-beat==1.4.0
...@@ -27,7 +27,7 @@ django-simple-captcha==0.5.6 ...@@ -27,7 +27,7 @@ django-simple-captcha==0.5.6
djangorestframework==3.9.4 djangorestframework==3.9.4
djangorestframework-bulk==0.2.1 djangorestframework-bulk==0.2.1
docutils==0.14 docutils==0.14
ecdsa==0.13 ecdsa==0.13.3
enum-compat==0.0.2 enum-compat==0.0.2
ephem==3.7.6.0 ephem==3.7.6.0
eventlet==0.24.1 eventlet==0.24.1
...@@ -47,7 +47,7 @@ olefile==0.44 ...@@ -47,7 +47,7 @@ olefile==0.44
openapi-codec==1.3.2 openapi-codec==1.3.2
paramiko==2.4.2 paramiko==2.4.2
passlib==1.7.1 passlib==1.7.1
Pillow==4.3.0 Pillow==6.2.0
pyasn1==0.4.2 pyasn1==0.4.2
pycparser==2.19 pycparser==2.19
pycrypto==2.6.1 pycrypto==2.6.1
...@@ -68,7 +68,7 @@ uritemplate==3.0.0 ...@@ -68,7 +68,7 @@ uritemplate==3.0.0
urllib3==1.25.2 urllib3==1.25.2
vine==1.1.4 vine==1.1.4
drf-yasg==1.9.1 drf-yasg==1.9.1
Werkzeug==0.14.1 Werkzeug==0.15.3
drf-nested-routers==0.91 drf-nested-routers==0.91
aliyun-python-sdk-core-v3==2.9.1 aliyun-python-sdk-core-v3==2.9.1
aliyun-python-sdk-ecs==4.10.1 aliyun-python-sdk-ecs==4.10.1
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment