云管中心同步任务支持设置同步IP网段和协议组(修改特权用户文案)

pull/6522/head
Bai 2021-07-21 15:50:24 +08:00 committed by 老广
parent 77461d7834
commit 689bd093be
11 changed files with 187 additions and 169 deletions

View File

@ -2,7 +2,7 @@
from django.db import models from django.db import models
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from .base import BaseACL, BaseACLQuerySet from .base import BaseACL, BaseACLQuerySet
from ..utils import contains_ip from common.utils.ip import contains_ip
class ACLManager(models.Manager): class ACLManager(models.Manager):

View File

@ -3,7 +3,7 @@ from django.db.models import Q
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from orgs.mixins.models import OrgModelMixin, OrgManager from orgs.mixins.models import OrgModelMixin, OrgManager
from .base import BaseACL, BaseACLQuerySet from .base import BaseACL, BaseACLQuerySet
from ..utils import contains_ip from common.utils.ip import contains_ip
class ACLManager(OrgManager): class ACLManager(OrgManager):

View File

@ -3,7 +3,7 @@ from rest_framework import serializers
from common.drf.serializers import BulkModelSerializer from common.drf.serializers import BulkModelSerializer
from orgs.utils import current_org from orgs.utils import current_org
from ..models import LoginACL 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', ] __all__ = ['LoginACLSerializer', ]

View File

@ -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

View File

@ -10,7 +10,7 @@ from ..models import Asset, Node, Platform, SystemUser
__all__ = [ __all__ = [
'AssetSerializer', 'AssetSimpleSerializer', 'AssetSerializer', 'AssetSimpleSerializer',
'ProtocolsField', 'PlatformSerializer', 'ProtocolsField', 'PlatformSerializer',
'AssetTaskSerializer', 'AssetsTaskSerializer' 'AssetTaskSerializer', 'AssetsTaskSerializer', 'ProtocolsField'
] ]

View File

@ -9,3 +9,4 @@ from .ipip import *
from .crypto import * from .crypto import *
from .random import * from .random import *
from .jumpserver import * from .jumpserver import *
from .ip import *

68
apps/common/utils/ip.py Normal file
View File

@ -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

Binary file not shown.

View File

@ -7,7 +7,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: 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" "PO-Revision-Date: 2021-05-20 10:54+0800\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"
@ -20,7 +20,7 @@ msgstr ""
#: acls/models/base.py:25 acls/serializers/login_asset_acl.py:47 #: acls/models/base.py:25 acls/serializers/login_asset_acl.py:47
#: applications/models/application.py:11 assets/models/asset.py:139 #: applications/models/application.py:11 assets/models/asset.py:139
#: assets/models/base.py:172 assets/models/cluster.py:18 #: 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 #: 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 #: orgs/models.py:23 perms/models/base.py:49 settings/models.py:29
#: terminal/models/storage.py:23 terminal/models/task.py:16 #: terminal/models/storage.py:23 terminal/models/task.py:16
@ -35,12 +35,12 @@ msgid "Name"
msgstr "名称" msgstr "名称"
#: acls/models/base.py:27 assets/models/cmd_filter.py:54 #: acls/models/base.py:27 assets/models/cmd_filter.py:54
#: assets/models/user.py:202 #: assets/models/user.py:203
msgid "Priority" msgid "Priority"
msgstr "优先级" msgstr "优先级"
#: acls/models/base.py:28 assets/models/cmd_filter.py:54 #: 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" msgid "1-100, the lower the value will be match first"
msgstr "优先级可选范围为 1-100 (数值越小越优先)" msgstr "优先级可选范围为 1-100 (数值越小越优先)"
@ -56,13 +56,13 @@ msgstr "激活中"
#: assets/models/asset.py:144 assets/models/asset.py:220 #: assets/models/asset.py:144 assets/models/asset.py:220
#: assets/models/base.py:177 assets/models/cluster.py:29 #: assets/models/base.py:177 assets/models/cluster.py:29
#: assets/models/cmd_filter.py:23 assets/models/cmd_filter.py:64 #: 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 #: 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 #: orgs/models.py:26 perms/models/base.py:57 settings/models.py:34
#: terminal/models/storage.py:26 terminal/models/terminal.py:114 #: terminal/models/storage.py:26 terminal/models/terminal.py:114
#: tickets/models/ticket.py:73 users/models/group.py:16 #: tickets/models/ticket.py:73 users/models/group.py:16
#: users/models/user.py:584 xpack/plugins/change_auth_plan/models.py:77 #: 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 #: xpack/plugins/gathered_user/models.py:26
msgid "Comment" msgid "Comment"
msgstr "备注" msgstr "备注"
@ -119,7 +119,7 @@ msgstr "系统用户"
#: acls/models/login_asset_acl.py:22 #: acls/models/login_asset_acl.py:22
#: applications/serializers/attrs/application_category/remote_app.py:33 #: 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 #: assets/models/gathered_user.py:14 assets/serializers/system_user.py:196
#: audits/models.py:38 perms/models/asset_permission.py:99 #: audits/models.py:38 perms/models/asset_permission.py:99
#: templates/index.html:82 terminal/backends/command/models.py:19 #: 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:40
#: users/templates/users/user_asset_permission.html:70 #: users/templates/users/user_asset_permission.html:70
#: xpack/plugins/change_auth_plan/models.py:282 #: xpack/plugins/change_auth_plan/models.py:282
#: xpack/plugins/cloud/models.py:202 #: xpack/plugins/cloud/models.py:212
msgid "Asset" msgid "Asset"
msgstr "资产" msgstr "资产"
@ -140,7 +140,7 @@ msgstr "审批人"
msgid "Login asset confirm" msgid "Login asset confirm"
msgstr "登录资产复核" msgstr "登录资产复核"
#: acls/serializers/login_acl.py:18 #: acls/serializers/login_acl.py:18 xpack/plugins/cloud/serializers.py:164
msgid "IP address invalid: `{}`" msgid "IP address invalid: `{}`"
msgstr "IP 地址无效: `{}`" msgstr "IP 地址无效: `{}`"
@ -155,7 +155,7 @@ msgstr ""
#: acls/serializers/login_acl.py:30 acls/serializers/login_asset_acl.py:31 #: acls/serializers/login_acl.py:30 acls/serializers/login_asset_acl.py:31
#: applications/serializers/attrs/application_type/mysql_workbench.py:18 #: 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 #: assets/serializers/account.py:11 settings/serializers/settings.py:113
#: users/templates/users/_granted_assets.html:26 #: users/templates/users/_granted_assets.html:26
#: users/templates/users/user_asset_permission.html:156 #: users/templates/users/user_asset_permission.html:156
@ -182,7 +182,7 @@ msgstr "格式为逗号分隔的字符串, * 表示匹配所有. "
#: users/templates/users/_select_user_modal.html:14 #: users/templates/users/_select_user_modal.html:14
#: xpack/plugins/change_auth_plan/models.py:47 #: xpack/plugins/change_auth_plan/models.py:47
#: xpack/plugins/change_auth_plan/models.py:278 #: xpack/plugins/change_auth_plan/models.py:278
#: xpack/plugins/cloud/serializers.py:65 #: xpack/plugins/cloud/serializers.py:67
msgid "Username" msgid "Username"
msgstr "用户名" msgstr "用户名"
@ -210,7 +210,7 @@ msgid ""
msgstr "格式为逗号分隔的字符串, * 表示匹配所有. 可选的协议有: {}" msgstr "格式为逗号分隔的字符串, * 表示匹配所有. 可选的协议有: {}"
#: acls/serializers/login_asset_acl.py:55 assets/models/asset.py:184 #: 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 #: terminal/serializers/session.py:30 terminal/serializers/storage.py:69
msgid "Protocol" msgid "Protocol"
msgstr "协议" msgstr "协议"
@ -251,7 +251,7 @@ msgid "Category"
msgstr "类别" msgstr "类别"
#: applications/models/application.py:16 assets/models/cmd_filter.py:53 #: 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/permission.py:17
#: perms/serializers/application/user_permission.py:34 #: perms/serializers/application/user_permission.py:34
#: terminal/models/storage.py:55 terminal/models/storage.py:116 #: terminal/models/storage.py:55 terminal/models/storage.py:116
@ -261,7 +261,7 @@ msgid "Type"
msgstr "类型" msgstr "类型"
#: applications/models/application.py:20 assets/models/asset.py:188 #: 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" msgid "Domain"
msgstr "网域" msgstr "网域"
@ -300,7 +300,7 @@ msgid "Cluster"
msgstr "集群" msgstr "集群"
#: applications/serializers/attrs/application_category/db.py:11 #: 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" msgid "Host"
msgstr "主机" msgstr "主机"
@ -309,8 +309,8 @@ msgstr "主机"
#: applications/serializers/attrs/application_type/mysql_workbench.py:22 #: applications/serializers/attrs/application_type/mysql_workbench.py:22
#: applications/serializers/attrs/application_type/oracle.py:11 #: applications/serializers/attrs/application_type/oracle.py:11
#: applications/serializers/attrs/application_type/pgsql.py:11 #: applications/serializers/attrs/application_type/pgsql.py:11
#: assets/models/asset.py:185 assets/models/domain.py:51 #: assets/models/asset.py:185 assets/models/domain.py:50
#: xpack/plugins/cloud/serializers.py:64 #: xpack/plugins/cloud/serializers.py:66
msgid "Port" msgid "Port"
msgstr "端口" msgstr "端口"
@ -340,7 +340,7 @@ msgstr "目标URL"
#: xpack/plugins/change_auth_plan/models.py:68 #: xpack/plugins/change_auth_plan/models.py:68
#: xpack/plugins/change_auth_plan/models.py:190 #: xpack/plugins/change_auth_plan/models.py:190
#: xpack/plugins/change_auth_plan/models.py:285 #: xpack/plugins/change_auth_plan/models.py:285
#: xpack/plugins/cloud/serializers.py:67 #: xpack/plugins/cloud/serializers.py:69
msgid "Password" msgid "Password"
msgstr "密码" msgstr "密码"
@ -392,10 +392,11 @@ msgstr "系统平台"
#: assets/models/asset.py:186 assets/serializers/asset.py:65 #: assets/models/asset.py:186 assets/serializers/asset.py:65
#: perms/serializers/asset/user_permission.py:41 #: perms/serializers/asset/user_permission.py:41
#: xpack/plugins/cloud/models.py:99 xpack/plugins/cloud/serializers.py:182
msgid "Protocols" msgid "Protocols"
msgstr "协议组" 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 #: perms/models/asset_permission.py:100
#: xpack/plugins/change_auth_plan/models.py:56 #: xpack/plugins/change_auth_plan/models.py:56
#: xpack/plugins/gathered_user/models.py:24 #: xpack/plugins/gathered_user/models.py:24
@ -403,16 +404,16 @@ msgid "Nodes"
msgstr "节点" msgstr "节点"
#: assets/models/asset.py:190 assets/models/cmd_filter.py:22 #: 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 #: authentication/models.py:46
msgid "Is active" msgid "Is active"
msgstr "激活" msgstr "激活"
#: assets/models/asset.py:193 assets/models/cluster.py:19 #: assets/models/asset.py:193 assets/models/cluster.py:19
#: assets/models/user.py:190 assets/models/user.py:325 templates/_nav.html:44 #: assets/models/user.py:191 assets/models/user.py:326 templates/_nav.html:44
#: xpack/plugins/cloud/models.py:92 xpack/plugins/cloud/serializers.py:179 #: xpack/plugins/cloud/models.py:96 xpack/plugins/cloud/serializers.py:204
msgid "Admin user" msgid "Admin user"
msgstr "管理用户" msgstr "特权用户"
#: assets/models/asset.py:196 #: assets/models/asset.py:196
msgid "Public IP" msgid "Public IP"
@ -488,23 +489,23 @@ msgstr "标签管理"
#: common/db/models.py:70 common/mixins/models.py:49 orgs/models.py:24 #: 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 #: 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 #: 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" msgid "Created by"
msgstr "创建者" msgstr "创建者"
# msgid "Created by" # msgid "Created by"
# msgstr "创建者" # msgstr "创建者"
#: assets/models/asset.py:219 assets/models/base.py:178 #: 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/gathered_user.py:19 assets/models/group.py:22
#: assets/models/label.py:25 common/db/models.py:72 common/mixins/models.py:50 #: 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 #: 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 #: 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" msgid "Date created"
msgstr "创建日期" 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/application_permission.py:31
#: perms/models/asset_permission.py:101 templates/_nav.html:45 #: perms/models/asset_permission.py:101 templates/_nav.html:45
#: terminal/backends/command/models.py:20 #: terminal/backends/command/models.py:20
@ -606,7 +607,7 @@ msgstr "系统"
msgid "Default Cluster" msgid "Default Cluster"
msgstr "默认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" msgid "Command filter"
msgstr "命令过滤器" msgstr "命令过滤器"
@ -647,11 +648,11 @@ msgstr "命令过滤规则"
msgid "Command confirm" msgid "Command confirm"
msgstr "命令复核" msgstr "命令复核"
#: assets/models/domain.py:62 #: assets/models/domain.py:61
msgid "Gateway" msgid "Gateway"
msgstr "网关" msgstr "网关"
#: assets/models/domain.py:68 #: assets/models/domain.py:67
msgid "Password cannot be empty" msgid "Password cannot be empty"
msgstr "密码不能为空" msgstr "密码不能为空"
@ -707,69 +708,69 @@ msgstr "ssh私钥"
#: users/templates/users/user_asset_permission.html:41 #: users/templates/users/user_asset_permission.html:41
#: users/templates/users/user_asset_permission.html:73 #: users/templates/users/user_asset_permission.html:73
#: users/templates/users/user_asset_permission.html:158 #: 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" msgid "Node"
msgstr "节点" msgstr "节点"
#: assets/models/user.py:184 #: assets/models/user.py:185
msgid "Automatic managed" msgid "Automatic managed"
msgstr "托管密码" msgstr "托管密码"
#: assets/models/user.py:185 #: assets/models/user.py:186
msgid "Manually input" msgid "Manually input"
msgstr "手动输入" msgstr "手动输入"
#: assets/models/user.py:189 #: assets/models/user.py:190
msgid "Common user" msgid "Common user"
msgstr "普通用户" msgstr "普通用户"
#: assets/models/user.py:192 #: assets/models/user.py:193
msgid "Username same with user" msgid "Username same with user"
msgstr "用户名与用户相同" 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 #: templates/_nav.html:39 xpack/plugins/change_auth_plan/models.py:52
msgid "Assets" msgid "Assets"
msgstr "资产" 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 #: users/views/profile/password.py:43 users/views/profile/pubkey.py:37
msgid "Users" msgid "Users"
msgstr "用户管理" msgstr "用户管理"
#: assets/models/user.py:200 #: assets/models/user.py:201
msgid "User groups" msgid "User groups"
msgstr "用户组" msgstr "用户组"
#: assets/models/user.py:204 #: assets/models/user.py:205
msgid "Auto push" msgid "Auto push"
msgstr "自动推送" msgstr "自动推送"
#: assets/models/user.py:205 #: assets/models/user.py:206
msgid "Sudo" msgid "Sudo"
msgstr "Sudo" msgstr "Sudo"
#: assets/models/user.py:206 #: assets/models/user.py:207
msgid "Shell" msgid "Shell"
msgstr "Shell" msgstr "Shell"
#: assets/models/user.py:207 #: assets/models/user.py:208
msgid "Login mode" msgid "Login mode"
msgstr "认证方式" msgstr "认证方式"
#: assets/models/user.py:209 #: assets/models/user.py:210
msgid "SFTP Root" msgid "SFTP Root"
msgstr "SFTP根路径" msgstr "SFTP根路径"
#: assets/models/user.py:210 authentication/models.py:95 #: assets/models/user.py:211 authentication/models.py:95
msgid "Token" msgid "Token"
msgstr "" msgstr ""
#: assets/models/user.py:211 #: assets/models/user.py:212
msgid "Home" msgid "Home"
msgstr "家目录" msgstr "家目录"
#: assets/models/user.py:212 #: assets/models/user.py:213
msgid "System groups" msgid "System groups"
msgstr "用户组" msgstr "用户组"
@ -805,21 +806,21 @@ msgstr "组织名称"
#: assets/serializers/asset.py:98 #: assets/serializers/asset.py:98
msgid "Admin user display" msgid "Admin user display"
msgstr "管理用户名称" msgstr "特权用户名称"
#: assets/serializers/base.py:41 #: assets/serializers/base.py:41
msgid "private key invalid" msgid "private key invalid"
msgstr "密钥不合法" msgstr "密钥不合法"
#: assets/serializers/domain.py:13 #: assets/serializers/domain.py:12
msgid "Assets count" msgid "Assets count"
msgstr "资产数量" msgstr "资产数量"
#: assets/serializers/domain.py:14 #: assets/serializers/domain.py:13
msgid "Applications count" msgid "Applications count"
msgstr "应用数量" msgstr "应用数量"
#: assets/serializers/domain.py:15 #: assets/serializers/domain.py:14
msgid "Gateways count" msgid "Gateways count"
msgstr "网关数量" msgstr "网关数量"
@ -892,7 +893,7 @@ msgstr "资产主机名"
msgid "The asset {} system platform {} does not support run Ansible tasks" msgid "The asset {} system platform {} does not support run Ansible tasks"
msgstr "资产 {} 系统平台 {} 不支持运行 Ansible 任务" msgstr "资产 {} 系统平台 {} 不支持运行 Ansible 任务"
#: assets/tasks/account_connectivity.py:106 #: assets/tasks/account_connectivity.py:107
msgid "Test account connectivity: {}" msgid "Test account connectivity: {}"
msgstr "测试账号可连接性: {}" msgstr "测试账号可连接性: {}"
@ -945,44 +946,44 @@ msgid ""
"The task of self-checking is already running and cannot be started repeatedly" "The task of self-checking is already running and cannot be started repeatedly"
msgstr "自检程序已经在运行,不能重复启动" msgstr "自检程序已经在运行,不能重复启动"
#: assets/tasks/push_system_user.py:193 #: assets/tasks/push_system_user.py:194
msgid "System user is dynamic: {}" msgid "System user is dynamic: {}"
msgstr "系统用户是动态的: {}" msgstr "系统用户是动态的: {}"
#: assets/tasks/push_system_user.py:233 #: assets/tasks/push_system_user.py:234
msgid "Start push system user for platform: [{}]" msgid "Start push system user for platform: [{}]"
msgstr "推送系统用户到平台: [{}]" msgstr "推送系统用户到平台: [{}]"
#: assets/tasks/push_system_user.py:234 #: assets/tasks/push_system_user.py:235
#: assets/tasks/system_user_connectivity.py:105 #: assets/tasks/system_user_connectivity.py:106
msgid "Hosts count: {}" msgid "Hosts count: {}"
msgstr "主机数量: {}" 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: {}" msgid "Push system users to assets: {}"
msgstr "推送系统用户到入资产: {}" msgstr "推送系统用户到入资产: {}"
#: assets/tasks/push_system_user.py:285 #: assets/tasks/push_system_user.py:286
msgid "Push system users to asset: {}({}) => {}" msgid "Push system users to asset: {}({}) => {}"
msgstr "推送系统用户到入资产: {}({}) => {}" msgstr "推送系统用户到入资产: {}({}) => {}"
#: assets/tasks/system_user_connectivity.py:55 #: assets/tasks/system_user_connectivity.py:56
msgid "Dynamic system user not support test" msgid "Dynamic system user not support test"
msgstr "" msgstr ""
#: assets/tasks/system_user_connectivity.py:104 #: assets/tasks/system_user_connectivity.py:105
msgid "Start test system user connectivity for platform: [{}]" msgid "Start test system user connectivity for platform: [{}]"
msgstr "开始测试系统用户在该系统平台的可连接性: [{}]" msgstr "开始测试系统用户在该系统平台的可连接性: [{}]"
#: assets/tasks/system_user_connectivity.py:117 #: assets/tasks/system_user_connectivity.py:118
msgid "Test system user connectivity: {}" msgid "Test system user connectivity: {}"
msgstr "测试系统用户可连接性: {}" msgstr "测试系统用户可连接性: {}"
#: assets/tasks/system_user_connectivity.py:128 #: assets/tasks/system_user_connectivity.py:129
msgid "Test system user connectivity: {} => {}" msgid "Test system user connectivity: {} => {}"
msgstr "测试系统用户可连接性: {} => {}" msgstr "测试系统用户可连接性: {} => {}"
#: assets/tasks/system_user_connectivity.py:141 #: assets/tasks/system_user_connectivity.py:148
msgid "Test system user connectivity period: {}" msgid "Test system user connectivity period: {}"
msgstr "定期测试系统用户可连接性: {}" msgstr "定期测试系统用户可连接性: {}"
@ -1129,12 +1130,12 @@ msgid "MFA"
msgstr "多因子认证" msgstr "多因子认证"
#: audits/models.py:106 xpack/plugins/change_auth_plan/models.py:303 #: 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" msgid "Reason"
msgstr "原因" msgstr "原因"
#: audits/models.py:107 tickets/models/ticket.py:47 #: 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" msgid "Status"
msgstr "状态" msgstr "状态"
@ -1168,7 +1169,7 @@ msgid "Hosts display"
msgstr "主机名称" msgstr "主机名称"
#: audits/serializers.py:89 ops/models/command.py:26 #: audits/serializers.py:89 ops/models/command.py:26
#: xpack/plugins/cloud/models.py:155 #: xpack/plugins/cloud/models.py:165
msgid "Result" msgid "Result"
msgstr "结果" msgstr "结果"
@ -1607,19 +1608,19 @@ msgstr "请使用密码登录,然后绑定企业微信"
msgid "Binding DingTalk failed" msgid "Binding DingTalk failed"
msgstr "绑定钉钉失败" msgstr "绑定钉钉失败"
#: authentication/views/login.py:60 #: authentication/views/login.py:78
msgid "Redirecting" msgid "Redirecting"
msgstr "跳转中" msgstr "跳转中"
#: authentication/views/login.py:61 #: authentication/views/login.py:79
msgid "Redirecting to {} authentication" msgid "Redirecting to {} authentication"
msgstr "正在跳转到 {} 认证" msgstr "正在跳转到 {} 认证"
#: authentication/views/login.py:85 #: authentication/views/login.py:105
msgid "Please enable cookies and try again." msgid "Please enable cookies and try again."
msgstr "设置你的浏览器支持cookie" msgstr "设置你的浏览器支持cookie"
#: authentication/views/login.py:203 #: authentication/views/login.py:223
msgid "" msgid ""
"Wait for <b>{}</b> confirm, You also can copy link to her/him <br/>\n" "Wait for <b>{}</b> confirm, You also can copy link to her/him <br/>\n"
" Don't close this page" " Don't close this page"
@ -1627,15 +1628,15 @@ msgstr ""
"等待 <b>{}</b> 确认, 你也可以复制链接发给他/她 <br/>\n" "等待 <b>{}</b> 确认, 你也可以复制链接发给他/她 <br/>\n"
" 不要关闭本页面" " 不要关闭本页面"
#: authentication/views/login.py:208 #: authentication/views/login.py:228
msgid "No ticket found" msgid "No ticket found"
msgstr "没有发现工单" msgstr "没有发现工单"
#: authentication/views/login.py:240 #: authentication/views/login.py:260
msgid "Logout success" msgid "Logout success"
msgstr "退出登录成功" msgstr "退出登录成功"
#: authentication/views/login.py:241 #: authentication/views/login.py:261
msgid "Logout success, return login page" msgid "Logout success, return login page"
msgstr "退出登录成功,返回到登录页面" msgstr "退出登录成功,返回到登录页面"
@ -3377,7 +3378,7 @@ msgstr ""
msgid "Endpoint" msgid "Endpoint"
msgstr "端点" 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" msgid "Region"
msgstr "地域" msgstr "地域"
@ -4031,8 +4032,7 @@ msgstr "名称重复"
msgid "Please enter the password of" msgid "Please enter the password of"
msgstr "请输入" msgstr "请输入"
#: users/templates/users/_base_otp.html:14 xpack/plugins/cloud/models.py:78 #: users/templates/users/_base_otp.html:14
#: xpack/plugins/cloud/serializers.py:178
msgid "account" msgid "account"
msgstr "账户" msgstr "账户"
@ -4781,39 +4781,47 @@ msgstr "云服务商"
msgid "Cloud account" msgid "Cloud account"
msgstr "云账号" 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" msgid "Regions"
msgstr "地域" msgstr "地域"
#: xpack/plugins/cloud/models.py:84 #: xpack/plugins/cloud/models.py:88
msgid "Hostname strategy" msgid "Hostname strategy"
msgstr "主机名策略" 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" msgid "Always update"
msgstr "总是更新" msgstr "总是更新"
#: xpack/plugins/cloud/models.py:101 #: xpack/plugins/cloud/models.py:111
msgid "Date last sync" msgid "Date last sync"
msgstr "最后同步日期" 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" msgid "Sync instance task"
msgstr "同步实例任务" 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" msgid "Date sync"
msgstr "同步日期" msgstr "同步日期"
#: xpack/plugins/cloud/models.py:189 #: xpack/plugins/cloud/models.py:199
msgid "Sync task" msgid "Sync task"
msgstr "同步任务" msgstr "同步任务"
#: xpack/plugins/cloud/models.py:193 #: xpack/plugins/cloud/models.py:203
msgid "Sync instance task history" msgid "Sync instance task history"
msgstr "同步实例任务历史" msgstr "同步实例任务历史"
#: xpack/plugins/cloud/models.py:196 #: xpack/plugins/cloud/models.py:206
msgid "Instance" msgid "Instance"
msgstr "实例" msgstr "实例"
@ -4957,47 +4965,56 @@ msgstr "西南-贵阳1"
msgid "EU-Paris" msgid "EU-Paris"
msgstr "欧洲-巴黎" msgstr "欧洲-巴黎"
#: xpack/plugins/cloud/serializers.py:19 #: xpack/plugins/cloud/serializers.py:21
msgid "AccessKey ID" msgid "AccessKey ID"
msgstr "" msgstr ""
#: xpack/plugins/cloud/serializers.py:22 #: xpack/plugins/cloud/serializers.py:24
msgid "AccessKey Secret" msgid "AccessKey Secret"
msgstr "" msgstr ""
#: xpack/plugins/cloud/serializers.py:28 #: xpack/plugins/cloud/serializers.py:30
msgid "Client ID" msgid "Client ID"
msgstr "" msgstr ""
#: xpack/plugins/cloud/serializers.py:31 #: xpack/plugins/cloud/serializers.py:33
msgid "Client Secret" msgid "Client Secret"
msgstr "" msgstr ""
#: xpack/plugins/cloud/serializers.py:34 #: xpack/plugins/cloud/serializers.py:36
msgid "Tenant ID" msgid "Tenant ID"
msgstr "" msgstr ""
#: xpack/plugins/cloud/serializers.py:37 #: xpack/plugins/cloud/serializers.py:39
msgid "Subscription ID" msgid "Subscription ID"
msgstr "" msgstr ""
#: xpack/plugins/cloud/serializers.py:49 #: xpack/plugins/cloud/serializers.py:51
msgid "This field is required" msgid "This field is required"
msgstr "这个字段是必填项" 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" msgid "API Endpoint"
msgstr "API 端点" 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. <br>The default * indicates a random match. <br>Format for "
"comma-delimited string, Such as: 192.168.1.0/24, 10.1.1.1-10.1.1.20"
msgstr ""
"第一个匹配到的 IP 地址将被用作创建的资产的 IP。<br> 默认值 * 表示随机匹配。"
"<br> 格式为以逗号分隔的字符串,例如:192.168.1.0/24,10.1.1.1-10.1.1.20"
#: xpack/plugins/cloud/serializers.py:176
msgid "History count" msgid "History count"
msgstr "执行次数" msgstr "执行次数"
#: xpack/plugins/cloud/serializers.py:159 #: xpack/plugins/cloud/serializers.py:177
msgid "Instance count" msgid "Instance count"
msgstr "实例个数" msgstr "实例个数"
#: xpack/plugins/cloud/serializers.py:181 #: xpack/plugins/cloud/serializers.py:206
#: xpack/plugins/gathered_user/serializers.py:20 #: xpack/plugins/gathered_user/serializers.py:20
msgid "Periodic display" msgid "Periodic display"
msgstr "定时执行" msgstr "定时执行"

View File

@ -73,7 +73,7 @@ msgid ""
"User list、User group、Asset list、Domain list、Admin user、System user、" "User list、User group、Asset list、Domain list、Admin user、System user、"
"Labels、Asset permission" "Labels、Asset permission"
msgstr "" msgstr ""
"用户列表、用户组、资产列表、网域列表、管理用户、系统用户、标签管理、资产授权" "用户列表、用户组、资产列表、网域列表、特权用户、系统用户、标签管理、资产授权"
"规则" "规则"
#: static/js/jumpserver.js:416 #: static/js/jumpserver.js:416