perf: 优化OIDC用户未激活时,会循环跳转登录页面

pull/11776/head
jiangweidong 2023-10-09 17:55:44 +08:00 committed by Bryan
parent 3d27986c96
commit 3ac35eec68
5 changed files with 110 additions and 98 deletions

View File

@ -166,7 +166,7 @@ class OIDCAuthCallbackView(View):
code_verifier = request.session.get('oidc_auth_code_verifier', None) code_verifier = request.session.get('oidc_auth_code_verifier', None)
logger.debug(log_prompt.format('Process authenticate')) logger.debug(log_prompt.format('Process authenticate'))
user = auth.authenticate(nonce=nonce, request=request, code_verifier=code_verifier) user = auth.authenticate(nonce=nonce, request=request, code_verifier=code_verifier)
if user and user.is_valid: if user:
logger.debug(log_prompt.format('Login: {}'.format(user))) logger.debug(log_prompt.format('Login: {}'.format(user)))
auth.login(self.request, user) auth.login(self.request, user)
# Stores an expiration timestamp in the user's session. This value will be used if # Stores an expiration timestamp in the user's session. This value will be used if

View File

@ -92,7 +92,7 @@ class ThirdPartyLoginMiddleware(mixins.AuthMixin):
'title': _('Authentication failed'), 'title': _('Authentication failed'),
'message': _('Authentication failed (before login check failed): {}').format(e), 'message': _('Authentication failed (before login check failed): {}').format(e),
'interval': 10, 'interval': 10,
'redirect_url': reverse('authentication:login'), 'redirect_url': reverse('authentication:login') + '?admin=0',
'auto_redirect': True, 'auto_redirect': True,
} }
response = render(request, 'authentication/auth_fail_flash_message_standalone.html', context) response = render(request, 'authentication/auth_fail_flash_message_standalone.html', context)

View File

@ -76,6 +76,12 @@ def authenticate(request=None, **credentials):
if user is None: if user is None:
continue continue
if not user.is_valid:
temp_user = user
temp_user.backend = backend_path
request.error_message = _('User is not valid')
return temp_user
# 检查用户是否允许认证 # 检查用户是否允许认证
if not backend.user_allow_authenticate(user): if not backend.user_allow_authenticate(user):
temp_user = user temp_user = user

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-10-07 17:56+0800\n" "POT-Creation-Date: 2023-10-09 17:52+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"
@ -244,7 +244,7 @@ msgstr "資産"
msgid "Su from" msgid "Su from"
msgstr "から切り替え" msgstr "から切り替え"
#: accounts/models/account.py:54 assets/const/protocol.py:168 #: accounts/models/account.py:54 assets/const/protocol.py:169
#: settings/serializers/auth/cas.py:20 settings/serializers/auth/feishu.py:20 #: settings/serializers/auth/cas.py:20 settings/serializers/auth/feishu.py:20
#: terminal/models/applet/applet.py:35 #: terminal/models/applet/applet.py:35
msgid "Version" msgid "Version"
@ -500,7 +500,7 @@ msgstr "アカウントの確認"
msgid "Secret type" msgid "Secret type"
msgstr "鍵の種類" msgstr "鍵の種類"
#: accounts/models/base.py:39 accounts/models/mixins/vault.py:48 #: accounts/models/base.py:39 accounts/models/mixins/vault.py:49
#: accounts/serializers/account/base.py:19 #: accounts/serializers/account/base.py:19
#: authentication/models/temp_token.py:10 #: authentication/models/temp_token.py:10
#: authentication/templates/authentication/_access_key_modal.html:31 #: authentication/templates/authentication/_access_key_modal.html:31
@ -1318,7 +1318,7 @@ msgstr "無効"
msgid "Basic" msgid "Basic"
msgstr "基本" msgstr "基本"
#: assets/const/base.py:35 assets/const/protocol.py:245 #: assets/const/base.py:35 assets/const/protocol.py:252
#: assets/models/asset/web.py:13 #: assets/models/asset/web.py:13
msgid "Script" msgid "Script"
msgstr "脚本" msgstr "脚本"
@ -1386,11 +1386,11 @@ msgstr "ChatGPT"
msgid "Other" msgid "Other"
msgstr "その他" msgstr "その他"
#: assets/const/protocol.py:48 #: assets/const/protocol.py:49
msgid "SFTP root" msgid "SFTP root"
msgstr "SFTPルート" msgstr "SFTPルート"
#: assets/const/protocol.py:50 #: assets/const/protocol.py:51
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"SFTP root directory, Support variable: <br>- ${ACCOUNT} The connected " "SFTP root directory, Support variable: <br>- ${ACCOUNT} The connected "
@ -1401,81 +1401,81 @@ msgstr ""
"ユーザー名<br>-${HOME}接続されたアカウントのホームディレクトリ<br>-${USER}" "ユーザー名<br>-${HOME}接続されたアカウントのホームディレクトリ<br>-${USER}"
"ユーザーのユーザー名" "ユーザーのユーザー名"
#: assets/const/protocol.py:65 #: assets/const/protocol.py:66
msgid "Console" msgid "Console"
msgstr "Console" msgstr "Console"
#: assets/const/protocol.py:66 #: assets/const/protocol.py:67
msgid "Connect to console session" msgid "Connect to console session"
msgstr "コンソールセッションに接続" msgstr "コンソールセッションに接続"
#: assets/const/protocol.py:70 #: assets/const/protocol.py:71
msgid "Any" msgid "Any"
msgstr "任意" msgstr "任意"
#: assets/const/protocol.py:72 settings/serializers/security.py:228 #: assets/const/protocol.py:73 settings/serializers/security.py:228
msgid "Security" msgid "Security"
msgstr "セキュリティ" msgstr "セキュリティ"
#: assets/const/protocol.py:73 #: assets/const/protocol.py:74
msgid "Security layer to use for the connection" msgid "Security layer to use for the connection"
msgstr "接続に使用するセキュリティ レイヤー" msgstr "接続に使用するセキュリティ レイヤー"
#: assets/const/protocol.py:79 #: assets/const/protocol.py:80
msgid "AD domain" msgid "AD domain"
msgstr "AD ドメイン" msgstr "AD ドメイン"
#: assets/const/protocol.py:94 #: assets/const/protocol.py:95
msgid "Username prompt" msgid "Username prompt"
msgstr "ユーザー名プロンプト" msgstr "ユーザー名プロンプト"
#: assets/const/protocol.py:95 #: assets/const/protocol.py:96
msgid "We will send username when we see this prompt" msgid "We will send username when we see this prompt"
msgstr "このプロンプトが表示されたらユーザー名を送信します" msgstr "このプロンプトが表示されたらユーザー名を送信します"
#: assets/const/protocol.py:100 #: assets/const/protocol.py:101
msgid "Password prompt" msgid "Password prompt"
msgstr "パスワードプロンプト" msgstr "パスワードプロンプト"
#: assets/const/protocol.py:101 #: assets/const/protocol.py:102
msgid "We will send password when we see this prompt" msgid "We will send password when we see this prompt"
msgstr "このプロンプトが表示されたらパスワードを送信します" msgstr "このプロンプトが表示されたらパスワードを送信します"
#: assets/const/protocol.py:106 #: assets/const/protocol.py:107
msgid "Success prompt" msgid "Success prompt"
msgstr "成功プロンプト" msgstr "成功プロンプト"
#: assets/const/protocol.py:107 #: assets/const/protocol.py:108
msgid "We will consider login success when we see this prompt" msgid "We will consider login success when we see this prompt"
msgstr "このプロンプトが表示されたらログイン成功とみなします" msgstr "このプロンプトが表示されたらログイン成功とみなします"
#: assets/const/protocol.py:118 assets/models/asset/database.py:10 #: assets/const/protocol.py:119 assets/models/asset/database.py:10
#: settings/serializers/msg.py:40 #: settings/serializers/msg.py:40
msgid "Use SSL" msgid "Use SSL"
msgstr "SSLの使用" msgstr "SSLの使用"
#: assets/const/protocol.py:153 #: assets/const/protocol.py:154
msgid "SYSDBA" msgid "SYSDBA"
msgstr "SYSDBA" msgstr "SYSDBA"
#: assets/const/protocol.py:154 #: assets/const/protocol.py:155
msgid "Connect as SYSDBA" msgid "Connect as SYSDBA"
msgstr "SYSDBA として接続" msgstr "SYSDBA として接続"
#: assets/const/protocol.py:169 #: assets/const/protocol.py:170
msgid "" msgid ""
"SQL Server version, Different versions have different connection drivers" "SQL Server version, Different versions have different connection drivers"
msgstr "SQL Server のバージョン。バージョンによって接続ドライバが異なります" msgstr "SQL Server のバージョン。バージョンによって接続ドライバが異なります"
#: assets/const/protocol.py:192 #: assets/const/protocol.py:199
msgid "Auth username" msgid "Auth username"
msgstr "ユーザー名で認証する" msgstr "ユーザー名で認証する"
#: assets/const/protocol.py:215 #: assets/const/protocol.py:222
msgid "Safe mode" msgid "Safe mode"
msgstr "安全モード" msgstr "安全モード"
#: assets/const/protocol.py:217 #: assets/const/protocol.py:224
msgid "" msgid ""
"When safe mode is enabled, some operations will be disabled, such as: New " "When safe mode is enabled, some operations will be disabled, such as: New "
"tab, right click, visit other website, etc." "tab, right click, visit other website, etc."
@ -1483,24 +1483,24 @@ msgstr ""
"安全モードが有効になっている場合、新しいタブ、右クリック、他のウェブサイトへ" "安全モードが有効になっている場合、新しいタブ、右クリック、他のウェブサイトへ"
"のアクセスなど、一部の操作が無効になります" "のアクセスなど、一部の操作が無効になります"
#: assets/const/protocol.py:222 assets/models/asset/web.py:9 #: assets/const/protocol.py:229 assets/models/asset/web.py:9
#: assets/serializers/asset/info/spec.py:16 #: assets/serializers/asset/info/spec.py:16
msgid "Autofill" msgid "Autofill"
msgstr "自動充填" msgstr "自動充填"
#: assets/const/protocol.py:230 assets/models/asset/web.py:10 #: assets/const/protocol.py:237 assets/models/asset/web.py:10
msgid "Username selector" msgid "Username selector"
msgstr "ユーザー名ピッカー" msgstr "ユーザー名ピッカー"
#: assets/const/protocol.py:235 assets/models/asset/web.py:11 #: assets/const/protocol.py:242 assets/models/asset/web.py:11
msgid "Password selector" msgid "Password selector"
msgstr "パスワードセレクター" msgstr "パスワードセレクター"
#: assets/const/protocol.py:240 assets/models/asset/web.py:12 #: assets/const/protocol.py:247 assets/models/asset/web.py:12
msgid "Submit selector" msgid "Submit selector"
msgstr "ボタンセレクターを確認する" msgstr "ボタンセレクターを確認する"
#: assets/const/protocol.py:263 #: assets/const/protocol.py:270
msgid "API mode" msgid "API mode"
msgstr "APIモード" msgstr "APIモード"
@ -2835,15 +2835,15 @@ msgstr "パスワードが無効です"
msgid "Please wait for %s seconds before retry" msgid "Please wait for %s seconds before retry"
msgstr "%s 秒後に再試行してください" msgstr "%s 秒後に再試行してください"
#: authentication/errors/redirect.py:85 authentication/mixins.py:318 #: authentication/errors/redirect.py:85 authentication/mixins.py:324
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:325 #: authentication/errors/redirect.py:93 authentication/mixins.py:331
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:332 #: authentication/errors/redirect.py:101 authentication/mixins.py:338
msgid "Your password has expired, please reset before logging in" msgid "Your password has expired, please reset before logging in"
msgstr "" msgstr ""
"パスワードの有効期限が切れました。ログインする前にリセットしてください。" "パスワードの有効期限が切れました。ログインする前にリセットしてください。"
@ -2946,7 +2946,11 @@ msgstr "無効にする電話番号をクリアする"
msgid "Authentication failed (before login check failed): {}" msgid "Authentication failed (before login check failed): {}"
msgstr "認証に失敗しました (ログインチェックが失敗する前): {}" msgstr "認証に失敗しました (ログインチェックが失敗する前): {}"
#: authentication/mixins.py:91 #: authentication/mixins.py:82
msgid "User is not valid"
msgstr "無効なユーザーです"
#: authentication/mixins.py:97
msgid "" msgid ""
"The administrator has enabled 'Only allow login from user source'. \n" "The administrator has enabled 'Only allow login from user source'. \n"
" The current user source is {}. Please contact the administrator." " The current user source is {}. Please contact the administrator."
@ -2954,11 +2958,11 @@ msgstr ""
"管理者は「ユーザーソースからのみログインを許可」をオンにしており、現在のユー" "管理者は「ユーザーソースからのみログインを許可」をオンにしており、現在のユー"
"ザーソースは {} です。管理者に連絡してください。" "ザーソースは {} です。管理者に連絡してください。"
#: authentication/mixins.py:268 #: authentication/mixins.py:274
msgid "The MFA type ({}) is not enabled" msgid "The MFA type ({}) is not enabled"
msgstr "MFAタイプ ({}) が有効になっていない" msgstr "MFAタイプ ({}) が有効になっていない"
#: authentication/mixins.py:308 #: authentication/mixins.py:314
msgid "Please change your password" msgid "Please change your password"
msgstr "パスワードを変更してください" msgstr "パスワードを変更してください"
@ -3364,7 +3368,7 @@ msgstr ""
msgid "Do you want to retry ?" msgid "Do you want to retry ?"
msgstr "再試行しますか?" msgstr "再試行しますか?"
#: authentication/utils.py:28 common/utils/ip/geoip/utils.py:24 #: authentication/utils.py:23 common/utils/ip/geoip/utils.py:24
#: xpack/plugins/cloud/const.py:29 #: xpack/plugins/cloud/const.py:29
msgid "LAN" msgid "LAN"
msgstr "ローカルエリアネットワーク" msgstr "ローカルエリアネットワーク"
@ -3861,15 +3865,15 @@ msgstr "システムメッセージ"
msgid "Publish the station message" msgid "Publish the station message"
msgstr "投稿サイトニュース" msgstr "投稿サイトニュース"
#: ops/ansible/inventory.py:92 ops/models/job.py:60 #: ops/ansible/inventory.py:95 ops/models/job.py:60
msgid "No account available" msgid "No account available"
msgstr "利用可能なアカウントがありません" msgstr "利用可能なアカウントがありません"
#: ops/ansible/inventory.py:263 #: ops/ansible/inventory.py:259
msgid "Ansible disabled" msgid "Ansible disabled"
msgstr "Ansible 無効" msgstr "Ansible 無効"
#: ops/ansible/inventory.py:279 #: ops/ansible/inventory.py:275
msgid "Skip hosts below:" msgid "Skip hosts below:"
msgstr "次のホストをスキップします: " msgstr "次のホストをスキップします: "
@ -5208,39 +5212,39 @@ msgstr "サポートリンク"
msgid "default: http://www.jumpserver.org/support/" msgid "default: http://www.jumpserver.org/support/"
msgstr "デフォルト: http://www.jumpserver.org/support/" msgstr "デフォルト: http://www.jumpserver.org/support/"
#: settings/serializers/cleaning.py:10 #: settings/serializers/cleaning.py:11
msgid "Period clean" msgid "Period clean"
msgstr "定時清掃" msgstr "定時清掃"
#: settings/serializers/cleaning.py:14 #: settings/serializers/cleaning.py:15
msgid "Login log keep days (day)" msgid "Login log keep days (day)"
msgstr "ログインログは日数を保持します(天)" msgstr "ログインログは日数を保持します(天)"
#: settings/serializers/cleaning.py:18 #: settings/serializers/cleaning.py:19
msgid "Task log keep days (day)" msgid "Task log keep days (day)"
msgstr "タスクログは日数を保持します(天)" msgstr "タスクログは日数を保持します(天)"
#: settings/serializers/cleaning.py:22 #: settings/serializers/cleaning.py:23
msgid "Operate log keep days (day)" msgid "Operate log keep days (day)"
msgstr "ログ管理日を操作する(天)" msgstr "ログ管理日を操作する(天)"
#: settings/serializers/cleaning.py:26 #: settings/serializers/cleaning.py:27
msgid "FTP log keep days (day)" msgid "FTP log keep days (day)"
msgstr "ダウンロードのアップロード(天)" msgstr "ダウンロードのアップロード(天)"
#: settings/serializers/cleaning.py:30 #: settings/serializers/cleaning.py:31
msgid "Cloud sync record keep days (day)" msgid "Cloud sync record keep days (day)"
msgstr "クラウド同期レコードは日数を保持します(天)" msgstr "クラウド同期レコードは日数を保持します(天)"
#: settings/serializers/cleaning.py:34 #: settings/serializers/cleaning.py:35
msgid "Activity log keep days (day)" msgid "Activity log keep days (day)"
msgstr "活動ログは日数を保持します(天)" msgstr "活動ログは日数を保持します(天)"
#: settings/serializers/cleaning.py:37 #: settings/serializers/cleaning.py:38
msgid "Session keep duration (day)" msgid "Session keep duration (day)"
msgstr "セッション維持期間(天)" msgstr "セッション維持期間(天)"
#: settings/serializers/cleaning.py:39 #: settings/serializers/cleaning.py:40
msgid "" msgid ""
"Session, record, command will be delete if more than duration, only in " "Session, record, command will be delete if more than duration, only in "
"database, OSS will not be affected." "database, OSS will not be affected."
@ -5248,10 +5252,6 @@ msgstr ""
"この期間を超えるセッション、録音、およびコマンド レコードは削除されます (デー" "この期間を超えるセッション、録音、およびコマンド レコードは削除されます (デー"
"タベースのバックアップに影響し、OSS などには影響しません)" "タベースのバックアップに影響し、OSS などには影響しません)"
#: settings/serializers/cleaning.py:53
msgid "must be greater than {} days."
msgstr ""
#: settings/serializers/feature.py:16 #: settings/serializers/feature.py:16
msgid "Subject" msgid "Subject"
msgstr "件名" msgstr "件名"
@ -6260,7 +6260,7 @@ msgstr "一括作成非サポート"
msgid "Storage is invalid" msgid "Storage is invalid"
msgstr "ストレージが無効です" msgstr "ストレージが無効です"
#: terminal/models/applet/applet.py:30 xpack/plugins/license/models.py:88 #: terminal/models/applet/applet.py:30 xpack/plugins/license/models.py:86
msgid "Community edition" msgid "Community edition"
msgstr "コミュニティ版" msgstr "コミュニティ版"
@ -8536,7 +8536,7 @@ msgstr "ライセンスのインポートに成功"
msgid "License is invalid" msgid "License is invalid"
msgstr "ライセンスが無効です" msgstr "ライセンスが無効です"
#: xpack/plugins/license/meta.py:10 xpack/plugins/license/models.py:140 #: xpack/plugins/license/meta.py:10 xpack/plugins/license/models.py:138
msgid "License" msgid "License"
msgstr "ライセンス" 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-10-07 17:56+0800\n" "POT-Creation-Date: 2023-10-09 17:52+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"
@ -1428,69 +1428,69 @@ msgstr "当我们看到这个提示时,我们将发送用户名"
msgid "Password prompt" msgid "Password prompt"
msgstr "密码提示" msgstr "密码提示"
#: assets/const/protocol.py:101 #: assets/const/protocol.py:102
msgid "We will send password when we see this prompt" msgid "We will send password when we see this prompt"
msgstr "当我们看到这个提示时,我们将发送密码" msgstr "当我们看到这个提示时,我们将发送密码"
#: assets/const/protocol.py:106 #: assets/const/protocol.py:107
msgid "Success prompt" msgid "Success prompt"
msgstr "成功提示" msgstr "成功提示"
#: assets/const/protocol.py:107 #: assets/const/protocol.py:108
msgid "We will consider login success when we see this prompt" msgid "We will consider login success when we see this prompt"
msgstr "当我们看到这个提示时,我们将认为登录成功" msgstr "当我们看到这个提示时,我们将认为登录成功"
#: assets/const/protocol.py:118 assets/models/asset/database.py:10 #: assets/const/protocol.py:119 assets/models/asset/database.py:10
#: settings/serializers/msg.py:40 #: settings/serializers/msg.py:40
msgid "Use SSL" msgid "Use SSL"
msgstr "使用 SSL" msgstr "使用 SSL"
#: assets/const/protocol.py:153 #: assets/const/protocol.py:154
msgid "SYSDBA" msgid "SYSDBA"
msgstr "SYSDBA" msgstr "SYSDBA"
#: assets/const/protocol.py:154 #: assets/const/protocol.py:155
msgid "Connect as SYSDBA" msgid "Connect as SYSDBA"
msgstr "以 SYSDBA 角色连接" msgstr "以 SYSDBA 角色连接"
#: assets/const/protocol.py:169 #: assets/const/protocol.py:170
msgid "" msgid ""
"SQL Server version, Different versions have different connection drivers" "SQL Server version, Different versions have different connection drivers"
msgstr "SQL Server 版本,不同版本有不同的连接驱动" msgstr "SQL Server 版本,不同版本有不同的连接驱动"
#: assets/const/protocol.py:192 #: assets/const/protocol.py:199
msgid "Auth username" msgid "Auth username"
msgstr "使用用户名认证" msgstr "使用用户名认证"
#: assets/const/protocol.py:215 #: assets/const/protocol.py:222
msgid "Safe mode" msgid "Safe mode"
msgstr "安全模式" msgstr "安全模式"
#: assets/const/protocol.py:217 #: assets/const/protocol.py:224
msgid "" msgid ""
"When safe mode is enabled, some operations will be disabled, such as: New " "When safe mode is enabled, some operations will be disabled, such as: New "
"tab, right click, visit other website, etc." "tab, right click, visit other website, etc."
msgstr "" msgstr ""
"当安全模式启用时,一些操作将被禁用,例如:新建标签页、右键、访问其它网站 等" "当安全模式启用时,一些操作将被禁用,例如:新建标签页、右键、访问其它网站 等"
#: assets/const/protocol.py:222 assets/models/asset/web.py:9 #: assets/const/protocol.py:229 assets/models/asset/web.py:9
#: assets/serializers/asset/info/spec.py:16 #: assets/serializers/asset/info/spec.py:16
msgid "Autofill" msgid "Autofill"
msgstr "自动代填" msgstr "自动代填"
#: assets/const/protocol.py:230 assets/models/asset/web.py:10 #: assets/const/protocol.py:237 assets/models/asset/web.py:10
msgid "Username selector" msgid "Username selector"
msgstr "用户名选择器" msgstr "用户名选择器"
#: assets/const/protocol.py:235 assets/models/asset/web.py:11 #: assets/const/protocol.py:242 assets/models/asset/web.py:11
msgid "Password selector" msgid "Password selector"
msgstr "密码选择器" msgstr "密码选择器"
#: assets/const/protocol.py:240 assets/models/asset/web.py:12 #: assets/const/protocol.py:247 assets/models/asset/web.py:12
msgid "Submit selector" msgid "Submit selector"
msgstr "确认按钮选择器" msgstr "确认按钮选择器"
#: assets/const/protocol.py:263 #: assets/const/protocol.py:270
msgid "API mode" msgid "API mode"
msgstr "API 模式" msgstr "API 模式"
@ -2806,15 +2806,15 @@ msgstr "您的密码无效"
msgid "Please wait for %s seconds before retry" msgid "Please wait for %s seconds before retry"
msgstr "请在 %s 秒后重试" msgstr "请在 %s 秒后重试"
#: authentication/errors/redirect.py:85 authentication/mixins.py:318 #: authentication/errors/redirect.py:85 authentication/mixins.py:324
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:325 #: authentication/errors/redirect.py:93 authentication/mixins.py:331
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:332 #: authentication/errors/redirect.py:101 authentication/mixins.py:338
msgid "Your password has expired, please reset before logging in" msgid "Your password has expired, please reset before logging in"
msgstr "您的密码已过期,先修改再登录" msgstr "您的密码已过期,先修改再登录"
@ -2915,17 +2915,21 @@ msgstr "清空手机号码禁用"
msgid "Authentication failed (before login check failed): {}" msgid "Authentication failed (before login check failed): {}"
msgstr "认证失败 (登录前检查失败): {}" msgstr "认证失败 (登录前检查失败): {}"
#: authentication/mixins.py:91 #: authentication/mixins.py:82
msgid "User is not valid"
msgstr "无效的用户"
#: authentication/mixins.py:97
msgid "" msgid ""
"The administrator has enabled 'Only allow login from user source'. \n" "The administrator has enabled 'Only allow login from user source'. \n"
" The current user source is {}. Please contact the administrator." " The current user source is {}. Please contact the administrator."
msgstr "管理员已开启'仅允许从用户来源登录',当前用户来源为{},请联系管理员。" msgstr "管理员已开启'仅允许从用户来源登录',当前用户来源为{},请联系管理员。"
#: authentication/mixins.py:268 #: authentication/mixins.py:274
msgid "The MFA type ({}) is not enabled" msgid "The MFA type ({}) is not enabled"
msgstr "该 MFA ({}) 方式没有启用" msgstr "该 MFA ({}) 方式没有启用"
#: authentication/mixins.py:308 #: authentication/mixins.py:314
msgid "Please change your password" msgid "Please change your password"
msgstr "请修改密码" msgstr "请修改密码"
@ -3319,7 +3323,7 @@ msgstr "本页面未使用 HTTPS 协议,请使用 HTTPS 协议以确保您的
msgid "Do you want to retry ?" msgid "Do you want to retry ?"
msgstr "是否重试 " msgstr "是否重试 "
#: authentication/utils.py:28 common/utils/ip/geoip/utils.py:24 #: authentication/utils.py:23 common/utils/ip/geoip/utils.py:24
#: xpack/plugins/cloud/const.py:29 #: xpack/plugins/cloud/const.py:29
msgid "LAN" msgid "LAN"
msgstr "局域网" msgstr "局域网"
@ -3809,15 +3813,15 @@ msgstr "系统信息"
msgid "Publish the station message" msgid "Publish the station message"
msgstr "发布站内消息" msgstr "发布站内消息"
#: ops/ansible/inventory.py:92 ops/models/job.py:60 #: ops/ansible/inventory.py:95 ops/models/job.py:60
msgid "No account available" msgid "No account available"
msgstr "无可用账号" msgstr "无可用账号"
#: ops/ansible/inventory.py:263 #: ops/ansible/inventory.py:259
msgid "Ansible disabled" msgid "Ansible disabled"
msgstr "Ansible 已禁用" msgstr "Ansible 已禁用"
#: ops/ansible/inventory.py:279 #: ops/ansible/inventory.py:275
msgid "Skip hosts below:" msgid "Skip hosts below:"
msgstr "跳过以下主机: " msgstr "跳过以下主机: "
@ -5151,49 +5155,45 @@ msgstr "支持链接"
msgid "default: http://www.jumpserver.org/support/" msgid "default: http://www.jumpserver.org/support/"
msgstr "默认: http://www.jumpserver.org/support/" msgstr "默认: http://www.jumpserver.org/support/"
#: settings/serializers/cleaning.py:10 #: settings/serializers/cleaning.py:11
msgid "Period clean" msgid "Period clean"
msgstr "定時清掃" msgstr "定時清掃"
#: settings/serializers/cleaning.py:14 #: settings/serializers/cleaning.py:15
msgid "Login log keep days (day)" msgid "Login log keep days (day)"
msgstr "登录日志 (天)" msgstr "登录日志 (天)"
#: settings/serializers/cleaning.py:18 #: settings/serializers/cleaning.py:19
msgid "Task log keep days (day)" msgid "Task log keep days (day)"
msgstr "任务日志 (天)" msgstr "任务日志 (天)"
#: settings/serializers/cleaning.py:22 #: settings/serializers/cleaning.py:23
msgid "Operate log keep days (day)" msgid "Operate log keep days (day)"
msgstr "操作日志 (天)" msgstr "操作日志 (天)"
#: settings/serializers/cleaning.py:26 #: settings/serializers/cleaning.py:27
msgid "FTP log keep days (day)" msgid "FTP log keep days (day)"
msgstr "上传下载 (天)" msgstr "上传下载 (天)"
#: settings/serializers/cleaning.py:30 #: settings/serializers/cleaning.py:31
msgid "Cloud sync record keep days (day)" msgid "Cloud sync record keep days (day)"
msgstr "云同步记录 (天)" msgstr "云同步记录 (天)"
#: settings/serializers/cleaning.py:34 #: settings/serializers/cleaning.py:35
msgid "Activity log keep days (day)" msgid "Activity log keep days (day)"
msgstr "活动记录 (天)" msgstr "活动记录 (天)"
#: settings/serializers/cleaning.py:37 #: settings/serializers/cleaning.py:38
msgid "Session keep duration (day)" msgid "Session keep duration (day)"
msgstr "会话日志 (天)" msgstr "会话日志 (天)"
#: settings/serializers/cleaning.py:39 #: settings/serializers/cleaning.py:40
msgid "" msgid ""
"Session, record, command will be delete if more than duration, only in " "Session, record, command will be delete if more than duration, only in "
"database, OSS will not be affected." "database, OSS will not be affected."
msgstr "" msgstr ""
"会话、录像,命令记录超过该时长将会被清除 (影响数据库存储OSS 等不受影响)" "会话、录像,命令记录超过该时长将会被清除 (影响数据库存储OSS 等不受影响)"
#: settings/serializers/cleaning.py:53
msgid "must be greater than {} days."
msgstr ""
#: settings/serializers/feature.py:16 #: settings/serializers/feature.py:16
msgid "Subject" msgid "Subject"
msgstr "主题" msgstr "主题"
@ -6168,7 +6168,7 @@ msgstr "不支持批量创建"
msgid "Storage is invalid" msgid "Storage is invalid"
msgstr "存储无效" msgstr "存储无效"
#: terminal/models/applet/applet.py:30 xpack/plugins/license/models.py:88 #: terminal/models/applet/applet.py:30 xpack/plugins/license/models.py:86
msgid "Community edition" msgid "Community edition"
msgstr "社区版" msgstr "社区版"
@ -8416,7 +8416,7 @@ msgstr "许可证导入成功"
msgid "License is invalid" msgid "License is invalid"
msgstr "无效的许可证" msgstr "无效的许可证"
#: xpack/plugins/license/meta.py:10 xpack/plugins/license/models.py:140 #: xpack/plugins/license/meta.py:10 xpack/plugins/license/models.py:138
msgid "License" msgid "License"
msgstr "许可证" msgstr "许可证"
@ -8436,5 +8436,11 @@ msgstr "企业专业版"
msgid "Ultimate edition" msgid "Ultimate edition"
msgstr "企业旗舰版" msgstr "企业旗舰版"
#~ msgid "Basic edition"
#~ msgstr "企业基础版"
#~ msgid "Professional edition"
#~ msgstr "企业专业版"
#~ msgid "Random" #~ msgid "Random"
#~ msgstr "随机" #~ msgstr "随机"