From ee586954f87783d70471887d5c49666d05455e40 Mon Sep 17 00:00:00 2001 From: ibuler Date: Mon, 30 Oct 2023 11:37:37 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=8F=91=E5=B8=83=E6=9C=BA=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E4=BD=BF=E7=94=A8=E5=90=8C=E5=90=8D=E8=B4=A6=E5=8F=B7?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/locale/ja/LC_MESSAGES/django.mo | 4 +- apps/locale/ja/LC_MESSAGES/django.po | 133 ++++++++++-------- apps/locale/zh/LC_MESSAGES/django.mo | 4 +- apps/locale/zh/LC_MESSAGES/django.po | 131 +++++++++-------- .../0066_applethost_using_same_account.py | 18 +++ apps/terminal/models/applet/applet.py | 15 +- apps/terminal/models/applet/host.py | 1 + apps/terminal/serializers/applet_host.py | 23 ++- apps/terminal/signal_handlers/applet.py | 21 ++- 9 files changed, 217 insertions(+), 133 deletions(-) create mode 100644 apps/terminal/migrations/0066_applethost_using_same_account.py diff --git a/apps/locale/ja/LC_MESSAGES/django.mo b/apps/locale/ja/LC_MESSAGES/django.mo index 65199d7a6..7467d47c6 100644 --- a/apps/locale/ja/LC_MESSAGES/django.mo +++ b/apps/locale/ja/LC_MESSAGES/django.mo @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:67b3061a082605d0862007d0deb03dba0477b3eac85d99faf5755ee44e7453eb -size 163187 +oid sha256:cde05981ba0517af982f7ef197aed433c52510098589e4a6ce5101e48c26556e +size 163803 diff --git a/apps/locale/ja/LC_MESSAGES/django.po b/apps/locale/ja/LC_MESSAGES/django.po index 631adf50f..e32694415 100644 --- a/apps/locale/ja/LC_MESSAGES/django.po +++ b/apps/locale/ja/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-10-20 14:50+0800\n" +"POT-Creation-Date: 2023-10-30 11:28+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -227,7 +227,7 @@ msgstr "ユーザー %s がパスワードを閲覧/導き出しました" #: assets/models/asset/common.py:334 assets/models/cmd_filter.py:36 #: assets/serializers/domain.py:19 assets/serializers/label.py:27 #: audits/models.py:57 authentication/models/connection_token.py:36 -#: perms/models/asset_permission.py:64 perms/serializers/permission.py:34 +#: perms/models/asset_permission.py:68 perms/serializers/permission.py:34 #: terminal/backends/command/models.py:17 terminal/models/session/session.py:31 #: terminal/notifications.py:155 terminal/serializers/command.py:17 #: terminal/serializers/session.py:26 @@ -265,8 +265,8 @@ msgstr "ソース ID" #: accounts/serializers/automations/change_secret.py:127 #: acls/serializers/base.py:124 acls/templates/acls/asset_login_reminder.html:7 #: assets/serializers/asset/common.py:125 assets/serializers/gateway.py:28 -#: audits/models.py:58 authentication/api/connection_token.py:406 -#: ops/models/base.py:18 perms/models/asset_permission.py:70 +#: audits/models.py:58 authentication/api/connection_token.py:407 +#: ops/models/base.py:18 perms/models/asset_permission.py:74 #: perms/serializers/permission.py:39 terminal/backends/command/models.py:18 #: terminal/models/session/session.py:33 #: terminal/templates/terminal/_msg_command_warning.html:8 @@ -312,7 +312,7 @@ msgstr "アカウントバックアップ計画" #: assets/models/automations/base.py:115 audits/models.py:64 #: ops/models/base.py:55 ops/models/celery.py:63 ops/models/job.py:228 #: ops/templates/ops/celery_task_log.html:75 -#: perms/models/asset_permission.py:72 terminal/models/applet/host.py:140 +#: perms/models/asset_permission.py:77 terminal/models/applet/host.py:141 #: terminal/models/session/session.py:44 #: tickets/models/ticket/apply_application.py:30 #: tickets/models/ticket/apply_asset.py:19 @@ -418,7 +418,7 @@ msgstr "開始日" #: accounts/models/automations/change_secret.py:42 #: assets/models/automations/base.py:116 ops/models/base.py:56 #: ops/models/celery.py:64 ops/models/job.py:229 -#: terminal/models/applet/host.py:141 +#: terminal/models/applet/host.py:142 msgid "Date finished" msgstr "終了日" @@ -534,7 +534,7 @@ msgstr "パスワードルール" #: authentication/serializers/connect_token_secret.py:110 ops/mixin.py:21 #: ops/models/adhoc.py:20 ops/models/celery.py:15 ops/models/celery.py:57 #: ops/models/job.py:126 ops/models/playbook.py:28 ops/serializers/job.py:20 -#: orgs/models.py:82 perms/models/asset_permission.py:56 rbac/models/role.py:29 +#: orgs/models.py:82 perms/models/asset_permission.py:60 rbac/models/role.py:29 #: settings/models.py:32 settings/serializers/msg.py:82 #: terminal/models/applet/applet.py:33 terminal/models/component/endpoint.py:12 #: terminal/models/component/endpoint.py:94 @@ -664,9 +664,9 @@ msgstr "アカウントの存在ポリシー" #: accounts/serializers/account/account.py:190 applications/models.py:11 #: assets/models/label.py:21 assets/models/platform.py:89 -#: assets/serializers/asset/common.py:121 assets/serializers/cagegory.py:8 +#: assets/serializers/asset/common.py:121 assets/serializers/cagegory.py:12 #: assets/serializers/platform.py:133 assets/serializers/platform.py:229 -#: perms/serializers/user_permission.py:26 settings/models.py:34 +#: perms/serializers/user_permission.py:25 settings/models.py:34 #: tickets/models/ticket/apply_application.py:13 users/models/preference.py:12 msgid "Category" msgstr "カテゴリ" @@ -680,7 +680,7 @@ msgstr "カテゴリ" #: assets/serializers/platform.py:132 audits/serializers.py:50 #: audits/serializers.py:170 #: authentication/serializers/connect_token_secret.py:123 ops/models/job.py:137 -#: perms/serializers/user_permission.py:27 terminal/models/applet/applet.py:39 +#: perms/serializers/user_permission.py:26 terminal/models/applet/applet.py:39 #: terminal/models/component/storage.py:57 #: terminal/models/component/storage.py:146 terminal/serializers/applet.py:29 #: terminal/serializers/session.py:21 terminal/serializers/storage.py:228 @@ -715,7 +715,7 @@ msgstr "編集済み" #: acls/templates/acls/asset_login_reminder.html:6 #: assets/models/automations/base.py:19 #: assets/serializers/automations/base.py:20 -#: authentication/api/connection_token.py:405 ops/models/base.py:17 +#: authentication/api/connection_token.py:406 ops/models/base.py:17 #: ops/models/job.py:139 ops/serializers/job.py:21 #: terminal/templates/terminal/_msg_command_execute_alert.html:16 msgid "Assets" @@ -747,7 +747,7 @@ msgstr "ID" #: audits/serializers.py:171 authentication/models/connection_token.py:32 #: authentication/models/sso_token.py:16 #: 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:62 #: perms/serializers/permission.py:30 rbac/builtin.py:124 #: rbac/models/rolebinding.py:49 rbac/serializers/rolebinding.py:17 #: terminal/backends/command/models.py:16 terminal/models/session/session.py:29 @@ -843,7 +843,7 @@ msgstr "关联平台,可以配置推送参数,如果不关联,则使用默 #: assets/models/group.py:20 common/db/models.py:36 ops/models/adhoc.py:26 #: ops/models/job.py:145 ops/models/playbook.py:31 rbac/models/role.py:37 #: settings/models.py:37 terminal/models/applet/applet.py:45 -#: terminal/models/applet/applet.py:304 terminal/models/applet/host.py:142 +#: terminal/models/applet/applet.py:321 terminal/models/applet/host.py:143 #: terminal/models/component/endpoint.py:24 #: terminal/models/component/endpoint.py:104 #: terminal/models/session/session.py:46 tickets/models/comment.py:32 @@ -866,7 +866,7 @@ msgstr "" #: accounts/serializers/automations/base.py:23 #: assets/models/asset/common.py:155 assets/models/automations/base.py:18 #: assets/models/cmd_filter.py:32 assets/serializers/automations/base.py:21 -#: perms/models/asset_permission.py:67 +#: perms/models/asset_permission.py:71 msgid "Nodes" msgstr "ノード" @@ -1017,7 +1017,7 @@ msgstr "レビュー担当者" #: acls/models/base.py:43 authentication/models/access_key.py:20 #: authentication/models/connection_token.py:53 #: authentication/templates/authentication/_access_key_modal.html:32 -#: perms/models/asset_permission.py:76 terminal/models/session/sharing.py:29 +#: perms/models/asset_permission.py:81 terminal/models/session/sharing.py:29 #: tickets/const.py:37 msgid "Active" msgstr "アクティブ" @@ -1028,7 +1028,7 @@ msgstr "ユーザー" #: acls/models/base.py:98 assets/models/automations/base.py:17 #: assets/models/cmd_filter.py:38 assets/serializers/asset/common.py:377 -#: rbac/tree.py:35 +#: perms/serializers/user_permission.py:75 rbac/tree.py:35 msgid "Accounts" msgstr "アカウント" @@ -1640,7 +1640,7 @@ msgstr "プラットフォーム" #: assets/models/asset/common.py:153 assets/models/domain.py:21 #: authentication/serializers/connect_token_secret.py:133 -#: perms/serializers/user_permission.py:29 xpack/plugins/cloud/models.py:323 +#: perms/serializers/user_permission.py:28 xpack/plugins/cloud/models.py:323 msgid "Domain" msgstr "ドメイン" @@ -1712,9 +1712,9 @@ msgstr "アセットの自動化タスク" #: assets/models/automations/base.py:113 audits/models.py:207 #: audits/serializers.py:51 ops/models/base.py:49 ops/models/job.py:220 -#: terminal/models/applet/applet.py:303 terminal/models/applet/host.py:139 +#: terminal/models/applet/applet.py:320 terminal/models/applet/host.py:140 #: terminal/models/component/status.py:30 terminal/serializers/applet.py:18 -#: terminal/serializers/applet_host.py:115 tickets/models/ticket/general.py:283 +#: terminal/serializers/applet_host.py:124 tickets/models/ticket/general.py:283 #: tickets/serializers/super_ticket.py:13 #: tickets/serializers/ticket/ticket.py:20 xpack/plugins/cloud/models.py:201 #: xpack/plugins/cloud/models.py:257 @@ -1737,7 +1737,7 @@ msgstr "接続性" msgid "Date verified" msgstr "確認済みの日付" -#: assets/models/cmd_filter.py:28 perms/models/asset_permission.py:61 +#: assets/models/cmd_filter.py:28 perms/models/asset_permission.py:65 #: perms/serializers/permission.py:32 users/models/group.py:25 #: users/models/user.py:798 msgid "User group" @@ -1794,7 +1794,8 @@ msgid "System" msgstr "システム" #: assets/models/label.py:19 assets/models/node.py:539 -#: assets/serializers/cagegory.py:7 assets/serializers/cagegory.py:14 +#: assets/serializers/cagegory.py:11 assets/serializers/cagegory.py:18 +#: assets/serializers/cagegory.py:24 #: authentication/models/connection_token.py:29 #: authentication/serializers/connect_token_secret.py:122 #: common/serializers/common.py:86 settings/models.py:33 @@ -1803,10 +1804,10 @@ msgid "Value" msgstr "値" #: assets/models/label.py:40 assets/serializers/asset/common.py:123 -#: assets/serializers/cagegory.py:6 assets/serializers/cagegory.py:13 -#: assets/serializers/platform.py:112 +#: assets/serializers/cagegory.py:10 assets/serializers/cagegory.py:17 +#: assets/serializers/cagegory.py:23 assets/serializers/platform.py:112 #: authentication/serializers/connect_token_secret.py:121 -#: common/serializers/common.py:85 perms/serializers/user_permission.py:28 +#: common/serializers/common.py:85 perms/serializers/user_permission.py:27 #: settings/serializers/msg.py:83 msgid "Label" msgstr "ラベル" @@ -1974,7 +1975,8 @@ msgstr "" #: assets/serializers/asset/common.py:124 assets/serializers/platform.py:134 #: authentication/serializers/connect_token_secret.py:29 #: authentication/serializers/connect_token_secret.py:72 -#: perms/serializers/user_permission.py:25 xpack/plugins/cloud/models.py:324 +#: perms/models/asset_permission.py:75 perms/serializers/permission.py:40 +#: perms/serializers/user_permission.py:74 xpack/plugins/cloud/models.py:324 #: xpack/plugins/cloud/serializers/task.py:31 msgid "Protocols" msgstr "プロトコル" @@ -2005,7 +2007,7 @@ msgstr "プロトコルが必要です: {}" msgid "Invalid data" msgstr "無効なデータ" -#: assets/serializers/asset/database.py:12 +#: assets/serializers/asset/database.py:13 msgid "Default database" msgstr "デフォルト・データベース" @@ -2075,11 +2077,11 @@ msgstr "システムバージョン" msgid "OS arch" msgstr "システムアーキテクチャ" -#: assets/serializers/cagegory.py:9 +#: assets/serializers/cagegory.py:13 msgid "Constraints" msgstr "制約" -#: assets/serializers/cagegory.py:15 +#: assets/serializers/cagegory.py:19 msgid "Types" msgstr "タイプ" @@ -2330,7 +2332,7 @@ msgstr "セッションログ" msgid "Login log" msgstr "ログインログ" -#: audits/const.py:51 terminal/models/applet/host.py:143 +#: audits/const.py:51 terminal/models/applet/host.py:144 #: terminal/models/component/task.py:22 msgid "Task" msgstr "タスク" @@ -2470,7 +2472,7 @@ msgid "User %s %s this resource" msgstr "ユーザー %s %s が現在のリソースをサブスクライブしました。" #: audits/serializers.py:172 authentication/models/connection_token.py:47 -#: authentication/models/temp_token.py:13 perms/models/asset_permission.py:74 +#: authentication/models/temp_token.py:13 perms/models/asset_permission.py:79 #: tickets/models/ticket/apply_application.py:31 #: tickets/models/ticket/apply_asset.py:20 users/models/user.py:833 msgid "Date expired" @@ -2557,23 +2559,23 @@ msgstr "" "再使用可能な接続トークンの使用は許可されていません。グローバル設定は有効に" "なっていません" -#: authentication/api/connection_token.py:375 +#: authentication/api/connection_token.py:376 msgid "Anonymous account is not supported for this asset" msgstr "匿名アカウントはこのプロパティではサポートされていません" -#: authentication/api/connection_token.py:394 +#: authentication/api/connection_token.py:395 msgid "Account not found" msgstr "アカウントが見つかりません" -#: authentication/api/connection_token.py:397 +#: authentication/api/connection_token.py:398 msgid "Permission expired" msgstr "承認の有効期限が切れています" -#: authentication/api/connection_token.py:427 +#: authentication/api/connection_token.py:428 msgid "ACL action is reject: {}({})" msgstr "ACL アクションは拒否です: {}({})" -#: authentication/api/connection_token.py:431 +#: authentication/api/connection_token.py:432 msgid "ACL action is review" msgstr "ACL アクションはレビューです" @@ -2989,7 +2991,7 @@ msgid "Reusable" msgstr "再利用可能" #: authentication/models/connection_token.py:51 -#: perms/models/asset_permission.py:77 +#: perms/models/asset_permission.py:82 msgid "From ticket" msgstr "チケットから" @@ -3005,7 +3007,7 @@ msgstr "接続トークンを再利用できます" msgid "Connection token" msgstr "接続トークン" -#: authentication/models/connection_token.py:116 +#: authentication/models/connection_token.py:115 msgid "Connection token inactive" msgstr "接続トークンがアクティブ化されていません" @@ -3078,15 +3080,15 @@ msgid "Ticket info" msgstr "作業指示情報" #: authentication/serializers/connection_token.py:21 -#: perms/models/asset_permission.py:71 perms/serializers/permission.py:36 -#: perms/serializers/permission.py:56 +#: perms/models/asset_permission.py:76 perms/serializers/permission.py:36 +#: perms/serializers/permission.py:57 #: tickets/models/ticket/apply_application.py:28 #: tickets/models/ticket/apply_asset.py:18 msgid "Actions" msgstr "アクション" #: authentication/serializers/connection_token.py:42 -#: perms/serializers/permission.py:38 perms/serializers/permission.py:57 +#: perms/serializers/permission.py:38 perms/serializers/permission.py:58 #: users/serializers/user.py:97 users/serializers/user.py:171 msgid "Is expired" msgstr "期限切れです" @@ -3107,7 +3109,7 @@ msgid "The {} cannot be empty" msgstr "{} 空にしてはならない" #: authentication/serializers/token.py:86 perms/serializers/permission.py:37 -#: perms/serializers/permission.py:58 users/serializers/user.py:98 +#: perms/serializers/permission.py:59 users/serializers/user.py:98 #: users/serializers/user.py:168 msgid "Is valid" msgstr "有効です" @@ -4199,31 +4201,31 @@ msgstr "終了しました" msgid "Time cost" msgstr "時を過ごす" -#: ops/tasks.py:36 +#: ops/tasks.py:37 msgid "Run ansible task" msgstr "Ansible タスクを実行する" -#: ops/tasks.py:70 +#: ops/tasks.py:71 msgid "Run ansible task execution" msgstr "Ansible タスクの実行を開始する" -#: ops/tasks.py:92 +#: ops/tasks.py:93 msgid "Clear celery periodic tasks" msgstr "タスクログを定期的にクリアする" -#: ops/tasks.py:113 +#: ops/tasks.py:114 msgid "Create or update periodic tasks" msgstr "定期的なタスクの作成または更新" -#: ops/tasks.py:121 +#: ops/tasks.py:122 msgid "Periodic check service performance" msgstr "サービスのパフォーマンスを定期的に確認する" -#: ops/tasks.py:127 +#: ops/tasks.py:128 msgid "Clean up unexpected jobs" msgstr "例外ジョブのクリーンアップ" -#: ops/tasks.py:141 +#: ops/tasks.py:135 msgid "Clean job_execution db record" msgstr "ジョブセンター実行履歴のクリーンアップ" @@ -4359,7 +4361,7 @@ msgstr "転送" msgid "Clipboard" msgstr "クリップボード" -#: perms/models/asset_permission.py:83 +#: perms/models/asset_permission.py:88 msgid "Asset permission" msgstr "資産権限" @@ -4613,7 +4615,7 @@ msgid "My assets" msgstr "私の資産" #: rbac/tree.py:56 terminal/models/applet/applet.py:52 -#: terminal/models/applet/applet.py:300 terminal/models/applet/host.py:29 +#: terminal/models/applet/applet.py:317 terminal/models/applet/host.py:30 #: terminal/serializers/applet.py:15 msgid "Applet" msgstr "リモートアプリケーション" @@ -6344,8 +6346,8 @@ msgstr "カスタムプラットフォームのみをサポート" msgid "Missing type in platform.yml" msgstr "platform.ymlにタイプがありません" -#: terminal/models/applet/applet.py:302 terminal/models/applet/host.py:35 -#: terminal/models/applet/host.py:137 +#: terminal/models/applet/applet.py:319 terminal/models/applet/host.py:36 +#: terminal/models/applet/host.py:138 msgid "Hosting" msgstr "ホスト マシン" @@ -6373,7 +6375,13 @@ msgstr "初期化日" msgid "Date synced" msgstr "同期日" -#: terminal/models/applet/host.py:138 +#: terminal/models/applet/host.py:28 +#, fuzzy +#| msgid "Is service account" +msgid "Using same account" +msgstr "サービスアカウントです" + +#: terminal/models/applet/host.py:139 msgid "Initial" msgstr "初期化" @@ -6701,7 +6709,7 @@ msgstr "RDS 远程应用注销时间限制" msgid "Load status" msgstr "ロードステータス" -#: terminal/serializers/applet_host.py:72 +#: terminal/serializers/applet_host.py:73 msgid "" "These accounts are used to connect to the published application, the account " "is now divided into two types, one is dedicated to each account, each user " @@ -6715,10 +6723,17 @@ msgstr "" "開されています。アプリケーションが複数のオープンをサポートしていない場合、お" "よび特別なものが使用されている場合、公開アカウントが使用されます。" -#: terminal/serializers/applet_host.py:77 +#: terminal/serializers/applet_host.py:80 msgid "The number of public accounts created automatically" msgstr "自動的に作成される公開アカウントの数" +#: terminal/serializers/applet_host.py:83 +msgid "" +"Connect to the host using the same account first. For security reasons, " +"please set the configuration item CACHE_LOGIN_PASSWORD_ENABLED=true and " +"restart the service to enable it." +msgstr "同じアカウントを使用してホストに接続します。セキュリティ上の理由から、構成項目 CACHE_LOGIN_PASSWORD_ENABLED=true を設定してサービスを再起動して有効にしてください。" + #: terminal/serializers/command.py:19 msgid "Session ID" msgstr "セッションID" @@ -7425,7 +7440,7 @@ msgid "Public key should not be the same as your old one." msgstr "公開鍵は古いものと同じであってはなりません。" #: users/forms/profile.py:162 users/serializers/profile.py:76 -#: users/serializers/profile.py:159 users/serializers/profile.py:186 +#: users/serializers/profile.py:164 users/serializers/profile.py:191 msgid "Not a valid ssh public key" msgstr "有効なssh公開鍵ではありません" @@ -7467,7 +7482,7 @@ msgstr "OTP 秘密" msgid "Private key" msgstr "ssh秘密鍵" -#: users/models/user.py:830 users/serializers/profile.py:125 +#: users/models/user.py:830 users/serializers/profile.py:128 #: users/serializers/user.py:166 msgid "Is first login" msgstr "最初のログインです" @@ -7607,7 +7622,7 @@ msgstr "コマンドライン" msgid "The old password is incorrect" msgstr "古いパスワードが正しくありません" -#: users/serializers/profile.py:36 users/serializers/profile.py:173 +#: users/serializers/profile.py:36 users/serializers/profile.py:178 msgid "Password does not match security rules" msgstr "パスワードがセキュリティルールと一致しない" @@ -8596,7 +8611,7 @@ msgstr "ライセンスのインポートに成功" msgid "License is invalid" msgstr "ライセンスが無効です" -#: xpack/plugins/license/meta.py:10 xpack/plugins/license/models.py:140 +#: xpack/plugins/license/meta.py:10 xpack/plugins/license/models.py:144 msgid "License" msgstr "ライセンス" diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo index ca81a92bf..bdc0399a2 100644 --- a/apps/locale/zh/LC_MESSAGES/django.mo +++ b/apps/locale/zh/LC_MESSAGES/django.mo @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9f331dc156c4e51b6a30249da9d342093c79da1cebe926474b7942a5d3b6a931 -size 133436 +oid sha256:8e12c0cc20ed3b5e16cdef15238c78c27d4189740c3c71fdca9cbb20230bec74 +size 133982 diff --git a/apps/locale/zh/LC_MESSAGES/django.po b/apps/locale/zh/LC_MESSAGES/django.po index 3046b298c..5a066450d 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: 2023-10-20 14:50+0800\n" +"POT-Creation-Date: 2023-10-30 11:28+0800\n" "PO-Revision-Date: 2021-05-20 10:54+0800\n" "Last-Translator: ibuler \n" "Language-Team: JumpServer team\n" @@ -226,7 +226,7 @@ msgstr "用户 %s 查看/导出 了密码" #: assets/models/asset/common.py:334 assets/models/cmd_filter.py:36 #: assets/serializers/domain.py:19 assets/serializers/label.py:27 #: audits/models.py:57 authentication/models/connection_token.py:36 -#: perms/models/asset_permission.py:64 perms/serializers/permission.py:34 +#: perms/models/asset_permission.py:68 perms/serializers/permission.py:34 #: terminal/backends/command/models.py:17 terminal/models/session/session.py:31 #: terminal/notifications.py:155 terminal/serializers/command.py:17 #: terminal/serializers/session.py:26 @@ -264,8 +264,8 @@ msgstr "来源 ID" #: accounts/serializers/automations/change_secret.py:127 #: acls/serializers/base.py:124 acls/templates/acls/asset_login_reminder.html:7 #: assets/serializers/asset/common.py:125 assets/serializers/gateway.py:28 -#: audits/models.py:58 authentication/api/connection_token.py:406 -#: ops/models/base.py:18 perms/models/asset_permission.py:70 +#: audits/models.py:58 authentication/api/connection_token.py:407 +#: ops/models/base.py:18 perms/models/asset_permission.py:74 #: perms/serializers/permission.py:39 terminal/backends/command/models.py:18 #: terminal/models/session/session.py:33 #: terminal/templates/terminal/_msg_command_warning.html:8 @@ -311,7 +311,7 @@ msgstr "账号备份计划" #: assets/models/automations/base.py:115 audits/models.py:64 #: ops/models/base.py:55 ops/models/celery.py:63 ops/models/job.py:228 #: ops/templates/ops/celery_task_log.html:75 -#: perms/models/asset_permission.py:72 terminal/models/applet/host.py:140 +#: perms/models/asset_permission.py:77 terminal/models/applet/host.py:141 #: terminal/models/session/session.py:44 #: tickets/models/ticket/apply_application.py:30 #: tickets/models/ticket/apply_asset.py:19 @@ -417,7 +417,7 @@ msgstr "开始日期" #: accounts/models/automations/change_secret.py:42 #: assets/models/automations/base.py:116 ops/models/base.py:56 #: ops/models/celery.py:64 ops/models/job.py:229 -#: terminal/models/applet/host.py:141 +#: terminal/models/applet/host.py:142 msgid "Date finished" msgstr "结束日期" @@ -533,7 +533,7 @@ msgstr "密码规则" #: authentication/serializers/connect_token_secret.py:110 ops/mixin.py:21 #: ops/models/adhoc.py:20 ops/models/celery.py:15 ops/models/celery.py:57 #: ops/models/job.py:126 ops/models/playbook.py:28 ops/serializers/job.py:20 -#: orgs/models.py:82 perms/models/asset_permission.py:56 rbac/models/role.py:29 +#: orgs/models.py:82 perms/models/asset_permission.py:60 rbac/models/role.py:29 #: settings/models.py:32 settings/serializers/msg.py:82 #: terminal/models/applet/applet.py:33 terminal/models/component/endpoint.py:12 #: terminal/models/component/endpoint.py:94 @@ -662,9 +662,9 @@ msgstr "账号存在策略" #: accounts/serializers/account/account.py:190 applications/models.py:11 #: assets/models/label.py:21 assets/models/platform.py:89 -#: assets/serializers/asset/common.py:121 assets/serializers/cagegory.py:8 +#: assets/serializers/asset/common.py:121 assets/serializers/cagegory.py:12 #: assets/serializers/platform.py:133 assets/serializers/platform.py:229 -#: perms/serializers/user_permission.py:26 settings/models.py:34 +#: perms/serializers/user_permission.py:25 settings/models.py:34 #: tickets/models/ticket/apply_application.py:13 users/models/preference.py:12 msgid "Category" msgstr "类别" @@ -678,7 +678,7 @@ msgstr "类别" #: assets/serializers/platform.py:132 audits/serializers.py:50 #: audits/serializers.py:170 #: authentication/serializers/connect_token_secret.py:123 ops/models/job.py:137 -#: perms/serializers/user_permission.py:27 terminal/models/applet/applet.py:39 +#: perms/serializers/user_permission.py:26 terminal/models/applet/applet.py:39 #: terminal/models/component/storage.py:57 #: terminal/models/component/storage.py:146 terminal/serializers/applet.py:29 #: terminal/serializers/session.py:21 terminal/serializers/storage.py:228 @@ -713,7 +713,7 @@ msgstr "已修改" #: acls/templates/acls/asset_login_reminder.html:6 #: assets/models/automations/base.py:19 #: assets/serializers/automations/base.py:20 -#: authentication/api/connection_token.py:405 ops/models/base.py:17 +#: authentication/api/connection_token.py:406 ops/models/base.py:17 #: ops/models/job.py:139 ops/serializers/job.py:21 #: terminal/templates/terminal/_msg_command_execute_alert.html:16 msgid "Assets" @@ -745,7 +745,7 @@ msgstr "ID" #: audits/serializers.py:171 authentication/models/connection_token.py:32 #: authentication/models/sso_token.py:16 #: 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:62 #: perms/serializers/permission.py:30 rbac/builtin.py:124 #: rbac/models/rolebinding.py:49 rbac/serializers/rolebinding.py:17 #: terminal/backends/command/models.py:16 terminal/models/session/session.py:29 @@ -841,7 +841,7 @@ msgstr "关联平台,可配置推送参数,如果不关联,将使用默认 #: assets/models/group.py:20 common/db/models.py:36 ops/models/adhoc.py:26 #: ops/models/job.py:145 ops/models/playbook.py:31 rbac/models/role.py:37 #: settings/models.py:37 terminal/models/applet/applet.py:45 -#: terminal/models/applet/applet.py:304 terminal/models/applet/host.py:142 +#: terminal/models/applet/applet.py:321 terminal/models/applet/host.py:143 #: terminal/models/component/endpoint.py:24 #: terminal/models/component/endpoint.py:104 #: terminal/models/session/session.py:46 tickets/models/comment.py:32 @@ -863,7 +863,7 @@ msgstr "" #: accounts/serializers/automations/base.py:23 #: assets/models/asset/common.py:155 assets/models/automations/base.py:18 #: assets/models/cmd_filter.py:32 assets/serializers/automations/base.py:21 -#: perms/models/asset_permission.py:67 +#: perms/models/asset_permission.py:71 msgid "Nodes" msgstr "节点" @@ -1014,7 +1014,7 @@ msgstr "审批人" #: acls/models/base.py:43 authentication/models/access_key.py:20 #: authentication/models/connection_token.py:53 #: authentication/templates/authentication/_access_key_modal.html:32 -#: perms/models/asset_permission.py:76 terminal/models/session/sharing.py:29 +#: perms/models/asset_permission.py:81 terminal/models/session/sharing.py:29 #: tickets/const.py:37 msgid "Active" msgstr "激活中" @@ -1025,7 +1025,7 @@ msgstr "用户管理" #: acls/models/base.py:98 assets/models/automations/base.py:17 #: assets/models/cmd_filter.py:38 assets/serializers/asset/common.py:377 -#: rbac/tree.py:35 +#: perms/serializers/user_permission.py:75 rbac/tree.py:35 msgid "Accounts" msgstr "账号管理" @@ -1633,7 +1633,7 @@ msgstr "系统平台" #: assets/models/asset/common.py:153 assets/models/domain.py:21 #: authentication/serializers/connect_token_secret.py:133 -#: perms/serializers/user_permission.py:29 xpack/plugins/cloud/models.py:323 +#: perms/serializers/user_permission.py:28 xpack/plugins/cloud/models.py:323 msgid "Domain" msgstr "网域" @@ -1705,9 +1705,9 @@ msgstr "资产自动化任务" #: assets/models/automations/base.py:113 audits/models.py:207 #: audits/serializers.py:51 ops/models/base.py:49 ops/models/job.py:220 -#: terminal/models/applet/applet.py:303 terminal/models/applet/host.py:139 +#: terminal/models/applet/applet.py:320 terminal/models/applet/host.py:140 #: terminal/models/component/status.py:30 terminal/serializers/applet.py:18 -#: terminal/serializers/applet_host.py:115 tickets/models/ticket/general.py:283 +#: terminal/serializers/applet_host.py:124 tickets/models/ticket/general.py:283 #: tickets/serializers/super_ticket.py:13 #: tickets/serializers/ticket/ticket.py:20 xpack/plugins/cloud/models.py:201 #: xpack/plugins/cloud/models.py:257 @@ -1730,7 +1730,7 @@ msgstr "可连接性" msgid "Date verified" msgstr "校验日期" -#: assets/models/cmd_filter.py:28 perms/models/asset_permission.py:61 +#: assets/models/cmd_filter.py:28 perms/models/asset_permission.py:65 #: perms/serializers/permission.py:32 users/models/group.py:25 #: users/models/user.py:798 msgid "User group" @@ -1787,7 +1787,8 @@ msgid "System" msgstr "系统" #: assets/models/label.py:19 assets/models/node.py:539 -#: assets/serializers/cagegory.py:7 assets/serializers/cagegory.py:14 +#: assets/serializers/cagegory.py:11 assets/serializers/cagegory.py:18 +#: assets/serializers/cagegory.py:24 #: authentication/models/connection_token.py:29 #: authentication/serializers/connect_token_secret.py:122 #: common/serializers/common.py:86 settings/models.py:33 @@ -1796,10 +1797,10 @@ msgid "Value" msgstr "值" #: assets/models/label.py:40 assets/serializers/asset/common.py:123 -#: assets/serializers/cagegory.py:6 assets/serializers/cagegory.py:13 -#: assets/serializers/platform.py:112 +#: assets/serializers/cagegory.py:10 assets/serializers/cagegory.py:17 +#: assets/serializers/cagegory.py:23 assets/serializers/platform.py:112 #: authentication/serializers/connect_token_secret.py:121 -#: common/serializers/common.py:85 perms/serializers/user_permission.py:28 +#: common/serializers/common.py:85 perms/serializers/user_permission.py:27 #: settings/serializers/msg.py:83 msgid "Label" msgstr "标签" @@ -1965,7 +1966,8 @@ msgstr "资产中批量更新平台,不符合平台类型跳过的资产" #: assets/serializers/asset/common.py:124 assets/serializers/platform.py:134 #: authentication/serializers/connect_token_secret.py:29 #: authentication/serializers/connect_token_secret.py:72 -#: perms/serializers/user_permission.py:25 xpack/plugins/cloud/models.py:324 +#: perms/models/asset_permission.py:75 perms/serializers/permission.py:40 +#: perms/serializers/user_permission.py:74 xpack/plugins/cloud/models.py:324 #: xpack/plugins/cloud/serializers/task.py:31 msgid "Protocols" msgstr "协议组" @@ -1996,7 +1998,7 @@ msgstr "协议是必填的: {}" msgid "Invalid data" msgstr "无效的数据" -#: assets/serializers/asset/database.py:12 +#: assets/serializers/asset/database.py:13 msgid "Default database" msgstr "默认数据库" @@ -2066,11 +2068,11 @@ msgstr "系统版本" msgid "OS arch" msgstr "系统架构" -#: assets/serializers/cagegory.py:9 +#: assets/serializers/cagegory.py:13 msgid "Constraints" msgstr "约束" -#: assets/serializers/cagegory.py:15 +#: assets/serializers/cagegory.py:19 msgid "Types" msgstr "类型" @@ -2314,7 +2316,7 @@ msgstr "会话日志" msgid "Login log" msgstr "登录日志" -#: audits/const.py:51 terminal/models/applet/host.py:143 +#: audits/const.py:51 terminal/models/applet/host.py:144 #: terminal/models/component/task.py:22 msgid "Task" msgstr "任务" @@ -2454,7 +2456,7 @@ msgid "User %s %s this resource" msgstr "用户 %s %s 了当前资源" #: audits/serializers.py:172 authentication/models/connection_token.py:47 -#: authentication/models/temp_token.py:13 perms/models/asset_permission.py:74 +#: authentication/models/temp_token.py:13 perms/models/asset_permission.py:79 #: tickets/models/ticket/apply_application.py:31 #: tickets/models/ticket/apply_asset.py:20 users/models/user.py:833 msgid "Date expired" @@ -2539,23 +2541,23 @@ msgstr "该操作需要验证您的 MFA, 请先开启并配置" msgid "Reusable connection token is not allowed, global setting not enabled" msgstr "不允许使用可重复使用的连接令牌,未启用全局设置" -#: authentication/api/connection_token.py:375 +#: authentication/api/connection_token.py:376 msgid "Anonymous account is not supported for this asset" msgstr "匿名账号不支持当前资产" -#: authentication/api/connection_token.py:394 +#: authentication/api/connection_token.py:395 msgid "Account not found" msgstr "账号未找到" -#: authentication/api/connection_token.py:397 +#: authentication/api/connection_token.py:398 msgid "Permission expired" msgstr "授权已过期" -#: authentication/api/connection_token.py:427 +#: authentication/api/connection_token.py:428 msgid "ACL action is reject: {}({})" msgstr "ACL 动作是拒绝: {}({})" -#: authentication/api/connection_token.py:431 +#: authentication/api/connection_token.py:432 msgid "ACL action is review" msgstr "ACL 动作是复核" @@ -2958,7 +2960,7 @@ msgid "Reusable" msgstr "可以重复使用" #: authentication/models/connection_token.py:51 -#: perms/models/asset_permission.py:77 +#: perms/models/asset_permission.py:82 msgid "From ticket" msgstr "来自工单" @@ -2974,7 +2976,7 @@ msgstr "可以复用连接令牌" msgid "Connection token" msgstr "连接令牌" -#: authentication/models/connection_token.py:116 +#: authentication/models/connection_token.py:115 msgid "Connection token inactive" msgstr "连接令牌未激活" @@ -3047,15 +3049,15 @@ msgid "Ticket info" msgstr "工单信息" #: authentication/serializers/connection_token.py:21 -#: perms/models/asset_permission.py:71 perms/serializers/permission.py:36 -#: perms/serializers/permission.py:56 +#: perms/models/asset_permission.py:76 perms/serializers/permission.py:36 +#: perms/serializers/permission.py:57 #: tickets/models/ticket/apply_application.py:28 #: tickets/models/ticket/apply_asset.py:18 msgid "Actions" msgstr "动作" #: authentication/serializers/connection_token.py:42 -#: perms/serializers/permission.py:38 perms/serializers/permission.py:57 +#: perms/serializers/permission.py:38 perms/serializers/permission.py:58 #: users/serializers/user.py:97 users/serializers/user.py:171 msgid "Is expired" msgstr "已过期" @@ -3076,7 +3078,7 @@ msgid "The {} cannot be empty" msgstr "{} 不能为空" #: authentication/serializers/token.py:86 perms/serializers/permission.py:37 -#: perms/serializers/permission.py:58 users/serializers/user.py:98 +#: perms/serializers/permission.py:59 users/serializers/user.py:98 #: users/serializers/user.py:168 msgid "Is valid" msgstr "是否有效" @@ -4149,31 +4151,31 @@ msgstr "是否完成" msgid "Time cost" msgstr "花费时间" -#: ops/tasks.py:36 +#: ops/tasks.py:37 msgid "Run ansible task" msgstr "运行 Ansible 任务" -#: ops/tasks.py:70 +#: ops/tasks.py:71 msgid "Run ansible task execution" msgstr "开始执行 Ansible 任务" -#: ops/tasks.py:92 +#: ops/tasks.py:93 msgid "Clear celery periodic tasks" msgstr "清理周期任务" -#: ops/tasks.py:113 +#: ops/tasks.py:114 msgid "Create or update periodic tasks" msgstr "创建或更新周期任务" -#: ops/tasks.py:121 +#: ops/tasks.py:122 msgid "Periodic check service performance" msgstr "周期检测服务性能" -#: ops/tasks.py:127 +#: ops/tasks.py:128 msgid "Clean up unexpected jobs" msgstr "清理异常作业" -#: ops/tasks.py:141 +#: ops/tasks.py:135 msgid "Clean job_execution db record" msgstr "清理作业中心执行历史" @@ -4308,7 +4310,7 @@ msgstr "文件传输" msgid "Clipboard" msgstr "剪贴板" -#: perms/models/asset_permission.py:83 +#: perms/models/asset_permission.py:88 msgid "Asset permission" msgstr "资产授权" @@ -4561,7 +4563,7 @@ msgid "My assets" msgstr "我的资产" #: rbac/tree.py:56 terminal/models/applet/applet.py:52 -#: terminal/models/applet/applet.py:300 terminal/models/applet/host.py:29 +#: terminal/models/applet/applet.py:317 terminal/models/applet/host.py:30 #: terminal/serializers/applet.py:15 msgid "Applet" msgstr "远程应用" @@ -6254,8 +6256,8 @@ msgstr "只支持自定义平台" msgid "Missing type in platform.yml" msgstr "在 platform.yml 中缺少类型" -#: terminal/models/applet/applet.py:302 terminal/models/applet/host.py:35 -#: terminal/models/applet/host.py:137 +#: terminal/models/applet/applet.py:319 terminal/models/applet/host.py:36 +#: terminal/models/applet/host.py:138 msgid "Hosting" msgstr "宿主机" @@ -6283,7 +6285,11 @@ msgstr "初始化日期" msgid "Date synced" msgstr "同步日期" -#: terminal/models/applet/host.py:138 +#: terminal/models/applet/host.py:28 +msgid "Using same account" +msgstr "使用同名账号" + +#: terminal/models/applet/host.py:139 msgid "Initial" msgstr "初始化" @@ -6609,7 +6615,7 @@ msgstr "RDS 远程应用注销时间限制" msgid "Load status" msgstr "负载状态" -#: terminal/serializers/applet_host.py:72 +#: terminal/serializers/applet_host.py:73 msgid "" "These accounts are used to connect to the published application, the account " "is now divided into two types, one is dedicated to each account, each user " @@ -6622,10 +6628,17 @@ msgstr "" "使用公共账号连接;
注意: 如果不开启自动创建账号, 当前发布机仅能被指定标" "签的资产调度到,默认不会放到调度池中" -#: terminal/serializers/applet_host.py:77 +#: terminal/serializers/applet_host.py:80 msgid "The number of public accounts created automatically" msgstr "公用账号自动创建的数量" +#: terminal/serializers/applet_host.py:83 +msgid "" +"Connect to the host using the same account first. For security reasons, " +"please set the configuration item CACHE_LOGIN_PASSWORD_ENABLED=true and " +"restart the service to enable it." +msgstr "优先使用同名账号连接发布机。为了安全,需配置文件中开启配置 CACHE_LOGIN_PASSWORD_ENABLED=true, 修改后重启服务" + #: terminal/serializers/command.py:19 msgid "Session ID" msgstr "会话ID" @@ -7323,7 +7336,7 @@ msgid "Public key should not be the same as your old one." msgstr "不能和原来的密钥相同" #: users/forms/profile.py:162 users/serializers/profile.py:76 -#: users/serializers/profile.py:159 users/serializers/profile.py:186 +#: users/serializers/profile.py:164 users/serializers/profile.py:191 msgid "Not a valid ssh public key" msgstr "SSH密钥不合法" @@ -7365,7 +7378,7 @@ msgstr "OTP 密钥" msgid "Private key" msgstr "ssh私钥" -#: users/models/user.py:830 users/serializers/profile.py:125 +#: users/models/user.py:830 users/serializers/profile.py:128 #: users/serializers/user.py:166 msgid "Is first login" msgstr "首次登录" @@ -7505,7 +7518,7 @@ msgstr "命令行" msgid "The old password is incorrect" msgstr "旧密码错误" -#: users/serializers/profile.py:36 users/serializers/profile.py:173 +#: users/serializers/profile.py:36 users/serializers/profile.py:178 msgid "Password does not match security rules" msgstr "密码不满足安全规则" @@ -8478,7 +8491,7 @@ msgstr "许可证导入成功" msgid "License is invalid" msgstr "无效的许可证" -#: xpack/plugins/license/meta.py:10 xpack/plugins/license/models.py:140 +#: xpack/plugins/license/meta.py:10 xpack/plugins/license/models.py:144 msgid "License" msgstr "许可证" diff --git a/apps/terminal/migrations/0066_applethost_using_same_account.py b/apps/terminal/migrations/0066_applethost_using_same_account.py new file mode 100644 index 000000000..467eaab6d --- /dev/null +++ b/apps/terminal/migrations/0066_applethost_using_same_account.py @@ -0,0 +1,18 @@ +# Generated by Django 4.1.10 on 2023-10-30 03:08 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('terminal', '0065_session_error_reason'), + ] + + operations = [ + migrations.AddField( + model_name='applethost', + name='using_same_account', + field=models.BooleanField(default=False, verbose_name='Using same account'), + ), + ] diff --git a/apps/terminal/models/applet/applet.py b/apps/terminal/models/applet/applet.py index 4106f6678..5ab59086d 100644 --- a/apps/terminal/models/applet/applet.py +++ b/apps/terminal/models/applet/applet.py @@ -258,6 +258,15 @@ class Applet(JMSBaseModel): account = private_account return account + @staticmethod + def try_to_use_same_account(user, host): + from accounts.models import VirtualAccount + + if not host.using_same_account: + return + account = VirtualAccount.get_same_account(user, host) + return account + def select_host_account(self, user, asset): # 选择激活的发布机 host = self.select_host(user, asset) @@ -266,7 +275,11 @@ class Applet(JMSBaseModel): logger.info('Select applet host: {}'.format(host.name)) valid_accounts = host.accounts.all().filter(is_active=True, privileged=False) - account = self.try_to_use_private_account(user, host, valid_accounts) + account = self.try_to_use_same_account(user, host) + if not account: + logger.debug('No same account, try to use private account') + account = self.try_to_use_private_account(user, host, valid_accounts) + if not account: logger.debug('No private account, try to use public account') account = self.select_a_public_account(user, host, valid_accounts) diff --git a/apps/terminal/models/applet/host.py b/apps/terminal/models/applet/host.py index d7f5a9a6a..118cb05a9 100644 --- a/apps/terminal/models/applet/host.py +++ b/apps/terminal/models/applet/host.py @@ -25,6 +25,7 @@ class AppletHost(Host): 'terminal.Terminal', on_delete=models.PROTECT, null=True, blank=True, related_name='applet_host', verbose_name=_('Terminal') ) + using_same_account = models.BooleanField(default=False, verbose_name=_('Using same account')) applets = models.ManyToManyField( 'Applet', verbose_name=_('Applet'), through='AppletPublication', through_fields=('host', 'applet'), diff --git a/apps/terminal/serializers/applet_host.py b/apps/terminal/serializers/applet_host.py index 221c093d2..e3e435d76 100644 --- a/apps/terminal/serializers/applet_host.py +++ b/apps/terminal/serializers/applet_host.py @@ -63,18 +63,27 @@ class AppletHostSerializer(HostSerializer): model = AppletHost fields = HostSerializer.Meta.fields + [ 'auto_create_accounts', 'accounts_create_amount', - 'load', 'date_synced', 'deploy_options' + 'load', 'date_synced', 'deploy_options', 'using_same_account', ] extra_kwargs = { **HostSerializer.Meta.extra_kwargs, 'date_synced': {'read_only': True}, - 'auto_create_accounts': {'help_text': _( - 'These accounts are used to connect to the published application, ' - 'the account is now divided into two types, one is dedicated to each account, ' - 'each user has a private account, the other is public, ' - 'when the application does not support multiple open and the special has been used, ' - 'the public account will be used to connect')}, + 'auto_create_accounts': { + 'help_text': _( + 'These accounts are used to connect to the published application, ' + 'the account is now divided into two types, one is dedicated to each account, ' + 'each user has a private account, the other is public, ' + 'when the application does not support multiple open and the special has been used, ' + 'the public account will be used to connect' + ) + }, 'accounts_create_amount': {'help_text': _('The number of public accounts created automatically')}, + 'using_same_account': { + 'help_text': _( + 'Connect to the host using the same account first. For security reasons, please set the ' + 'configuration item CACHE_LOGIN_PASSWORD_ENABLED=true and restart the service to enable it.' + ) + } } def __init__(self, *args, data=None, **kwargs): diff --git a/apps/terminal/signal_handlers/applet.py b/apps/terminal/signal_handlers/applet.py index 9dd4a3589..99eb2fca7 100644 --- a/apps/terminal/signal_handlers/applet.py +++ b/apps/terminal/signal_handlers/applet.py @@ -2,7 +2,8 @@ from django.db.models.signals import post_save, post_delete from django.dispatch import receiver from django.utils.functional import LazyObject -from accounts.models import Account +from accounts.const import AliasAccount +from accounts.models import Account, VirtualAccount from common.decorators import on_transaction_commit from common.signals import django_ready from common.utils import get_logger @@ -24,14 +25,28 @@ def on_applet_host_create(sender, instance, created=False, **kwargs): return # 新建时,清除原来的首选,避免一直调度到一个上面 Applet.clear_host_prefer() - applets = Applet.objects.all() instance.applets.set(applets) - applet_host_change_pub_sub.publish(True) + + +@receiver(post_save, sender=AppletHost) +@on_transaction_commit +def on_applet_host_update_or_create(sender, instance, created=False, **kwargs): if instance.auto_create_accounts: applet_host_generate_accounts.delay(instance.id) + # 使用同名账号的,直接给他打开登录那项吧 + if instance.using_same_account: + alias = AliasAccount.USER.value + same_account, __ = VirtualAccount.objects.get_or_create( + alias=alias, defaults={'alias': alias, 'secret_from_login': True} + ) + if same_account.secret_from_login: + return + same_account.secret_from_login = True + same_account.save(update_fields=['secret_from_login']) + @receiver(post_save, sender=User) def on_user_create_create_account(sender, instance: User, created=False, **kwargs):