fix: 修复 ldap 用户登录时邮箱存在 500 的问题

pull/9848/head
Bai 2023-03-02 16:08:01 +08:00 committed by Jiangjie.Bai
parent 87b4ecfb3a
commit 3b0f68c4c7
3 changed files with 115 additions and 127 deletions

View File

@ -6,6 +6,7 @@ import os
import datetime import datetime
from typing import Callable from typing import Callable
from django.db import IntegrityError
from django.templatetags.static import static from django.templatetags.static import static
from django.contrib.auth import login as auth_login, logout as auth_logout from django.contrib.auth import login as auth_login, logout as auth_logout
from django.http import HttpResponse, HttpRequest from django.http import HttpResponse, HttpRequest
@ -229,6 +230,16 @@ class UserLoginView(mixins.AuthMixin, UserLoginContextMixin, FormView):
) as e: ) as e:
form.add_error('code', e.msg) form.add_error('code', e.msg)
return super().form_invalid(form) return super().form_invalid(form)
except (IntegrityError,) as e:
# (1062, "Duplicate entry 'youtester001@example.com' for key 'users_user.email'")
msg_list = e.args[1].split("'")
email, field = msg_list[1], msg_list[3]
if field == 'users_user.email':
error = _('User email already exists ({})').format(email)
else:
error = str(e)
form.add_error(None, error)
return super().form_invalid(form)
self.clear_rsa_key() self.clear_rsa_key()
return self.redirect_to_guard_view() return self.redirect_to_guard_view()

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-23 19:11+0800\n" "POT-Creation-Date: 2023-03-02 16:00+0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -394,7 +394,7 @@ msgid "Date last login"
msgstr "最終ログイン日" msgstr "最終ログイン日"
#: accounts/models/automations/gather_account.py:15 #: accounts/models/automations/gather_account.py:15
#: accounts/models/automations/push_account.py:13 accounts/models/base.py:34 #: accounts/models/automations/push_account.py:14 accounts/models/base.py:34
#: acls/serializers/base.py:18 acls/serializers/base.py:49 #: acls/serializers/base.py:18 acls/serializers/base.py:49
#: assets/models/_user.py:23 audits/models.py:157 authentication/forms.py:25 #: assets/models/_user.py:23 audits/models.py:157 authentication/forms.py:25
#: authentication/forms.py:27 authentication/models/temp_token.py:9 #: authentication/forms.py:27 authentication/models/temp_token.py:9
@ -419,11 +419,11 @@ msgstr "自動収集アカウント"
msgid "Gather asset accounts" msgid "Gather asset accounts"
msgstr "アカウントのコレクション" msgstr "アカウントのコレクション"
#: accounts/models/automations/push_account.py:12 #: accounts/models/automations/push_account.py:13
msgid "Triggers" msgid "Triggers"
msgstr "トリガー方式" msgstr "トリガー方式"
#: accounts/models/automations/push_account.py:14 acls/models/base.py:81 #: accounts/models/automations/push_account.py:15 acls/models/base.py:81
#: acls/serializers/base.py:81 acls/serializers/login_acl.py:25 #: acls/serializers/base.py:81 acls/serializers/login_acl.py:25
#: assets/models/cmd_filter.py:81 audits/models.py:65 audits/serializers.py:82 #: assets/models/cmd_filter.py:81 audits/models.py:65 audits/serializers.py:82
#: authentication/serializers/connect_token_secret.py:109 #: authentication/serializers/connect_token_secret.py:109
@ -431,7 +431,7 @@ msgstr "トリガー方式"
msgid "Action" msgid "Action"
msgstr "アクション" msgstr "アクション"
#: accounts/models/automations/push_account.py:40 #: accounts/models/automations/push_account.py:43
msgid "Push asset account" msgid "Push asset account"
msgstr "アカウントプッシュ" msgstr "アカウントプッシュ"
@ -447,7 +447,7 @@ msgstr "アカウントの確認"
#: assets/models/group.py:20 assets/models/label.py:18 #: assets/models/group.py:20 assets/models/label.py:18
#: assets/models/platform.py:21 assets/models/platform.py:76 #: assets/models/platform.py:21 assets/models/platform.py:76
#: assets/serializers/asset/common.py:67 assets/serializers/asset/common.py:143 #: assets/serializers/asset/common.py:67 assets/serializers/asset/common.py:143
#: assets/serializers/platform.py:91 assets/serializers/platform.py:136 #: assets/serializers/platform.py:133
#: authentication/serializers/connect_token_secret.py:103 ops/mixin.py:21 #: authentication/serializers/connect_token_secret.py:103 ops/mixin.py:21
#: ops/models/adhoc.py:21 ops/models/celery.py:15 ops/models/celery.py:57 #: ops/models/adhoc.py:21 ops/models/celery.py:15 ops/models/celery.py:57
#: ops/models/job.py:91 ops/models/playbook.py:23 ops/serializers/job.py:19 #: ops/models/job.py:91 ops/models/playbook.py:23 ops/serializers/job.py:19
@ -533,7 +533,7 @@ msgstr "エスクローされたパスワード"
#: accounts/serializers/account/account.py:75 applications/models.py:11 #: accounts/serializers/account/account.py:75 applications/models.py:11
#: assets/models/label.py:21 assets/models/platform.py:77 #: assets/models/label.py:21 assets/models/platform.py:77
#: assets/serializers/asset/common.py:120 assets/serializers/cagegory.py:8 #: assets/serializers/asset/common.py:120 assets/serializers/cagegory.py:8
#: assets/serializers/platform.py:97 assets/serializers/platform.py:137 #: assets/serializers/platform.py:94 assets/serializers/platform.py:134
#: perms/serializers/user_permission.py:26 settings/models.py:35 #: perms/serializers/user_permission.py:26 settings/models.py:35
#: tickets/models/ticket/apply_application.py:13 #: tickets/models/ticket/apply_application.py:13
msgid "Category" msgid "Category"
@ -544,7 +544,7 @@ msgstr "カテゴリ"
#: acls/serializers/command_acl.py:18 applications/models.py:14 #: acls/serializers/command_acl.py:18 applications/models.py:14
#: assets/models/_user.py:50 assets/models/automations/base.py:20 #: assets/models/_user.py:50 assets/models/automations/base.py:20
#: assets/models/cmd_filter.py:74 assets/models/platform.py:78 #: assets/models/cmd_filter.py:74 assets/models/platform.py:78
#: assets/serializers/asset/common.py:121 assets/serializers/platform.py:96 #: assets/serializers/asset/common.py:121 assets/serializers/platform.py:93
#: audits/serializers.py:48 #: audits/serializers.py:48
#: authentication/serializers/connect_token_secret.py:116 ops/models/job.py:102 #: authentication/serializers/connect_token_secret.py:116 ops/models/job.py:102
#: perms/serializers/user_permission.py:27 terminal/models/applet/applet.py:31 #: perms/serializers/user_permission.py:27 terminal/models/applet/applet.py:31
@ -741,7 +741,7 @@ msgstr "アクティブ"
#: authentication/models/sso_token.py:16 #: authentication/models/sso_token.py:16
#: notifications/models/notification.py:12 #: notifications/models/notification.py:12
#: perms/api/user_permission/mixin.py:55 perms/models/asset_permission.py:58 #: perms/api/user_permission/mixin.py:55 perms/models/asset_permission.py:58
#: perms/serializers/permission.py:23 rbac/builtin.py:118 #: perms/serializers/permission.py:23 rbac/builtin.py:122
#: rbac/models/rolebinding.py:49 terminal/backends/command/models.py:19 #: rbac/models/rolebinding.py:49 terminal/backends/command/models.py:19
#: terminal/models/session/session.py:30 terminal/models/session/sharing.py:32 #: terminal/models/session/session.py:30 terminal/models/session/sharing.py:32
#: terminal/notifications.py:96 terminal/notifications.py:144 #: terminal/notifications.py:96 terminal/notifications.py:144
@ -908,7 +908,7 @@ msgstr "アプリケーション"
msgid "Can match application" msgid "Can match application"
msgstr "アプリケーションを一致させることができます" msgstr "アプリケーションを一致させることができます"
#: assets/api/asset/asset.py:142 #: assets/api/asset/asset.py:143
msgid "Cannot create asset directly, you should create a host or other" msgid "Cannot create asset directly, you should create a host or other"
msgstr "" msgstr ""
"資産を直接作成することはできません。ホストまたはその他を作成する必要がありま" "資産を直接作成することはできません。ホストまたはその他を作成する必要がありま"
@ -944,10 +944,8 @@ msgid "No account"
msgstr "アカウントなし" msgstr "アカウントなし"
#: assets/automations/ping_gateway/manager.py:36 #: assets/automations/ping_gateway/manager.py:36
#, fuzzy
#| msgid "Assets amount"
msgid "Asset, {}, using account {}" msgid "Asset, {}, using account {}"
msgstr "資産" msgstr "資産, {}, アカウントを使用 {}"
#: assets/automations/ping_gateway/manager.py:55 #: assets/automations/ping_gateway/manager.py:55
#, python-brace-format #, python-brace-format
@ -1459,23 +1457,23 @@ msgstr "メタ"
msgid "Internal" msgid "Internal"
msgstr "ビルトイン" msgstr "ビルトイン"
#: assets/models/platform.py:83 assets/serializers/platform.py:94 #: assets/models/platform.py:83 assets/serializers/platform.py:91
msgid "Charset" msgid "Charset"
msgstr "シャーセット" msgstr "シャーセット"
#: assets/models/platform.py:85 assets/serializers/platform.py:122 #: assets/models/platform.py:85 assets/serializers/platform.py:119
msgid "Domain enabled" msgid "Domain enabled"
msgstr "ドメインを有効にする" msgstr "ドメインを有効にする"
#: assets/models/platform.py:87 assets/serializers/platform.py:121 #: assets/models/platform.py:87 assets/serializers/platform.py:118
msgid "Su enabled" msgid "Su enabled"
msgstr "アカウントの切り替えを有効にする" msgstr "アカウントの切り替えを有効にする"
#: assets/models/platform.py:88 assets/serializers/platform.py:104 #: assets/models/platform.py:88 assets/serializers/platform.py:101
msgid "Su method" msgid "Su method"
msgstr "アカウントの切り替え方法" msgstr "アカウントの切り替え方法"
#: assets/models/platform.py:90 assets/serializers/platform.py:101 #: assets/models/platform.py:90 assets/serializers/platform.py:98
msgid "Automation" msgid "Automation"
msgstr "オートメーション" msgstr "オートメーション"
@ -1488,7 +1486,7 @@ msgstr "%(value)s は偶数ではありません"
msgid "Auto fill" msgid "Auto fill"
msgstr "自動充填" msgstr "自動充填"
#: assets/serializers/asset/common.py:123 assets/serializers/platform.py:99 #: assets/serializers/asset/common.py:123 assets/serializers/platform.py:96
#: authentication/serializers/connect_token_secret.py:28 #: authentication/serializers/connect_token_secret.py:28
#: authentication/serializers/connect_token_secret.py:66 #: authentication/serializers/connect_token_secret.py:66
#: perms/serializers/user_permission.py:25 xpack/plugins/cloud/models.py:99 #: perms/serializers/user_permission.py:25 xpack/plugins/cloud/models.py:99
@ -1629,7 +1627,7 @@ msgstr "アカウントの収集方法"
msgid "Primary" msgid "Primary"
msgstr "主要" msgstr "主要"
#: assets/serializers/platform.py:123 #: assets/serializers/platform.py:120
msgid "Default Domain" msgid "Default Domain"
msgstr "デフォルト ドメイン" msgstr "デフォルト ドメイン"
@ -1940,20 +1938,20 @@ msgid "Auth Token"
msgstr "認証トークン" msgstr "認証トークン"
#: audits/signal_handlers/login_log.py:31 authentication/notifications.py:73 #: audits/signal_handlers/login_log.py:31 authentication/notifications.py:73
#: authentication/views/login.py:73 authentication/views/wecom.py:177 #: authentication/views/login.py:74 authentication/views/wecom.py:177
#: notifications/backends/__init__.py:11 settings/serializers/auth/wecom.py:10 #: notifications/backends/__init__.py:11 settings/serializers/auth/wecom.py:10
#: users/models/user.py:778 #: users/models/user.py:778
msgid "WeCom" msgid "WeCom"
msgstr "企業微信" msgstr "企業微信"
#: audits/signal_handlers/login_log.py:32 authentication/views/feishu.py:144 #: audits/signal_handlers/login_log.py:32 authentication/views/feishu.py:144
#: authentication/views/login.py:85 notifications/backends/__init__.py:14 #: authentication/views/login.py:86 notifications/backends/__init__.py:14
#: settings/serializers/auth/feishu.py:10 users/models/user.py:780 #: settings/serializers/auth/feishu.py:10 users/models/user.py:780
msgid "FeiShu" msgid "FeiShu"
msgstr "本を飛ばす" msgstr "本を飛ばす"
#: audits/signal_handlers/login_log.py:33 authentication/views/dingtalk.py:179 #: audits/signal_handlers/login_log.py:33 authentication/views/dingtalk.py:179
#: authentication/views/login.py:79 notifications/backends/__init__.py:12 #: authentication/views/login.py:80 notifications/backends/__init__.py:12
#: settings/serializers/auth/dingtalk.py:10 users/models/user.py:779 #: settings/serializers/auth/dingtalk.py:10 users/models/user.py:779
msgid "DingTalk" msgid "DingTalk"
msgstr "DingTalk" msgstr "DingTalk"
@ -2237,15 +2235,15 @@ msgstr "本を飛ばすは拘束されていません"
msgid "Your password is invalid" msgid "Your password is invalid"
msgstr "パスワードが無効です" msgstr "パスワードが無効です"
#: authentication/errors/redirect.py:85 authentication/mixins.py:306 #: authentication/errors/redirect.py:85 authentication/mixins.py:307
msgid "Your password is too simple, please change it for security" msgid "Your password is too simple, please change it for security"
msgstr "パスワードがシンプルすぎるので、セキュリティのために変更してください" msgstr "パスワードがシンプルすぎるので、セキュリティのために変更してください"
#: authentication/errors/redirect.py:93 authentication/mixins.py:313 #: authentication/errors/redirect.py:93 authentication/mixins.py:314
msgid "You should to change your password before login" msgid "You should to change your password before login"
msgstr "ログインする前にパスワードを変更する必要があります" msgstr "ログインする前にパスワードを変更する必要があります"
#: authentication/errors/redirect.py:101 authentication/mixins.py:320 #: authentication/errors/redirect.py:101 authentication/mixins.py:321
msgid "Your password has expired, please reset before logging in" msgid "Your password has expired, please reset before logging in"
msgstr "" msgstr ""
"パスワードの有効期限が切れました。ログインする前にリセットしてください。" "パスワードの有効期限が切れました。ログインする前にリセットしてください。"
@ -2348,11 +2346,11 @@ msgstr "無効にする電話番号をクリアする"
msgid "Authentication failed (before login check failed): {}" msgid "Authentication failed (before login check failed): {}"
msgstr "認証に失敗しました (ログインチェックが失敗する前): {}" msgstr "認証に失敗しました (ログインチェックが失敗する前): {}"
#: authentication/mixins.py:256 #: authentication/mixins.py:257
msgid "The MFA type ({}) is not enabled" msgid "The MFA type ({}) is not enabled"
msgstr "MFAタイプ ({}) が有効になっていない" msgstr "MFAタイプ ({}) が有効になっていない"
#: authentication/mixins.py:296 #: authentication/mixins.py:297
msgid "Please change your password" msgid "Please change your password"
msgstr "パスワードを変更してください" msgstr "パスワードを変更してください"
@ -2812,19 +2810,23 @@ msgstr "本を飛ばすからユーザーを取得できませんでした"
msgid "Please login with a password and then bind the FeiShu" msgid "Please login with a password and then bind the FeiShu"
msgstr "パスワードでログインしてから本を飛ばすをバインドしてください" msgstr "パスワードでログインしてから本を飛ばすをバインドしてください"
#: authentication/views/login.py:181 #: authentication/views/login.py:182
msgid "Redirecting" msgid "Redirecting"
msgstr "リダイレクト" msgstr "リダイレクト"
#: authentication/views/login.py:182 #: authentication/views/login.py:183
msgid "Redirecting to {} authentication" msgid "Redirecting to {} authentication"
msgstr "{} 認証へのリダイレクト" msgstr "{} 認証へのリダイレクト"
#: authentication/views/login.py:205 #: authentication/views/login.py:206
msgid "Please enable cookies and try again." msgid "Please enable cookies and try again."
msgstr "クッキーを有効にして、もう一度お試しください。" msgstr "クッキーを有効にして、もう一度お試しください。"
#: authentication/views/login.py:307 #: authentication/views/login.py:238
msgid "User email already exists ({})"
msgstr "ユーザー メールボックスは既に存在します ({})"
#: authentication/views/login.py:318
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"
@ -2832,15 +2834,15 @@ msgstr ""
"<b>{}</b> 確認を待ちます。彼女/彼へのリンクをコピーすることもできます <br/>\n" "<b>{}</b> 確認を待ちます。彼女/彼へのリンクをコピーすることもできます <br/>\n"
" このページを閉じないでください" " このページを閉じないでください"
#: authentication/views/login.py:312 #: authentication/views/login.py:323
msgid "No ticket found" msgid "No ticket found"
msgstr "チケットが見つかりません" msgstr "チケットが見つかりません"
#: authentication/views/login.py:348 #: authentication/views/login.py:359
msgid "Logout success" msgid "Logout success"
msgstr "ログアウト成功" msgstr "ログアウト成功"
#: authentication/views/login.py:349 #: authentication/views/login.py:360
msgid "Logout success, return login page" msgid "Logout success, return login page"
msgstr "ログアウト成功、ログインページを返す" msgstr "ログアウト成功、ログインページを返す"
@ -3509,15 +3511,15 @@ msgstr "終了しました"
msgid "Time cost" msgid "Time cost"
msgstr "時を過ごす" msgstr "時を過ごす"
#: ops/tasks.py:32 #: ops/tasks.py:34
msgid "Run ansible task" msgid "Run ansible task"
msgstr "Ansible タスクを実行する" msgstr "Ansible タスクを実行する"
#: ops/tasks.py:61 #: ops/tasks.py:63
msgid "Run ansible task execution" msgid "Run ansible task execution"
msgstr "Ansible タスクの実行を開始する" msgstr "Ansible タスクの実行を開始する"
#: ops/tasks.py:77 #: ops/tasks.py:79
msgid "Clear celery periodic tasks" msgid "Clear celery periodic tasks"
msgstr "タスクログを定期的にクリアする" msgstr "タスクログを定期的にクリアする"
@ -3735,7 +3737,7 @@ msgstr "内部の役割は、破壊することはできません"
msgid "The role has been bound to users, can't be destroy" msgid "The role has been bound to users, can't be destroy"
msgstr "ロールはユーザーにバインドされており、破壊することはできません" msgstr "ロールはユーザーにバインドされており、破壊することはできません"
#: rbac/api/role.py:83 #: rbac/api/role.py:87
msgid "Internal role, can't be update" msgid "Internal role, can't be update"
msgstr "内部ロール、更新できません" msgstr "内部ロール、更新できません"
@ -3747,27 +3749,27 @@ msgstr "{} 少なくとも1つのシステムロール"
msgid "RBAC" msgid "RBAC"
msgstr "RBAC" msgstr "RBAC"
#: rbac/builtin.py:109 #: rbac/builtin.py:113
msgid "SystemAdmin" msgid "SystemAdmin"
msgstr "システム管理者" msgstr "システム管理者"
#: rbac/builtin.py:112 #: rbac/builtin.py:116
msgid "SystemAuditor" msgid "SystemAuditor"
msgstr "システム監査人" msgstr "システム監査人"
#: rbac/builtin.py:115 #: rbac/builtin.py:119
msgid "SystemComponent" msgid "SystemComponent"
msgstr "システムコンポーネント" msgstr "システムコンポーネント"
#: rbac/builtin.py:121 #: rbac/builtin.py:125
msgid "OrgAdmin" msgid "OrgAdmin"
msgstr "組織管理者" msgstr "組織管理者"
#: rbac/builtin.py:124 #: rbac/builtin.py:128
msgid "OrgAuditor" msgid "OrgAuditor"
msgstr "監査員を組織する" msgstr "監査員を組織する"
#: rbac/builtin.py:127 #: rbac/builtin.py:131
msgid "OrgUser" msgid "OrgUser"
msgstr "組織ユーザー" msgstr "組織ユーザー"
@ -5408,9 +5410,9 @@ msgstr "セッション"
msgid "Risk level" msgid "Risk level"
msgstr "リスクレベル" msgstr "リスクレベル"
#: terminal/connect_methods.py:47 terminal/connect_methods.py:48 #: terminal/connect_methods.py:54 terminal/connect_methods.py:55
#: terminal/connect_methods.py:49 terminal/connect_methods.py:50 #: terminal/connect_methods.py:56 terminal/connect_methods.py:57
#: terminal/connect_methods.py:51 #: terminal/connect_methods.py:58
msgid "DB Client" msgid "DB Client"
msgstr "データベース クライアント" msgstr "データベース クライアント"
@ -5899,11 +5901,11 @@ msgstr "孤立したセッションをクリアする"
msgid "Upload session replay to external storage" msgid "Upload session replay to external storage"
msgstr "セッションの記録を外部ストレージにアップロードする" msgstr "セッションの記録を外部ストレージにアップロードする"
#: terminal/tasks.py:83 #: terminal/tasks.py:84
msgid "Run applet host deployment" msgid "Run applet host deployment"
msgstr "アプリケーション マシンの展開を実行する" msgstr "アプリケーション マシンの展開を実行する"
#: terminal/tasks.py:90 #: terminal/tasks.py:94
msgid "Install applet" msgid "Install applet"
msgstr "アプリをインストールする" msgstr "アプリをインストールする"
@ -7388,30 +7390,3 @@ msgstr "究極のエディション"
#: xpack/plugins/license/models.py:85 #: xpack/plugins/license/models.py:85
msgid "Community edition" msgid "Community edition"
msgstr "コミュニティ版" msgstr "コミュニティ版"
#, fuzzy
#~| msgid "Only admin users"
#~ msgid "Unix admin user"
#~ msgstr "管理者のみ"
#, fuzzy
#~| msgid "Only admin users"
#~ msgid "Windows admin user"
#~ msgstr "管理者のみ"
#, fuzzy
#~| msgid "Only admin users"
#~ msgid "Linux admin user"
#~ msgstr "管理者のみ"
#~ msgid "Can push account to asset"
#~ msgstr "アカウントをアセットにプッシュできます"
#~ msgid "Add asset to node"
#~ msgstr "ノードにアセットを追加する"
#~ msgid "Move asset to node"
#~ msgstr "アセットをノードに移動する"
#~ msgid "Remove asset from node"
#~ msgstr "ノードからアセットを削除"

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: 2023-02-23 19:11+0800\n" "POT-Creation-Date: 2023-03-02 16:00+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"
@ -393,7 +393,7 @@ msgid "Date last login"
msgstr "最后登录日期" msgstr "最后登录日期"
#: accounts/models/automations/gather_account.py:15 #: accounts/models/automations/gather_account.py:15
#: accounts/models/automations/push_account.py:13 accounts/models/base.py:34 #: accounts/models/automations/push_account.py:14 accounts/models/base.py:34
#: acls/serializers/base.py:18 acls/serializers/base.py:49 #: acls/serializers/base.py:18 acls/serializers/base.py:49
#: assets/models/_user.py:23 audits/models.py:157 authentication/forms.py:25 #: assets/models/_user.py:23 audits/models.py:157 authentication/forms.py:25
#: authentication/forms.py:27 authentication/models/temp_token.py:9 #: authentication/forms.py:27 authentication/models/temp_token.py:9
@ -418,11 +418,11 @@ msgstr "自动化收集账号"
msgid "Gather asset accounts" msgid "Gather asset accounts"
msgstr "收集账号" msgstr "收集账号"
#: accounts/models/automations/push_account.py:12 #: accounts/models/automations/push_account.py:13
msgid "Triggers" msgid "Triggers"
msgstr "触发方式" msgstr "触发方式"
#: accounts/models/automations/push_account.py:14 acls/models/base.py:81 #: accounts/models/automations/push_account.py:15 acls/models/base.py:81
#: acls/serializers/base.py:81 acls/serializers/login_acl.py:25 #: acls/serializers/base.py:81 acls/serializers/login_acl.py:25
#: assets/models/cmd_filter.py:81 audits/models.py:65 audits/serializers.py:82 #: assets/models/cmd_filter.py:81 audits/models.py:65 audits/serializers.py:82
#: authentication/serializers/connect_token_secret.py:109 #: authentication/serializers/connect_token_secret.py:109
@ -430,7 +430,7 @@ msgstr "触发方式"
msgid "Action" msgid "Action"
msgstr "动作" msgstr "动作"
#: accounts/models/automations/push_account.py:40 #: accounts/models/automations/push_account.py:43
msgid "Push asset account" msgid "Push asset account"
msgstr "账号推送" msgstr "账号推送"
@ -446,7 +446,7 @@ msgstr "账号验证"
#: assets/models/group.py:20 assets/models/label.py:18 #: assets/models/group.py:20 assets/models/label.py:18
#: assets/models/platform.py:21 assets/models/platform.py:76 #: assets/models/platform.py:21 assets/models/platform.py:76
#: assets/serializers/asset/common.py:67 assets/serializers/asset/common.py:143 #: assets/serializers/asset/common.py:67 assets/serializers/asset/common.py:143
#: assets/serializers/platform.py:91 assets/serializers/platform.py:136 #: assets/serializers/platform.py:133
#: authentication/serializers/connect_token_secret.py:103 ops/mixin.py:21 #: authentication/serializers/connect_token_secret.py:103 ops/mixin.py:21
#: ops/models/adhoc.py:21 ops/models/celery.py:15 ops/models/celery.py:57 #: ops/models/adhoc.py:21 ops/models/celery.py:15 ops/models/celery.py:57
#: ops/models/job.py:91 ops/models/playbook.py:23 ops/serializers/job.py:19 #: ops/models/job.py:91 ops/models/playbook.py:23 ops/serializers/job.py:19
@ -529,7 +529,7 @@ msgstr "已托管密码"
#: accounts/serializers/account/account.py:75 applications/models.py:11 #: accounts/serializers/account/account.py:75 applications/models.py:11
#: assets/models/label.py:21 assets/models/platform.py:77 #: assets/models/label.py:21 assets/models/platform.py:77
#: assets/serializers/asset/common.py:120 assets/serializers/cagegory.py:8 #: assets/serializers/asset/common.py:120 assets/serializers/cagegory.py:8
#: assets/serializers/platform.py:97 assets/serializers/platform.py:137 #: assets/serializers/platform.py:94 assets/serializers/platform.py:134
#: perms/serializers/user_permission.py:26 settings/models.py:35 #: perms/serializers/user_permission.py:26 settings/models.py:35
#: tickets/models/ticket/apply_application.py:13 #: tickets/models/ticket/apply_application.py:13
msgid "Category" msgid "Category"
@ -540,7 +540,7 @@ msgstr "类别"
#: acls/serializers/command_acl.py:18 applications/models.py:14 #: acls/serializers/command_acl.py:18 applications/models.py:14
#: assets/models/_user.py:50 assets/models/automations/base.py:20 #: assets/models/_user.py:50 assets/models/automations/base.py:20
#: assets/models/cmd_filter.py:74 assets/models/platform.py:78 #: assets/models/cmd_filter.py:74 assets/models/platform.py:78
#: assets/serializers/asset/common.py:121 assets/serializers/platform.py:96 #: assets/serializers/asset/common.py:121 assets/serializers/platform.py:93
#: audits/serializers.py:48 #: audits/serializers.py:48
#: authentication/serializers/connect_token_secret.py:116 ops/models/job.py:102 #: authentication/serializers/connect_token_secret.py:116 ops/models/job.py:102
#: perms/serializers/user_permission.py:27 terminal/models/applet/applet.py:31 #: perms/serializers/user_permission.py:27 terminal/models/applet/applet.py:31
@ -737,7 +737,7 @@ msgstr "激活中"
#: authentication/models/sso_token.py:16 #: authentication/models/sso_token.py:16
#: notifications/models/notification.py:12 #: notifications/models/notification.py:12
#: perms/api/user_permission/mixin.py:55 perms/models/asset_permission.py:58 #: perms/api/user_permission/mixin.py:55 perms/models/asset_permission.py:58
#: perms/serializers/permission.py:23 rbac/builtin.py:118 #: perms/serializers/permission.py:23 rbac/builtin.py:122
#: rbac/models/rolebinding.py:49 terminal/backends/command/models.py:19 #: rbac/models/rolebinding.py:49 terminal/backends/command/models.py:19
#: terminal/models/session/session.py:30 terminal/models/session/sharing.py:32 #: terminal/models/session/session.py:30 terminal/models/session/sharing.py:32
#: terminal/notifications.py:96 terminal/notifications.py:144 #: terminal/notifications.py:96 terminal/notifications.py:144
@ -902,7 +902,7 @@ msgstr "应用程序"
msgid "Can match application" msgid "Can match application"
msgstr "匹配应用" msgstr "匹配应用"
#: assets/api/asset/asset.py:142 #: assets/api/asset/asset.py:143
msgid "Cannot create asset directly, you should create a host or other" msgid "Cannot create asset directly, you should create a host or other"
msgstr "不能直接创建资产, 你应该创建主机或其他资产" msgstr "不能直接创建资产, 你应该创建主机或其他资产"
@ -936,10 +936,8 @@ msgid "No account"
msgstr "没有账号" msgstr "没有账号"
#: assets/automations/ping_gateway/manager.py:36 #: assets/automations/ping_gateway/manager.py:36
#, fuzzy
#| msgid "Assets amount"
msgid "Asset, {}, using account {}" msgid "Asset, {}, using account {}"
msgstr "资产数量" msgstr "资产, {}, 使用账号 {}"
#: assets/automations/ping_gateway/manager.py:55 #: assets/automations/ping_gateway/manager.py:55
#, python-brace-format #, python-brace-format
@ -1451,23 +1449,23 @@ msgstr "元数据"
msgid "Internal" msgid "Internal"
msgstr "内置" msgstr "内置"
#: assets/models/platform.py:83 assets/serializers/platform.py:94 #: assets/models/platform.py:83 assets/serializers/platform.py:91
msgid "Charset" msgid "Charset"
msgstr "编码" msgstr "编码"
#: assets/models/platform.py:85 assets/serializers/platform.py:122 #: assets/models/platform.py:85 assets/serializers/platform.py:119
msgid "Domain enabled" msgid "Domain enabled"
msgstr "启用网域" msgstr "启用网域"
#: assets/models/platform.py:87 assets/serializers/platform.py:121 #: assets/models/platform.py:87 assets/serializers/platform.py:118
msgid "Su enabled" msgid "Su enabled"
msgstr "启用账号切换" msgstr "启用账号切换"
#: assets/models/platform.py:88 assets/serializers/platform.py:104 #: assets/models/platform.py:88 assets/serializers/platform.py:101
msgid "Su method" msgid "Su method"
msgstr "账号切换方式" msgstr "账号切换方式"
#: assets/models/platform.py:90 assets/serializers/platform.py:101 #: assets/models/platform.py:90 assets/serializers/platform.py:98
msgid "Automation" msgid "Automation"
msgstr "自动化" msgstr "自动化"
@ -1480,7 +1478,7 @@ msgstr "%(value)s is not an even number"
msgid "Auto fill" msgid "Auto fill"
msgstr "自动代填" msgstr "自动代填"
#: assets/serializers/asset/common.py:123 assets/serializers/platform.py:99 #: assets/serializers/asset/common.py:123 assets/serializers/platform.py:96
#: authentication/serializers/connect_token_secret.py:28 #: authentication/serializers/connect_token_secret.py:28
#: authentication/serializers/connect_token_secret.py:66 #: authentication/serializers/connect_token_secret.py:66
#: perms/serializers/user_permission.py:25 xpack/plugins/cloud/models.py:99 #: perms/serializers/user_permission.py:25 xpack/plugins/cloud/models.py:99
@ -1621,7 +1619,7 @@ msgstr "收集账号方式"
msgid "Primary" msgid "Primary"
msgstr "主要的" msgstr "主要的"
#: assets/serializers/platform.py:123 #: assets/serializers/platform.py:120
msgid "Default Domain" msgid "Default Domain"
msgstr "默认网域" msgstr "默认网域"
@ -1930,20 +1928,20 @@ msgid "Auth Token"
msgstr "认证令牌" msgstr "认证令牌"
#: audits/signal_handlers/login_log.py:31 authentication/notifications.py:73 #: audits/signal_handlers/login_log.py:31 authentication/notifications.py:73
#: authentication/views/login.py:73 authentication/views/wecom.py:177 #: authentication/views/login.py:74 authentication/views/wecom.py:177
#: notifications/backends/__init__.py:11 settings/serializers/auth/wecom.py:10 #: notifications/backends/__init__.py:11 settings/serializers/auth/wecom.py:10
#: users/models/user.py:778 #: users/models/user.py:778
msgid "WeCom" msgid "WeCom"
msgstr "企业微信" msgstr "企业微信"
#: audits/signal_handlers/login_log.py:32 authentication/views/feishu.py:144 #: audits/signal_handlers/login_log.py:32 authentication/views/feishu.py:144
#: authentication/views/login.py:85 notifications/backends/__init__.py:14 #: authentication/views/login.py:86 notifications/backends/__init__.py:14
#: settings/serializers/auth/feishu.py:10 users/models/user.py:780 #: settings/serializers/auth/feishu.py:10 users/models/user.py:780
msgid "FeiShu" msgid "FeiShu"
msgstr "飞书" msgstr "飞书"
#: audits/signal_handlers/login_log.py:33 authentication/views/dingtalk.py:179 #: audits/signal_handlers/login_log.py:33 authentication/views/dingtalk.py:179
#: authentication/views/login.py:79 notifications/backends/__init__.py:12 #: authentication/views/login.py:80 notifications/backends/__init__.py:12
#: settings/serializers/auth/dingtalk.py:10 users/models/user.py:779 #: settings/serializers/auth/dingtalk.py:10 users/models/user.py:779
msgid "DingTalk" msgid "DingTalk"
msgstr "钉钉" msgstr "钉钉"
@ -2217,15 +2215,15 @@ msgstr "没有绑定飞书"
msgid "Your password is invalid" msgid "Your password is invalid"
msgstr "您的密码无效" msgstr "您的密码无效"
#: authentication/errors/redirect.py:85 authentication/mixins.py:306 #: authentication/errors/redirect.py:85 authentication/mixins.py:307
msgid "Your password is too simple, please change it for security" msgid "Your password is too simple, please change it for security"
msgstr "你的密码过于简单,为了安全,请修改" msgstr "你的密码过于简单,为了安全,请修改"
#: authentication/errors/redirect.py:93 authentication/mixins.py:313 #: authentication/errors/redirect.py:93 authentication/mixins.py:314
msgid "You should to change your password before login" msgid "You should to change your password before login"
msgstr "登录完成前,请先修改密码" msgstr "登录完成前,请先修改密码"
#: authentication/errors/redirect.py:101 authentication/mixins.py:320 #: authentication/errors/redirect.py:101 authentication/mixins.py:321
msgid "Your password has expired, please reset before logging in" msgid "Your password has expired, please reset before logging in"
msgstr "您的密码已过期,先修改再登录" msgstr "您的密码已过期,先修改再登录"
@ -2326,11 +2324,11 @@ msgstr "清空手机号码禁用"
msgid "Authentication failed (before login check failed): {}" msgid "Authentication failed (before login check failed): {}"
msgstr "认证失败(登录前检查失败): {}" msgstr "认证失败(登录前检查失败): {}"
#: authentication/mixins.py:256 #: authentication/mixins.py:257
msgid "The MFA type ({}) is not enabled" msgid "The MFA type ({}) is not enabled"
msgstr "该 MFA ({}) 方式没有启用" msgstr "该 MFA ({}) 方式没有启用"
#: authentication/mixins.py:296 #: authentication/mixins.py:297
msgid "Please change your password" msgid "Please change your password"
msgstr "请修改密码" msgstr "请修改密码"
@ -2782,19 +2780,23 @@ msgstr "从飞书获取用户失败"
msgid "Please login with a password and then bind the FeiShu" msgid "Please login with a password and then bind the FeiShu"
msgstr "请使用密码登录,然后绑定飞书" msgstr "请使用密码登录,然后绑定飞书"
#: authentication/views/login.py:181 #: authentication/views/login.py:182
msgid "Redirecting" msgid "Redirecting"
msgstr "跳转中" msgstr "跳转中"
#: authentication/views/login.py:182 #: authentication/views/login.py:183
msgid "Redirecting to {} authentication" msgid "Redirecting to {} authentication"
msgstr "正在跳转到 {} 认证" msgstr "正在跳转到 {} 认证"
#: authentication/views/login.py:205 #: authentication/views/login.py:206
msgid "Please enable cookies and try again." msgid "Please enable cookies and try again."
msgstr "设置你的浏览器支持cookie" msgstr "设置你的浏览器支持cookie"
#: authentication/views/login.py:307 #: authentication/views/login.py:238
msgid "User email already exists ({})"
msgstr "用户邮箱已存在 ({})"
#: authentication/views/login.py:318
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"
@ -2802,15 +2804,15 @@ msgstr ""
"等待 <b>{}</b> 确认, 你也可以复制链接发给他/她 <br/>\n" "等待 <b>{}</b> 确认, 你也可以复制链接发给他/她 <br/>\n"
" 不要关闭本页面" " 不要关闭本页面"
#: authentication/views/login.py:312 #: authentication/views/login.py:323
msgid "No ticket found" msgid "No ticket found"
msgstr "没有发现工单" msgstr "没有发现工单"
#: authentication/views/login.py:348 #: authentication/views/login.py:359
msgid "Logout success" msgid "Logout success"
msgstr "退出登录成功" msgstr "退出登录成功"
#: authentication/views/login.py:349 #: authentication/views/login.py:360
msgid "Logout success, return login page" msgid "Logout success, return login page"
msgstr "退出登录成功,返回到登录页面" msgstr "退出登录成功,返回到登录页面"
@ -3474,15 +3476,15 @@ msgstr "是否完成"
msgid "Time cost" msgid "Time cost"
msgstr "花费时间" msgstr "花费时间"
#: ops/tasks.py:32 #: ops/tasks.py:34
msgid "Run ansible task" msgid "Run ansible task"
msgstr "运行 Ansible 任务" msgstr "运行 Ansible 任务"
#: ops/tasks.py:61 #: ops/tasks.py:63
msgid "Run ansible task execution" msgid "Run ansible task execution"
msgstr "开始执行 Ansible 任务" msgstr "开始执行 Ansible 任务"
#: ops/tasks.py:77 #: ops/tasks.py:79
msgid "Clear celery periodic tasks" msgid "Clear celery periodic tasks"
msgstr "清理周期任务" msgstr "清理周期任务"
@ -3699,7 +3701,7 @@ msgstr "内部角色,不能删除"
msgid "The role has been bound to users, can't be destroy" msgid "The role has been bound to users, can't be destroy"
msgstr "角色已绑定用户,不能删除" msgstr "角色已绑定用户,不能删除"
#: rbac/api/role.py:83 #: rbac/api/role.py:87
msgid "Internal role, can't be update" msgid "Internal role, can't be update"
msgstr "内部角色,不能更新" msgstr "内部角色,不能更新"
@ -3711,27 +3713,27 @@ msgstr "{} 至少有一个系统角色"
msgid "RBAC" msgid "RBAC"
msgstr "RBAC" msgstr "RBAC"
#: rbac/builtin.py:109 #: rbac/builtin.py:113
msgid "SystemAdmin" msgid "SystemAdmin"
msgstr "系统管理员" msgstr "系统管理员"
#: rbac/builtin.py:112 #: rbac/builtin.py:116
msgid "SystemAuditor" msgid "SystemAuditor"
msgstr "系统审计员" msgstr "系统审计员"
#: rbac/builtin.py:115 #: rbac/builtin.py:119
msgid "SystemComponent" msgid "SystemComponent"
msgstr "系统组件" msgstr "系统组件"
#: rbac/builtin.py:121 #: rbac/builtin.py:125
msgid "OrgAdmin" msgid "OrgAdmin"
msgstr "组织管理员" msgstr "组织管理员"
#: rbac/builtin.py:124 #: rbac/builtin.py:128
msgid "OrgAuditor" msgid "OrgAuditor"
msgstr "组织审计员" msgstr "组织审计员"
#: rbac/builtin.py:127 #: rbac/builtin.py:131
msgid "OrgUser" msgid "OrgUser"
msgstr "组织用户" msgstr "组织用户"
@ -5336,9 +5338,9 @@ msgstr "会话"
msgid "Risk level" msgid "Risk level"
msgstr "风险等级" msgstr "风险等级"
#: terminal/connect_methods.py:47 terminal/connect_methods.py:48 #: terminal/connect_methods.py:54 terminal/connect_methods.py:55
#: terminal/connect_methods.py:49 terminal/connect_methods.py:50 #: terminal/connect_methods.py:56 terminal/connect_methods.py:57
#: terminal/connect_methods.py:51 #: terminal/connect_methods.py:58
msgid "DB Client" msgid "DB Client"
msgstr "数据库客户端" msgstr "数据库客户端"
@ -5825,11 +5827,11 @@ msgstr "清除孤儿会话"
msgid "Upload session replay to external storage" msgid "Upload session replay to external storage"
msgstr "上传会话录像到外部存储" msgstr "上传会话录像到外部存储"
#: terminal/tasks.py:83 #: terminal/tasks.py:84
msgid "Run applet host deployment" msgid "Run applet host deployment"
msgstr "运行应用机部署" msgstr "运行应用机部署"
#: terminal/tasks.py:90 #: terminal/tasks.py:94
msgid "Install applet" msgid "Install applet"
msgstr "安装应用" msgstr "安装应用"