From 73b67da4c09ac32ad826191b4453ba78a2a110d7 Mon Sep 17 00:00:00 2001 From: xinwen Date: Wed, 14 Apr 2021 16:10:20 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20acl=20=E4=B8=80?= =?UTF-8?q?=E4=BA=9B=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/acls/const.py | 9 - apps/acls/serializers/login_acl.py | 9 +- apps/acls/serializers/login_asset_acl.py | 30 +- apps/locale/zh/LC_MESSAGES/django.mo | Bin 73666 -> 74611 bytes apps/locale/zh/LC_MESSAGES/django.po | 384 ++++++++++++----------- 5 files changed, 236 insertions(+), 196 deletions(-) delete mode 100644 apps/acls/const.py diff --git a/apps/acls/const.py b/apps/acls/const.py deleted file mode 100644 index e40d679c8..000000000 --- a/apps/acls/const.py +++ /dev/null @@ -1,9 +0,0 @@ -from django.utils.translation import ugettext as _ - - -common_help_text = _('Format for comma-delimited string, with * indicating a match all. ') - -ip_group_help_text = common_help_text + _( - 'Such as: ' - '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 ' -) diff --git a/apps/acls/serializers/login_acl.py b/apps/acls/serializers/login_acl.py index 23d31b13e..ee1a5ac25 100644 --- a/apps/acls/serializers/login_acl.py +++ b/apps/acls/serializers/login_acl.py @@ -4,7 +4,6 @@ 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 .. import const __all__ = ['LoginACLSerializer', ] @@ -21,8 +20,14 @@ def ip_group_child_validator(ip_group_child): class LoginACLSerializer(BulkModelSerializer): + ip_group_help_text = _( + 'Format for comma-delimited string, with * indicating a match all. ' + 'Such as: ' + '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 ' + ) + ip_group = serializers.ListField( - default=['*'], label=_('IP'), help_text=const.ip_group_help_text, + default=['*'], label=_('IP'), help_text=ip_group_help_text, child=serializers.CharField(max_length=1024, validators=[ip_group_child_validator]) ) user_display = serializers.ReadOnlyField(source='user.name', label=_('User')) diff --git a/apps/acls/serializers/login_asset_acl.py b/apps/acls/serializers/login_asset_acl.py index 863d636dc..842cbc8a0 100644 --- a/apps/acls/serializers/login_asset_acl.py +++ b/apps/acls/serializers/login_asset_acl.py @@ -1,45 +1,59 @@ from rest_framework import serializers -from django.utils.translation import ugettext as _ +from django.utils.translation import ugettext_lazy as _ from orgs.mixins.serializers import BulkOrgResourceModelSerializer from assets.models import SystemUser from acls import models from orgs.models import Organization -from .. import const __all__ = ['LoginAssetACLSerializer'] +common_help_text = _('Format for comma-delimited string, with * indicating a match all. ') + + class LoginAssetACLUsersSerializer(serializers.Serializer): username_group = serializers.ListField( default=['*'], child=serializers.CharField(max_length=128), label=_('Username'), - help_text=const.common_help_text + help_text=common_help_text ) class LoginAssetACLAssestsSerializer(serializers.Serializer): + ip_group_help_text = _( + 'Format for comma-delimited string, with * indicating a match all. ' + 'Such as: ' + '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 ' + '(Domain name support)' + ) + ip_group = serializers.ListField( default=['*'], child=serializers.CharField(max_length=1024), label=_('IP'), - help_text=const.ip_group_help_text + _('(Domain name support)') + help_text=ip_group_help_text ) hostname_group = serializers.ListField( default=['*'], child=serializers.CharField(max_length=128), label=_('Hostname'), - help_text=const.common_help_text + help_text=common_help_text ) class LoginAssetACLSystemUsersSerializer(serializers.Serializer): + protocol_group_help_text = _( + 'Format for comma-delimited string, with * indicating a match all. ' + 'Protocol options: {}' + ) + name_group = serializers.ListField( default=['*'], child=serializers.CharField(max_length=128), label=_('Name'), - help_text=const.common_help_text + help_text=common_help_text ) username_group = serializers.ListField( default=['*'], child=serializers.CharField(max_length=128), label=_('Username'), - help_text=const.common_help_text + help_text=common_help_text ) protocol_group = serializers.ListField( default=['*'], child=serializers.CharField(max_length=16), label=_('Protocol'), - help_text=const.common_help_text + _('Protocol options: {}').format( + help_text=protocol_group_help_text.format( ', '.join(SystemUser.ASSET_CATEGORY_PROTOCOLS) ) ) diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo index 2864b472f044cd880033eefde5ae81c4dbfab2be..674b2022a5aa99d057dc11ad7164aed4ac01eeec 100644 GIT binary patch delta 22068 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 Ul=$x6ad#Fi-QG2MK(jRe1KLOYzW@LL delta 21935 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 YHE{ZlyKTQ45Ew8w@VlHT18Ro<55-U7?*IS* diff --git a/apps/locale/zh/LC_MESSAGES/django.po b/apps/locale/zh/LC_MESSAGES/django.po index 763d9d2e5..c5a272651 100644 --- a/apps/locale/zh/LC_MESSAGES/django.po +++ b/apps/locale/zh/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: JumpServer 0.3.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-07 18:15+0800\n" +"POT-Creation-Date: 2021-04-14 16:04+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: ibuler \n" "Language-Team: JumpServer team\n" @@ -17,26 +17,14 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: acls/const.py:4 -msgid "Format for comma-delimited string, with * indicating a match all. " -msgstr "格式为逗号分隔的字符串, * 表示匹配所有. " - -#: acls/const.py:7 -msgid "" -"Such as: 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 " -msgstr "" -"例如: 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" - -#: acls/models/base.py:25 acls/serializers/login_asset_acl.py:33 +#: acls/models/base.py:25 acls/serializers/login_asset_acl.py:47 #: applications/models/application.py:11 assets/models/asset.py:142 #: assets/models/base.py:250 assets/models/cluster.py:18 #: 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/storage.py:81 -#: terminal/models/task.py:16 terminal/models/terminal.py:99 +#: terminal/models/storage.py:23 terminal/models/storage.py:90 +#: terminal/models/task.py:16 terminal/models/terminal.py:100 #: users/forms/profile.py:32 users/models/group.py:15 users/models/user.py:530 #: users/templates/users/_select_user_modal.html:13 #: users/templates/users/user_asset_permission.html:37 @@ -82,8 +70,8 @@ msgstr "激活中" #: assets/models/domain.py:22 assets/models/domain.py:56 #: 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:29 terminal/models/storage.py:87 -#: terminal/models/terminal.py:113 tickets/models/ticket.py:73 +#: terminal/models/storage.py:29 terminal/models/storage.py:96 +#: terminal/models/terminal.py:114 tickets/models/ticket.py:73 #: users/models/group.py:16 users/models/user.py:563 #: users/templates/users/user_detail.html:115 #: users/templates/users/user_granted_database_app.html:38 @@ -109,7 +97,7 @@ msgid "Login IP" msgstr "登录IP" #: acls/models/login_acl.py:24 acls/models/login_asset_acl.py:26 -#: acls/serializers/login_acl.py:29 acls/serializers/login_asset_acl.py:61 +#: acls/serializers/login_acl.py:34 acls/serializers/login_asset_acl.py:75 #: assets/models/cmd_filter.py:56 audits/models.py:57 #: authentication/templates/authentication/_access_key_modal.html:34 #: tickets/models/ticket.py:43 users/templates/users/_granted_assets.html:29 @@ -123,15 +111,15 @@ msgid "Action" msgstr "动作" #: acls/models/login_acl.py:28 acls/models/login_asset_acl.py:20 -#: acls/serializers/login_acl.py:28 assets/models/label.py:15 +#: acls/serializers/login_acl.py:33 assets/models/label.py:15 #: audits/models.py:36 audits/models.py:56 audits/models.py:69 #: audits/serializers.py:84 authentication/models.py:44 -#: authentication/models.py:97 orgs/models.py:18 orgs/models.py:417 +#: authentication/models.py:97 orgs/models.py:18 orgs/models.py:418 #: perms/models/base.py:50 templates/index.html:78 #: terminal/backends/command/models.py:18 #: terminal/backends/command/serializers.py:12 terminal/models/session.py:37 #: tickets/models/comment.py:17 users/models/user.py:159 -#: users/models/user.py:699 users/serializers/group.py:20 +#: users/models/user.py:707 users/serializers/group.py:20 #: users/templates/users/user_asset_permission.html:38 #: users/templates/users/user_asset_permission.html:64 #: users/templates/users/user_database_app_permission.html:37 @@ -179,25 +167,38 @@ msgstr "审批人" msgid "Login asset confirm" msgstr "登录资产复核" -#: acls/serializers/login_acl.py:19 +#: acls/serializers/login_acl.py:18 msgid "IP address invalid: `{}`" msgstr "IP 地址无效: `{}`" -#: acls/serializers/login_acl.py:25 acls/serializers/login_asset_acl.py:22 +#: acls/serializers/login_acl.py:24 +msgid "" +"Format for comma-delimited string, with * indicating a match all. Such as: " +"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 " +msgstr "" +"格式为逗号分隔的字符串, * 表示匹配所有。例如: 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" + +#: 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:183 assets/models/domain.py:52 -#: assets/serializers/asset_user.py:46 settings/serializers/settings.py:108 +#: assets/serializers/asset_user.py:46 settings/serializers/settings.py:112 #: users/templates/users/_granted_assets.html:26 #: users/templates/users/user_asset_permission.html:156 msgid "IP" msgstr "IP" -#: acls/serializers/login_acl.py:45 +#: acls/serializers/login_acl.py:50 msgid "The user `{}` is not in the current organization: `{}`" msgstr "用户 `{}` 不在当前组织: `{}`" -#: acls/serializers/login_asset_acl.py:15 -#: acls/serializers/login_asset_acl.py:37 +#: acls/serializers/login_asset_acl.py:12 +msgid "Format for comma-delimited string, with * indicating a match all. " +msgstr "格式为逗号分隔的字符串, * 表示匹配所有. " + +#: acls/serializers/login_asset_acl.py:17 +#: acls/serializers/login_asset_acl.py:51 #: applications/serializers/attrs/application_type/chrome.py:20 #: applications/serializers/attrs/application_type/custom.py:21 #: applications/serializers/attrs/application_type/mysql_workbench.py:30 @@ -215,38 +216,45 @@ msgstr "用户 `{}` 不在当前组织: `{}`" msgid "Username" msgstr "用户名" -#: acls/serializers/login_asset_acl.py:23 -msgid "(Domain name support)" -msgstr "(支持域名)" +#: acls/serializers/login_asset_acl.py:24 +msgid "" +"Format for comma-delimited string, with * indicating a match all. Such as: " +"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 (Domain name support)" +msgstr "" +"格式为逗号分隔的字符串, * 表示匹配所有。例如: 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 (支持网域)" -#: acls/serializers/login_asset_acl.py:26 assets/models/asset.py:184 +#: acls/serializers/login_asset_acl.py:35 assets/models/asset.py:184 #: assets/serializers/asset_user.py:45 assets/serializers/gathered_user.py:20 -#: settings/serializers/settings.py:107 +#: settings/serializers/settings.py:111 #: users/templates/users/_granted_assets.html:25 #: users/templates/users/user_asset_permission.html:157 msgid "Hostname" msgstr "主机名" -#: acls/serializers/login_asset_acl.py:41 assets/models/asset.py:187 +#: acls/serializers/login_asset_acl.py:42 +msgid "" +"Format for comma-delimited string, with * indicating a match all. Protocol " +"options: {}" +msgstr "格式为逗号分隔的字符串, * 表示匹配所有. 可选的协议有: {}" + +#: acls/serializers/login_asset_acl.py:55 assets/models/asset.py:187 #: assets/models/domain.py:54 assets/models/user.py:123 #: terminal/serializers/session.py:29 terminal/serializers/storage.py:69 msgid "Protocol" msgstr "协议" -#: acls/serializers/login_asset_acl.py:42 -msgid "Protocol options: {}" -msgstr "协议选项: {}" - -#: acls/serializers/login_asset_acl.py:51 +#: acls/serializers/login_asset_acl.py:65 msgid "Unsupported protocols: {}" msgstr "不支持的协议: {}" -#: acls/serializers/login_asset_acl.py:80 +#: acls/serializers/login_asset_acl.py:94 #: tickets/serializers/ticket/ticket.py:109 msgid "The organization `{}` does not exist" msgstr "组织 `{}` 不存在" -#: acls/serializers/login_asset_acl.py:85 +#: acls/serializers/login_asset_acl.py:99 msgid "None of the reviewers belong to Organization `{}`" msgstr "所有复核人都不属于组织 `{}`" @@ -279,7 +287,7 @@ msgstr "类别" #: perms/models/application_permission.py:23 #: perms/serializers/application/permission.py:17 #: perms/serializers/application/user_permission.py:34 -#: terminal/models/storage.py:26 terminal/models/storage.py:84 +#: terminal/models/storage.py:26 terminal/models/storage.py:93 #: tickets/models/ticket.py:38 #: tickets/serializers/ticket/meta/ticket_type/apply_application.py:27 #: users/templates/users/user_granted_database_app.html:35 @@ -336,7 +344,7 @@ msgstr "目标URL" #: assets/models/base.py:252 assets/serializers/asset_user.py:71 #: audits/signals_handler.py:46 authentication/forms.py:22 #: authentication/templates/authentication/login.html:155 -#: settings/serializers/settings.py:89 users/forms/profile.py:21 +#: settings/serializers/settings.py:93 users/forms/profile.py:21 #: users/templates/users/user_otp_check_password.html:13 #: users/templates/users/user_password_update.html:43 #: users/templates/users/user_password_verify.html:18 @@ -404,7 +412,7 @@ msgid "Internal" msgstr "内部的" #: assets/models/asset.py:166 assets/models/asset.py:190 -#: assets/serializers/asset.py:66 +#: assets/serializers/asset.py:66 perms/serializers/asset/user_permission.py:43 msgid "Platform" msgstr "系统平台" @@ -504,7 +512,7 @@ msgstr "标签管理" #: assets/models/cluster.py:28 assets/models/cmd_filter.py:26 #: assets/models/cmd_filter.py:60 assets/models/group.py:21 #: common/db/models.py:70 common/mixins/models.py:49 orgs/models.py:24 -#: orgs/models.py:421 perms/models/base.py:55 users/models/user.py:571 +#: orgs/models.py:422 perms/models/base.py:55 users/models/user.py:571 #: users/serializers/group.py:35 users/templates/users/user_detail.html:97 #: xpack/plugins/change_auth_plan/models.py:81 #: xpack/plugins/cloud/models.py:104 xpack/plugins/gathered_user/models.py:30 @@ -518,7 +526,7 @@ msgstr "创建者" #: 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:419 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/templates/users/user_group_detail.html:58 #: xpack/plugins/cloud/models.py:107 msgid "Date created" @@ -554,7 +562,7 @@ msgstr "SSH公钥" #: assets/models/base.py:257 assets/models/gathered_user.py:20 #: common/db/models.py:73 common/mixins/models.py:51 ops/models/adhoc.py:39 -#: orgs/models.py:420 +#: orgs/models.py:421 msgid "Date updated" msgstr "更新日期" @@ -593,7 +601,7 @@ msgid "Default" msgstr "默认" #: assets/models/cluster.py:36 assets/models/label.py:14 -#: users/models/user.py:711 +#: users/models/user.py:719 msgid "System" msgstr "系统" @@ -666,7 +674,7 @@ msgstr "资产组" msgid "Default asset group" msgstr "默认资产组" -#: assets/models/label.py:19 assets/models/node.py:538 settings/models.py:30 +#: assets/models/label.py:19 assets/models/node.py:547 settings/models.py:30 msgid "Value" msgstr "值" @@ -674,23 +682,23 @@ msgstr "值" msgid "New node" msgstr "新节点" -#: assets/models/node.py:466 users/templates/users/_granted_assets.html:130 +#: assets/models/node.py:475 users/templates/users/_granted_assets.html:130 msgid "empty" msgstr "空" -#: assets/models/node.py:537 perms/models/asset_permission.py:156 +#: assets/models/node.py:546 perms/models/asset_permission.py:156 msgid "Key" msgstr "键" -#: assets/models/node.py:539 +#: assets/models/node.py:548 msgid "Full value" msgstr "全称" -#: assets/models/node.py:542 perms/models/asset_permission.py:157 +#: assets/models/node.py:551 perms/models/asset_permission.py:157 msgid "Parent key" msgstr "ssh私钥" -#: assets/models/node.py:551 assets/serializers/system_user.py:191 +#: assets/models/node.py:560 assets/serializers/system_user.py:191 #: users/templates/users/user_asset_permission.html:41 #: users/templates/users/user_asset_permission.html:73 #: users/templates/users/user_asset_permission.html:158 @@ -716,7 +724,7 @@ msgid "Assets" msgstr "资产" #: assets/models/user.py:120 templates/_nav.html:17 -#: users/views/profile/password.py:42 users/views/profile/pubkey.py:36 +#: users/views/profile/password.py:43 users/views/profile/pubkey.py:37 msgid "Users" msgstr "用户管理" @@ -1240,6 +1248,10 @@ msgstr "用户(显示名称)" msgid "SSH Key" msgstr "SSH 密钥" +#: audits/signals_handler.py:47 +msgid "SSO" +msgstr "" + #: authentication/api/mfa.py:60 msgid "Code is invalid" msgstr "Code无效" @@ -1295,38 +1307,42 @@ msgstr "" msgid "Invalid token or cache refreshed." msgstr "" -#: authentication/errors.py:25 +#: authentication/errors.py:24 msgid "Username/password check failed" msgstr "用户名/密码 校验失败" -#: authentication/errors.py:26 +#: authentication/errors.py:25 msgid "Password decrypt failed" msgstr "密码解密失败" -#: authentication/errors.py:27 +#: authentication/errors.py:26 msgid "MFA failed" msgstr "多因子认证失败" -#: authentication/errors.py:28 +#: authentication/errors.py:27 msgid "MFA unset" msgstr "多因子认证没有设定" -#: authentication/errors.py:29 +#: authentication/errors.py:28 msgid "Username does not exist" msgstr "用户名不存在" -#: authentication/errors.py:30 +#: authentication/errors.py:29 msgid "Password expired" msgstr "密码已过期" -#: authentication/errors.py:31 +#: authentication/errors.py:30 msgid "Disabled or expired" msgstr "禁用或失效" -#: authentication/errors.py:32 +#: authentication/errors.py:31 msgid "This account is inactive." msgstr "此账户已禁用" +#: authentication/errors.py:32 +msgid "This account is expired" +msgstr "此账户已过期" + #: authentication/errors.py:33 msgid "Auth backend not match" msgstr "没有匹配到认证后端" @@ -1349,50 +1365,53 @@ msgstr "" "您输入的用户名或密码不正确,请重新输入。 您还可以尝试 {times_try} 次(账号将" "被临时 锁定 {block_time} 分钟)" -#: authentication/errors.py:52 +#: authentication/errors.py:52 authentication/errors.py:56 msgid "" "The account has been locked (please contact admin to unlock it or try again " "after {} minutes)" msgstr "账号已被锁定(请联系管理员解锁 或 {}分钟后重试)" -#: authentication/errors.py:55 users/views/profile/otp.py:107 -#: users/views/profile/otp.py:146 users/views/profile/otp.py:166 -msgid "MFA code invalid, or ntp sync server time" -msgstr "MFA验证码不正确,或者服务器端时间不对" +#: authentication/errors.py:60 +msgid "" +"MFA code invalid, or ntp sync server time, You can also try {times_try} " +"times (The account will be temporarily locked for {block_time} minutes)" +msgstr "" +"MFA验证码不正确,或者服务器端时间不对。 您还可以尝试 {times_try} 次(账号将" +"被临时 锁定 {block_time} 分钟)" -#: authentication/errors.py:57 +#: authentication/errors.py:65 msgid "MFA required" msgstr "需要多因子认证" -#: authentication/errors.py:58 +#: authentication/errors.py:66 msgid "MFA not set, please set it first" msgstr "多因子认证没有设置,请先完成设置" -#: authentication/errors.py:59 +#: authentication/errors.py:67 msgid "Login confirm required" msgstr "需要登录复核" -#: authentication/errors.py:60 +#: authentication/errors.py:68 msgid "Wait login confirm ticket for accept" msgstr "等待登录复核处理" -#: authentication/errors.py:61 +#: authentication/errors.py:69 msgid "Login confirm ticket was {}" msgstr "登录复核 {}" -#: authentication/errors.py:206 +#: authentication/errors.py:233 msgid "IP is not allowed" msgstr "来源 IP 不被允许登录" -#: authentication/errors.py:239 +#: authentication/errors.py:266 msgid "SSO auth closed" msgstr "SSO 认证关闭了" -#: authentication/errors.py:244 authentication/views/login.py:235 +#: authentication/errors.py:271 authentication/views/login.py:236 msgid "Your password is too simple, please change it for security" msgstr "你的密码过于简单,为了安全,请修改" -#: authentication/errors.py:253 authentication/views/login.py:250 +#: authentication/errors.py:280 authentication/views/login.py:251 msgid "Your password has expired, please reset before logging in" msgstr "您的密码已过期,先修改再登录" @@ -1566,7 +1585,7 @@ msgstr "复制成功" msgid "Please enable cookies and try again." msgstr "设置你的浏览器支持cookie" -#: authentication/views/login.py:181 +#: authentication/views/login.py:182 msgid "" "Wait for {} confirm, You also can copy link to her/him
\n" " Don't close this page" @@ -1574,19 +1593,19 @@ msgstr "" "等待 {} 确认, 你也可以复制链接发给他/她
\n" " 不要关闭本页面" -#: authentication/views/login.py:186 +#: authentication/views/login.py:187 msgid "No ticket found" msgstr "没有发现工单" -#: authentication/views/login.py:218 +#: authentication/views/login.py:219 msgid "Logout success" msgstr "退出登录成功" -#: authentication/views/login.py:219 +#: authentication/views/login.py:220 msgid "Logout success, return login page" msgstr "退出登录成功,返回到登录页面" -#: authentication/views/login.py:234 authentication/views/login.py:249 +#: authentication/views/login.py:235 authentication/views/login.py:250 msgid "Please change your password" msgstr "请修改密码" @@ -1710,11 +1729,11 @@ msgstr "" "
Luna是单独部署的一个程序,你需要部署luna,koko,
如果你看到了" "这个页面,证明你访问的不是nginx监听的端口,祝你好运
" -#: jumpserver/views/other.py:78 +#: jumpserver/views/other.py:71 msgid "Websocket server run on port: {}, you should proxy it on nginx" msgstr "Websocket 服务运行在端口: {}, 请检查nginx是否代理是否设置" -#: jumpserver/views/other.py:92 +#: jumpserver/views/other.py:85 msgid "" "
Koko is a separately deployed program, you need to deploy Koko, " "configure nginx for url distribution,
If you see this page, " @@ -1893,7 +1912,7 @@ msgid "The current organization cannot be deleted" msgstr "当前组织不能被删除" #: orgs/mixins/models.py:45 orgs/mixins/serializers.py:25 orgs/models.py:36 -#: orgs/models.py:416 orgs/serializers.py:101 +#: orgs/models.py:417 orgs/serializers.py:101 #: tickets/serializers/ticket/ticket.py:81 msgid "Organization" msgstr "组织" @@ -1910,7 +1929,7 @@ msgstr "组织审计员" msgid "GLOBAL" msgstr "全局组织" -#: orgs/models.py:418 users/models/user.py:540 +#: orgs/models.py:419 users/models/user.py:540 #: users/templates/users/_select_user_modal.html:15 #: users/templates/users/user_detail.html:73 #: users/templates/users/user_list.html:16 @@ -1934,7 +1953,7 @@ msgstr "应用程序" msgid "Application permission" msgstr "应用管理" -#: perms/models/asset_permission.py:37 settings/serializers/settings.py:112 +#: perms/models/asset_permission.py:37 settings/serializers/settings.py:116 msgid "All" msgstr "全部" @@ -2077,14 +2096,6 @@ msgstr "用户第一次登录,修改profile后重定向到地址, 可以是 wi msgid "Forgot password url" msgstr "忘记密码URL" -#: settings/serializers/settings.py:23 -msgid "Global organization name" -msgstr "全局组织名" - -#: settings/serializers/settings.py:23 -msgid "The name of global organization to display" -msgstr "全局组织的显示名称,默认为 全局组织" - #: settings/serializers/settings.py:24 msgid "" "The forgot password url on login page, If you use ldap or cas external " @@ -2093,130 +2104,138 @@ msgstr "" "登录页面忘记密码URL, 如果使用了 LDAP, OPENID 等外部认证系统,可以自定义用户重" "置密码访问的地址" -#: settings/serializers/settings.py:32 +#: settings/serializers/settings.py:28 +msgid "Global organization name" +msgstr "全局组织名" + +#: settings/serializers/settings.py:29 +msgid "The name of global organization to display" +msgstr "全局组织的显示名称,默认为 全局组织" + +#: settings/serializers/settings.py:36 msgid "SMTP host" msgstr "SMTP 主机" -#: settings/serializers/settings.py:33 +#: settings/serializers/settings.py:37 msgid "SMTP port" msgstr "SMTP 端口" -#: settings/serializers/settings.py:34 +#: settings/serializers/settings.py:38 msgid "SMTP account" msgstr "SMTP 账号" -#: settings/serializers/settings.py:36 +#: settings/serializers/settings.py:40 msgid "SMTP password" msgstr "SMTP 密码" -#: settings/serializers/settings.py:37 +#: settings/serializers/settings.py:41 msgid "Tips: Some provider use token except password" msgstr "提示:一些邮件提供商需要输入的是授权码" -#: settings/serializers/settings.py:40 +#: settings/serializers/settings.py:44 msgid "Send user" msgstr "发件人" -#: settings/serializers/settings.py:41 +#: settings/serializers/settings.py:45 msgid "Tips: Send mail account, default SMTP account as the send account" msgstr "提示:发送邮件账号,默认使用 SMTP 账号作为发送账号" -#: settings/serializers/settings.py:44 +#: settings/serializers/settings.py:48 msgid "Test recipient" msgstr "测试收件人" -#: settings/serializers/settings.py:45 +#: settings/serializers/settings.py:49 msgid "Tips: Used only as a test mail recipient" msgstr "提示:仅用来作为测试邮件收件人" -#: settings/serializers/settings.py:48 +#: settings/serializers/settings.py:52 msgid "Use SSL" msgstr "使用 SSL" -#: settings/serializers/settings.py:49 +#: settings/serializers/settings.py:53 msgid "If SMTP port is 465, may be select" msgstr "如果SMTP端口是465,通常需要启用 SSL" -#: settings/serializers/settings.py:52 +#: settings/serializers/settings.py:56 msgid "Use TLS" msgstr "使用 TLS" -#: settings/serializers/settings.py:53 +#: settings/serializers/settings.py:57 msgid "If SMTP port is 587, may be select" msgstr "如果SMTP端口是587,通常需要启用 TLS" -#: settings/serializers/settings.py:56 +#: settings/serializers/settings.py:60 msgid "Subject prefix" msgstr "主题前缀" -#: settings/serializers/settings.py:63 +#: settings/serializers/settings.py:67 msgid "Create user email subject" msgstr "邮件主题" -#: settings/serializers/settings.py:64 +#: settings/serializers/settings.py:68 msgid "" "Tips: When creating a user, send the subject of the email (eg:Create account " "successfully)" msgstr "提示: 创建用户时,发送设置密码邮件的主题 (例如: 创建用户成功)" -#: settings/serializers/settings.py:68 +#: settings/serializers/settings.py:72 msgid "Create user honorific" msgstr "邮件的敬语" -#: settings/serializers/settings.py:69 +#: settings/serializers/settings.py:73 msgid "Tips: When creating a user, send the honorific of the email (eg:Hello)" msgstr "提示: 创建用户时,发送设置密码邮件的敬语 (例如: 您好)" -#: settings/serializers/settings.py:73 +#: settings/serializers/settings.py:77 msgid "Create user email content" msgstr "邮件的内容" -#: settings/serializers/settings.py:74 +#: settings/serializers/settings.py:78 msgid "Tips:When creating a user, send the content of the email" msgstr "提示: 创建用户时,发送设置密码邮件的内容" -#: settings/serializers/settings.py:77 +#: settings/serializers/settings.py:81 msgid "Signature" msgstr "署名" -#: settings/serializers/settings.py:78 +#: settings/serializers/settings.py:82 msgid "Tips: Email signature (eg:jumpserver)" msgstr "邮件署名 (如:jumpserver)" -#: settings/serializers/settings.py:86 +#: settings/serializers/settings.py:90 msgid "LDAP server" msgstr "LDAP 地址" -#: settings/serializers/settings.py:86 +#: settings/serializers/settings.py:90 msgid "eg: ldap://localhost:389" msgstr "" -#: settings/serializers/settings.py:88 +#: settings/serializers/settings.py:92 msgid "Bind DN" msgstr "绑定 DN" -#: settings/serializers/settings.py:91 +#: settings/serializers/settings.py:95 msgid "User OU" msgstr "用户 OU" -#: settings/serializers/settings.py:92 +#: settings/serializers/settings.py:96 msgid "Use | split multi OUs" msgstr "多个 OU 使用 | 分割" -#: settings/serializers/settings.py:95 +#: settings/serializers/settings.py:99 msgid "User search filter" msgstr "用户过滤器" -#: settings/serializers/settings.py:96 +#: settings/serializers/settings.py:100 #, python-format msgid "Choice may be (cn|uid|sAMAccountName)=%(user)s)" msgstr "可能的选项是(cn或uid或sAMAccountName=%(user)s)" -#: settings/serializers/settings.py:99 +#: settings/serializers/settings.py:103 msgid "User attr map" msgstr "用户属性映射" -#: settings/serializers/settings.py:100 +#: settings/serializers/settings.py:104 msgid "" "User attr map present how to map LDAP user attr to jumpserver, username,name," "email is jumpserver attr" @@ -2224,35 +2243,35 @@ msgstr "" "用户属性映射代表怎样将LDAP中用户属性映射到jumpserver用户上,username, name," "email 是jumpserver的用户需要属性" -#: settings/serializers/settings.py:102 +#: settings/serializers/settings.py:106 msgid "Enable LDAP auth" msgstr "启用 LDAP 认证" -#: settings/serializers/settings.py:113 +#: settings/serializers/settings.py:117 msgid "Auto" msgstr "自动" -#: settings/serializers/settings.py:119 +#: settings/serializers/settings.py:123 msgid "Password auth" msgstr "密码认证" -#: settings/serializers/settings.py:120 +#: settings/serializers/settings.py:124 msgid "Public key auth" msgstr "密钥认证" -#: settings/serializers/settings.py:121 +#: settings/serializers/settings.py:125 msgid "List sort by" msgstr "资产列表排序" -#: settings/serializers/settings.py:122 +#: settings/serializers/settings.py:126 msgid "List page size" msgstr "资产列表每页数量" -#: settings/serializers/settings.py:124 +#: settings/serializers/settings.py:128 msgid "Session keep duration" msgstr "会话日志保存时间" -#: settings/serializers/settings.py:125 +#: settings/serializers/settings.py:129 msgid "" "Units: days, Session, record, command will be delete if more than duration, " "only in database" @@ -2260,64 +2279,64 @@ msgstr "" "单位:天。 会话、录像、命令记录超过该时长将会被删除(仅影响数据库存储, oss等不" "受影响)" -#: settings/serializers/settings.py:127 +#: settings/serializers/settings.py:131 msgid "Telnet login regex" msgstr "Telnet 成功正则表达式" -#: settings/serializers/settings.py:132 +#: settings/serializers/settings.py:136 msgid "Global MFA auth" msgstr "全局启用 MFA 认证" -#: settings/serializers/settings.py:133 +#: settings/serializers/settings.py:137 msgid "All user enable MFA" msgstr "强制所有用户启用多因子认证" -#: settings/serializers/settings.py:136 +#: settings/serializers/settings.py:140 msgid "Batch command execution" msgstr "批量命令执行" -#: settings/serializers/settings.py:137 +#: settings/serializers/settings.py:141 msgid "Allow user run batch command or not using ansible" msgstr "是否允许用户使用 ansible 执行批量命令" -#: settings/serializers/settings.py:140 +#: settings/serializers/settings.py:144 msgid "Enable terminal register" msgstr "终端注册" -#: settings/serializers/settings.py:141 +#: settings/serializers/settings.py:145 msgid "" "Allow terminal register, after all terminal setup, you should disable this " "for security" msgstr "是否允许终端注册,当所有终端启动后,为了安全应该关闭" -#: settings/serializers/settings.py:145 +#: settings/serializers/settings.py:149 msgid "Limit the number of login failures" msgstr "限制登录失败次数" -#: settings/serializers/settings.py:149 +#: settings/serializers/settings.py:153 msgid "Block logon interval" msgstr "禁止登录时间间隔" -#: settings/serializers/settings.py:150 +#: settings/serializers/settings.py:154 msgid "" "Tip: (unit/minute) if the user has failed to log in for a limited number of " "times, no login is allowed during this time interval." msgstr "" "提示:(单位:分)当用户登录失败次数达到限制后,那么在此时间间隔内禁止登录" -#: settings/serializers/settings.py:154 +#: settings/serializers/settings.py:158 msgid "Connection max idle time" msgstr "连接最大空闲时间" -#: settings/serializers/settings.py:155 +#: settings/serializers/settings.py:159 msgid "If idle time more than it, disconnect connection Unit: minute" msgstr "提示:如果超过该配置没有操作,连接会被断开 (单位:分)" -#: settings/serializers/settings.py:159 +#: settings/serializers/settings.py:163 msgid "User password expiration" msgstr "用户密码过期时间" -#: settings/serializers/settings.py:160 +#: settings/serializers/settings.py:164 msgid "" "Tip: (unit: day) If the user does not update the password during the time, " "the user password will expire failure;The password expiration reminder mail " @@ -2327,35 +2346,35 @@ msgstr "" "提示:(单位:天)如果用户在此期间没有更新密码,用户密码将过期失效; 密码过期" "提醒邮件将在密码过期前5天内由系统(每天)自动发送给用户" -#: settings/serializers/settings.py:164 +#: settings/serializers/settings.py:168 msgid "Password minimum length" msgstr "密码最小长度" -#: settings/serializers/settings.py:167 +#: settings/serializers/settings.py:171 msgid "Must contain capital" msgstr "必须包含大写字符" -#: settings/serializers/settings.py:169 +#: settings/serializers/settings.py:173 msgid "Must contain lowercase" msgstr "必须包含小写字符" -#: settings/serializers/settings.py:170 +#: settings/serializers/settings.py:174 msgid "Must contain numeric" msgstr "必须包含数字" -#: settings/serializers/settings.py:171 +#: settings/serializers/settings.py:175 msgid "Must contain special" msgstr "必须包含特殊字符" -#: settings/serializers/settings.py:172 +#: settings/serializers/settings.py:176 msgid "Insecure command alert" msgstr "危险命令告警" -#: settings/serializers/settings.py:174 +#: settings/serializers/settings.py:178 msgid "Email recipient" msgstr "邮件收件人" -#: settings/serializers/settings.py:175 +#: settings/serializers/settings.py:179 msgid "Multiple user using , split" msgstr "多个用户,使用 , 分割" @@ -3064,27 +3083,27 @@ msgstr "运行时间" msgid "Args" msgstr "参数" -#: terminal/models/terminal.py:102 +#: terminal/models/terminal.py:103 msgid "type" msgstr "类型" -#: terminal/models/terminal.py:104 +#: terminal/models/terminal.py:105 msgid "Remote Address" msgstr "远端地址" -#: terminal/models/terminal.py:105 +#: terminal/models/terminal.py:106 msgid "SSH Port" msgstr "SSH端口" -#: terminal/models/terminal.py:106 +#: terminal/models/terminal.py:107 msgid "HTTP Port" msgstr "HTTP端口" -#: terminal/models/terminal.py:107 +#: terminal/models/terminal.py:108 msgid "Command storage" msgstr "命令存储" -#: terminal/models/terminal.py:108 +#: terminal/models/terminal.py:109 msgid "Replay storage" msgstr "录像存储" @@ -3583,7 +3602,7 @@ msgstr "工单已处理 - {} ({})" msgid "Your ticket has been processed, processor - {}" msgstr "你的工单已被处理, 处理人 - {}" -#: users/api/user.py:212 +#: users/api/user.py:215 msgid "Could not reset self otp, use profile reset instead" msgstr "不能在该页面重置多因子认证, 请去个人信息页面重置" @@ -3702,11 +3721,11 @@ msgstr "用户来源" msgid "Date password last updated" msgstr "最后更新密码日期" -#: users/models/user.py:707 +#: users/models/user.py:715 msgid "Administrator" msgstr "管理员" -#: users/models/user.py:710 +#: users/models/user.py:718 msgid "Administrator is the super user of system" msgstr "Administrator是初始的超级管理员" @@ -4304,7 +4323,7 @@ msgstr "新的公钥已设置成功,请下载对应的私钥" msgid "Update user" msgstr "更新用户" -#: users/templates/users/user_update.html:22 users/views/profile/reset.py:119 +#: users/templates/users/user_update.html:22 users/views/profile/reset.py:120 msgid "User auth from {}, go there change password" msgstr "用户认证源来自 {}, 请去相应系统修改密码" @@ -4412,7 +4431,7 @@ msgstr "" "
\n" " " -#: users/utils.py:116 users/views/profile/reset.py:79 +#: users/utils.py:116 users/views/profile/reset.py:80 msgid "Reset password success" msgstr "重置密码成功" @@ -4616,6 +4635,11 @@ msgstr "" "
\n" " " +#: users/views/profile/otp.py:107 users/views/profile/otp.py:146 +#: users/views/profile/otp.py:166 +msgid "MFA code invalid, or ntp sync server time" +msgstr "MFA验证码不正确,或者服务器端时间不对" + #: users/views/profile/otp.py:190 msgid "MFA enable success" msgstr "多因子认证启用成功" @@ -4632,46 +4656,46 @@ msgstr "多因子认证禁用成功" msgid "MFA disable success, return login page" msgstr "多因子认证禁用成功,返回登录页面" -#: users/views/profile/password.py:43 +#: users/views/profile/password.py:44 msgid "Password update" msgstr "密码更新" -#: users/views/profile/password.py:59 users/views/profile/reset.py:126 +#: users/views/profile/password.py:60 users/views/profile/reset.py:127 msgid "* Your password does not meet the requirements" msgstr "* 您的密码不符合要求" -#: users/views/profile/password.py:74 +#: users/views/profile/password.py:75 msgid "Password invalid" msgstr "用户名或密码无效" -#: users/views/profile/pubkey.py:37 +#: users/views/profile/pubkey.py:38 msgid "Public key update" msgstr "密钥更新" -#: users/views/profile/reset.py:45 +#: users/views/profile/reset.py:46 msgid "Email address invalid, please input again" msgstr "邮箱地址错误,重新输入" -#: users/views/profile/reset.py:51 +#: users/views/profile/reset.py:52 msgid "" "The user is from {}, please go to the corresponding system to change the " "password" msgstr "用户来自 {} 请去相应系统修改密码" -#: users/views/profile/reset.py:65 +#: users/views/profile/reset.py:66 msgid "Send reset password message" msgstr "发送重置密码邮件" -#: users/views/profile/reset.py:66 +#: users/views/profile/reset.py:67 msgid "Send reset password mail success, login your mail box and follow it " msgstr "" "发送重置邮件成功, 请登录邮箱查看, 按照提示操作 (如果没收到,请等待3-5分钟)" -#: users/views/profile/reset.py:80 +#: users/views/profile/reset.py:81 msgid "Reset password success, return to login page" msgstr "重置密码成功,返回到登录页面" -#: users/views/profile/reset.py:104 users/views/profile/reset.py:114 +#: users/views/profile/reset.py:105 users/views/profile/reset.py:115 msgid "Token invalid or expired" msgstr "Token错误或失效" @@ -5151,6 +5175,12 @@ msgstr "旗舰版" msgid "Community edition" msgstr "社区版" +#~ msgid "(Domain name support)" +#~ msgstr "(支持域名)" + +#~ msgid "Protocol options: {}" +#~ msgstr "协议选项: {}" + #~ msgid "CPU Usage" #~ msgstr "CPU使用"