From 689bd093bebb1fd87049f12bc95773f878b21f97 Mon Sep 17 00:00:00 2001 From: Bai Date: Wed, 21 Jul 2021 15:50:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=91=E7=AE=A1=E4=B8=AD=E5=BF=83=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E4=BB=BB=E5=8A=A1=E6=94=AF=E6=8C=81=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E5=90=8C=E6=AD=A5IP=E7=BD=91=E6=AE=B5=E5=92=8C=E5=8D=8F?= =?UTF-8?q?=E8=AE=AE=E7=BB=84=EF=BC=88=E4=BF=AE=E6=94=B9=E7=89=B9=E6=9D=83?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=96=87=E6=A1=88=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/acls/models/login_acl.py | 2 +- apps/acls/models/login_asset_acl.py | 2 +- apps/acls/serializers/login_acl.py | 2 +- apps/acls/utils.py | 68 -------- apps/assets/serializers/asset.py | 2 +- apps/common/utils/__init__.py | 3 +- apps/common/utils/ip.py | 68 ++++++++ apps/locale/zh/LC_MESSAGES/django.mo | Bin 75847 -> 76394 bytes apps/locale/zh/LC_MESSAGES/django.po | 207 +++++++++++++------------ apps/locale/zh/LC_MESSAGES/djangojs.mo | Bin 2741 -> 2741 bytes apps/locale/zh/LC_MESSAGES/djangojs.po | 2 +- 11 files changed, 187 insertions(+), 169 deletions(-) create mode 100644 apps/common/utils/ip.py diff --git a/apps/acls/models/login_acl.py b/apps/acls/models/login_acl.py index 323599f4c..03fa1ef7a 100644 --- a/apps/acls/models/login_acl.py +++ b/apps/acls/models/login_acl.py @@ -2,7 +2,7 @@ from django.db import models from django.utils.translation import ugettext_lazy as _ from .base import BaseACL, BaseACLQuerySet -from ..utils import contains_ip +from common.utils.ip import contains_ip class ACLManager(models.Manager): diff --git a/apps/acls/models/login_asset_acl.py b/apps/acls/models/login_asset_acl.py index 8ac140370..d61e7ae23 100644 --- a/apps/acls/models/login_asset_acl.py +++ b/apps/acls/models/login_asset_acl.py @@ -3,7 +3,7 @@ from django.db.models import Q from django.utils.translation import ugettext_lazy as _ from orgs.mixins.models import OrgModelMixin, OrgManager from .base import BaseACL, BaseACLQuerySet -from ..utils import contains_ip +from common.utils.ip import contains_ip class ACLManager(OrgManager): diff --git a/apps/acls/serializers/login_acl.py b/apps/acls/serializers/login_acl.py index b303db533..c1b21f114 100644 --- a/apps/acls/serializers/login_acl.py +++ b/apps/acls/serializers/login_acl.py @@ -3,7 +3,7 @@ from rest_framework import serializers from common.drf.serializers import BulkModelSerializer from orgs.utils import current_org from ..models import LoginACL -from ..utils import is_ip_address, is_ip_network, is_ip_segment +from common.utils.ip import is_ip_address, is_ip_network, is_ip_segment __all__ = ['LoginACLSerializer', ] diff --git a/apps/acls/utils.py b/apps/acls/utils.py index 0000a5da7..e69de29bb 100644 --- a/apps/acls/utils.py +++ b/apps/acls/utils.py @@ -1,68 +0,0 @@ -from ipaddress import ip_network, ip_address - - -def is_ip_address(address): - """ 192.168.10.1 """ - try: - ip_address(address) - except ValueError: - return False - else: - return True - - -def is_ip_network(ip): - """ 192.168.1.0/24 """ - try: - ip_network(ip) - except ValueError: - return False - else: - return True - - -def is_ip_segment(ip): - """ 10.1.1.1-10.1.1.20 """ - if '-' not in ip: - return False - ip_address1, ip_address2 = ip.split('-') - return is_ip_address(ip_address1) and is_ip_address(ip_address2) - - -def in_ip_segment(ip, ip_segment): - ip1, ip2 = ip_segment.split('-') - ip1 = int(ip_address(ip1)) - ip2 = int(ip_address(ip2)) - ip = int(ip_address(ip)) - return min(ip1, ip2) <= ip <= max(ip1, ip2) - - -def contains_ip(ip, ip_group): - """ - ip_group: - [192.168.10.1, 192.168.1.0/24, 10.1.1.1-10.1.1.20, 2001:db8:2de::e13, 2001:db8:1a:1110::/64.] - - """ - - if '*' in ip_group: - return True - - for _ip in ip_group: - if is_ip_address(_ip): - # 192.168.10.1 - if ip == _ip: - return True - elif is_ip_network(_ip) and is_ip_address(ip): - # 192.168.1.0/24 - if ip_address(ip) in ip_network(_ip): - return True - elif is_ip_segment(_ip) and is_ip_address(ip): - # 10.1.1.1-10.1.1.20 - if in_ip_segment(ip, _ip): - return True - else: - # is domain name - if ip == _ip: - return True - - return False diff --git a/apps/assets/serializers/asset.py b/apps/assets/serializers/asset.py index 3a1245812..e86a167c9 100644 --- a/apps/assets/serializers/asset.py +++ b/apps/assets/serializers/asset.py @@ -10,7 +10,7 @@ from ..models import Asset, Node, Platform, SystemUser __all__ = [ 'AssetSerializer', 'AssetSimpleSerializer', 'ProtocolsField', 'PlatformSerializer', - 'AssetTaskSerializer', 'AssetsTaskSerializer' + 'AssetTaskSerializer', 'AssetsTaskSerializer', 'ProtocolsField' ] diff --git a/apps/common/utils/__init__.py b/apps/common/utils/__init__.py index 0fdcf0dd1..b55f22af1 100644 --- a/apps/common/utils/__init__.py +++ b/apps/common/utils/__init__.py @@ -8,4 +8,5 @@ from .http import * from .ipip import * from .crypto import * from .random import * -from .jumpserver import * \ No newline at end of file +from .jumpserver import * +from .ip import * diff --git a/apps/common/utils/ip.py b/apps/common/utils/ip.py new file mode 100644 index 000000000..0000a5da7 --- /dev/null +++ b/apps/common/utils/ip.py @@ -0,0 +1,68 @@ +from ipaddress import ip_network, ip_address + + +def is_ip_address(address): + """ 192.168.10.1 """ + try: + ip_address(address) + except ValueError: + return False + else: + return True + + +def is_ip_network(ip): + """ 192.168.1.0/24 """ + try: + ip_network(ip) + except ValueError: + return False + else: + return True + + +def is_ip_segment(ip): + """ 10.1.1.1-10.1.1.20 """ + if '-' not in ip: + return False + ip_address1, ip_address2 = ip.split('-') + return is_ip_address(ip_address1) and is_ip_address(ip_address2) + + +def in_ip_segment(ip, ip_segment): + ip1, ip2 = ip_segment.split('-') + ip1 = int(ip_address(ip1)) + ip2 = int(ip_address(ip2)) + ip = int(ip_address(ip)) + return min(ip1, ip2) <= ip <= max(ip1, ip2) + + +def contains_ip(ip, ip_group): + """ + ip_group: + [192.168.10.1, 192.168.1.0/24, 10.1.1.1-10.1.1.20, 2001:db8:2de::e13, 2001:db8:1a:1110::/64.] + + """ + + if '*' in ip_group: + return True + + for _ip in ip_group: + if is_ip_address(_ip): + # 192.168.10.1 + if ip == _ip: + return True + elif is_ip_network(_ip) and is_ip_address(ip): + # 192.168.1.0/24 + if ip_address(ip) in ip_network(_ip): + return True + elif is_ip_segment(_ip) and is_ip_address(ip): + # 10.1.1.1-10.1.1.20 + if in_ip_segment(ip, _ip): + return True + else: + # is domain name + if ip == _ip: + return True + + return False diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo index 6b09f20e56217fda7b9806e20d6707401c04c464..c1991919e3ca8b118e1a98aee559a30d0e9475d7 100644 GIT binary patch delta 22651 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 delta 22190 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 ZI9JlazdeClnxyer8?a?}pwH?Y{|_e{v^4+# diff --git a/apps/locale/zh/LC_MESSAGES/django.po b/apps/locale/zh/LC_MESSAGES/django.po index f86e3bc6a..c27cf460a 100644 --- a/apps/locale/zh/LC_MESSAGES/django.po +++ b/apps/locale/zh/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: JumpServer 0.3.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-07-15 18:09+0800\n" +"POT-Creation-Date: 2021-07-21 16:34+0800\n" "PO-Revision-Date: 2021-05-20 10:54+0800\n" "Last-Translator: ibuler \n" "Language-Team: JumpServer team\n" @@ -20,7 +20,7 @@ msgstr "" #: acls/models/base.py:25 acls/serializers/login_asset_acl.py:47 #: applications/models/application.py:11 assets/models/asset.py:139 #: assets/models/base.py:172 assets/models/cluster.py:18 -#: assets/models/cmd_filter.py:21 assets/models/domain.py:22 +#: assets/models/cmd_filter.py:21 assets/models/domain.py:21 #: assets/models/group.py:20 assets/models/label.py:18 ops/mixin.py:24 #: orgs/models.py:23 perms/models/base.py:49 settings/models.py:29 #: terminal/models/storage.py:23 terminal/models/task.py:16 @@ -35,12 +35,12 @@ msgid "Name" msgstr "名称" #: acls/models/base.py:27 assets/models/cmd_filter.py:54 -#: assets/models/user.py:202 +#: assets/models/user.py:203 msgid "Priority" msgstr "优先级" #: acls/models/base.py:28 assets/models/cmd_filter.py:54 -#: assets/models/user.py:202 +#: assets/models/user.py:203 msgid "1-100, the lower the value will be match first" msgstr "优先级可选范围为 1-100 (数值越小越优先)" @@ -56,13 +56,13 @@ msgstr "激活中" #: assets/models/asset.py:144 assets/models/asset.py:220 #: assets/models/base.py:177 assets/models/cluster.py:29 #: assets/models/cmd_filter.py:23 assets/models/cmd_filter.py:64 -#: assets/models/domain.py:23 assets/models/domain.py:54 +#: assets/models/domain.py:22 assets/models/domain.py:53 #: assets/models/group.py:23 assets/models/label.py:23 ops/models/adhoc.py:37 #: orgs/models.py:26 perms/models/base.py:57 settings/models.py:34 #: terminal/models/storage.py:26 terminal/models/terminal.py:114 #: tickets/models/ticket.py:73 users/models/group.py:16 #: users/models/user.py:584 xpack/plugins/change_auth_plan/models.py:77 -#: xpack/plugins/cloud/models.py:35 xpack/plugins/cloud/models.py:98 +#: xpack/plugins/cloud/models.py:35 xpack/plugins/cloud/models.py:108 #: xpack/plugins/gathered_user/models.py:26 msgid "Comment" msgstr "备注" @@ -119,7 +119,7 @@ msgstr "系统用户" #: acls/models/login_asset_acl.py:22 #: applications/serializers/attrs/application_category/remote_app.py:33 -#: assets/models/asset.py:350 assets/models/authbook.py:15 +#: assets/models/asset.py:357 assets/models/authbook.py:15 #: assets/models/gathered_user.py:14 assets/serializers/system_user.py:196 #: audits/models.py:38 perms/models/asset_permission.py:99 #: templates/index.html:82 terminal/backends/command/models.py:19 @@ -127,7 +127,7 @@ msgstr "系统用户" #: users/templates/users/user_asset_permission.html:40 #: users/templates/users/user_asset_permission.html:70 #: xpack/plugins/change_auth_plan/models.py:282 -#: xpack/plugins/cloud/models.py:202 +#: xpack/plugins/cloud/models.py:212 msgid "Asset" msgstr "资产" @@ -140,7 +140,7 @@ msgstr "审批人" msgid "Login asset confirm" msgstr "登录资产复核" -#: acls/serializers/login_acl.py:18 +#: acls/serializers/login_acl.py:18 xpack/plugins/cloud/serializers.py:164 msgid "IP address invalid: `{}`" msgstr "IP 地址无效: `{}`" @@ -155,7 +155,7 @@ msgstr "" #: acls/serializers/login_acl.py:30 acls/serializers/login_asset_acl.py:31 #: applications/serializers/attrs/application_type/mysql_workbench.py:18 -#: assets/models/asset.py:180 assets/models/domain.py:50 +#: assets/models/asset.py:180 assets/models/domain.py:49 #: assets/serializers/account.py:11 settings/serializers/settings.py:113 #: users/templates/users/_granted_assets.html:26 #: users/templates/users/user_asset_permission.html:156 @@ -182,7 +182,7 @@ msgstr "格式为逗号分隔的字符串, * 表示匹配所有. " #: users/templates/users/_select_user_modal.html:14 #: xpack/plugins/change_auth_plan/models.py:47 #: xpack/plugins/change_auth_plan/models.py:278 -#: xpack/plugins/cloud/serializers.py:65 +#: xpack/plugins/cloud/serializers.py:67 msgid "Username" msgstr "用户名" @@ -210,7 +210,7 @@ msgid "" msgstr "格式为逗号分隔的字符串, * 表示匹配所有. 可选的协议有: {}" #: acls/serializers/login_asset_acl.py:55 assets/models/asset.py:184 -#: assets/models/domain.py:52 assets/models/user.py:203 +#: assets/models/domain.py:51 assets/models/user.py:204 #: terminal/serializers/session.py:30 terminal/serializers/storage.py:69 msgid "Protocol" msgstr "协议" @@ -251,7 +251,7 @@ msgid "Category" msgstr "类别" #: applications/models/application.py:16 assets/models/cmd_filter.py:53 -#: assets/models/user.py:201 perms/models/application_permission.py:23 +#: assets/models/user.py:202 perms/models/application_permission.py:23 #: perms/serializers/application/permission.py:17 #: perms/serializers/application/user_permission.py:34 #: terminal/models/storage.py:55 terminal/models/storage.py:116 @@ -261,7 +261,7 @@ msgid "Type" msgstr "类型" #: applications/models/application.py:20 assets/models/asset.py:188 -#: assets/models/domain.py:28 assets/models/domain.py:53 +#: assets/models/domain.py:27 assets/models/domain.py:52 msgid "Domain" msgstr "网域" @@ -300,7 +300,7 @@ msgid "Cluster" msgstr "集群" #: applications/serializers/attrs/application_category/db.py:11 -#: ops/models/adhoc.py:146 xpack/plugins/cloud/serializers.py:63 +#: ops/models/adhoc.py:146 xpack/plugins/cloud/serializers.py:65 msgid "Host" msgstr "主机" @@ -309,8 +309,8 @@ msgstr "主机" #: applications/serializers/attrs/application_type/mysql_workbench.py:22 #: applications/serializers/attrs/application_type/oracle.py:11 #: applications/serializers/attrs/application_type/pgsql.py:11 -#: assets/models/asset.py:185 assets/models/domain.py:51 -#: xpack/plugins/cloud/serializers.py:64 +#: assets/models/asset.py:185 assets/models/domain.py:50 +#: xpack/plugins/cloud/serializers.py:66 msgid "Port" msgstr "端口" @@ -340,7 +340,7 @@ msgstr "目标URL" #: xpack/plugins/change_auth_plan/models.py:68 #: xpack/plugins/change_auth_plan/models.py:190 #: xpack/plugins/change_auth_plan/models.py:285 -#: xpack/plugins/cloud/serializers.py:67 +#: xpack/plugins/cloud/serializers.py:69 msgid "Password" msgstr "密码" @@ -392,10 +392,11 @@ msgstr "系统平台" #: assets/models/asset.py:186 assets/serializers/asset.py:65 #: perms/serializers/asset/user_permission.py:41 +#: xpack/plugins/cloud/models.py:99 xpack/plugins/cloud/serializers.py:182 msgid "Protocols" msgstr "协议组" -#: assets/models/asset.py:189 assets/models/user.py:193 +#: assets/models/asset.py:189 assets/models/user.py:194 #: perms/models/asset_permission.py:100 #: xpack/plugins/change_auth_plan/models.py:56 #: xpack/plugins/gathered_user/models.py:24 @@ -403,16 +404,16 @@ msgid "Nodes" msgstr "节点" #: assets/models/asset.py:190 assets/models/cmd_filter.py:22 -#: assets/models/domain.py:55 assets/models/label.py:22 +#: assets/models/domain.py:54 assets/models/label.py:22 #: authentication/models.py:46 msgid "Is active" msgstr "激活" #: assets/models/asset.py:193 assets/models/cluster.py:19 -#: assets/models/user.py:190 assets/models/user.py:325 templates/_nav.html:44 -#: xpack/plugins/cloud/models.py:92 xpack/plugins/cloud/serializers.py:179 +#: assets/models/user.py:191 assets/models/user.py:326 templates/_nav.html:44 +#: xpack/plugins/cloud/models.py:96 xpack/plugins/cloud/serializers.py:204 msgid "Admin user" -msgstr "管理用户" +msgstr "特权用户" #: assets/models/asset.py:196 msgid "Public IP" @@ -488,23 +489,23 @@ msgstr "标签管理" #: common/db/models.py:70 common/mixins/models.py:49 orgs/models.py:24 #: orgs/models.py:422 perms/models/base.py:55 users/models/user.py:592 #: users/serializers/group.py:33 xpack/plugins/change_auth_plan/models.py:81 -#: xpack/plugins/cloud/models.py:104 xpack/plugins/gathered_user/models.py:30 +#: xpack/plugins/cloud/models.py:114 xpack/plugins/gathered_user/models.py:30 msgid "Created by" msgstr "创建者" # msgid "Created by" # msgstr "创建者" #: assets/models/asset.py:219 assets/models/base.py:178 -#: assets/models/cluster.py:26 assets/models/domain.py:25 +#: assets/models/cluster.py:26 assets/models/domain.py:24 #: assets/models/gathered_user.py:19 assets/models/group.py:22 #: assets/models/label.py:25 common/db/models.py:72 common/mixins/models.py:50 #: ops/models/adhoc.py:38 ops/models/command.py:29 orgs/models.py:25 #: orgs/models.py:420 perms/models/base.py:56 users/models/group.py:18 -#: users/models/user.py:774 xpack/plugins/cloud/models.py:107 +#: users/models/user.py:774 xpack/plugins/cloud/models.py:117 msgid "Date created" msgstr "创建日期" -#: assets/models/authbook.py:16 assets/models/user.py:276 audits/models.py:39 +#: assets/models/authbook.py:16 assets/models/user.py:277 audits/models.py:39 #: perms/models/application_permission.py:31 #: perms/models/asset_permission.py:101 templates/_nav.html:45 #: terminal/backends/command/models.py:20 @@ -606,7 +607,7 @@ msgstr "系统" msgid "Default Cluster" msgstr "默认Cluster" -#: assets/models/cmd_filter.py:33 assets/models/user.py:208 +#: assets/models/cmd_filter.py:33 assets/models/user.py:209 msgid "Command filter" msgstr "命令过滤器" @@ -647,11 +648,11 @@ msgstr "命令过滤规则" msgid "Command confirm" msgstr "命令复核" -#: assets/models/domain.py:62 +#: assets/models/domain.py:61 msgid "Gateway" msgstr "网关" -#: assets/models/domain.py:68 +#: assets/models/domain.py:67 msgid "Password cannot be empty" msgstr "密码不能为空" @@ -707,69 +708,69 @@ msgstr "ssh私钥" #: users/templates/users/user_asset_permission.html:41 #: users/templates/users/user_asset_permission.html:73 #: users/templates/users/user_asset_permission.html:158 -#: xpack/plugins/cloud/models.py:89 xpack/plugins/cloud/serializers.py:180 +#: xpack/plugins/cloud/models.py:93 xpack/plugins/cloud/serializers.py:205 msgid "Node" msgstr "节点" -#: assets/models/user.py:184 +#: assets/models/user.py:185 msgid "Automatic managed" msgstr "托管密码" -#: assets/models/user.py:185 +#: assets/models/user.py:186 msgid "Manually input" msgstr "手动输入" -#: assets/models/user.py:189 +#: assets/models/user.py:190 msgid "Common user" msgstr "普通用户" -#: assets/models/user.py:192 +#: assets/models/user.py:193 msgid "Username same with user" msgstr "用户名与用户相同" -#: assets/models/user.py:195 assets/serializers/domain.py:29 +#: assets/models/user.py:196 assets/serializers/domain.py:28 #: templates/_nav.html:39 xpack/plugins/change_auth_plan/models.py:52 msgid "Assets" msgstr "资产" -#: assets/models/user.py:199 templates/_nav.html:17 +#: assets/models/user.py:200 templates/_nav.html:17 #: users/views/profile/password.py:43 users/views/profile/pubkey.py:37 msgid "Users" msgstr "用户管理" -#: assets/models/user.py:200 +#: assets/models/user.py:201 msgid "User groups" msgstr "用户组" -#: assets/models/user.py:204 +#: assets/models/user.py:205 msgid "Auto push" msgstr "自动推送" -#: assets/models/user.py:205 +#: assets/models/user.py:206 msgid "Sudo" msgstr "Sudo" -#: assets/models/user.py:206 +#: assets/models/user.py:207 msgid "Shell" msgstr "Shell" -#: assets/models/user.py:207 +#: assets/models/user.py:208 msgid "Login mode" msgstr "认证方式" -#: assets/models/user.py:209 +#: assets/models/user.py:210 msgid "SFTP Root" msgstr "SFTP根路径" -#: assets/models/user.py:210 authentication/models.py:95 +#: assets/models/user.py:211 authentication/models.py:95 msgid "Token" msgstr "" -#: assets/models/user.py:211 +#: assets/models/user.py:212 msgid "Home" msgstr "家目录" -#: assets/models/user.py:212 +#: assets/models/user.py:213 msgid "System groups" msgstr "用户组" @@ -805,21 +806,21 @@ msgstr "组织名称" #: assets/serializers/asset.py:98 msgid "Admin user display" -msgstr "管理用户名称" +msgstr "特权用户名称" #: assets/serializers/base.py:41 msgid "private key invalid" msgstr "密钥不合法" -#: assets/serializers/domain.py:13 +#: assets/serializers/domain.py:12 msgid "Assets count" msgstr "资产数量" -#: assets/serializers/domain.py:14 +#: assets/serializers/domain.py:13 msgid "Applications count" msgstr "应用数量" -#: assets/serializers/domain.py:15 +#: assets/serializers/domain.py:14 msgid "Gateways count" msgstr "网关数量" @@ -892,7 +893,7 @@ msgstr "资产主机名" msgid "The asset {} system platform {} does not support run Ansible tasks" msgstr "资产 {} 系统平台 {} 不支持运行 Ansible 任务" -#: assets/tasks/account_connectivity.py:106 +#: assets/tasks/account_connectivity.py:107 msgid "Test account connectivity: {}" msgstr "测试账号可连接性: {}" @@ -945,44 +946,44 @@ msgid "" "The task of self-checking is already running and cannot be started repeatedly" msgstr "自检程序已经在运行,不能重复启动" -#: assets/tasks/push_system_user.py:193 +#: assets/tasks/push_system_user.py:194 msgid "System user is dynamic: {}" msgstr "系统用户是动态的: {}" -#: assets/tasks/push_system_user.py:233 +#: assets/tasks/push_system_user.py:234 msgid "Start push system user for platform: [{}]" msgstr "推送系统用户到平台: [{}]" -#: assets/tasks/push_system_user.py:234 -#: assets/tasks/system_user_connectivity.py:105 +#: assets/tasks/push_system_user.py:235 +#: assets/tasks/system_user_connectivity.py:106 msgid "Hosts count: {}" msgstr "主机数量: {}" -#: assets/tasks/push_system_user.py:273 assets/tasks/push_system_user.py:299 +#: assets/tasks/push_system_user.py:274 assets/tasks/push_system_user.py:307 msgid "Push system users to assets: {}" msgstr "推送系统用户到入资产: {}" -#: assets/tasks/push_system_user.py:285 +#: assets/tasks/push_system_user.py:286 msgid "Push system users to asset: {}({}) => {}" msgstr "推送系统用户到入资产: {}({}) => {}" -#: assets/tasks/system_user_connectivity.py:55 +#: assets/tasks/system_user_connectivity.py:56 msgid "Dynamic system user not support test" msgstr "" -#: assets/tasks/system_user_connectivity.py:104 +#: assets/tasks/system_user_connectivity.py:105 msgid "Start test system user connectivity for platform: [{}]" msgstr "开始测试系统用户在该系统平台的可连接性: [{}]" -#: assets/tasks/system_user_connectivity.py:117 +#: assets/tasks/system_user_connectivity.py:118 msgid "Test system user connectivity: {}" msgstr "测试系统用户可连接性: {}" -#: assets/tasks/system_user_connectivity.py:128 +#: assets/tasks/system_user_connectivity.py:129 msgid "Test system user connectivity: {} => {}" msgstr "测试系统用户可连接性: {} => {}" -#: assets/tasks/system_user_connectivity.py:141 +#: assets/tasks/system_user_connectivity.py:148 msgid "Test system user connectivity period: {}" msgstr "定期测试系统用户可连接性: {}" @@ -1129,12 +1130,12 @@ msgid "MFA" msgstr "多因子认证" #: audits/models.py:106 xpack/plugins/change_auth_plan/models.py:303 -#: xpack/plugins/cloud/models.py:161 +#: xpack/plugins/cloud/models.py:171 msgid "Reason" msgstr "原因" #: audits/models.py:107 tickets/models/ticket.py:47 -#: xpack/plugins/cloud/models.py:157 xpack/plugins/cloud/models.py:206 +#: xpack/plugins/cloud/models.py:167 xpack/plugins/cloud/models.py:216 msgid "Status" msgstr "状态" @@ -1168,7 +1169,7 @@ msgid "Hosts display" msgstr "主机名称" #: audits/serializers.py:89 ops/models/command.py:26 -#: xpack/plugins/cloud/models.py:155 +#: xpack/plugins/cloud/models.py:165 msgid "Result" msgstr "结果" @@ -1607,19 +1608,19 @@ msgstr "请使用密码登录,然后绑定企业微信" msgid "Binding DingTalk failed" msgstr "绑定钉钉失败" -#: authentication/views/login.py:60 +#: authentication/views/login.py:78 msgid "Redirecting" msgstr "跳转中" -#: authentication/views/login.py:61 +#: authentication/views/login.py:79 msgid "Redirecting to {} authentication" msgstr "正在跳转到 {} 认证" -#: authentication/views/login.py:85 +#: authentication/views/login.py:105 msgid "Please enable cookies and try again." msgstr "设置你的浏览器支持cookie" -#: authentication/views/login.py:203 +#: authentication/views/login.py:223 msgid "" "Wait for {} confirm, You also can copy link to her/him
\n" " Don't close this page" @@ -1627,15 +1628,15 @@ msgstr "" "等待 {} 确认, 你也可以复制链接发给他/她
\n" " 不要关闭本页面" -#: authentication/views/login.py:208 +#: authentication/views/login.py:228 msgid "No ticket found" msgstr "没有发现工单" -#: authentication/views/login.py:240 +#: authentication/views/login.py:260 msgid "Logout success" msgstr "退出登录成功" -#: authentication/views/login.py:241 +#: authentication/views/login.py:261 msgid "Logout success, return login page" msgstr "退出登录成功,返回到登录页面" @@ -3377,7 +3378,7 @@ msgstr "" msgid "Endpoint" msgstr "端点" -#: terminal/serializers/storage.py:66 xpack/plugins/cloud/models.py:199 +#: terminal/serializers/storage.py:66 xpack/plugins/cloud/models.py:209 msgid "Region" msgstr "地域" @@ -4031,8 +4032,7 @@ msgstr "名称重复" msgid "Please enter the password of" msgstr "请输入" -#: users/templates/users/_base_otp.html:14 xpack/plugins/cloud/models.py:78 -#: xpack/plugins/cloud/serializers.py:178 +#: users/templates/users/_base_otp.html:14 msgid "account" msgstr "账户" @@ -4781,39 +4781,47 @@ msgstr "云服务商" msgid "Cloud account" msgstr "云账号" -#: xpack/plugins/cloud/models.py:81 xpack/plugins/cloud/serializers.py:160 +#: xpack/plugins/cloud/models.py:82 xpack/plugins/cloud/serializers.py:203 +msgid "Account" +msgstr "账户" + +#: xpack/plugins/cloud/models.py:85 xpack/plugins/cloud/serializers.py:178 msgid "Regions" msgstr "地域" -#: xpack/plugins/cloud/models.py:84 +#: xpack/plugins/cloud/models.py:88 msgid "Hostname strategy" msgstr "主机名策略" -#: xpack/plugins/cloud/models.py:95 xpack/plugins/cloud/serializers.py:182 +#: xpack/plugins/cloud/models.py:102 xpack/plugins/cloud/serializers.py:185 +msgid "IP network segment group" +msgstr "IP网段组" + +#: xpack/plugins/cloud/models.py:105 xpack/plugins/cloud/serializers.py:207 msgid "Always update" msgstr "总是更新" -#: xpack/plugins/cloud/models.py:101 +#: xpack/plugins/cloud/models.py:111 msgid "Date last sync" msgstr "最后同步日期" -#: xpack/plugins/cloud/models.py:112 xpack/plugins/cloud/models.py:153 +#: xpack/plugins/cloud/models.py:122 xpack/plugins/cloud/models.py:163 msgid "Sync instance task" msgstr "同步实例任务" -#: xpack/plugins/cloud/models.py:164 xpack/plugins/cloud/models.py:209 +#: xpack/plugins/cloud/models.py:174 xpack/plugins/cloud/models.py:219 msgid "Date sync" msgstr "同步日期" -#: xpack/plugins/cloud/models.py:189 +#: xpack/plugins/cloud/models.py:199 msgid "Sync task" msgstr "同步任务" -#: xpack/plugins/cloud/models.py:193 +#: xpack/plugins/cloud/models.py:203 msgid "Sync instance task history" msgstr "同步实例任务历史" -#: xpack/plugins/cloud/models.py:196 +#: xpack/plugins/cloud/models.py:206 msgid "Instance" msgstr "实例" @@ -4957,47 +4965,56 @@ msgstr "西南-贵阳1" msgid "EU-Paris" msgstr "欧洲-巴黎" -#: xpack/plugins/cloud/serializers.py:19 +#: xpack/plugins/cloud/serializers.py:21 msgid "AccessKey ID" msgstr "" -#: xpack/plugins/cloud/serializers.py:22 +#: xpack/plugins/cloud/serializers.py:24 msgid "AccessKey Secret" msgstr "" -#: xpack/plugins/cloud/serializers.py:28 +#: xpack/plugins/cloud/serializers.py:30 msgid "Client ID" msgstr "" -#: xpack/plugins/cloud/serializers.py:31 +#: xpack/plugins/cloud/serializers.py:33 msgid "Client Secret" msgstr "" -#: xpack/plugins/cloud/serializers.py:34 +#: xpack/plugins/cloud/serializers.py:36 msgid "Tenant ID" msgstr "" -#: xpack/plugins/cloud/serializers.py:37 +#: xpack/plugins/cloud/serializers.py:39 msgid "Subscription ID" msgstr "" -#: xpack/plugins/cloud/serializers.py:49 +#: xpack/plugins/cloud/serializers.py:51 msgid "This field is required" msgstr "这个字段是必填项" -#: xpack/plugins/cloud/serializers.py:83 xpack/plugins/cloud/serializers.py:87 +#: xpack/plugins/cloud/serializers.py:85 xpack/plugins/cloud/serializers.py:89 msgid "API Endpoint" msgstr "API 端点" -#: xpack/plugins/cloud/serializers.py:158 +#: xpack/plugins/cloud/serializers.py:170 +msgid "" +"The IP address that is first matched to will be used as the IP of the " +"created asset.
The default * indicates a random match.
Format for " +"comma-delimited string, Such as: 192.168.1.0/24, 10.1.1.1-10.1.1.20" +msgstr "" +"第一个匹配到的 IP 地址将被用作创建的资产的 IP。
默认值 * 表示随机匹配。" +"
格式为以逗号分隔的字符串,例如:192.168.1.0/24,10.1.1.1-10.1.1.20" + +#: xpack/plugins/cloud/serializers.py:176 msgid "History count" msgstr "执行次数" -#: xpack/plugins/cloud/serializers.py:159 +#: xpack/plugins/cloud/serializers.py:177 msgid "Instance count" msgstr "实例个数" -#: xpack/plugins/cloud/serializers.py:181 +#: xpack/plugins/cloud/serializers.py:206 #: xpack/plugins/gathered_user/serializers.py:20 msgid "Periodic display" msgstr "定时执行" diff --git a/apps/locale/zh/LC_MESSAGES/djangojs.mo b/apps/locale/zh/LC_MESSAGES/djangojs.mo index 24e68caf523648ed333a85c565401a6fbac6a37e..c02ebe0edbf80369dc3446e173b49491134f0785 100644 GIT binary patch delta 17 Zcmdlgx>a;T85e8k&S!I*Cs%V>0RTg42V?*M delta 17 Zcmdlgx>a;T85irih0iCnO|Is$0suq52WS8Q diff --git a/apps/locale/zh/LC_MESSAGES/djangojs.po b/apps/locale/zh/LC_MESSAGES/djangojs.po index 6e75dd502..0cae14858 100644 --- a/apps/locale/zh/LC_MESSAGES/djangojs.po +++ b/apps/locale/zh/LC_MESSAGES/djangojs.po @@ -73,7 +73,7 @@ msgid "" "User list、User group、Asset list、Domain list、Admin user、System user、" "Labels、Asset permission" msgstr "" -"用户列表、用户组、资产列表、网域列表、管理用户、系统用户、标签管理、资产授权" +"用户列表、用户组、资产列表、网域列表、特权用户、系统用户、标签管理、资产授权" "规则" #: static/js/jumpserver.js:416