From a8d84fc6e166982aef6ce6ee32bf7438a914ee9a Mon Sep 17 00:00:00 2001 From: Bai Date: Fri, 4 Jun 2021 11:38:00 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BF=AE=E6=94=B9=E8=BF=81=E7=A7=BB?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/locale/zh/LC_MESSAGES/django.mo | Bin 75494 -> 76178 bytes apps/locale/zh/LC_MESSAGES/django.po | 494 +++++++++--------- .../migrations/0036_auto_20210604_1124.py | 18 - apps/users/models/user.py | 2 +- 4 files changed, 261 insertions(+), 253 deletions(-) delete mode 100644 apps/users/migrations/0036_auto_20210604_1124.py diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo index d5940b932d0d1b4e0a655e25c4605507d71bae46..a3df15a78817b6aa1bf9cb981eb14789748326e6 100644 GIT binary patch delta 22781 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 M0SVIzLR delta 22305 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 diff --git a/apps/locale/zh/LC_MESSAGES/django.po b/apps/locale/zh/LC_MESSAGES/django.po index af2cbcc87..c6787d382 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-06-04 11:11+0800\n" +"POT-Creation-Date: 2021-06-04 11:29+0800\n" "PO-Revision-Date: 2021-05-20 10:54+0800\n" "Last-Translator: ibuler \n" "Language-Team: JumpServer team\n" @@ -19,7 +19,7 @@ msgstr "" #: 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/base.py:249 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 @@ -35,12 +35,12 @@ msgid "Name" msgstr "名称" #: acls/models/base.py:27 assets/models/cmd_filter.py:54 -#: assets/models/user.py:122 +#: assets/models/user.py:123 msgid "Priority" msgstr "优先级" #: acls/models/base.py:28 assets/models/cmd_filter.py:54 -#: assets/models/user.py:122 +#: assets/models/user.py:123 msgid "1-100, the lower the value will be match first" msgstr "优先级可选范围为 1-100 (数值越小越优先)" @@ -54,7 +54,7 @@ msgstr "激活中" # msgstr "创建日期" #: acls/models/base.py:32 applications/models/application.py:24 #: assets/models/asset.py:147 assets/models/asset.py:223 -#: assets/models/base.py:255 assets/models/cluster.py:29 +#: assets/models/base.py:254 assets/models/cluster.py:29 #: assets/models/cmd_filter.py:23 assets/models/cmd_filter.py:64 #: 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 @@ -99,7 +99,7 @@ msgstr "动作" #: terminal/backends/command/models.py:18 #: terminal/backends/command/serializers.py:12 terminal/models/session.py:38 #: tickets/models/comment.py:17 users/models/user.py:176 -#: users/models/user.py:740 users/models/user.py:766 +#: users/models/user.py:746 users/models/user.py:772 #: users/serializers/group.py:20 #: users/templates/users/user_asset_permission.html:38 #: users/templates/users/user_asset_permission.html:64 @@ -122,7 +122,7 @@ msgstr "系统用户" #: assets/models/asset.py:355 assets/models/authbook.py:26 #: assets/models/gathered_user.py:14 assets/serializers/admin_user.py:34 #: assets/serializers/asset_user.py:48 assets/serializers/asset_user.py:90 -#: assets/serializers/system_user.py:201 audits/models.py:38 +#: assets/serializers/system_user.py:202 audits/models.py:38 #: perms/models/asset_permission.py:99 templates/index.html:82 #: terminal/backends/command/models.py:19 #: terminal/backends/command/serializers.py:13 terminal/models/session.py:40 @@ -158,7 +158,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:183 assets/models/domain.py:52 -#: assets/serializers/asset_user.py:47 settings/serializers/settings.py:112 +#: assets/serializers/asset_user.py:47 settings/serializers/settings.py:117 #: users/templates/users/_granted_assets.html:26 #: users/templates/users/user_asset_permission.html:156 msgid "IP" @@ -178,7 +178,7 @@ msgstr "格式为逗号分隔的字符串, * 表示匹配所有. " #: applications/serializers/attrs/application_type/custom.py:21 #: applications/serializers/attrs/application_type/mysql_workbench.py:30 #: applications/serializers/attrs/application_type/vmware_client.py:26 -#: assets/models/base.py:251 assets/models/gathered_user.py:15 +#: assets/models/base.py:250 assets/models/gathered_user.py:15 #: audits/models.py:100 authentication/forms.py:15 authentication/forms.py:17 #: ops/models/adhoc.py:148 users/forms/profile.py:31 users/models/user.py:548 #: users/templates/users/_select_user_modal.html:14 @@ -199,7 +199,7 @@ msgstr "" #: acls/serializers/login_asset_acl.py:35 assets/models/asset.py:184 #: assets/serializers/asset_user.py:46 assets/serializers/gathered_user.py:23 -#: settings/serializers/settings.py:111 +#: settings/serializers/settings.py:116 #: users/templates/users/_granted_assets.html:25 #: users/templates/users/user_asset_permission.html:157 msgid "Hostname" @@ -212,7 +212,7 @@ msgid "" msgstr "格式为逗号分隔的字符串, * 表示匹配所有. 可选的协议有: {}" #: acls/serializers/login_asset_acl.py:55 assets/models/asset.py:187 -#: assets/models/domain.py:54 assets/models/user.py:123 +#: assets/models/domain.py:54 assets/models/user.py:124 #: terminal/serializers/session.py:32 terminal/serializers/storage.py:69 msgid "Protocol" msgstr "协议" @@ -316,10 +316,10 @@ msgstr "目标URL" #: applications/serializers/attrs/application_type/custom.py:25 #: applications/serializers/attrs/application_type/mysql_workbench.py:34 #: applications/serializers/attrs/application_type/vmware_client.py:30 -#: assets/models/base.py:252 assets/serializers/asset_user.py:77 +#: assets/models/base.py:251 assets/serializers/asset_user.py:77 #: audits/signals_handler.py:58 authentication/forms.py:22 #: authentication/templates/authentication/login.html:164 -#: settings/serializers/settings.py:93 users/forms/profile.py:21 +#: settings/serializers/settings.py:98 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 @@ -358,7 +358,7 @@ msgstr "不能删除根节点 ({})" msgid "Deletion failed and the node contains assets" msgstr "删除失败,节点包含资产" -#: assets/backends/db.py:109 assets/models/user.py:228 audits/models.py:39 +#: assets/backends/db.py:109 assets/models/user.py:304 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 @@ -377,7 +377,7 @@ msgid "System user(Dynamic)" msgstr "系统用户(动态)" #: assets/backends/db.py:232 assets/models/asset.py:196 -#: assets/models/cluster.py:19 assets/models/user.py:66 templates/_nav.html:44 +#: assets/models/cluster.py:19 assets/models/user.py:67 templates/_nav.html:44 #: xpack/plugins/cloud/models.py:92 xpack/plugins/cloud/serializers.py:160 msgid "Admin user" msgstr "管理用户" @@ -417,7 +417,7 @@ msgstr "系统平台" msgid "Protocols" msgstr "协议组" -#: assets/models/asset.py:192 assets/models/user.py:118 +#: assets/models/asset.py:192 assets/models/user.py:119 #: perms/models/asset_permission.py:100 #: xpack/plugins/change_auth_plan/models.py:56 #: xpack/plugins/gathered_user/models.py:24 @@ -498,7 +498,7 @@ msgstr "主机名原始" msgid "Labels" msgstr "标签管理" -#: assets/models/asset.py:221 assets/models/base.py:258 +#: assets/models/asset.py:221 assets/models/base.py:257 #: assets/models/cluster.py:28 assets/models/cmd_filter.py:26 #: assets/models/cmd_filter.py:67 assets/models/group.py:21 #: common/db/models.py:70 common/mixins/models.py:49 orgs/models.py:24 @@ -510,13 +510,13 @@ msgstr "创建者" # msgid "Created by" # msgstr "创建者" -#: assets/models/asset.py:222 assets/models/base.py:256 +#: assets/models/asset.py:222 assets/models/base.py:255 #: 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:767 xpack/plugins/cloud/models.py:107 +#: users/models/user.py:773 xpack/plugins/cloud/models.py:107 msgid "Date created" msgstr "创建日期" @@ -536,19 +536,19 @@ msgstr "版本" msgid "AuthBook" msgstr "" -#: assets/models/base.py:253 xpack/plugins/change_auth_plan/models.py:72 +#: assets/models/base.py:252 xpack/plugins/change_auth_plan/models.py:72 #: xpack/plugins/change_auth_plan/models.py:197 #: xpack/plugins/change_auth_plan/models.py:292 msgid "SSH private key" msgstr "SSH密钥" -#: assets/models/base.py:254 xpack/plugins/change_auth_plan/models.py:75 +#: assets/models/base.py:253 xpack/plugins/change_auth_plan/models.py:75 #: xpack/plugins/change_auth_plan/models.py:193 #: xpack/plugins/change_auth_plan/models.py:288 msgid "SSH public key" msgstr "SSH公钥" -#: assets/models/base.py:257 assets/models/gathered_user.py:20 +#: assets/models/base.py:256 assets/models/gathered_user.py:20 #: common/db/models.py:73 common/mixins/models.py:51 ops/models/adhoc.py:39 #: orgs/models.py:421 msgid "Date updated" @@ -588,7 +588,7 @@ msgid "Default" msgstr "默认" #: assets/models/cluster.py:36 assets/models/label.py:14 -#: users/models/user.py:752 +#: users/models/user.py:758 msgid "System" msgstr "系统" @@ -596,7 +596,7 @@ msgstr "系统" msgid "Default Cluster" msgstr "默认Cluster" -#: assets/models/cmd_filter.py:33 assets/models/user.py:128 +#: assets/models/cmd_filter.py:33 assets/models/user.py:129 msgid "Command filter" msgstr "命令过滤器" @@ -693,7 +693,7 @@ msgstr "全称" msgid "Parent key" msgstr "ssh私钥" -#: assets/models/node.py:559 assets/serializers/system_user.py:200 +#: assets/models/node.py:559 assets/serializers/system_user.py:201 #: users/templates/users/user_asset_permission.html:41 #: users/templates/users/user_asset_permission.html:73 #: users/templates/users/user_asset_permission.html:158 @@ -701,61 +701,61 @@ msgstr "ssh私钥" msgid "Node" msgstr "节点" -#: assets/models/user.py:114 +#: assets/models/user.py:115 msgid "Automatic login" msgstr "自动登录" -#: assets/models/user.py:115 +#: assets/models/user.py:116 msgid "Manually login" msgstr "手动登录" -#: assets/models/user.py:117 +#: assets/models/user.py:118 msgid "Username same with user" msgstr "用户名与用户相同" -#: assets/models/user.py:119 assets/serializers/domain.py:30 +#: assets/models/user.py:120 assets/serializers/domain.py:30 #: templates/_nav.html:39 xpack/plugins/change_auth_plan/models.py:52 msgid "Assets" msgstr "资产" -#: assets/models/user.py:120 templates/_nav.html:17 +#: assets/models/user.py:121 templates/_nav.html:17 #: users/views/profile/password.py:43 users/views/profile/pubkey.py:37 msgid "Users" msgstr "用户管理" -#: assets/models/user.py:121 +#: assets/models/user.py:122 msgid "User groups" msgstr "用户组" -#: assets/models/user.py:124 +#: assets/models/user.py:125 msgid "Auto push" msgstr "自动推送" -#: assets/models/user.py:125 +#: assets/models/user.py:126 msgid "Sudo" msgstr "Sudo" -#: assets/models/user.py:126 +#: assets/models/user.py:127 msgid "Shell" msgstr "Shell" -#: assets/models/user.py:127 +#: assets/models/user.py:128 msgid "Login mode" msgstr "登录模式" -#: assets/models/user.py:129 +#: assets/models/user.py:130 msgid "SFTP Root" msgstr "SFTP根路径" -#: assets/models/user.py:130 authentication/models.py:95 +#: assets/models/user.py:131 authentication/models.py:95 msgid "Token" msgstr "" -#: assets/models/user.py:131 +#: assets/models/user.py:132 msgid "Home" msgstr "家目录" -#: assets/models/user.py:132 +#: assets/models/user.py:133 msgid "System groups" msgstr "用户组" @@ -818,7 +818,7 @@ msgstr "ID" msgid "Backend" msgstr "后端" -#: assets/serializers/asset_user.py:50 +#: assets/serializers/asset_user.py:50 users/models/user.py:596 msgid "Source" msgstr "来源" @@ -847,8 +847,8 @@ msgstr "应用数量" msgid "Gateways count" msgstr "网关数量" -#: assets/serializers/label.py:13 assets/serializers/system_user.py:47 -#: assets/serializers/system_user.py:175 +#: assets/serializers/label.py:13 assets/serializers/system_user.py:48 +#: assets/serializers/system_user.py:176 #: perms/serializers/asset/permission.py:74 msgid "Assets amount" msgstr "资产数量" @@ -870,33 +870,33 @@ msgstr "不能包含: /" msgid "The same level node name cannot be the same" msgstr "同级别节点名字不能重复" -#: assets/serializers/system_user.py:46 assets/serializers/system_user.py:174 +#: assets/serializers/system_user.py:47 assets/serializers/system_user.py:175 #: perms/serializers/asset/permission.py:75 msgid "Nodes amount" msgstr "节点数量" -#: assets/serializers/system_user.py:48 assets/serializers/system_user.py:176 -#: assets/serializers/system_user.py:202 +#: assets/serializers/system_user.py:49 assets/serializers/system_user.py:177 +#: assets/serializers/system_user.py:203 msgid "Login mode display" msgstr "登录模式(显示名称)" -#: assets/serializers/system_user.py:50 assets/serializers/system_user.py:178 +#: assets/serializers/system_user.py:51 assets/serializers/system_user.py:179 msgid "Ad domain" msgstr "Ad 网域" -#: assets/serializers/system_user.py:89 +#: assets/serializers/system_user.py:90 msgid "Username same with user with protocol {} only allow 1" msgstr "用户名和用户相同的一种协议只允许存在一个" -#: assets/serializers/system_user.py:102 +#: assets/serializers/system_user.py:103 msgid "* Automatic login mode must fill in the username." msgstr "自动登录模式,必须填写用户名" -#: assets/serializers/system_user.py:116 +#: assets/serializers/system_user.py:117 msgid "Path should starts with /" msgstr "路径应该以 / 开头" -#: assets/serializers/system_user.py:127 +#: assets/serializers/system_user.py:128 msgid "Password or private key required" msgstr "密码或密钥密码需要一个" @@ -1189,7 +1189,7 @@ msgstr "主机 (显示名称)" msgid "Result" msgstr "结果" -#: audits/serializers.py:92 terminal/serializers/storage.py:178 +#: audits/serializers.py:92 terminal/serializers/storage.py:189 msgid "Hosts" msgstr "主机" @@ -1215,11 +1215,13 @@ msgstr "" #: audits/signals_handler.py:60 #: authentication/templates/authentication/login.html:210 +#: notifications/backends/__init__.py:12 msgid "WeCom" msgstr "企业微信" #: audits/signals_handler.py:61 #: authentication/templates/authentication/login.html:215 +#: notifications/backends/__init__.py:13 msgid "DingTalk" msgstr "钉钉" @@ -1824,6 +1826,15 @@ msgstr "" "div>
如果你看到了这个页面,证明你访问的不是nginx监听的端口,祝你好运" +#: notifications/backends/__init__.py:11 users/forms/profile.py:101 +#: users/models/user.py:552 +msgid "Email" +msgstr "邮件" + +#: notifications/backends/__init__.py:14 +msgid "Site message" +msgstr "" + #: ops/api/celery.py:61 ops/api/celery.py:76 msgid "Waiting task start" msgstr "等待任务开始" @@ -1832,7 +1843,7 @@ msgstr "等待任务开始" msgid "Not has host {} permission" msgstr "没有该主机 {} 权限" -#: ops/apps.py:9 +#: ops/apps.py:9 ops/notifications.py:12 msgid "Operations" msgstr "运维" @@ -1967,6 +1978,14 @@ msgstr "命令 `{}` 不允许被执行 ......." msgid "Task end" msgstr "任务结束" +#: ops/notifications.py:13 +msgid "Server performance" +msgstr "" + +#: ops/notifications.py:20 +msgid "Disk used more than 80%: {} => {}" +msgstr "磁盘使用率超过 80%: {} => {}" + #: ops/tasks.py:71 msgid "Clean task history period" msgstr "定期清除任务历史" @@ -1983,17 +2002,13 @@ msgstr "任务列表" msgid "Update task content: {}" msgstr "更新任务内容: {}" -#: ops/utils.py:74 -msgid "Disk used more than 80%: {} => {}" -msgstr "磁盘使用率超过 80%: {} => {}" +#: orgs/api.py:77 +msgid "The current organization ({}) cannot be deleted" +msgstr "当前组织 ({}) 不能被删除" -#: orgs/api.py:79 -msgid "Have {} exists, Please delete" -msgstr "{} 存在数据, 请先删除" - -#: orgs/api.py:83 -msgid "The current organization cannot be deleted" -msgstr "当前组织不能被删除" +#: orgs/api.py:85 +msgid "The organization have resource ({}) cannot be deleted" +msgstr "组织存在资源 ({}) 不能被删除" #: orgs/mixins/models.py:45 orgs/mixins/serializers.py:25 orgs/models.py:36 #: orgs/models.py:417 orgs/serializers.py:108 @@ -2034,7 +2049,7 @@ msgstr "应用程序" msgid "Application permission" msgstr "应用管理" -#: perms/models/asset_permission.py:37 settings/serializers/settings.py:116 +#: perms/models/asset_permission.py:37 settings/serializers/settings.py:121 msgid "All" msgstr "全部" @@ -2176,22 +2191,30 @@ msgid "Site url" msgstr "当前站点URL" #: settings/serializers/settings.py:16 -msgid "eg: http://demo.jumpserver.org:8080" -msgstr "如: http://demo.jumpserver.org:8080" +msgid "eg: http://dev.jumpserver.org:8080" +msgstr "如: http://dev.jumpserver.org:8080" #: settings/serializers/settings.py:19 +msgid "RDP address" +msgstr "RDP 地址" + +#: settings/serializers/settings.py:21 +msgid "RDP visit address, eg: dev.jumpserver.org:3389" +msgstr "RDP 访问地址, 如: dev.jumpserver.org:3389" + +#: settings/serializers/settings.py:24 msgid "User guide url" msgstr "用户向导URL" -#: settings/serializers/settings.py:20 +#: settings/serializers/settings.py:25 msgid "User first login update profile done redirect to it" msgstr "用户第一次登录,修改profile后重定向到地址, 可以是 wiki 或 其他说明文档" -#: settings/serializers/settings.py:23 +#: settings/serializers/settings.py:28 msgid "Forgot password url" msgstr "忘记密码URL" -#: settings/serializers/settings.py:24 +#: settings/serializers/settings.py:29 msgid "" "The forgot password url on login page, If you use ldap or cas external " "authentication, you can set it" @@ -2199,138 +2222,138 @@ msgstr "" "登录页面忘记密码URL, 如果使用了 LDAP, OPENID 等外部认证系统,可以自定义用户重" "置密码访问的地址" -#: settings/serializers/settings.py:28 +#: settings/serializers/settings.py:33 msgid "Global organization name" msgstr "全局组织名" -#: settings/serializers/settings.py:29 +#: settings/serializers/settings.py:34 msgid "The name of global organization to display" msgstr "全局组织的显示名称,默认为 全局组织" -#: settings/serializers/settings.py:36 +#: settings/serializers/settings.py:41 msgid "SMTP host" msgstr "SMTP 主机" -#: settings/serializers/settings.py:37 +#: settings/serializers/settings.py:42 msgid "SMTP port" msgstr "SMTP 端口" -#: settings/serializers/settings.py:38 +#: settings/serializers/settings.py:43 msgid "SMTP account" msgstr "SMTP 账号" -#: settings/serializers/settings.py:40 +#: settings/serializers/settings.py:45 msgid "SMTP password" msgstr "SMTP 密码" -#: settings/serializers/settings.py:41 +#: settings/serializers/settings.py:46 msgid "Tips: Some provider use token except password" msgstr "提示:一些邮件提供商需要输入的是授权码" -#: settings/serializers/settings.py:44 +#: settings/serializers/settings.py:49 msgid "Send user" msgstr "发件人" -#: settings/serializers/settings.py:45 +#: settings/serializers/settings.py:50 msgid "Tips: Send mail account, default SMTP account as the send account" msgstr "提示:发送邮件账号,默认使用 SMTP 账号作为发送账号" -#: settings/serializers/settings.py:48 +#: settings/serializers/settings.py:53 msgid "Test recipient" msgstr "测试收件人" -#: settings/serializers/settings.py:49 +#: settings/serializers/settings.py:54 msgid "Tips: Used only as a test mail recipient" msgstr "提示:仅用来作为测试邮件收件人" -#: settings/serializers/settings.py:52 +#: settings/serializers/settings.py:57 msgid "Use SSL" msgstr "使用 SSL" -#: settings/serializers/settings.py:53 +#: settings/serializers/settings.py:58 msgid "If SMTP port is 465, may be select" msgstr "如果SMTP端口是465,通常需要启用 SSL" -#: settings/serializers/settings.py:56 +#: settings/serializers/settings.py:61 msgid "Use TLS" msgstr "使用 TLS" -#: settings/serializers/settings.py:57 +#: settings/serializers/settings.py:62 msgid "If SMTP port is 587, may be select" msgstr "如果SMTP端口是587,通常需要启用 TLS" -#: settings/serializers/settings.py:60 +#: settings/serializers/settings.py:65 msgid "Subject prefix" msgstr "主题前缀" -#: settings/serializers/settings.py:67 +#: settings/serializers/settings.py:72 msgid "Create user email subject" msgstr "邮件主题" -#: settings/serializers/settings.py:68 +#: settings/serializers/settings.py:73 msgid "" "Tips: When creating a user, send the subject of the email (eg:Create account " "successfully)" msgstr "提示: 创建用户时,发送设置密码邮件的主题 (例如: 创建用户成功)" -#: settings/serializers/settings.py:72 +#: settings/serializers/settings.py:77 msgid "Create user honorific" msgstr "邮件的敬语" -#: settings/serializers/settings.py:73 +#: settings/serializers/settings.py:78 msgid "Tips: When creating a user, send the honorific of the email (eg:Hello)" msgstr "提示: 创建用户时,发送设置密码邮件的敬语 (例如: 您好)" -#: settings/serializers/settings.py:77 +#: settings/serializers/settings.py:82 msgid "Create user email content" msgstr "邮件的内容" -#: settings/serializers/settings.py:78 +#: settings/serializers/settings.py:83 msgid "Tips:When creating a user, send the content of the email" msgstr "提示: 创建用户时,发送设置密码邮件的内容" -#: settings/serializers/settings.py:81 +#: settings/serializers/settings.py:86 msgid "Signature" msgstr "署名" -#: settings/serializers/settings.py:82 +#: settings/serializers/settings.py:87 msgid "Tips: Email signature (eg:jumpserver)" msgstr "邮件署名 (如:jumpserver)" -#: settings/serializers/settings.py:90 +#: settings/serializers/settings.py:95 msgid "LDAP server" msgstr "LDAP 地址" -#: settings/serializers/settings.py:90 +#: settings/serializers/settings.py:95 msgid "eg: ldap://localhost:389" msgstr "" -#: settings/serializers/settings.py:92 +#: settings/serializers/settings.py:97 msgid "Bind DN" msgstr "绑定 DN" -#: settings/serializers/settings.py:95 +#: settings/serializers/settings.py:100 msgid "User OU" msgstr "用户 OU" -#: settings/serializers/settings.py:96 +#: settings/serializers/settings.py:101 msgid "Use | split multi OUs" msgstr "多个 OU 使用 | 分割" -#: settings/serializers/settings.py:99 +#: settings/serializers/settings.py:104 msgid "User search filter" msgstr "用户过滤器" -#: settings/serializers/settings.py:100 +#: settings/serializers/settings.py:105 #, python-format msgid "Choice may be (cn|uid|sAMAccountName)=%(user)s)" msgstr "可能的选项是(cn或uid或sAMAccountName=%(user)s)" -#: settings/serializers/settings.py:103 +#: settings/serializers/settings.py:108 msgid "User attr map" msgstr "用户属性映射" -#: settings/serializers/settings.py:104 +#: settings/serializers/settings.py:109 msgid "" "User attr map present how to map LDAP user attr to jumpserver, username,name," "email is jumpserver attr" @@ -2338,23 +2361,23 @@ msgstr "" "用户属性映射代表怎样将LDAP中用户属性映射到jumpserver用户上,username, name," "email 是jumpserver的用户需要属性" -#: settings/serializers/settings.py:106 +#: settings/serializers/settings.py:111 msgid "Enable LDAP auth" msgstr "启用 LDAP 认证" -#: settings/serializers/settings.py:117 +#: settings/serializers/settings.py:122 msgid "Auto" msgstr "自动" -#: settings/serializers/settings.py:123 +#: settings/serializers/settings.py:128 msgid "Password auth" msgstr "密码认证" -#: settings/serializers/settings.py:125 +#: settings/serializers/settings.py:130 msgid "Public key auth" msgstr "密钥认证" -#: settings/serializers/settings.py:126 +#: settings/serializers/settings.py:131 msgid "" "Tips: If use other auth method, like AD/LDAP, you should disable this to " "avoid being able to log in after deleting" @@ -2362,19 +2385,19 @@ msgstr "" "提示:如果你使用其它认证方式,如 AD/LDAP,你应该禁用此项,以避免第三方系统删" "除后,还可以登录" -#: settings/serializers/settings.py:129 +#: settings/serializers/settings.py:134 msgid "List sort by" msgstr "资产列表排序" -#: settings/serializers/settings.py:130 +#: settings/serializers/settings.py:135 msgid "List page size" msgstr "资产列表每页数量" -#: settings/serializers/settings.py:132 +#: settings/serializers/settings.py:137 msgid "Session keep duration" msgstr "会话日志保存时间" -#: settings/serializers/settings.py:133 +#: settings/serializers/settings.py:138 msgid "" "Units: days, Session, record, command will be delete if more than duration, " "only in database" @@ -2382,64 +2405,64 @@ msgstr "" "单位:天。 会话、录像、命令记录超过该时长将会被删除(仅影响数据库存储, oss等不" "受影响)" -#: settings/serializers/settings.py:135 +#: settings/serializers/settings.py:140 msgid "Telnet login regex" msgstr "Telnet 成功正则表达式" -#: settings/serializers/settings.py:140 +#: settings/serializers/settings.py:145 msgid "Global MFA auth" msgstr "全局启用 MFA 认证" -#: settings/serializers/settings.py:141 +#: settings/serializers/settings.py:146 msgid "All user enable MFA" msgstr "强制所有用户启用多因子认证" -#: settings/serializers/settings.py:144 +#: settings/serializers/settings.py:149 msgid "Batch command execution" msgstr "批量命令执行" -#: settings/serializers/settings.py:145 +#: settings/serializers/settings.py:150 msgid "Allow user run batch command or not using ansible" msgstr "是否允许用户使用 ansible 执行批量命令" -#: settings/serializers/settings.py:148 +#: settings/serializers/settings.py:153 msgid "Enable terminal register" msgstr "终端注册" -#: settings/serializers/settings.py:149 +#: settings/serializers/settings.py:154 msgid "" "Allow terminal register, after all terminal setup, you should disable this " "for security" msgstr "是否允许终端注册,当所有终端启动后,为了安全应该关闭" -#: settings/serializers/settings.py:153 +#: settings/serializers/settings.py:158 msgid "Limit the number of login failures" msgstr "限制登录失败次数" -#: settings/serializers/settings.py:157 +#: settings/serializers/settings.py:162 msgid "Block logon interval" msgstr "禁止登录时间间隔" -#: settings/serializers/settings.py:158 +#: settings/serializers/settings.py:163 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:162 +#: settings/serializers/settings.py:167 msgid "Connection max idle time" msgstr "连接最大空闲时间" -#: settings/serializers/settings.py:163 +#: settings/serializers/settings.py:168 msgid "If idle time more than it, disconnect connection Unit: minute" msgstr "提示:如果超过该配置没有操作,连接会被断开 (单位:分)" -#: settings/serializers/settings.py:167 +#: settings/serializers/settings.py:172 msgid "User password expiration" msgstr "用户密码过期时间" -#: settings/serializers/settings.py:168 +#: settings/serializers/settings.py:173 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 " @@ -2449,53 +2472,53 @@ msgstr "" "提示:(单位:天)如果用户在此期间没有更新密码,用户密码将过期失效; 密码过期" "提醒邮件将在密码过期前5天内由系统(每天)自动发送给用户" -#: settings/serializers/settings.py:172 +#: settings/serializers/settings.py:177 msgid "Number of repeated historical passwords" msgstr "不能设置近几次密码" -#: settings/serializers/settings.py:173 +#: settings/serializers/settings.py:178 msgid "" "Tip: When the user resets the password, it cannot be the previous n " "historical passwords of the user" msgstr "提示:用户重置密码时,不能为该用户前几次使用过的密码" -#: settings/serializers/settings.py:177 +#: settings/serializers/settings.py:182 msgid "Password minimum length" msgstr "密码最小长度" -#: settings/serializers/settings.py:180 +#: settings/serializers/settings.py:185 msgid "Must contain capital" msgstr "必须包含大写字符" -#: settings/serializers/settings.py:182 +#: settings/serializers/settings.py:187 msgid "Must contain lowercase" msgstr "必须包含小写字符" -#: settings/serializers/settings.py:183 +#: settings/serializers/settings.py:188 msgid "Must contain numeric" msgstr "必须包含数字" -#: settings/serializers/settings.py:184 +#: settings/serializers/settings.py:189 msgid "Must contain special" msgstr "必须包含特殊字符" -#: settings/serializers/settings.py:185 +#: settings/serializers/settings.py:190 msgid "Insecure command alert" msgstr "危险命令告警" -#: settings/serializers/settings.py:187 +#: settings/serializers/settings.py:192 msgid "Email recipient" msgstr "邮件收件人" -#: settings/serializers/settings.py:188 +#: settings/serializers/settings.py:193 msgid "Multiple user using , split" msgstr "多个用户,使用 , 分割" -#: settings/serializers/settings.py:196 +#: settings/serializers/settings.py:201 msgid "Enable WeCom Auth" msgstr "启用企业微信认证" -#: settings/serializers/settings.py:203 +#: settings/serializers/settings.py:208 msgid "Enable DingTalk Auth" msgstr "启用钉钉认证" @@ -2805,7 +2828,7 @@ msgstr "Web终端" msgid "File manager" msgstr "文件管理" -#: templates/_nav.html:110 terminal/apps.py:9 +#: templates/_nav.html:110 terminal/apps.py:9 terminal/notifications.py:15 #: terminal/serializers/session.py:40 msgid "Terminal" msgstr "终端" @@ -3143,20 +3166,20 @@ msgstr "风险等级(显示名称)" msgid "Timestamp" msgstr "时间戳" -#: terminal/const.py:31 +#: terminal/const.py:32 msgid "Critical" msgstr "严重" -#: terminal/const.py:32 +#: terminal/const.py:33 msgid "High" msgstr "较高" -#: terminal/const.py:33 users/templates/users/reset_password.html:50 +#: terminal/const.py:34 users/templates/users/reset_password.html:50 #: users/templates/users/user_password_update.html:104 msgid "Normal" msgstr "正常" -#: terminal/const.py:34 +#: terminal/const.py:35 msgid "Offline" msgstr "离线" @@ -3236,6 +3259,89 @@ msgstr "命令存储" msgid "Replay storage" msgstr "录像存储" +#: terminal/notifications.py:35 +msgid "Terminal command alert" +msgstr "终端命令告警" + +#: terminal/notifications.py:44 +#, python-format +msgid "" +"\n" +" Command: %(command)s\n" +"
\n" +" Asset: %(host_name)s (%(host_ip)s)\n" +"
\n" +" User: %(user)s\n" +"
\n" +" Level: %(risk_level)s\n" +"
\n" +" Session: session " +"detail\n" +"
\n" +" " +msgstr "" +"\n" +" 命令: %(command)s\n" +"
\n" +" 资产: %(host_name)s (%(host_ip)s)\n" +"
\n" +" 用户: %(user)s\n" +"
\n" +" 等级: %(risk_level)s\n" +"
\n" +" 会话: 会话详情\n" +"
\n" +" " + +#: terminal/notifications.py:79 +#, python-format +msgid "" +"Insecure Command Alert: [%(name)s->%(login_from)s@%(remote_addr)s] $" +"%(command)s" +msgstr "危险命令告警: [%(name)s->%(login_from)s@%(remote_addr)s] $%(command)s" + +#: terminal/notifications.py:97 +msgid "Batch command alert" +msgstr "批量命令告警" + +#: terminal/notifications.py:108 +#, python-format +msgid "" +"\n" +"
\n" +" Assets: %(assets)s\n" +"
\n" +" User: %(user)s\n" +"
\n" +" Level: %(risk_level)s\n" +"
\n" +"\n" +" ----------------- Commands ---------------- " +"
\n" +" %(command)s
\n" +" ----------------- Commands ---------------- " +"
\n" +" " +msgstr "" +"\n" +"
\n" +" 资产: %(assets)s\n" +"
\n" +" 用户: %(user)s\n" +"
\n" +" 等级: %(risk_level)s\n" +"
\n" +"\n" +" ----------------- 命令 ----------------
\n" +" %(command)s
\n" +" ----------------- 命令 ----------------
\n" +" " + +#: terminal/notifications.py:134 +#, python-format +msgid "Insecure Web Command Execution Alert: [%(name)s]" +msgstr "Web页面-> 命令执行 告警: [%(name)s]" + #: terminal/serializers/session.py:33 msgid "User ID" msgstr "用户 ID" @@ -3277,7 +3383,7 @@ msgid "Secret key" msgstr "" #: terminal/serializers/storage.py:39 terminal/serializers/storage.py:51 -#: terminal/serializers/storage.py:81 +#: terminal/serializers/storage.py:81 terminal/serializers/storage.py:91 msgid "Endpoint" msgstr "端点" @@ -3285,43 +3391,43 @@ msgstr "端点" msgid "Region" msgstr "地域" -#: terminal/serializers/storage.py:91 +#: terminal/serializers/storage.py:101 msgid "Container name" msgstr "容器名称" -#: terminal/serializers/storage.py:93 +#: terminal/serializers/storage.py:103 msgid "Account name" msgstr "账户名称" -#: terminal/serializers/storage.py:94 +#: terminal/serializers/storage.py:104 msgid "Account key" msgstr "账户密钥" -#: terminal/serializers/storage.py:97 +#: terminal/serializers/storage.py:107 msgid "Endpoint suffix" msgstr "端点后缀" -#: terminal/serializers/storage.py:155 +#: terminal/serializers/storage.py:166 msgid "The address format is incorrect" msgstr "地址格式不正确" -#: terminal/serializers/storage.py:162 +#: terminal/serializers/storage.py:173 msgid "Host invalid" msgstr "主机无效" -#: terminal/serializers/storage.py:165 +#: terminal/serializers/storage.py:176 msgid "Port invalid" msgstr "端口无效" -#: terminal/serializers/storage.py:181 +#: terminal/serializers/storage.py:192 msgid "Index" msgstr "索引" -#: terminal/serializers/storage.py:183 +#: terminal/serializers/storage.py:194 msgid "Doc type" msgstr "文档类型" -#: terminal/serializers/storage.py:185 +#: terminal/serializers/storage.py:196 msgid "Ignore Certificate Verification" msgstr "忽略证书认证" @@ -3329,78 +3435,6 @@ msgstr "忽略证书认证" msgid "Not found" msgstr "没有发现" -#: terminal/utils.py:78 -#, python-format -msgid "" -"Insecure Command Alert: [%(name)s->%(login_from)s@%(remote_addr)s] $" -"%(command)s" -msgstr "危险命令告警: [%(name)s->%(login_from)s@%(remote_addr)s] $%(command)s" - -#: terminal/utils.py:86 -#, python-format -msgid "" -"\n" -" Command: %(command)s\n" -"
\n" -" Asset: %(host_name)s (%(host_ip)s)\n" -"
\n" -" User: %(user)s\n" -"
\n" -" Level: %(risk_level)s\n" -"
\n" -" Session: session detail\n" -"
\n" -" " -msgstr "" -"\n" -" 命令: %(command)s\n" -"
\n" -" 资产: %(host_name)s (%(host_ip)s)\n" -"
\n" -" 用户: %(user)s\n" -"
\n" -" 等级: %(risk_level)s\n" -"
\n" -" 会话: 会话详情\n" -"
\n" -" " - -#: terminal/utils.py:113 -#, python-format -msgid "Insecure Web Command Execution Alert: [%(name)s]" -msgstr "Web页面-> 命令执行 告警: [%(name)s]" - -#: terminal/utils.py:121 -#, python-format -msgid "" -"\n" -"
\n" -" Assets: %(assets)s\n" -"
\n" -" User: %(user)s\n" -"
\n" -" Level: %(risk_level)s\n" -"
\n" -"\n" -" ----------------- Commands ----------------
\n" -" %(command)s
\n" -" ----------------- Commands ----------------
\n" -" " -msgstr "" -"\n" -"
\n" -" 资产: %(assets)s\n" -"
\n" -" 用户: %(user)s\n" -"
\n" -" 等级: %(risk_level)s\n" -"
\n" -"\n" -" ----------------- 命令 ----------------
\n" -" %(command)s
\n" -" ----------------- 命令 ----------------
\n" -" " - #: tickets/const.py:8 msgid "General" msgstr "一般" @@ -3837,10 +3871,6 @@ msgstr "确认密码" msgid "Password does not match" msgstr "密码不一致" -#: users/forms/profile.py:101 users/models/user.py:552 -msgid "Email" -msgstr "邮件" - #: users/forms/profile.py:108 msgid "Old password" msgstr "原来密码" @@ -3898,10 +3928,6 @@ msgstr "头像" msgid "Wechat" msgstr "微信" -#: users/models/user.py:596 -msgid "User source" -msgstr "用户来源" - #: users/models/user.py:600 msgid "Date password last updated" msgstr "最后更新密码日期" @@ -3910,11 +3936,11 @@ msgstr "最后更新密码日期" msgid "Need update password" msgstr "需要更新密码" -#: users/models/user.py:748 +#: users/models/user.py:754 msgid "Administrator" msgstr "管理员" -#: users/models/user.py:751 +#: users/models/user.py:757 msgid "Administrator is the super user of system" msgstr "Administrator是初始的超级管理员" diff --git a/apps/users/migrations/0036_auto_20210604_1124.py b/apps/users/migrations/0036_auto_20210604_1124.py deleted file mode 100644 index 1bdc17943..000000000 --- a/apps/users/migrations/0036_auto_20210604_1124.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.1.6 on 2021-06-04 03:24 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('users', '0035_auto_20210526_1100'), - ] - - operations = [ - migrations.AlterField( - model_name='user', - name='source', - field=models.CharField(choices=[('local', 'Local'), ('ldap', 'LDAP/AD'), ('openid', 'OpenID'), ('radius', 'Radius'), ('cas', 'CAS')], default='local', max_length=30, verbose_name='User source'), - ), - ] diff --git a/apps/users/models/user.py b/apps/users/models/user.py index 40bb165e9..f362e60ac 100644 --- a/apps/users/models/user.py +++ b/apps/users/models/user.py @@ -593,7 +593,7 @@ class User(AuthMixin, TokenMixin, RoleMixin, MFAMixin, AbstractUser): source = models.CharField( max_length=30, default=Source.local, choices=Source.choices, - verbose_name=_('User source') + verbose_name=_('Source') ) date_password_last_updated = models.DateTimeField( auto_now_add=True, blank=True, null=True,