From b5ac5c5670b8964c34ac9aa2285ca760ecdec73c Mon Sep 17 00:00:00 2001 From: ibuler Date: Tue, 17 May 2022 21:17:17 +0800 Subject: [PATCH 01/21] =?UTF-8?q?perf:=20domain=20gateway=20=E4=B9=9F?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/serializers/domain.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/assets/serializers/domain.py b/apps/assets/serializers/domain.py index 6932572f8..fa1a39574 100644 --- a/apps/assets/serializers/domain.py +++ b/apps/assets/serializers/domain.py @@ -5,6 +5,7 @@ from django.utils.translation import ugettext_lazy as _ from common.validators import alphanumeric from orgs.mixins.serializers import BulkOrgResourceModelSerializer +from common.drf.serializers import SecretReadableMixin from ..models import Domain, Gateway from .base import AuthSerializerMixin @@ -67,7 +68,7 @@ class GatewaySerializer(AuthSerializerMixin, BulkOrgResourceModelSerializer): } -class GatewayWithAuthSerializer(GatewaySerializer): +class GatewayWithAuthSerializer(SecretReadableMixin, GatewaySerializer): class Meta(GatewaySerializer.Meta): extra_kwargs = { 'password': {'write_only': False}, From c2fbe5c75a98aa07bf7e016088de0a063f295727 Mon Sep 17 00:00:00 2001 From: feng626 <1304903146@qq.com> Date: Wed, 18 May 2022 19:52:22 +0800 Subject: [PATCH 02/21] =?UTF-8?q?fix:=20=E4=B8=8D=E6=94=AF=E6=8C=81es8=20?= =?UTF-8?q?=E6=8F=90=E7=A4=BA?= 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 | 4 ++++ apps/locale/zh/LC_MESSAGES/django.mo | 4 ++-- apps/locale/zh/LC_MESSAGES/django.po | 4 ++++ apps/terminal/backends/command/es.py | 14 ++++++++++++-- 5 files changed, 24 insertions(+), 6 deletions(-) diff --git a/apps/locale/ja/LC_MESSAGES/django.mo b/apps/locale/ja/LC_MESSAGES/django.mo index b6af2bdf7..29bcfa164 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:843b6dffe6af09073053e21f65be4c8264e6dee05509b375c8191dde8c9079b6 -size 127386 +oid sha256:5effe3cb5eb97d51bf886d21dfbe785bb789722f30774a6595eac7aa79b6315a +size 127478 diff --git a/apps/locale/ja/LC_MESSAGES/django.po b/apps/locale/ja/LC_MESSAGES/django.po index 6b97b95d0..c976bf085 100644 --- a/apps/locale/ja/LC_MESSAGES/django.po +++ b/apps/locale/ja/LC_MESSAGES/django.po @@ -4651,6 +4651,10 @@ msgstr "ターミナル管理" msgid "Invalid elasticsearch config" msgstr "無効なElasticsearch構成" +#: terminal/backends/command/es.py:33 +msgid "Not Support Elasticsearch8" +msgstr "サポートされていません Elasticsearch8" + #: terminal/backends/command/models.py:16 msgid "Ordinary" msgstr "普通" diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo index 88b5034ea..317e02a96 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:a78975a5a6669bfcc0f99bc4d47811be82a0620e873e51e4a17d06548e3b1e7f -size 105269 +oid sha256:d30f8d3abc215c35bb2dd889374eeef896a193f8010ccd5ae8e27aa408f045c7 +size 105337 diff --git a/apps/locale/zh/LC_MESSAGES/django.po b/apps/locale/zh/LC_MESSAGES/django.po index 20a071d1c..8dee918fb 100644 --- a/apps/locale/zh/LC_MESSAGES/django.po +++ b/apps/locale/zh/LC_MESSAGES/django.po @@ -4579,6 +4579,10 @@ msgstr "终端管理" msgid "Invalid elasticsearch config" msgstr "无效的 Elasticsearch 配置" +#: terminal/backends/command/es.py:33 +msgid "Not Support Elasticsearch8" +msgstr "不支持 Elasticsearch8" + #: terminal/backends/command/models.py:16 msgid "Ordinary" msgstr "普通" diff --git a/apps/terminal/backends/command/es.py b/apps/terminal/backends/command/es.py index 997bd30fd..ae76b2974 100644 --- a/apps/terminal/backends/command/es.py +++ b/apps/terminal/backends/command/es.py @@ -28,6 +28,11 @@ class InvalidElasticsearch(JMSException): default_detail = _('Invalid elasticsearch config') +class NotSupportElasticsearch8(JMSException): + default_code = 'not_support_elasticsearch8' + default_detail = _('Not Support Elasticsearch8') + + class CommandStore(object): def __init__(self, config): self.doc_type = config.get("DOC_TYPE") or '_doc' @@ -68,13 +73,18 @@ class CommandStore(object): if not self.ping(timeout=3): return False + info = self.es.info() + version = info['version']['number'].split('.')[0] + + if version == '8': + raise NotSupportElasticsearch8 + try: # 获取索引信息,如果没有定义,直接返回 data = self.es.indices.get_mapping(self.index) except NotFoundError: return False - info = self.es.info() - version = info['version']['number'].split('.')[0] + try: if version == '6': # 检测索引是不是新的类型 es6 From 70fcbfe883b6b07f09ba0d701389aa4812e9cc2d Mon Sep 17 00:00:00 2001 From: feng626 <1304903146@qq.com> Date: Tue, 14 Jun 2022 16:03:42 +0800 Subject: [PATCH 03/21] =?UTF-8?q?perf:=20=E6=8E=88=E6=9D=83=E8=BF=87?= =?UTF-8?q?=E6=9C=9F=E9=80=9A=E7=9F=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 | 366 +++++++++--------- apps/locale/zh/LC_MESSAGES/django.mo | 4 +- apps/locale/zh/LC_MESSAGES/django.po | 353 ++++++++--------- apps/locale/zh/LC_MESSAGES/djangojs.po | 1 - apps/perms/notifications.py | 15 +- apps/perms/tasks.py | 64 ++- .../perms/_msg_item_permissions_expire.html | 2 +- .../perms/_msg_permed_items_expire.html | 2 +- 9 files changed, 430 insertions(+), 381 deletions(-) diff --git a/apps/locale/ja/LC_MESSAGES/django.mo b/apps/locale/ja/LC_MESSAGES/django.mo index 2f0a7842c..50947cea2 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:82cdb805f6d681577806fb6fc41178b5dd28eafc68b1348f433ba7f7f5ce9920 -size 127478 +oid sha256:8a0e0ef94fd1cf5b3d41c378b54e8af2fb502c7f1e9d6a3e54084e8113978561 +size 127495 diff --git a/apps/locale/ja/LC_MESSAGES/django.po b/apps/locale/ja/LC_MESSAGES/django.po index 2d7a87994..11310178e 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: 2022-05-31 16:02+0800\n" +"POT-Creation-Date: 2022-06-14 15:48+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -38,12 +38,12 @@ msgid "Name" msgstr "名前" #: acls/models/base.py:27 assets/models/cmd_filter.py:84 -#: assets/models/user.py:247 terminal/models/endpoint.py:62 +#: assets/models/user.py:251 terminal/models/endpoint.py:62 msgid "Priority" msgstr "優先順位" #: acls/models/base.py:28 assets/models/cmd_filter.py:84 -#: assets/models/user.py:247 terminal/models/endpoint.py:63 +#: assets/models/user.py:251 terminal/models/endpoint.py:63 msgid "1-100, the lower the value will be match first" msgstr "1-100、低い値は最初に一致します" @@ -93,8 +93,8 @@ msgstr "ログイン確認" #: terminal/backends/command/models.py:20 #: terminal/backends/command/serializers.py:12 terminal/models/session.py:44 #: terminal/notifications.py:91 terminal/notifications.py:139 -#: tickets/models/comment.py:17 users/const.py:14 users/models/user.py:883 -#: users/models/user.py:914 users/serializers/group.py:19 +#: tickets/models/comment.py:17 users/const.py:14 users/models/user.py:888 +#: users/models/user.py:919 users/serializers/group.py:19 msgid "User" msgstr "ユーザー" @@ -129,7 +129,7 @@ msgstr "システムユーザー" #: assets/models/asset.py:386 assets/models/authbook.py:19 #: assets/models/backup.py:31 assets/models/cmd_filter.py:38 #: assets/models/gathered_user.py:14 assets/serializers/label.py:30 -#: assets/serializers/system_user.py:269 audits/models.py:39 +#: assets/serializers/system_user.py:268 audits/models.py:39 #: perms/models/asset_permission.py:23 terminal/backends/command/models.py:21 #: terminal/backends/command/serializers.py:13 terminal/models/session.py:46 #: terminal/notifications.py:90 @@ -179,7 +179,7 @@ msgstr "" #: acls/serializers/login_asset_acl.py:31 acls/serializers/rules/rules.py:33 #: applications/serializers/attrs/application_type/mysql_workbench.py:18 #: assets/models/asset.py:210 assets/models/domain.py:60 -#: assets/serializers/account.py:14 +#: assets/serializers/account.py:13 #: authentication/templates/authentication/_msg_oauth_bind.html:12 #: authentication/templates/authentication/_msg_rest_password_success.html:8 #: authentication/templates/authentication/_msg_rest_public_key_success.html:8 @@ -188,7 +188,7 @@ msgid "IP" msgstr "IP" #: acls/serializers/login_asset_acl.py:35 assets/models/asset.py:211 -#: assets/serializers/account.py:15 assets/serializers/gathered_user.py:23 +#: assets/serializers/account.py:14 assets/serializers/gathered_user.py:23 #: settings/serializers/terminal.py:7 msgid "Hostname" msgstr "ホスト名" @@ -202,7 +202,7 @@ msgstr "" "ション: {}" #: acls/serializers/login_asset_acl.py:55 assets/models/asset.py:213 -#: assets/models/domain.py:62 assets/models/user.py:248 +#: assets/models/domain.py:62 assets/models/user.py:252 #: terminal/serializers/session.py:30 terminal/serializers/storage.py:68 msgid "Protocol" msgstr "プロトコル" @@ -265,7 +265,7 @@ msgid "Application" msgstr "アプリケーション" #: applications/models/account.py:15 assets/models/authbook.py:20 -#: assets/models/cmd_filter.py:42 assets/models/user.py:338 audits/models.py:40 +#: assets/models/cmd_filter.py:42 assets/models/user.py:342 audits/models.py:40 #: perms/models/application_permission.py:33 #: perms/models/asset_permission.py:25 terminal/backends/command/models.py:22 #: terminal/backends/command/serializers.py:35 terminal/models/session.py:48 @@ -303,7 +303,7 @@ msgstr "カテゴリ" #: applications/models/application.py:222 #: applications/serializers/application.py:101 assets/models/backup.py:49 -#: assets/models/cmd_filter.py:82 assets/models/user.py:246 +#: assets/models/cmd_filter.py:82 assets/models/user.py:250 #: perms/models/application_permission.py:24 #: perms/serializers/application/user_permission.py:34 #: terminal/models/storage.py:57 terminal/models/storage.py:141 @@ -341,7 +341,7 @@ msgstr "カテゴリ表示" #: applications/serializers/application.py:71 #: applications/serializers/application.py:102 -#: assets/serializers/cmd_filter.py:34 assets/serializers/system_user.py:29 +#: assets/serializers/cmd_filter.py:34 assets/serializers/system_user.py:34 #: audits/serializers.py:29 perms/serializers/application/permission.py:19 #: tickets/serializers/ticket/meta/ticket_type/apply_application.py:33 #: tickets/serializers/ticket/ticket.py:21 @@ -353,17 +353,17 @@ msgstr "タイプ表示" #: assets/models/base.py:181 assets/models/cluster.py:26 #: assets/models/domain.py:26 assets/models/gathered_user.py:19 #: assets/models/group.py:22 assets/models/label.py:25 -#: assets/serializers/account.py:19 assets/serializers/cmd_filter.py:28 +#: assets/serializers/account.py:18 assets/serializers/cmd_filter.py:28 #: assets/serializers/cmd_filter.py:48 common/db/models.py:113 #: common/mixins/models.py:50 ops/models/adhoc.py:39 ops/models/command.py:30 #: orgs/models.py:67 orgs/models.py:217 perms/models/base.py:92 -#: users/models/group.py:18 users/models/user.py:915 +#: users/models/group.py:18 users/models/user.py:920 #: xpack/plugins/cloud/models.py:125 msgid "Date created" msgstr "作成された日付" #: applications/serializers/application.py:104 assets/models/base.py:182 -#: assets/models/gathered_user.py:20 assets/serializers/account.py:22 +#: assets/models/gathered_user.py:20 assets/serializers/account.py:21 #: assets/serializers/cmd_filter.py:29 assets/serializers/cmd_filter.py:49 #: common/db/models.py:114 common/mixins/models.py:51 ops/models/adhoc.py:40 #: orgs/models.py:218 @@ -413,7 +413,7 @@ msgid "Application path" msgstr "アプリケーションパス" #: applications/serializers/attrs/application_category/remote_app.py:44 -#: assets/serializers/system_user.py:168 +#: assets/serializers/system_user.py:167 #: xpack/plugins/change_auth_plan/serializers/asset.py:67 #: xpack/plugins/change_auth_plan/serializers/asset.py:70 #: xpack/plugins/change_auth_plan/serializers/asset.py:73 @@ -510,7 +510,7 @@ msgid "Internal" msgstr "内部" #: assets/models/asset.py:162 assets/models/asset.py:216 -#: assets/serializers/account.py:16 assets/serializers/asset.py:63 +#: assets/serializers/account.py:15 assets/serializers/asset.py:63 #: perms/serializers/asset/user_permission.py:43 msgid "Platform" msgstr "プラットフォーム" @@ -571,13 +571,13 @@ msgstr "システムアーキテクチャ" msgid "Hostname raw" msgstr "ホスト名生" -#: assets/models/asset.py:215 assets/serializers/account.py:17 +#: assets/models/asset.py:215 assets/serializers/account.py:16 #: assets/serializers/asset.py:65 perms/serializers/asset/user_permission.py:41 #: xpack/plugins/cloud/models.py:107 xpack/plugins/cloud/serializers/task.py:42 msgid "Protocols" msgstr "プロトコル" -#: assets/models/asset.py:218 assets/models/user.py:238 +#: assets/models/asset.py:218 assets/models/user.py:242 #: perms/models/asset_permission.py:24 #: xpack/plugins/change_auth_plan/models/asset.py:43 #: xpack/plugins/gathered_user/models.py:24 @@ -590,7 +590,7 @@ msgid "Is active" msgstr "アクティブです。" #: assets/models/asset.py:222 assets/models/cluster.py:19 -#: assets/models/user.py:235 assets/models/user.py:390 +#: assets/models/user.py:239 assets/models/user.py:394 msgid "Admin user" msgstr "管理ユーザー" @@ -759,9 +759,9 @@ msgstr "接続性" msgid "Date verified" msgstr "確認済みの日付" -#: assets/models/base.py:177 assets/serializers/base.py:14 -#: assets/serializers/base.py:36 audits/signal_handlers.py:48 -#: authentication/forms.py:32 +#: assets/models/base.py:177 assets/serializers/base.py:15 +#: assets/serializers/base.py:37 assets/serializers/system_user.py:29 +#: audits/signal_handlers.py:50 authentication/forms.py:32 #: authentication/templates/authentication/login.html:182 #: settings/serializers/auth/ldap.py:25 settings/serializers/auth/ldap.py:46 #: users/forms/profile.py:22 users/serializers/user.py:92 @@ -776,7 +776,7 @@ msgstr "確認済みの日付" msgid "Password" msgstr "パスワード" -#: assets/models/base.py:178 assets/serializers/base.py:39 +#: assets/models/base.py:178 assets/serializers/base.py:41 #: xpack/plugins/change_auth_plan/models/asset.py:53 #: xpack/plugins/change_auth_plan/models/asset.py:130 #: xpack/plugins/change_auth_plan/models/asset.py:206 @@ -823,7 +823,7 @@ msgid "Default" msgstr "デフォルト" #: assets/models/cluster.py:36 assets/models/label.py:14 rbac/const.py:6 -#: users/models/user.py:900 +#: users/models/user.py:905 msgid "System" msgstr "システム" @@ -961,7 +961,7 @@ msgstr "フルバリュー" msgid "Parent key" msgstr "親キー" -#: assets/models/node.py:559 assets/serializers/system_user.py:268 +#: assets/models/node.py:559 assets/serializers/system_user.py:267 #: xpack/plugins/cloud/models.py:96 xpack/plugins/cloud/serializers/task.py:69 msgid "Node" msgstr "ノード" @@ -970,78 +970,78 @@ msgstr "ノード" msgid "Can match node" msgstr "ノードを一致させることができます" -#: assets/models/user.py:229 +#: assets/models/user.py:233 msgid "Automatic managed" msgstr "自動管理" -#: assets/models/user.py:230 +#: assets/models/user.py:234 msgid "Manually input" msgstr "手動入力" -#: assets/models/user.py:234 +#: assets/models/user.py:238 msgid "Common user" msgstr "共通ユーザー" -#: assets/models/user.py:237 +#: assets/models/user.py:241 msgid "Username same with user" msgstr "ユーザーと同じユーザー名" -#: assets/models/user.py:240 assets/serializers/domain.py:30 +#: assets/models/user.py:244 assets/serializers/domain.py:30 #: terminal/templates/terminal/_msg_command_execute_alert.html:16 #: xpack/plugins/change_auth_plan/models/asset.py:39 msgid "Assets" msgstr "資産" -#: assets/models/user.py:244 users/apps.py:9 +#: assets/models/user.py:248 users/apps.py:9 msgid "Users" msgstr "ユーザー" -#: assets/models/user.py:245 +#: assets/models/user.py:249 msgid "User groups" msgstr "ユーザーグループ" -#: assets/models/user.py:249 +#: assets/models/user.py:253 msgid "Auto push" msgstr "オートプッシュ" -#: assets/models/user.py:250 +#: assets/models/user.py:254 msgid "Sudo" msgstr "すど" -#: assets/models/user.py:251 +#: assets/models/user.py:255 msgid "Shell" msgstr "シェル" -#: assets/models/user.py:252 +#: assets/models/user.py:256 msgid "Login mode" msgstr "ログインモード" -#: assets/models/user.py:253 +#: assets/models/user.py:257 msgid "SFTP Root" msgstr "SFTPルート" -#: assets/models/user.py:254 assets/serializers/system_user.py:32 +#: assets/models/user.py:258 assets/serializers/system_user.py:37 #: authentication/models.py:49 msgid "Token" msgstr "トークン" -#: assets/models/user.py:255 +#: assets/models/user.py:259 msgid "Home" msgstr "ホーム" -#: assets/models/user.py:256 +#: assets/models/user.py:260 msgid "System groups" msgstr "システムグループ" -#: assets/models/user.py:259 +#: assets/models/user.py:263 msgid "User switch" msgstr "ユーザースイッチ" -#: assets/models/user.py:260 +#: assets/models/user.py:264 msgid "Switch from" msgstr "から切り替え" -#: assets/models/user.py:340 +#: assets/models/user.py:344 msgid "Can match system user" msgstr "システムユーザーに一致できます" @@ -1072,7 +1072,7 @@ msgstr "" "されていません-個人情報にアクセスしてください-> ファイル暗号化パスワードを設" "定してください暗号化パスワード" -#: assets/serializers/account.py:41 assets/serializers/account.py:84 +#: assets/serializers/account.py:36 assets/serializers/account.py:79 msgid "System user display" msgstr "システムユーザー表示" @@ -1127,15 +1127,15 @@ msgstr "定期的なパフォーマンス" msgid "Currently only mail sending is supported" msgstr "現在、メール送信のみがサポートされています" -#: assets/serializers/base.py:15 users/models/user.py:689 +#: assets/serializers/base.py:16 users/models/user.py:689 msgid "Private key" msgstr "ssh秘密鍵" -#: assets/serializers/base.py:43 +#: assets/serializers/base.py:45 msgid "Key password" msgstr "キーパスワード" -#: assets/serializers/base.py:56 +#: assets/serializers/base.py:58 msgid "private key invalid or passphrase error" msgstr "秘密鍵が無効またはpassphraseエラー" @@ -1148,7 +1148,7 @@ msgid "Pattern" msgstr "パターン" #: assets/serializers/domain.py:14 assets/serializers/label.py:12 -#: assets/serializers/system_user.py:64 +#: assets/serializers/system_user.py:63 #: perms/serializers/asset/permission.py:49 msgid "Assets amount" msgstr "資産額" @@ -1173,78 +1173,78 @@ msgstr "含まれない:/" msgid "The same level node name cannot be the same" msgstr "同じレベルのノード名を同じにすることはできません。" -#: assets/serializers/system_user.py:30 +#: assets/serializers/system_user.py:35 msgid "SSH key fingerprint" msgstr "SSHキー指紋" -#: assets/serializers/system_user.py:35 +#: assets/serializers/system_user.py:40 #: perms/serializers/application/permission.py:46 msgid "Apps amount" msgstr "アプリの量" -#: assets/serializers/system_user.py:63 +#: assets/serializers/system_user.py:62 #: perms/serializers/asset/permission.py:50 msgid "Nodes amount" msgstr "ノード量" -#: assets/serializers/system_user.py:65 assets/serializers/system_user.py:270 +#: assets/serializers/system_user.py:64 assets/serializers/system_user.py:269 msgid "Login mode display" msgstr "ログインモード表示" -#: assets/serializers/system_user.py:67 +#: assets/serializers/system_user.py:66 msgid "Ad domain" msgstr "広告ドメイン" -#: assets/serializers/system_user.py:68 +#: assets/serializers/system_user.py:67 msgid "Is asset protocol" msgstr "資産プロトコルです" -#: assets/serializers/system_user.py:69 +#: assets/serializers/system_user.py:68 msgid "Only ssh and automatic login system users are supported" msgstr "sshと自動ログインシステムのユーザーのみがサポートされています" -#: assets/serializers/system_user.py:109 +#: assets/serializers/system_user.py:108 msgid "Username same with user with protocol {} only allow 1" msgstr "プロトコル {} のユーザーと同じユーザー名は1のみ許可します" -#: assets/serializers/system_user.py:122 common/validators.py:14 +#: assets/serializers/system_user.py:121 common/validators.py:14 msgid "Special char not allowed" msgstr "特別なcharは許可されていません" -#: assets/serializers/system_user.py:132 +#: assets/serializers/system_user.py:131 msgid "* Automatic login mode must fill in the username." msgstr "* 自動ログインモードはユーザー名を入力する必要があります。" -#: assets/serializers/system_user.py:147 +#: assets/serializers/system_user.py:146 msgid "Path should starts with /" msgstr "パスは/で始まる必要があります" -#: assets/serializers/system_user.py:159 +#: assets/serializers/system_user.py:158 msgid "Password or private key required" msgstr "パスワードまたは秘密鍵が必要" -#: assets/serializers/system_user.py:173 +#: assets/serializers/system_user.py:172 msgid "Only ssh protocol system users are allowed" msgstr "Sshプロトコルシステムユーザーのみが許可されています" -#: assets/serializers/system_user.py:177 +#: assets/serializers/system_user.py:176 msgid "The protocol must be consistent with the current user: {}" msgstr "プロトコルは現在のユーザーと一致している必要があります: {}" -#: assets/serializers/system_user.py:181 +#: assets/serializers/system_user.py:180 msgid "Only system users with automatic login are allowed" msgstr "自動ログインを持つシステムユーザーのみが許可されます" -#: assets/serializers/system_user.py:289 +#: assets/serializers/system_user.py:288 msgid "System user name" msgstr "システムユーザー名" -#: assets/serializers/system_user.py:290 orgs/mixins/serializers.py:26 +#: assets/serializers/system_user.py:289 orgs/mixins/serializers.py:26 #: rbac/serializers/rolebinding.py:23 msgid "Org name" msgstr "組織名" -#: assets/serializers/system_user.py:299 +#: assets/serializers/system_user.py:298 msgid "Asset hostname" msgstr "資産ホスト名" @@ -1313,24 +1313,24 @@ msgstr "" "セルフチェックのタスクはすでに実行されており、繰り返し開始することはできませ" "ん" -#: assets/tasks/push_system_user.py:200 +#: assets/tasks/push_system_user.py:201 msgid "System user is dynamic: {}" msgstr "システムユーザーは動的です: {}" -#: assets/tasks/push_system_user.py:241 +#: assets/tasks/push_system_user.py:242 msgid "Start push system user for platform: [{}]" msgstr "プラットフォームのプッシュシステムユーザーを開始: [{}]" -#: assets/tasks/push_system_user.py:242 +#: assets/tasks/push_system_user.py:243 #: assets/tasks/system_user_connectivity.py:106 msgid "Hosts count: {}" msgstr "ホスト数: {}" -#: assets/tasks/push_system_user.py:263 assets/tasks/push_system_user.py:296 +#: assets/tasks/push_system_user.py:264 assets/tasks/push_system_user.py:297 msgid "Push system users to assets: " msgstr "システムユーザーを資産にプッシュする:" -#: assets/tasks/push_system_user.py:275 +#: assets/tasks/push_system_user.py:276 msgid "Push system users to asset: " msgstr "システムユーザーをアセットにプッシュする:" @@ -1562,202 +1562,216 @@ msgstr "ディスプレイとして実行する" msgid "User display" msgstr "ユーザー表示" -#: audits/signal_handlers.py:47 +#: audits/signal_handlers.py:49 msgid "SSH Key" msgstr "SSHキー" -#: audits/signal_handlers.py:49 +#: audits/signal_handlers.py:51 msgid "SSO" msgstr "SSO" -#: audits/signal_handlers.py:50 +#: audits/signal_handlers.py:52 msgid "Auth Token" msgstr "認証トークン" -#: audits/signal_handlers.py:51 authentication/notifications.py:73 -#: authentication/views/login.py:164 authentication/views/wecom.py:182 +#: audits/signal_handlers.py:53 authentication/notifications.py:73 +#: authentication/views/login.py:164 authentication/views/wecom.py:177 #: notifications/backends/__init__.py:11 users/models/user.py:720 msgid "WeCom" msgstr "企業微信" -#: audits/signal_handlers.py:52 authentication/views/dingtalk.py:183 +#: audits/signal_handlers.py:54 authentication/views/dingtalk.py:179 #: authentication/views/login.py:170 notifications/backends/__init__.py:12 #: users/models/user.py:721 msgid "DingTalk" msgstr "DingTalk" -#: audits/signal_handlers.py:53 authentication/models.py:76 +#: audits/signal_handlers.py:55 authentication/models.py:76 msgid "Temporary token" msgstr "仮パスワード" -#: audits/signal_handlers.py:65 +#: audits/signal_handlers.py:67 msgid "User and Group" msgstr "ユーザーとグループ" -#: audits/signal_handlers.py:66 +#: audits/signal_handlers.py:68 #, python-brace-format msgid "{User} JOINED {UserGroup}" msgstr "{User} に参加 {UserGroup}" -#: audits/signal_handlers.py:67 +#: audits/signal_handlers.py:69 #, python-brace-format msgid "{User} LEFT {UserGroup}" msgstr "{User} のそばを通る {UserGroup}" -#: audits/signal_handlers.py:70 +#: audits/signal_handlers.py:72 msgid "Asset and SystemUser" msgstr "資産およびシステム・ユーザー" -#: audits/signal_handlers.py:71 +#: audits/signal_handlers.py:73 #, python-brace-format msgid "{Asset} ADD {SystemUser}" msgstr "{Asset} 追加 {SystemUser}" -#: audits/signal_handlers.py:72 +#: audits/signal_handlers.py:74 #, python-brace-format msgid "{Asset} REMOVE {SystemUser}" msgstr "{Asset} 削除 {SystemUser}" -#: audits/signal_handlers.py:75 +#: audits/signal_handlers.py:77 msgid "Node and Asset" msgstr "ノードと資産" -#: audits/signal_handlers.py:76 +#: audits/signal_handlers.py:78 #, python-brace-format msgid "{Node} ADD {Asset}" msgstr "{Node} 追加 {Asset}" -#: audits/signal_handlers.py:77 +#: audits/signal_handlers.py:79 #, python-brace-format msgid "{Node} REMOVE {Asset}" msgstr "{Node} 削除 {Asset}" -#: audits/signal_handlers.py:80 +#: audits/signal_handlers.py:82 msgid "User asset permissions" msgstr "ユーザー資産の権限" -#: audits/signal_handlers.py:81 +#: audits/signal_handlers.py:83 #, python-brace-format msgid "{AssetPermission} ADD {User}" msgstr "{AssetPermission} 追加 {User}" -#: audits/signal_handlers.py:82 +#: audits/signal_handlers.py:84 #, python-brace-format msgid "{AssetPermission} REMOVE {User}" msgstr "{AssetPermission} 削除 {User}" -#: audits/signal_handlers.py:85 +#: audits/signal_handlers.py:87 msgid "User group asset permissions" msgstr "ユーザーグループの資産権限" -#: audits/signal_handlers.py:86 +#: audits/signal_handlers.py:88 #, python-brace-format msgid "{AssetPermission} ADD {UserGroup}" msgstr "{AssetPermission} 追加 {UserGroup}" -#: audits/signal_handlers.py:87 +#: audits/signal_handlers.py:89 #, python-brace-format msgid "{AssetPermission} REMOVE {UserGroup}" msgstr "{AssetPermission} 削除 {UserGroup}" -#: audits/signal_handlers.py:90 perms/models/asset_permission.py:29 +#: audits/signal_handlers.py:92 perms/models/asset_permission.py:29 msgid "Asset permission" msgstr "資産権限" -#: audits/signal_handlers.py:91 +#: audits/signal_handlers.py:93 #, python-brace-format msgid "{AssetPermission} ADD {Asset}" msgstr "{AssetPermission} 追加 {Asset}" -#: audits/signal_handlers.py:92 +#: audits/signal_handlers.py:94 #, python-brace-format msgid "{AssetPermission} REMOVE {Asset}" msgstr "{AssetPermission} 削除 {Asset}" -#: audits/signal_handlers.py:95 +#: audits/signal_handlers.py:97 msgid "Node permission" msgstr "ノード権限" -#: audits/signal_handlers.py:96 +#: audits/signal_handlers.py:98 #, python-brace-format msgid "{AssetPermission} ADD {Node}" msgstr "{AssetPermission} 追加 {Node}" -#: audits/signal_handlers.py:97 +#: audits/signal_handlers.py:99 #, python-brace-format msgid "{AssetPermission} REMOVE {Node}" msgstr "{AssetPermission} 削除 {Node}" -#: audits/signal_handlers.py:100 +#: audits/signal_handlers.py:102 msgid "Asset permission and SystemUser" msgstr "資産権限とSystemUser" -#: audits/signal_handlers.py:101 +#: audits/signal_handlers.py:103 #, python-brace-format msgid "{AssetPermission} ADD {SystemUser}" msgstr "{AssetPermission} 追加 {SystemUser}" -#: audits/signal_handlers.py:102 +#: audits/signal_handlers.py:104 #, python-brace-format msgid "{AssetPermission} REMOVE {SystemUser}" msgstr "{AssetPermission} 削除 {SystemUser}" -#: audits/signal_handlers.py:105 +#: audits/signal_handlers.py:107 msgid "User application permissions" msgstr "ユーザーアプリケーションの権限" -#: audits/signal_handlers.py:106 +#: audits/signal_handlers.py:108 #, python-brace-format msgid "{ApplicationPermission} ADD {User}" msgstr "{ApplicationPermission} 追加 {User}" -#: audits/signal_handlers.py:107 +#: audits/signal_handlers.py:109 #, python-brace-format msgid "{ApplicationPermission} REMOVE {User}" msgstr "{ApplicationPermission} 削除 {User}" -#: audits/signal_handlers.py:110 +#: audits/signal_handlers.py:112 msgid "User group application permissions" msgstr "ユーザーグループアプリケーションの権限" -#: audits/signal_handlers.py:111 +#: audits/signal_handlers.py:113 #, python-brace-format msgid "{ApplicationPermission} ADD {UserGroup}" msgstr "{ApplicationPermission} 追加 {UserGroup}" -#: audits/signal_handlers.py:112 +#: audits/signal_handlers.py:114 #, python-brace-format msgid "{ApplicationPermission} REMOVE {UserGroup}" msgstr "{ApplicationPermission} 削除 {UserGroup}" -#: audits/signal_handlers.py:115 perms/models/application_permission.py:38 +#: audits/signal_handlers.py:117 perms/models/application_permission.py:38 msgid "Application permission" msgstr "申請許可" -#: audits/signal_handlers.py:116 +#: audits/signal_handlers.py:118 #, python-brace-format msgid "{ApplicationPermission} ADD {Application}" msgstr "{ApplicationPermission} 追加 {Application}" -#: audits/signal_handlers.py:117 +#: audits/signal_handlers.py:119 #, python-brace-format msgid "{ApplicationPermission} REMOVE {Application}" msgstr "{ApplicationPermission} 削除 {Application}" -#: audits/signal_handlers.py:120 +#: audits/signal_handlers.py:122 msgid "Application permission and SystemUser" msgstr "アプリケーション権限とSystemUser" -#: audits/signal_handlers.py:121 +#: audits/signal_handlers.py:123 #, python-brace-format msgid "{ApplicationPermission} ADD {SystemUser}" msgstr "{ApplicationPermission} 追加 {SystemUser}" -#: audits/signal_handlers.py:122 +#: audits/signal_handlers.py:124 #, python-brace-format msgid "{ApplicationPermission} REMOVE {SystemUser}" msgstr "{ApplicationPermission} 削除 {SystemUser}" +#: authentication/api/confirm.py:40 +#, fuzzy +#| msgid "Authentication failed (username or password incorrect): {}" +msgid "Authentication failed password incorrect" +msgstr "認証に失敗しました (ユーザー名またはパスワードが正しくありません): {}" + +#: authentication/api/confirm.py:48 +msgid "Login time has exceeded {} minutes, please login again" +msgstr "" + +#: authentication/api/confirm.py:72 common/exceptions.py:47 +msgid "This action require verify your MFA" +msgstr "このアクションでは、MFAの確認が必要です。" + #: authentication/api/connection_token.py:326 msgid "Invalid token" msgstr "無効なトークン" @@ -2199,7 +2213,7 @@ msgstr "コードエラー" #: authentication/templates/authentication/_msg_reset_password.html:3 #: authentication/templates/authentication/_msg_rest_password_success.html:2 #: authentication/templates/authentication/_msg_rest_public_key_success.html:2 -#: jumpserver/conf.py:304 ops/tasks.py:145 ops/tasks.py:148 +#: jumpserver/conf.py:305 ops/tasks.py:145 ops/tasks.py:148 #: perms/templates/perms/_msg_item_permissions_expire.html:3 #: perms/templates/perms/_msg_permed_items_expire.html:3 #: tickets/templates/tickets/approve_check_password.html:23 @@ -2342,54 +2356,49 @@ msgstr "返品" msgid "Copy success" msgstr "コピー成功" -#: authentication/views/dingtalk.py:40 +#: authentication/views/dingtalk.py:41 msgid "DingTalk Error, Please contact your system administrator" msgstr "DingTalkエラー、システム管理者に連絡してください" -#: authentication/views/dingtalk.py:43 +#: authentication/views/dingtalk.py:44 msgid "DingTalk Error" msgstr "DingTalkエラー" -#: authentication/views/dingtalk.py:55 authentication/views/feishu.py:50 +#: authentication/views/dingtalk.py:56 authentication/views/feishu.py:50 #: authentication/views/wecom.py:55 msgid "" "The system configuration is incorrect. Please contact your administrator" msgstr "システム設定が正しくありません。管理者に連絡してください" -#: authentication/views/dingtalk.py:79 +#: authentication/views/dingtalk.py:80 msgid "DingTalk is already bound" msgstr "DingTalkはすでにバインドされています" -#: authentication/views/dingtalk.py:128 authentication/views/feishu.py:99 -#: authentication/views/wecom.py:128 -msgid "Please verify your password first" -msgstr "最初にパスワードを確認してください" - -#: authentication/views/dingtalk.py:152 authentication/views/wecom.py:152 +#: authentication/views/dingtalk.py:148 authentication/views/wecom.py:147 msgid "Invalid user_id" msgstr "無効なuser_id" -#: authentication/views/dingtalk.py:168 +#: authentication/views/dingtalk.py:164 msgid "DingTalk query user failed" msgstr "DingTalkクエリユーザーが失敗しました" -#: authentication/views/dingtalk.py:177 +#: authentication/views/dingtalk.py:173 msgid "The DingTalk is already bound to another user" msgstr "DingTalkはすでに別のユーザーにバインドされています" -#: authentication/views/dingtalk.py:184 +#: authentication/views/dingtalk.py:180 msgid "Binding DingTalk successfully" msgstr "DingTalkのバインドに成功" -#: authentication/views/dingtalk.py:240 authentication/views/dingtalk.py:294 +#: authentication/views/dingtalk.py:236 authentication/views/dingtalk.py:290 msgid "Failed to get user from DingTalk" msgstr "DingTalkからユーザーを取得できませんでした" -#: authentication/views/dingtalk.py:246 authentication/views/dingtalk.py:300 +#: authentication/views/dingtalk.py:242 authentication/views/dingtalk.py:296 msgid "DingTalk is not bound" msgstr "DingTalkはバインドされていません" -#: authentication/views/dingtalk.py:247 authentication/views/dingtalk.py:301 +#: authentication/views/dingtalk.py:243 authentication/views/dingtalk.py:297 msgid "Please login with a password and then bind the DingTalk" msgstr "パスワードでログインし、DingTalkをバインドしてください" @@ -2401,32 +2410,32 @@ msgstr "FeiShuエラー" msgid "FeiShu is already bound" msgstr "FeiShuはすでにバインドされています" -#: authentication/views/feishu.py:133 +#: authentication/views/feishu.py:128 msgid "FeiShu query user failed" msgstr "FeiShuクエリユーザーが失敗しました" -#: authentication/views/feishu.py:142 +#: authentication/views/feishu.py:137 msgid "The FeiShu is already bound to another user" msgstr "FeiShuはすでに別のユーザーにバインドされています" -#: authentication/views/feishu.py:148 authentication/views/login.py:176 +#: authentication/views/feishu.py:143 authentication/views/login.py:176 #: notifications/backends/__init__.py:14 users/models/user.py:722 msgid "FeiShu" msgstr "本を飛ばす" -#: authentication/views/feishu.py:149 +#: authentication/views/feishu.py:144 msgid "Binding FeiShu successfully" msgstr "本を飛ばすのバインドに成功" -#: authentication/views/feishu.py:201 +#: authentication/views/feishu.py:196 msgid "Failed to get user from FeiShu" msgstr "本を飛ばすからユーザーを取得できませんでした" -#: authentication/views/feishu.py:207 +#: authentication/views/feishu.py:202 msgid "FeiShu is not bound" msgstr "本を飛ばすは拘束されていません" -#: authentication/views/feishu.py:208 +#: authentication/views/feishu.py:203 msgid "Please login with a password and then bind the FeiShu" msgstr "パスワードでログインしてから本を飛ばすをバインドしてください" @@ -2474,27 +2483,27 @@ msgstr "企業微信エラー" msgid "WeCom is already bound" msgstr "企業の微信はすでにバインドされています" -#: authentication/views/wecom.py:167 +#: authentication/views/wecom.py:162 msgid "WeCom query user failed" msgstr "企業微信ユーザーの問合せに失敗しました" -#: authentication/views/wecom.py:176 +#: authentication/views/wecom.py:171 msgid "The WeCom is already bound to another user" msgstr "この企業の微信はすでに他のユーザーをバインドしている。" -#: authentication/views/wecom.py:183 +#: authentication/views/wecom.py:178 msgid "Binding WeCom successfully" msgstr "企業の微信のバインドに成功" -#: authentication/views/wecom.py:235 authentication/views/wecom.py:289 +#: authentication/views/wecom.py:230 authentication/views/wecom.py:284 msgid "Failed to get user from WeCom" msgstr "企業の微信からユーザーを取得できませんでした" -#: authentication/views/wecom.py:241 authentication/views/wecom.py:295 +#: authentication/views/wecom.py:236 authentication/views/wecom.py:290 msgid "WeCom is not bound" msgstr "企業の微信をバインドしていません" -#: authentication/views/wecom.py:242 authentication/views/wecom.py:296 +#: authentication/views/wecom.py:237 authentication/views/wecom.py:291 msgid "Please login with a password and then bind the WeCom" msgstr "パスワードでログインしてからWeComをバインドしてください" @@ -2577,10 +2586,6 @@ msgstr "M2Mリバースは許可されません" msgid "Is referenced by other objects and cannot be deleted" msgstr "他のオブジェクトによって参照され、削除できません。" -#: common/exceptions.py:47 -msgid "This action require verify your MFA" -msgstr "このアクションでは、MFAの確認が必要です。" - #: common/exceptions.py:53 msgid "Unexpect error occur" msgstr "予期しないエラーが発生します" @@ -2670,11 +2675,11 @@ msgstr "特殊文字を含むべきではない" msgid "The mobile phone number format is incorrect" msgstr "携帯電話番号の形式が正しくありません" -#: jumpserver/conf.py:303 +#: jumpserver/conf.py:304 msgid "Create account successfully" msgstr "アカウントを正常に作成" -#: jumpserver/conf.py:305 +#: jumpserver/conf.py:306 msgid "Your account has been created successfully" msgstr "アカウントが正常に作成されました" @@ -3037,35 +3042,35 @@ msgstr "クリップボードコピーペースト" msgid "From ticket" msgstr "チケットから" -#: perms/notifications.py:17 +#: perms/notifications.py:18 msgid "You permed assets is about to expire" msgstr "パーマ資産の有効期限が近づいています" -#: perms/notifications.py:21 +#: perms/notifications.py:23 msgid "permed assets" msgstr "パーマ資産" -#: perms/notifications.py:59 +#: perms/notifications.py:62 msgid "Asset permissions is about to expire" msgstr "資産権限の有効期限が近づいています" -#: perms/notifications.py:63 +#: perms/notifications.py:67 msgid "asset permissions of organization {}" msgstr "組織 {} の資産権限" -#: perms/notifications.py:89 +#: perms/notifications.py:94 msgid "Your permed applications is about to expire" msgstr "パーマアプリケーションの有効期限が近づいています" -#: perms/notifications.py:92 +#: perms/notifications.py:98 msgid "permed applications" msgstr "Permedアプリケーション" -#: perms/notifications.py:127 +#: perms/notifications.py:134 msgid "Application permissions is about to expire" msgstr "アプリケーション権限の有効期限が近づいています" -#: perms/notifications.py:130 +#: perms/notifications.py:137 msgid "application permissions of organization {}" msgstr "Organization {} のアプリケーション権限" @@ -3123,14 +3128,18 @@ msgstr "システムユーザーの表示" #: perms/templates/perms/_msg_item_permissions_expire.html:7 #: perms/templates/perms/_msg_permed_items_expire.html:7 -#, python-format +#, fuzzy, python-format +#| msgid "" +#| "\n" +#| " The following %(item_type)s will expire in %(count)s days\n" +#| " " msgid "" "\n" -" The following %(item_type)s will expire in 3 days\n" +" The following %(item_type)s will expire in %%(count)s days\n" " " msgstr "" "\n" -" 次の %(item_type)s は3日以内に期限切れになります\n" +" 次の %(item_type)s は %(count)s 日以内に期限切れになります\n" " " #: perms/templates/perms/_msg_permed_items_expire.html:21 @@ -3141,6 +3150,10 @@ msgstr "質問があったら、管理者に連絡して下さい" msgid "My applications" msgstr "私のアプリケーション" +#: perms/utils/asset/user_permission.py:620 rbac/tree.py:59 +msgid "My assets" +msgstr "私の資産" + #: rbac/api/role.py:34 msgid "Internal role, can't be destroy" msgstr "内部の役割は、破壊することはできません" @@ -3149,7 +3162,7 @@ msgstr "内部の役割は、破壊することはできません" msgid "The role has been bound to users, can't be destroy" msgstr "ロールはユーザーにバインドされており、破壊することはできません" -#: rbac/api/role.py:45 +#: rbac/api/role.py:60 msgid "Internal role, can't be update" msgstr "内部ロール、更新できません" @@ -3328,10 +3341,6 @@ msgstr "資産の改ざん" msgid "Terminal setting" msgstr "ターミナル設定" -#: rbac/tree.py:59 -msgid "My assets" -msgstr "私の資産" - #: rbac/tree.py:60 msgid "My apps" msgstr "マイアプリ" @@ -3597,8 +3606,8 @@ msgid "" "User attr map present how to map OpenID user attr to jumpserver, username," "name,email is jumpserver attr" msgstr "" -"ユーザー属性マッピングは、OpenIDのユーザー属性をjumpserverユーザーにマッピング" -"する方法、username, name,emailはjumpserverのユーザーが必要とする属性です" +"ユーザー属性マッピングは、OpenIDのユーザー属性をjumpserverユーザーにマッピン" +"グする方法、username, name,emailはjumpserverのユーザーが必要とする属性です" #: settings/serializers/auth/oidc.py:44 msgid "Use Keycloak" @@ -4283,7 +4292,9 @@ msgid "Enable database proxy" msgstr "属性マップの有効化" #: settings/serializers/terminal.py:37 -msgid "Enable XRDP" +#, fuzzy +#| msgid "Enable XRDP" +msgid "Enable Razor" msgstr "XRDPの有効化" #: settings/serializers/terminal.py:38 @@ -5700,27 +5711,27 @@ msgstr "最終更新日パスワード" msgid "Need update password" msgstr "更新パスワードが必要" -#: users/models/user.py:885 +#: users/models/user.py:890 msgid "Can invite user" msgstr "ユーザーを招待できます" -#: users/models/user.py:886 +#: users/models/user.py:891 msgid "Can remove user" msgstr "ユーザーを削除できます" -#: users/models/user.py:887 +#: users/models/user.py:892 msgid "Can match user" msgstr "ユーザーに一致できます" -#: users/models/user.py:896 +#: users/models/user.py:901 msgid "Administrator" msgstr "管理者" -#: users/models/user.py:899 +#: users/models/user.py:904 msgid "Administrator is the super user of system" msgstr "管理者はシステムのスーパーユーザーです" -#: users/models/user.py:924 +#: users/models/user.py:929 msgid "User password history" msgstr "ユーザーパスワード履歴" @@ -6829,6 +6840,9 @@ msgstr "究極のエディション" msgid "Community edition" msgstr "コミュニティ版" +#~ msgid "Please verify your password first" +#~ msgstr "最初にパスワードを確認してください" + #~ msgid "AccessKey ID" #~ msgstr "アクセスキーID" diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo index 65a32959d..e5b16f047 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:b03f7f9c1d450f8a3012330c00d084c88465d99e355c42ec10f568a8ffa7611c -size 105357 +oid sha256:1ab23fa4d87b928318281150ff64d9c2e3782a9169a3c3e6907808b1be63dbc3 +size 105365 diff --git a/apps/locale/zh/LC_MESSAGES/django.po b/apps/locale/zh/LC_MESSAGES/django.po index 8560a07ac..634bea865 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: 2022-05-31 16:02+0800\n" +"POT-Creation-Date: 2022-06-14 15:48+0800\n" "PO-Revision-Date: 2021-05-20 10:54+0800\n" "Last-Translator: ibuler \n" "Language-Team: JumpServer team\n" @@ -37,12 +37,12 @@ msgid "Name" msgstr "名称" #: acls/models/base.py:27 assets/models/cmd_filter.py:84 -#: assets/models/user.py:247 terminal/models/endpoint.py:62 +#: assets/models/user.py:251 terminal/models/endpoint.py:62 msgid "Priority" msgstr "优先级" #: acls/models/base.py:28 assets/models/cmd_filter.py:84 -#: assets/models/user.py:247 terminal/models/endpoint.py:63 +#: assets/models/user.py:251 terminal/models/endpoint.py:63 msgid "1-100, the lower the value will be match first" msgstr "优先级可选范围为 1-100 (数值越小越优先)" @@ -92,8 +92,8 @@ msgstr "登录复核" #: terminal/backends/command/models.py:20 #: terminal/backends/command/serializers.py:12 terminal/models/session.py:44 #: terminal/notifications.py:91 terminal/notifications.py:139 -#: tickets/models/comment.py:17 users/const.py:14 users/models/user.py:883 -#: users/models/user.py:914 users/serializers/group.py:19 +#: tickets/models/comment.py:17 users/const.py:14 users/models/user.py:888 +#: users/models/user.py:919 users/serializers/group.py:19 msgid "User" msgstr "用户" @@ -128,7 +128,7 @@ msgstr "系统用户" #: assets/models/asset.py:386 assets/models/authbook.py:19 #: assets/models/backup.py:31 assets/models/cmd_filter.py:38 #: assets/models/gathered_user.py:14 assets/serializers/label.py:30 -#: assets/serializers/system_user.py:269 audits/models.py:39 +#: assets/serializers/system_user.py:268 audits/models.py:39 #: perms/models/asset_permission.py:23 terminal/backends/command/models.py:21 #: terminal/backends/command/serializers.py:13 terminal/models/session.py:46 #: terminal/notifications.py:90 @@ -177,7 +177,7 @@ msgstr "" #: acls/serializers/login_asset_acl.py:31 acls/serializers/rules/rules.py:33 #: applications/serializers/attrs/application_type/mysql_workbench.py:18 #: assets/models/asset.py:210 assets/models/domain.py:60 -#: assets/serializers/account.py:14 +#: assets/serializers/account.py:13 #: authentication/templates/authentication/_msg_oauth_bind.html:12 #: authentication/templates/authentication/_msg_rest_password_success.html:8 #: authentication/templates/authentication/_msg_rest_public_key_success.html:8 @@ -186,7 +186,7 @@ msgid "IP" msgstr "IP" #: acls/serializers/login_asset_acl.py:35 assets/models/asset.py:211 -#: assets/serializers/account.py:15 assets/serializers/gathered_user.py:23 +#: assets/serializers/account.py:14 assets/serializers/gathered_user.py:23 #: settings/serializers/terminal.py:7 msgid "Hostname" msgstr "主机名" @@ -198,7 +198,7 @@ msgid "" msgstr "格式为逗号分隔的字符串, * 表示匹配所有. 可选的协议有: {}" #: acls/serializers/login_asset_acl.py:55 assets/models/asset.py:213 -#: assets/models/domain.py:62 assets/models/user.py:248 +#: assets/models/domain.py:62 assets/models/user.py:252 #: terminal/serializers/session.py:30 terminal/serializers/storage.py:68 msgid "Protocol" msgstr "协议" @@ -260,7 +260,7 @@ msgid "Application" msgstr "应用程序" #: applications/models/account.py:15 assets/models/authbook.py:20 -#: assets/models/cmd_filter.py:42 assets/models/user.py:338 audits/models.py:40 +#: assets/models/cmd_filter.py:42 assets/models/user.py:342 audits/models.py:40 #: perms/models/application_permission.py:33 #: perms/models/asset_permission.py:25 terminal/backends/command/models.py:22 #: terminal/backends/command/serializers.py:35 terminal/models/session.py:48 @@ -298,7 +298,7 @@ msgstr "类别" #: applications/models/application.py:222 #: applications/serializers/application.py:101 assets/models/backup.py:49 -#: assets/models/cmd_filter.py:82 assets/models/user.py:246 +#: assets/models/cmd_filter.py:82 assets/models/user.py:250 #: perms/models/application_permission.py:24 #: perms/serializers/application/user_permission.py:34 #: terminal/models/storage.py:57 terminal/models/storage.py:141 @@ -336,7 +336,7 @@ msgstr "类别名称" #: applications/serializers/application.py:71 #: applications/serializers/application.py:102 -#: assets/serializers/cmd_filter.py:34 assets/serializers/system_user.py:29 +#: assets/serializers/cmd_filter.py:34 assets/serializers/system_user.py:34 #: audits/serializers.py:29 perms/serializers/application/permission.py:19 #: tickets/serializers/ticket/meta/ticket_type/apply_application.py:33 #: tickets/serializers/ticket/ticket.py:21 @@ -348,17 +348,17 @@ msgstr "类型名称" #: assets/models/base.py:181 assets/models/cluster.py:26 #: assets/models/domain.py:26 assets/models/gathered_user.py:19 #: assets/models/group.py:22 assets/models/label.py:25 -#: assets/serializers/account.py:19 assets/serializers/cmd_filter.py:28 +#: assets/serializers/account.py:18 assets/serializers/cmd_filter.py:28 #: assets/serializers/cmd_filter.py:48 common/db/models.py:113 #: common/mixins/models.py:50 ops/models/adhoc.py:39 ops/models/command.py:30 #: orgs/models.py:67 orgs/models.py:217 perms/models/base.py:92 -#: users/models/group.py:18 users/models/user.py:915 +#: users/models/group.py:18 users/models/user.py:920 #: xpack/plugins/cloud/models.py:125 msgid "Date created" msgstr "创建日期" #: applications/serializers/application.py:104 assets/models/base.py:182 -#: assets/models/gathered_user.py:20 assets/serializers/account.py:22 +#: assets/models/gathered_user.py:20 assets/serializers/account.py:21 #: assets/serializers/cmd_filter.py:29 assets/serializers/cmd_filter.py:49 #: common/db/models.py:114 common/mixins/models.py:51 ops/models/adhoc.py:40 #: orgs/models.py:218 @@ -408,7 +408,7 @@ msgid "Application path" msgstr "应用路径" #: applications/serializers/attrs/application_category/remote_app.py:44 -#: assets/serializers/system_user.py:168 +#: assets/serializers/system_user.py:167 #: xpack/plugins/change_auth_plan/serializers/asset.py:67 #: xpack/plugins/change_auth_plan/serializers/asset.py:70 #: xpack/plugins/change_auth_plan/serializers/asset.py:73 @@ -505,7 +505,7 @@ msgid "Internal" msgstr "内部的" #: assets/models/asset.py:162 assets/models/asset.py:216 -#: assets/serializers/account.py:16 assets/serializers/asset.py:63 +#: assets/serializers/account.py:15 assets/serializers/asset.py:63 #: perms/serializers/asset/user_permission.py:43 msgid "Platform" msgstr "系统平台" @@ -566,13 +566,13 @@ msgstr "系统架构" msgid "Hostname raw" msgstr "主机名原始" -#: assets/models/asset.py:215 assets/serializers/account.py:17 +#: assets/models/asset.py:215 assets/serializers/account.py:16 #: assets/serializers/asset.py:65 perms/serializers/asset/user_permission.py:41 #: xpack/plugins/cloud/models.py:107 xpack/plugins/cloud/serializers/task.py:42 msgid "Protocols" msgstr "协议组" -#: assets/models/asset.py:218 assets/models/user.py:238 +#: assets/models/asset.py:218 assets/models/user.py:242 #: perms/models/asset_permission.py:24 #: xpack/plugins/change_auth_plan/models/asset.py:43 #: xpack/plugins/gathered_user/models.py:24 @@ -585,7 +585,7 @@ msgid "Is active" msgstr "激活" #: assets/models/asset.py:222 assets/models/cluster.py:19 -#: assets/models/user.py:235 assets/models/user.py:390 +#: assets/models/user.py:239 assets/models/user.py:394 msgid "Admin user" msgstr "特权用户" @@ -754,9 +754,9 @@ msgstr "可连接性" msgid "Date verified" msgstr "校验日期" -#: assets/models/base.py:177 assets/serializers/base.py:14 -#: assets/serializers/base.py:36 audits/signal_handlers.py:48 -#: authentication/forms.py:32 +#: assets/models/base.py:177 assets/serializers/base.py:15 +#: assets/serializers/base.py:37 assets/serializers/system_user.py:29 +#: audits/signal_handlers.py:50 authentication/forms.py:32 #: authentication/templates/authentication/login.html:182 #: settings/serializers/auth/ldap.py:25 settings/serializers/auth/ldap.py:46 #: users/forms/profile.py:22 users/serializers/user.py:92 @@ -771,7 +771,7 @@ msgstr "校验日期" msgid "Password" msgstr "密码" -#: assets/models/base.py:178 assets/serializers/base.py:39 +#: assets/models/base.py:178 assets/serializers/base.py:41 #: xpack/plugins/change_auth_plan/models/asset.py:53 #: xpack/plugins/change_auth_plan/models/asset.py:130 #: xpack/plugins/change_auth_plan/models/asset.py:206 @@ -818,7 +818,7 @@ msgid "Default" msgstr "默认" #: assets/models/cluster.py:36 assets/models/label.py:14 rbac/const.py:6 -#: users/models/user.py:900 +#: users/models/user.py:905 msgid "System" msgstr "系统" @@ -956,7 +956,7 @@ msgstr "全称" msgid "Parent key" msgstr "ssh私钥" -#: assets/models/node.py:559 assets/serializers/system_user.py:268 +#: assets/models/node.py:559 assets/serializers/system_user.py:267 #: xpack/plugins/cloud/models.py:96 xpack/plugins/cloud/serializers/task.py:69 msgid "Node" msgstr "节点" @@ -965,78 +965,78 @@ msgstr "节点" msgid "Can match node" msgstr "可以匹配节点" -#: assets/models/user.py:229 +#: assets/models/user.py:233 msgid "Automatic managed" msgstr "托管密码" -#: assets/models/user.py:230 +#: assets/models/user.py:234 msgid "Manually input" msgstr "手动输入" -#: assets/models/user.py:234 +#: assets/models/user.py:238 msgid "Common user" msgstr "普通用户" -#: assets/models/user.py:237 +#: assets/models/user.py:241 msgid "Username same with user" msgstr "用户名与用户相同" -#: assets/models/user.py:240 assets/serializers/domain.py:30 +#: assets/models/user.py:244 assets/serializers/domain.py:30 #: terminal/templates/terminal/_msg_command_execute_alert.html:16 #: xpack/plugins/change_auth_plan/models/asset.py:39 msgid "Assets" msgstr "资产" -#: assets/models/user.py:244 users/apps.py:9 +#: assets/models/user.py:248 users/apps.py:9 msgid "Users" msgstr "用户管理" -#: assets/models/user.py:245 +#: assets/models/user.py:249 msgid "User groups" msgstr "用户组" -#: assets/models/user.py:249 +#: assets/models/user.py:253 msgid "Auto push" msgstr "自动推送" -#: assets/models/user.py:250 +#: assets/models/user.py:254 msgid "Sudo" msgstr "Sudo" -#: assets/models/user.py:251 +#: assets/models/user.py:255 msgid "Shell" msgstr "Shell" -#: assets/models/user.py:252 +#: assets/models/user.py:256 msgid "Login mode" msgstr "认证方式" -#: assets/models/user.py:253 +#: assets/models/user.py:257 msgid "SFTP Root" msgstr "SFTP根路径" -#: assets/models/user.py:254 assets/serializers/system_user.py:32 +#: assets/models/user.py:258 assets/serializers/system_user.py:37 #: authentication/models.py:49 msgid "Token" msgstr "Token" -#: assets/models/user.py:255 +#: assets/models/user.py:259 msgid "Home" msgstr "家目录" -#: assets/models/user.py:256 +#: assets/models/user.py:260 msgid "System groups" msgstr "用户组" -#: assets/models/user.py:259 +#: assets/models/user.py:263 msgid "User switch" msgstr "用户切换" -#: assets/models/user.py:260 +#: assets/models/user.py:264 msgid "Switch from" msgstr "切换自" -#: assets/models/user.py:340 +#: assets/models/user.py:344 msgid "Can match system user" msgstr "可以匹配系统用户" @@ -1064,7 +1064,7 @@ msgstr "" "{} - 账号备份任务已完成: 未设置加密密码 - 请前往个人信息 -> 文件加密密码中设" "置加密密码" -#: assets/serializers/account.py:41 assets/serializers/account.py:84 +#: assets/serializers/account.py:36 assets/serializers/account.py:79 msgid "System user display" msgstr "系统用户名称" @@ -1119,15 +1119,15 @@ msgstr "定时执行" msgid "Currently only mail sending is supported" msgstr "当前只支持邮件发送" -#: assets/serializers/base.py:15 users/models/user.py:689 +#: assets/serializers/base.py:16 users/models/user.py:689 msgid "Private key" msgstr "ssh私钥" -#: assets/serializers/base.py:43 +#: assets/serializers/base.py:45 msgid "Key password" msgstr "密钥密码" -#: assets/serializers/base.py:56 +#: assets/serializers/base.py:58 msgid "private key invalid or passphrase error" msgstr "密钥不合法或密钥密码错误" @@ -1140,7 +1140,7 @@ msgid "Pattern" msgstr "模式" #: assets/serializers/domain.py:14 assets/serializers/label.py:12 -#: assets/serializers/system_user.py:64 +#: assets/serializers/system_user.py:63 #: perms/serializers/asset/permission.py:49 msgid "Assets amount" msgstr "资产数量" @@ -1165,78 +1165,78 @@ msgstr "不能包含: /" msgid "The same level node name cannot be the same" msgstr "同级别节点名字不能重复" -#: assets/serializers/system_user.py:30 +#: assets/serializers/system_user.py:35 msgid "SSH key fingerprint" msgstr "密钥指纹" -#: assets/serializers/system_user.py:35 +#: assets/serializers/system_user.py:40 #: perms/serializers/application/permission.py:46 msgid "Apps amount" msgstr "应用数量" -#: assets/serializers/system_user.py:63 +#: assets/serializers/system_user.py:62 #: perms/serializers/asset/permission.py:50 msgid "Nodes amount" msgstr "节点数量" -#: assets/serializers/system_user.py:65 assets/serializers/system_user.py:270 +#: assets/serializers/system_user.py:64 assets/serializers/system_user.py:269 msgid "Login mode display" msgstr "认证方式名称" -#: assets/serializers/system_user.py:67 +#: assets/serializers/system_user.py:66 msgid "Ad domain" msgstr "Ad 网域" -#: assets/serializers/system_user.py:68 +#: assets/serializers/system_user.py:67 msgid "Is asset protocol" msgstr "资产协议" -#: assets/serializers/system_user.py:69 +#: assets/serializers/system_user.py:68 msgid "Only ssh and automatic login system users are supported" msgstr "仅支持ssh协议和自动登录的系统用户" -#: assets/serializers/system_user.py:109 +#: assets/serializers/system_user.py:108 msgid "Username same with user with protocol {} only allow 1" msgstr "用户名和用户相同的一种协议只允许存在一个" -#: assets/serializers/system_user.py:122 common/validators.py:14 +#: assets/serializers/system_user.py:121 common/validators.py:14 msgid "Special char not allowed" msgstr "不能包含特殊字符" -#: assets/serializers/system_user.py:132 +#: assets/serializers/system_user.py:131 msgid "* Automatic login mode must fill in the username." msgstr "自动登录模式,必须填写用户名" -#: assets/serializers/system_user.py:147 +#: assets/serializers/system_user.py:146 msgid "Path should starts with /" msgstr "路径应该以 / 开头" -#: assets/serializers/system_user.py:159 +#: assets/serializers/system_user.py:158 msgid "Password or private key required" msgstr "密码或密钥密码需要一个" -#: assets/serializers/system_user.py:173 +#: assets/serializers/system_user.py:172 msgid "Only ssh protocol system users are allowed" msgstr "仅允许ssh协议的系统用户" -#: assets/serializers/system_user.py:177 +#: assets/serializers/system_user.py:176 msgid "The protocol must be consistent with the current user: {}" msgstr "协议必须和当前用户保持一致: {}" -#: assets/serializers/system_user.py:181 +#: assets/serializers/system_user.py:180 msgid "Only system users with automatic login are allowed" msgstr "仅允许自动登录的系统用户" -#: assets/serializers/system_user.py:289 +#: assets/serializers/system_user.py:288 msgid "System user name" msgstr "系统用户名称" -#: assets/serializers/system_user.py:290 orgs/mixins/serializers.py:26 +#: assets/serializers/system_user.py:289 orgs/mixins/serializers.py:26 #: rbac/serializers/rolebinding.py:23 msgid "Org name" msgstr "组织名称" -#: assets/serializers/system_user.py:299 +#: assets/serializers/system_user.py:298 msgid "Asset hostname" msgstr "资产主机名" @@ -1301,24 +1301,24 @@ msgid "" "The task of self-checking is already running and cannot be started repeatedly" msgstr "自检程序已经在运行,不能重复启动" -#: assets/tasks/push_system_user.py:200 +#: assets/tasks/push_system_user.py:201 msgid "System user is dynamic: {}" msgstr "系统用户是动态的: {}" -#: assets/tasks/push_system_user.py:241 +#: assets/tasks/push_system_user.py:242 msgid "Start push system user for platform: [{}]" msgstr "推送系统用户到平台: [{}]" -#: assets/tasks/push_system_user.py:242 +#: assets/tasks/push_system_user.py:243 #: assets/tasks/system_user_connectivity.py:106 msgid "Hosts count: {}" msgstr "主机数量: {}" -#: assets/tasks/push_system_user.py:263 assets/tasks/push_system_user.py:296 +#: assets/tasks/push_system_user.py:264 assets/tasks/push_system_user.py:297 msgid "Push system users to assets: " msgstr "推送系统用户到入资产: " -#: assets/tasks/push_system_user.py:275 +#: assets/tasks/push_system_user.py:276 msgid "Push system users to asset: " msgstr "推送系统用户到入资产: " @@ -1550,202 +1550,214 @@ msgstr "运行用户名称" msgid "User display" msgstr "用户名称" -#: audits/signal_handlers.py:47 +#: audits/signal_handlers.py:49 msgid "SSH Key" msgstr "SSH 密钥" -#: audits/signal_handlers.py:49 +#: audits/signal_handlers.py:51 msgid "SSO" msgstr "SSO" -#: audits/signal_handlers.py:50 +#: audits/signal_handlers.py:52 msgid "Auth Token" msgstr "认证令牌" -#: audits/signal_handlers.py:51 authentication/notifications.py:73 -#: authentication/views/login.py:164 authentication/views/wecom.py:182 +#: audits/signal_handlers.py:53 authentication/notifications.py:73 +#: authentication/views/login.py:164 authentication/views/wecom.py:177 #: notifications/backends/__init__.py:11 users/models/user.py:720 msgid "WeCom" msgstr "企业微信" -#: audits/signal_handlers.py:52 authentication/views/dingtalk.py:183 +#: audits/signal_handlers.py:54 authentication/views/dingtalk.py:179 #: authentication/views/login.py:170 notifications/backends/__init__.py:12 #: users/models/user.py:721 msgid "DingTalk" msgstr "钉钉" -#: audits/signal_handlers.py:53 authentication/models.py:76 +#: audits/signal_handlers.py:55 authentication/models.py:76 msgid "Temporary token" msgstr "临时密码" -#: audits/signal_handlers.py:65 +#: audits/signal_handlers.py:67 msgid "User and Group" msgstr "用户与用户组" -#: audits/signal_handlers.py:66 +#: audits/signal_handlers.py:68 #, python-brace-format msgid "{User} JOINED {UserGroup}" msgstr "{User} 加入 {UserGroup}" -#: audits/signal_handlers.py:67 +#: audits/signal_handlers.py:69 #, python-brace-format msgid "{User} LEFT {UserGroup}" msgstr "{User} 离开 {UserGroup}" -#: audits/signal_handlers.py:70 +#: audits/signal_handlers.py:72 msgid "Asset and SystemUser" msgstr "资产与系统用户" -#: audits/signal_handlers.py:71 +#: audits/signal_handlers.py:73 #, python-brace-format msgid "{Asset} ADD {SystemUser}" msgstr "{Asset} 添加 {SystemUser}" -#: audits/signal_handlers.py:72 +#: audits/signal_handlers.py:74 #, python-brace-format msgid "{Asset} REMOVE {SystemUser}" msgstr "{Asset} 移除 {SystemUser}" -#: audits/signal_handlers.py:75 +#: audits/signal_handlers.py:77 msgid "Node and Asset" msgstr "节点与资产" -#: audits/signal_handlers.py:76 +#: audits/signal_handlers.py:78 #, python-brace-format msgid "{Node} ADD {Asset}" msgstr "{Node} 添加 {Asset}" -#: audits/signal_handlers.py:77 +#: audits/signal_handlers.py:79 #, python-brace-format msgid "{Node} REMOVE {Asset}" msgstr "{Node} 移除 {Asset}" -#: audits/signal_handlers.py:80 +#: audits/signal_handlers.py:82 msgid "User asset permissions" msgstr "用户资产授权" -#: audits/signal_handlers.py:81 +#: audits/signal_handlers.py:83 #, python-brace-format msgid "{AssetPermission} ADD {User}" msgstr "{AssetPermission} 添加 {User}" -#: audits/signal_handlers.py:82 +#: audits/signal_handlers.py:84 #, python-brace-format msgid "{AssetPermission} REMOVE {User}" msgstr "{AssetPermission} 移除 {User}" -#: audits/signal_handlers.py:85 +#: audits/signal_handlers.py:87 msgid "User group asset permissions" msgstr "用户组资产授权" -#: audits/signal_handlers.py:86 +#: audits/signal_handlers.py:88 #, python-brace-format msgid "{AssetPermission} ADD {UserGroup}" msgstr "{AssetPermission} 添加 {UserGroup}" -#: audits/signal_handlers.py:87 +#: audits/signal_handlers.py:89 #, python-brace-format msgid "{AssetPermission} REMOVE {UserGroup}" msgstr "{AssetPermission} 移除 {UserGroup}" -#: audits/signal_handlers.py:90 perms/models/asset_permission.py:29 +#: audits/signal_handlers.py:92 perms/models/asset_permission.py:29 msgid "Asset permission" msgstr "资产授权" -#: audits/signal_handlers.py:91 +#: audits/signal_handlers.py:93 #, python-brace-format msgid "{AssetPermission} ADD {Asset}" msgstr "{AssetPermission} 添加 {Asset}" -#: audits/signal_handlers.py:92 +#: audits/signal_handlers.py:94 #, python-brace-format msgid "{AssetPermission} REMOVE {Asset}" msgstr "{AssetPermission} 移除 {Asset}" -#: audits/signal_handlers.py:95 +#: audits/signal_handlers.py:97 msgid "Node permission" msgstr "节点授权" -#: audits/signal_handlers.py:96 +#: audits/signal_handlers.py:98 #, python-brace-format msgid "{AssetPermission} ADD {Node}" msgstr "{AssetPermission} 添加 {Node}" -#: audits/signal_handlers.py:97 +#: audits/signal_handlers.py:99 #, python-brace-format msgid "{AssetPermission} REMOVE {Node}" msgstr "{AssetPermission} 移除 {Node}" -#: audits/signal_handlers.py:100 +#: audits/signal_handlers.py:102 msgid "Asset permission and SystemUser" msgstr "资产授权与系统用户" -#: audits/signal_handlers.py:101 +#: audits/signal_handlers.py:103 #, python-brace-format msgid "{AssetPermission} ADD {SystemUser}" msgstr "{AssetPermission} 添加 {SystemUser}" -#: audits/signal_handlers.py:102 +#: audits/signal_handlers.py:104 #, python-brace-format msgid "{AssetPermission} REMOVE {SystemUser}" msgstr "{AssetPermission} 移除 {SystemUser}" -#: audits/signal_handlers.py:105 +#: audits/signal_handlers.py:107 msgid "User application permissions" msgstr "用户应用授权" -#: audits/signal_handlers.py:106 +#: audits/signal_handlers.py:108 #, python-brace-format msgid "{ApplicationPermission} ADD {User}" msgstr "{ApplicationPermission} 添加 {User}" -#: audits/signal_handlers.py:107 +#: audits/signal_handlers.py:109 #, python-brace-format msgid "{ApplicationPermission} REMOVE {User}" msgstr "{ApplicationPermission} 移除 {User}" -#: audits/signal_handlers.py:110 +#: audits/signal_handlers.py:112 msgid "User group application permissions" msgstr "用户组应用授权" -#: audits/signal_handlers.py:111 +#: audits/signal_handlers.py:113 #, python-brace-format msgid "{ApplicationPermission} ADD {UserGroup}" msgstr "{ApplicationPermission} 添加 {UserGroup}" -#: audits/signal_handlers.py:112 +#: audits/signal_handlers.py:114 #, python-brace-format msgid "{ApplicationPermission} REMOVE {UserGroup}" msgstr "{ApplicationPermission} 移除 {UserGroup}" -#: audits/signal_handlers.py:115 perms/models/application_permission.py:38 +#: audits/signal_handlers.py:117 perms/models/application_permission.py:38 msgid "Application permission" msgstr "应用授权" -#: audits/signal_handlers.py:116 +#: audits/signal_handlers.py:118 #, python-brace-format msgid "{ApplicationPermission} ADD {Application}" msgstr "{ApplicationPermission} 添加 {Application}" -#: audits/signal_handlers.py:117 +#: audits/signal_handlers.py:119 #, python-brace-format msgid "{ApplicationPermission} REMOVE {Application}" msgstr "{ApplicationPermission} 移除 {Application}" -#: audits/signal_handlers.py:120 +#: audits/signal_handlers.py:122 msgid "Application permission and SystemUser" msgstr "应用授权与系统用户" -#: audits/signal_handlers.py:121 +#: audits/signal_handlers.py:123 #, python-brace-format msgid "{ApplicationPermission} ADD {SystemUser}" msgstr "{ApplicationPermission} 添加 {SystemUser}" -#: audits/signal_handlers.py:122 +#: audits/signal_handlers.py:124 #, python-brace-format msgid "{ApplicationPermission} REMOVE {SystemUser}" msgstr "{ApplicationPermission} 移除 {SystemUser}" +#: authentication/api/confirm.py:40 +msgid "Authentication failed password incorrect" +msgstr "认证失败 (用户名或密码不正确): {}" + +#: authentication/api/confirm.py:48 +msgid "Login time has exceeded {} minutes, please login again" +msgstr "" + +#: authentication/api/confirm.py:72 common/exceptions.py:47 +msgid "This action require verify your MFA" +msgstr "这个操作需要验证 MFA" + #: authentication/api/connection_token.py:326 msgid "Invalid token" msgstr "无效的令牌" @@ -2178,7 +2190,7 @@ msgstr "代码错误" #: authentication/templates/authentication/_msg_reset_password.html:3 #: authentication/templates/authentication/_msg_rest_password_success.html:2 #: authentication/templates/authentication/_msg_rest_public_key_success.html:2 -#: jumpserver/conf.py:304 ops/tasks.py:145 ops/tasks.py:148 +#: jumpserver/conf.py:305 ops/tasks.py:145 ops/tasks.py:148 #: perms/templates/perms/_msg_item_permissions_expire.html:3 #: perms/templates/perms/_msg_permed_items_expire.html:3 #: tickets/templates/tickets/approve_check_password.html:23 @@ -2312,54 +2324,49 @@ msgstr "返回" msgid "Copy success" msgstr "复制成功" -#: authentication/views/dingtalk.py:40 +#: authentication/views/dingtalk.py:41 msgid "DingTalk Error, Please contact your system administrator" msgstr "钉钉错误,请联系系统管理员" -#: authentication/views/dingtalk.py:43 +#: authentication/views/dingtalk.py:44 msgid "DingTalk Error" msgstr "钉钉错误" -#: authentication/views/dingtalk.py:55 authentication/views/feishu.py:50 +#: authentication/views/dingtalk.py:56 authentication/views/feishu.py:50 #: authentication/views/wecom.py:55 msgid "" "The system configuration is incorrect. Please contact your administrator" msgstr "企业配置错误,请联系系统管理员" -#: authentication/views/dingtalk.py:79 +#: authentication/views/dingtalk.py:80 msgid "DingTalk is already bound" msgstr "钉钉已经绑定" -#: authentication/views/dingtalk.py:128 authentication/views/feishu.py:99 -#: authentication/views/wecom.py:128 -msgid "Please verify your password first" -msgstr "请检查密码" - -#: authentication/views/dingtalk.py:152 authentication/views/wecom.py:152 +#: authentication/views/dingtalk.py:148 authentication/views/wecom.py:147 msgid "Invalid user_id" msgstr "无效的 user_id" -#: authentication/views/dingtalk.py:168 +#: authentication/views/dingtalk.py:164 msgid "DingTalk query user failed" msgstr "钉钉查询用户失败" -#: authentication/views/dingtalk.py:177 +#: authentication/views/dingtalk.py:173 msgid "The DingTalk is already bound to another user" msgstr "该钉钉已经绑定其他用户" -#: authentication/views/dingtalk.py:184 +#: authentication/views/dingtalk.py:180 msgid "Binding DingTalk successfully" msgstr "绑定 钉钉 成功" -#: authentication/views/dingtalk.py:240 authentication/views/dingtalk.py:294 +#: authentication/views/dingtalk.py:236 authentication/views/dingtalk.py:290 msgid "Failed to get user from DingTalk" msgstr "从钉钉获取用户失败" -#: authentication/views/dingtalk.py:246 authentication/views/dingtalk.py:300 +#: authentication/views/dingtalk.py:242 authentication/views/dingtalk.py:296 msgid "DingTalk is not bound" msgstr "钉钉没有绑定" -#: authentication/views/dingtalk.py:247 authentication/views/dingtalk.py:301 +#: authentication/views/dingtalk.py:243 authentication/views/dingtalk.py:297 msgid "Please login with a password and then bind the DingTalk" msgstr "请使用密码登录,然后绑定钉钉" @@ -2371,32 +2378,32 @@ msgstr "飞书错误" msgid "FeiShu is already bound" msgstr "飞书已经绑定" -#: authentication/views/feishu.py:133 +#: authentication/views/feishu.py:128 msgid "FeiShu query user failed" msgstr "飞书查询用户失败" -#: authentication/views/feishu.py:142 +#: authentication/views/feishu.py:137 msgid "The FeiShu is already bound to another user" msgstr "该飞书已经绑定其他用户" -#: authentication/views/feishu.py:148 authentication/views/login.py:176 +#: authentication/views/feishu.py:143 authentication/views/login.py:176 #: notifications/backends/__init__.py:14 users/models/user.py:722 msgid "FeiShu" msgstr "飞书" -#: authentication/views/feishu.py:149 +#: authentication/views/feishu.py:144 msgid "Binding FeiShu successfully" msgstr "绑定 飞书 成功" -#: authentication/views/feishu.py:201 +#: authentication/views/feishu.py:196 msgid "Failed to get user from FeiShu" msgstr "从飞书获取用户失败" -#: authentication/views/feishu.py:207 +#: authentication/views/feishu.py:202 msgid "FeiShu is not bound" msgstr "没有绑定飞书" -#: authentication/views/feishu.py:208 +#: authentication/views/feishu.py:203 msgid "Please login with a password and then bind the FeiShu" msgstr "请使用密码登录,然后绑定飞书" @@ -2444,27 +2451,27 @@ msgstr "企业微信错误" msgid "WeCom is already bound" msgstr "企业微信已经绑定" -#: authentication/views/wecom.py:167 +#: authentication/views/wecom.py:162 msgid "WeCom query user failed" msgstr "企业微信查询用户失败" -#: authentication/views/wecom.py:176 +#: authentication/views/wecom.py:171 msgid "The WeCom is already bound to another user" msgstr "该企业微信已经绑定其他用户" -#: authentication/views/wecom.py:183 +#: authentication/views/wecom.py:178 msgid "Binding WeCom successfully" msgstr "绑定 企业微信 成功" -#: authentication/views/wecom.py:235 authentication/views/wecom.py:289 +#: authentication/views/wecom.py:230 authentication/views/wecom.py:284 msgid "Failed to get user from WeCom" msgstr "从企业微信获取用户失败" -#: authentication/views/wecom.py:241 authentication/views/wecom.py:295 +#: authentication/views/wecom.py:236 authentication/views/wecom.py:290 msgid "WeCom is not bound" msgstr "没有绑定企业微信" -#: authentication/views/wecom.py:242 authentication/views/wecom.py:296 +#: authentication/views/wecom.py:237 authentication/views/wecom.py:291 msgid "Please login with a password and then bind the WeCom" msgstr "请使用密码登录,然后绑定企业微信" @@ -2547,10 +2554,6 @@ msgstr "多对多反向是不被允许的" msgid "Is referenced by other objects and cannot be deleted" msgstr "被其他对象关联,不能删除" -#: common/exceptions.py:47 -msgid "This action require verify your MFA" -msgstr "这个操作需要验证 MFA" - #: common/exceptions.py:53 msgid "Unexpect error occur" msgstr "发生意外错误" @@ -2640,11 +2643,11 @@ msgstr "不能包含特殊字符" msgid "The mobile phone number format is incorrect" msgstr "手机号格式不正确" -#: jumpserver/conf.py:303 +#: jumpserver/conf.py:304 msgid "Create account successfully" msgstr "创建账号成功" -#: jumpserver/conf.py:305 +#: jumpserver/conf.py:306 msgid "Your account has been created successfully" msgstr "你的账号已创建成功" @@ -3001,35 +3004,35 @@ msgstr "剪贴板复制粘贴" msgid "From ticket" msgstr "来自工单" -#: perms/notifications.py:17 +#: perms/notifications.py:18 msgid "You permed assets is about to expire" msgstr "你授权的资产即将到期" -#: perms/notifications.py:21 +#: perms/notifications.py:23 msgid "permed assets" msgstr "授权的资产" -#: perms/notifications.py:59 +#: perms/notifications.py:62 msgid "Asset permissions is about to expire" msgstr "资产授权规则将要过期" -#: perms/notifications.py:63 +#: perms/notifications.py:67 msgid "asset permissions of organization {}" msgstr "组织 ({}) 的资产授权" -#: perms/notifications.py:89 +#: perms/notifications.py:94 msgid "Your permed applications is about to expire" msgstr "你授权的应用即将过期" -#: perms/notifications.py:92 +#: perms/notifications.py:98 msgid "permed applications" msgstr "授权的应用" -#: perms/notifications.py:127 +#: perms/notifications.py:134 msgid "Application permissions is about to expire" msgstr "应用授权规则即将过期" -#: perms/notifications.py:130 +#: perms/notifications.py:137 msgid "application permissions of organization {}" msgstr "组织 ({}) 的应用授权" @@ -3085,14 +3088,13 @@ msgstr "系统用户名称" #: perms/templates/perms/_msg_item_permissions_expire.html:7 #: perms/templates/perms/_msg_permed_items_expire.html:7 -#, python-format msgid "" "\n" -" The following %(item_type)s will expire in 3 days\n" +" The following %(item_type)s will expire in %(count)s days\n" " " msgstr "" "\n" -" 以下 %(item_type)s 即将在 3 天后过期\n" +" 以下 %(item_type)s 即将在 %(count)s 天后过期\n" " " #: perms/templates/perms/_msg_permed_items_expire.html:21 @@ -3103,6 +3105,10 @@ msgstr "如果有疑问或需求,请联系系统管理员" msgid "My applications" msgstr "我的应用" +#: perms/utils/asset/user_permission.py:620 rbac/tree.py:59 +msgid "My assets" +msgstr "我的资产" + #: rbac/api/role.py:34 msgid "Internal role, can't be destroy" msgstr "内部角色,不能删除" @@ -3111,7 +3117,7 @@ msgstr "内部角色,不能删除" msgid "The role has been bound to users, can't be destroy" msgstr "角色已绑定用户,不能删除" -#: rbac/api/role.py:45 +#: rbac/api/role.py:60 msgid "Internal role, can't be update" msgstr "内部角色,不能更新" @@ -3289,10 +3295,6 @@ msgstr "资产改密" msgid "Terminal setting" msgstr "终端设置" -#: rbac/tree.py:59 -msgid "My assets" -msgstr "我的资产" - #: rbac/tree.py:60 msgid "My apps" msgstr "我的应用" @@ -4221,7 +4223,7 @@ msgid "Enable database proxy" msgstr "启用数据库组件" #: settings/serializers/terminal.py:37 -msgid "Enable XRDP" +msgid "Enable Razor" msgstr "启用 XRDP 服务" #: settings/serializers/terminal.py:38 @@ -5622,27 +5624,27 @@ msgstr "最后更新密码日期" msgid "Need update password" msgstr "需要更新密码" -#: users/models/user.py:885 +#: users/models/user.py:890 msgid "Can invite user" msgstr "可以邀请用户" -#: users/models/user.py:886 +#: users/models/user.py:891 msgid "Can remove user" msgstr "可以移除用户" -#: users/models/user.py:887 +#: users/models/user.py:892 msgid "Can match user" msgstr "可以匹配用户" -#: users/models/user.py:896 +#: users/models/user.py:901 msgid "Administrator" msgstr "管理员" -#: users/models/user.py:899 +#: users/models/user.py:904 msgid "Administrator is the super user of system" msgstr "Administrator是初始的超级管理员" -#: users/models/user.py:924 +#: users/models/user.py:929 msgid "User password history" msgstr "用户密码历史" @@ -6737,6 +6739,9 @@ msgstr "旗舰版" msgid "Community edition" msgstr "社区版" +#~ msgid "Please verify your password first" +#~ msgstr "请检查密码" + #~ msgid "AccessKey ID" #~ msgstr "Access key ID" diff --git a/apps/locale/zh/LC_MESSAGES/djangojs.po b/apps/locale/zh/LC_MESSAGES/djangojs.po index 0cae14858..deddcbe25 100644 --- a/apps/locale/zh/LC_MESSAGES/djangojs.po +++ b/apps/locale/zh/LC_MESSAGES/djangojs.po @@ -3,7 +3,6 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" diff --git a/apps/perms/notifications.py b/apps/perms/notifications.py index 54d3f188e..4a7baf318 100644 --- a/apps/perms/notifications.py +++ b/apps/perms/notifications.py @@ -9,14 +9,16 @@ from notifications.notifications import UserMessage class PermedAssetsWillExpireUserMsg(UserMessage): - def __init__(self, user, assets): + def __init__(self, user, assets, day_count=0): super().__init__(user) self.assets = assets + self.count = day_count def get_html_msg(self) -> dict: subject = _("You permed assets is about to expire") context = { 'name': self.user.name, + 'day_count': self.day_count, 'items': [str(asset) for asset in self.assets], 'item_type': _("permed assets"), 'show_help': True @@ -38,10 +40,11 @@ class PermedAssetsWillExpireUserMsg(UserMessage): class AssetPermsWillExpireForOrgAdminMsg(UserMessage): - def __init__(self, user, perms, org): + def __init__(self, user, perms, org, day_count=0): super().__init__(user) self.perms = perms self.org = org + self.count = day_count def get_items_with_url(self): items_with_url = [] @@ -59,6 +62,7 @@ class AssetPermsWillExpireForOrgAdminMsg(UserMessage): subject = _("Asset permissions is about to expire") context = { 'name': self.user.name, + 'day_count': self.day_count, 'items_with_url': items_with_url, 'item_type': _('asset permissions of organization {}').format(self.org) } @@ -81,14 +85,16 @@ class AssetPermsWillExpireForOrgAdminMsg(UserMessage): class PermedAppsWillExpireUserMsg(UserMessage): - def __init__(self, user, apps): + def __init__(self, user, apps, day_count=0): super().__init__(user) self.apps = apps + self.count = day_count def get_html_msg(self) -> dict: subject = _("Your permed applications is about to expire") context = { 'name': self.user.name, + 'day_count': self.day_count, 'item_type': _('permed applications'), 'items': [str(app) for app in self.apps] } @@ -109,10 +115,11 @@ class PermedAppsWillExpireUserMsg(UserMessage): class AppPermsWillExpireForOrgAdminMsg(UserMessage): - def __init__(self, user, perms, org): + def __init__(self, user, perms, org, day_count=0): super().__init__(user) self.perms = perms self.org = org + self.count = day_count def get_items_with_url(self): items_with_url = [] diff --git a/apps/perms/tasks.py b/apps/perms/tasks.py index 2f5edafed..237eac5ac 100644 --- a/apps/perms/tasks.py +++ b/apps/perms/tasks.py @@ -63,8 +63,8 @@ def check_asset_permission_will_expired(): start = local_now() end = start + timedelta(days=3) - user_asset_mapper = defaultdict(set) - org_perm_mapper = defaultdict(set) + user_asset_remain_day_mapper = defaultdict(dict) + org_perm_remain_day_mapper = defaultdict(dict) asset_perms = AssetPermission.objects.filter( date_expired__gte=start, @@ -72,23 +72,35 @@ def check_asset_permission_will_expired(): ).distinct() for asset_perm in asset_perms: + date_expired = dt_parser(asset_perm.date_expired) + remain_days = (end - date_expired).days + + org = asset_perm.org # 资产授权按照组织分类 - org_perm_mapper[asset_perm.org].add(asset_perm) + if org in org_perm_remain_day_mapper[remain_days]: + org_perm_remain_day_mapper[remain_days][org].add(asset_perm) + else: + org_perm_remain_day_mapper[remain_days][org] = set() # 计算每个用户即将过期的资产 users = asset_perm.get_all_users() assets = asset_perm.get_all_assets() for u in users: - user_asset_mapper[u].update(assets) + if u in user_asset_remain_day_mapper[remain_days]: + user_asset_remain_day_mapper[remain_days][u].update(assets) + else: + user_asset_remain_day_mapper[remain_days][u] = set() - for user, assets in user_asset_mapper.items(): - PermedAssetsWillExpireUserMsg(user, assets).publish_async() + for day_count, user_asset_mapper in user_asset_remain_day_mapper.items(): + for user, assets in user_asset_mapper.items(): + PermedAssetsWillExpireUserMsg(user, assets, day_count).publish_async() - for org, perms in org_perm_mapper.items(): - org_admins = org.admins.all() - for org_admin in org_admins: - AssetPermsWillExpireForOrgAdminMsg(org_admin, perms, org).publish_async() + for day_count, org_perm_mapper in org_perm_remain_day_mapper.items(): + for org, perms in org_perm_mapper.items(): + org_admins = org.admins.all() + for org_admin in org_admins: + AssetPermsWillExpireForOrgAdminMsg(org_admin, perms, org, day_count).publish_async() @register_as_period_task(crontab='0 10 * * *') @@ -104,21 +116,33 @@ def check_app_permission_will_expired(): date_expired__lte=end ).distinct() - user_app_mapper = defaultdict(set) - org_perm_mapper = defaultdict(set) + user_app_remain_day_mapper = defaultdict(dict) + org_perm_remain_day_mapper = defaultdict(dict) for app_perm in app_perms: - org_perm_mapper[app_perm.org].add(app_perm) + date_expired = dt_parser(app_perm.date_expired) + remain_days = (end - date_expired).days + + org = app_perm.org + if org in org_perm_remain_day_mapper[remain_days]: + org_perm_remain_day_mapper[remain_days][org].add(app_perm) + else: + org_perm_remain_day_mapper[remain_days][org] = set() users = app_perm.get_all_users() apps = app_perm.applications.all() for u in users: - user_app_mapper[u].update(apps) + if u in user_app_remain_day_mapper[remain_days]: + user_app_remain_day_mapper[remain_days][u].update(apps) + else: + user_app_remain_day_mapper[remain_days][u] = set() - for user, apps in user_app_mapper.items(): - PermedAppsWillExpireUserMsg(user, apps).publish_async() + for day_count, user_app_mapper in user_app_remain_day_mapper.items(): + for user, apps in user_app_mapper.items(): + PermedAppsWillExpireUserMsg(user, apps, day_count).publish_async() - for org, perms in org_perm_mapper.items(): - org_admins = org.admins.all() - for org_admin in org_admins: - AppPermsWillExpireForOrgAdminMsg(org_admin, perms, org).publish_async() + for day_count, org_perm_mapper in org_perm_remain_day_mapper.items(): + for org, perms in org_perm_mapper.items(): + org_admins = org.admins.all() + for org_admin in org_admins: + AppPermsWillExpireForOrgAdminMsg(org_admin, perms, org, day_count).publish_async() diff --git a/apps/perms/templates/perms/_msg_item_permissions_expire.html b/apps/perms/templates/perms/_msg_item_permissions_expire.html index 139f958b3..aab2a3650 100644 --- a/apps/perms/templates/perms/_msg_item_permissions_expire.html +++ b/apps/perms/templates/perms/_msg_item_permissions_expire.html @@ -5,7 +5,7 @@

{% blocktranslate %} - The following {{ item_type }} will expire in 3 days + The following {{ item_type }} will expire in %(count)s days {% endblocktranslate %}

diff --git a/apps/perms/templates/perms/_msg_permed_items_expire.html b/apps/perms/templates/perms/_msg_permed_items_expire.html index f50c59933..1e5ae7b18 100644 --- a/apps/perms/templates/perms/_msg_permed_items_expire.html +++ b/apps/perms/templates/perms/_msg_permed_items_expire.html @@ -5,7 +5,7 @@

{% blocktranslate %} - The following {{ item_type }} will expire in 3 days + The following {{ item_type }} will expire in %(count)s days {% endblocktranslate %}

From f7f4d3a42e65d42d74b1d1d7e72eff4318f41d68 Mon Sep 17 00:00:00 2001 From: "Jiangjie.Bai" Date: Tue, 14 Jun 2022 18:04:53 +0800 Subject: [PATCH 04/21] =?UTF-8?q?fix:=20=E8=BF=87=E6=BB=A4=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E7=94=A8=E6=88=B7=E5=AF=86=E7=A0=81=E8=BF=87=E6=BB=A4?= =?UTF-8?q?ansible=E4=B8=8D=E6=94=AF=E6=8C=81=E7=9A=84=E5=AD=97=E7=AC=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/serializers/base.py | 4 ++-- apps/assets/serializers/system_user.py | 4 ++-- apps/assets/serializers/utils.py | 10 +++++++++- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/apps/assets/serializers/base.py b/apps/assets/serializers/base.py index 92cc65f19..2c5e579b6 100644 --- a/apps/assets/serializers/base.py +++ b/apps/assets/serializers/base.py @@ -8,7 +8,7 @@ from rest_framework import serializers from common.utils import ssh_pubkey_gen, ssh_private_key_gen, validate_ssh_private_key from common.drf.fields import EncryptedField from assets.models import Type -from .utils import validate_password_contains_left_double_curly_bracket +from .utils import validate_password_for_ansible class AuthSerializer(serializers.ModelSerializer): @@ -35,7 +35,7 @@ class AuthSerializer(serializers.ModelSerializer): class AuthSerializerMixin(serializers.ModelSerializer): password = EncryptedField( label=_('Password'), required=False, allow_blank=True, allow_null=True, max_length=1024, - validators=[validate_password_contains_left_double_curly_bracket] + validators=[validate_password_for_ansible] ) private_key = EncryptedField( label=_('SSH private key'), required=False, allow_blank=True, allow_null=True, max_length=4096 diff --git a/apps/assets/serializers/system_user.py b/apps/assets/serializers/system_user.py index 68ade0ebd..54aff3e82 100644 --- a/apps/assets/serializers/system_user.py +++ b/apps/assets/serializers/system_user.py @@ -9,7 +9,7 @@ from common.drf.serializers import SecretReadableMixin from common.validators import alphanumeric_re, alphanumeric_cn_re, alphanumeric_win_re from orgs.mixins.serializers import BulkOrgResourceModelSerializer from ..models import SystemUser, Asset -from .utils import validate_password_contains_left_double_curly_bracket +from .utils import validate_password_for_ansible from .base import AuthSerializerMixin __all__ = [ @@ -27,7 +27,7 @@ class SystemUserSerializer(AuthSerializerMixin, BulkOrgResourceModelSerializer): """ password = EncryptedField( label=_('Password'), required=False, allow_blank=True, allow_null=True, max_length=1024, - trim_whitespace=False, validators=[validate_password_contains_left_double_curly_bracket], + trim_whitespace=False, validators=[validate_password_for_ansible], write_only=True ) auto_generate_key = serializers.BooleanField(initial=True, required=False, write_only=True) diff --git a/apps/assets/serializers/utils.py b/apps/assets/serializers/utils.py index 9110a9978..52527e723 100644 --- a/apps/assets/serializers/utils.py +++ b/apps/assets/serializers/utils.py @@ -2,8 +2,16 @@ from django.utils.translation import ugettext_lazy as _ from rest_framework import serializers -def validate_password_contains_left_double_curly_bracket(password): +def validate_password_for_ansible(password): + """ 校验 Ansible 不支持的特殊字符 """ # validate password contains left double curly bracket # check password not contains `{{` + # Ansible 推送的时候不支持 if '{{' in password: raise serializers.ValidationError(_('Password can not contains `{{` ')) + # Ansible Windows 推送的时候不支持 + if "'" in password: + raise serializers.ValidationError(_("Password can not contains `'` ")) + if '"' in password: + raise serializers.ValidationError(_('Password can not contains `"` ')) + From 9dc7da359531fd7402ceb016036c4ce4630f699a Mon Sep 17 00:00:00 2001 From: fit2bot <68588906+fit2bot@users.noreply.github.com> Date: Tue, 14 Jun 2022 19:59:00 +0800 Subject: [PATCH 05/21] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=20apt=20(#8398?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * pref: 修改 oracle lib path * perf: 优化 apt Co-authored-by: ibuler --- Dockerfile | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index dfbfbe0eb..de4022338 100644 --- a/Dockerfile +++ b/Dockerfile @@ -29,11 +29,12 @@ ARG TOOLS=" \ redis-tools \ telnet \ vim \ + unzip \ wget" RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list \ && sed -i 's/security.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list \ - && apt update \ + && apt update && sleep 1 && apt update \ && apt -y install ${BUILD_DEPENDENCIES} \ && apt -y install ${DEPENDENCIES} \ && apt -y install ${TOOLS} \ @@ -47,12 +48,19 @@ RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list \ && mv /bin/sh /bin/sh.bak \ && ln -s /bin/bash /bin/sh +ARG TARGETARCH +ARG ORACLE_LIB_MAJOR=19 +ARG ORACLE_LIB_MINOR=10 +ENV ORACLE_FILE="instantclient-basiclite-linux.${TARGETARCH:-amd64}-${ORACLE_LIB_MAJOR}.${ORACLE_LIB_MINOR}.0.0.0dbru.zip" + RUN mkdir -p /opt/oracle/ \ - && wget https://download.jumpserver.org/public/instantclient-basiclite-linux.x64-21.1.0.0.0.tar \ - && tar xf instantclient-basiclite-linux.x64-21.1.0.0.0.tar -C /opt/oracle/ \ - && echo "/opt/oracle/instantclient_21_1" > /etc/ld.so.conf.d/oracle-instantclient.conf \ + && cd /opt/oracle/ \ + && wget https://download.jumpserver.org/files/oracle/${ORACLE_FILE} \ + && unzip instantclient-basiclite-linux.${TARGETARCH-amd64}-19.10.0.0.0dbru.zip \ + && mv instantclient_${ORACLE_LIB_MAJOR}_${ORACLE_LIB_MINOR} instantclient \ + && echo "/opt/oracle/instantclient" > /etc/ld.so.conf.d/oracle-instantclient.conf \ && ldconfig \ - && rm -f instantclient-basiclite-linux.x64-21.1.0.0.0.tar + && rm -f ${ORACLE_FILE} WORKDIR /tmp/build COPY ./requirements ./requirements From e6176975537ef11d878962c3bbc8299dcc733e71 Mon Sep 17 00:00:00 2001 From: fit2bot <68588906+fit2bot@users.noreply.github.com> Date: Wed, 15 Jun 2022 15:01:56 +0800 Subject: [PATCH 06/21] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=8E=88?= =?UTF-8?q?=E6=9D=83=E8=BF=87=E6=9C=9F=E9=80=9A=E7=9F=A5bug=20(#8404)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: feng626 <1304903146@qq.com> --- apps/perms/notifications.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/apps/perms/notifications.py b/apps/perms/notifications.py index 4a7baf318..a6316eb8a 100644 --- a/apps/perms/notifications.py +++ b/apps/perms/notifications.py @@ -12,13 +12,13 @@ class PermedAssetsWillExpireUserMsg(UserMessage): def __init__(self, user, assets, day_count=0): super().__init__(user) self.assets = assets - self.count = day_count + self.day_count = day_count def get_html_msg(self) -> dict: subject = _("You permed assets is about to expire") context = { 'name': self.user.name, - 'day_count': self.day_count, + 'count': self.day_count, 'items': [str(asset) for asset in self.assets], 'item_type': _("permed assets"), 'show_help': True @@ -44,7 +44,7 @@ class AssetPermsWillExpireForOrgAdminMsg(UserMessage): super().__init__(user) self.perms = perms self.org = org - self.count = day_count + self.day_count = day_count def get_items_with_url(self): items_with_url = [] @@ -62,7 +62,7 @@ class AssetPermsWillExpireForOrgAdminMsg(UserMessage): subject = _("Asset permissions is about to expire") context = { 'name': self.user.name, - 'day_count': self.day_count, + 'count': self.day_count, 'items_with_url': items_with_url, 'item_type': _('asset permissions of organization {}').format(self.org) } @@ -88,13 +88,13 @@ class PermedAppsWillExpireUserMsg(UserMessage): def __init__(self, user, apps, day_count=0): super().__init__(user) self.apps = apps - self.count = day_count + self.day_count = day_count def get_html_msg(self) -> dict: subject = _("Your permed applications is about to expire") context = { 'name': self.user.name, - 'day_count': self.day_count, + 'count': self.day_count, 'item_type': _('permed applications'), 'items': [str(app) for app in self.apps] } @@ -119,7 +119,7 @@ class AppPermsWillExpireForOrgAdminMsg(UserMessage): super().__init__(user) self.perms = perms self.org = org - self.count = day_count + self.day_count = day_count def get_items_with_url(self): items_with_url = [] @@ -134,6 +134,7 @@ class AppPermsWillExpireForOrgAdminMsg(UserMessage): subject = _('Application permissions is about to expire') context = { 'name': self.user.name, + 'count': self.day_count, 'item_type': _('application permissions of organization {}').format(self.org), 'items_with_url': items } From 0792c7ec497445278d2793e83df83f88602d1fdb Mon Sep 17 00:00:00 2001 From: "Jiangjie.Bai" Date: Wed, 15 Jun 2022 15:15:54 +0800 Subject: [PATCH 07/21] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9=E6=8E=A8?= =?UTF-8?q?=E9=80=81=E7=B3=BB=E7=BB=9F=E7=94=A8=E6=88=B7=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=E6=96=87=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/tasks/push_system_user.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/assets/tasks/push_system_user.py b/apps/assets/tasks/push_system_user.py index ee4af0fd5..cd32d8e15 100644 --- a/apps/assets/tasks/push_system_user.py +++ b/apps/assets/tasks/push_system_user.py @@ -274,7 +274,7 @@ def push_system_user_a_asset_manual(system_user, asset, username=None): # if username is None: # username = system_user.username task_name = gettext_noop("Push system users to asset: ") + "{}({}) => {}".format( - system_user.name, username, asset + system_user.name, username or '', asset ) return push_system_user_util(system_user, [asset], task_name=task_name, username=username) From 153fad9ac797fccff891c50f234333cfac8ed05e Mon Sep 17 00:00:00 2001 From: feng626 <1304903146@qq.com> Date: Wed, 15 Jun 2022 15:27:13 +0800 Subject: [PATCH 08/21] feat: add client linux arm64 version --- apps/templates/resource_download.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/templates/resource_download.html b/apps/templates/resource_download.html index 57570eb8e..dddb1143c 100644 --- a/apps/templates/resource_download.html +++ b/apps/templates/resource_download.html @@ -22,7 +22,8 @@ p { From d745314aa1305360c9225a05748ff2d583224241 Mon Sep 17 00:00:00 2001 From: ibuler Date: Wed, 15 Jun 2022 10:31:20 +0800 Subject: [PATCH 09/21] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E7=AD=BE?= =?UTF-8?q?=E5=90=8D=E8=AE=A4=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/authentication/backends/drf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/authentication/backends/drf.py b/apps/authentication/backends/drf.py index 595ae35b6..10c191b1b 100644 --- a/apps/authentication/backends/drf.py +++ b/apps/authentication/backends/drf.py @@ -198,6 +198,6 @@ class SignatureAuthentication(signature.SignatureAuthentication): return None, None user, secret = key.user, str(key.secret) return user, secret - except AccessKey.DoesNotExist: + except (AccessKey.DoesNotExist, exceptions.ValidationError): return None, None From 0fe221019af6b16e8ac6686144030e65beb042c0 Mon Sep 17 00:00:00 2001 From: ibuler Date: Wed, 15 Jun 2022 15:13:51 +0800 Subject: [PATCH 10/21] =?UTF-8?q?pref:=20=E4=BC=98=E5=8C=96=E6=B2=A1?= =?UTF-8?q?=E6=9C=89=E8=8E=B7=E5=8F=96=E5=88=B0=E8=8A=82=E7=82=B9=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/perms/tree/app.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/apps/perms/tree/app.py b/apps/perms/tree/app.py index 0b74c1e9b..6a6d6c74f 100644 --- a/apps/perms/tree/app.py +++ b/apps/perms/tree/app.py @@ -36,6 +36,22 @@ class GrantedAppTreeUtil: }) return node + @staticmethod + def create_empty_node(): + name = _("Empty") + node = TreeNode(**{ + 'id': 'empty', + 'name': name, + 'title': name, + 'pId': '', + 'isParent': True, + 'children': [], + 'meta': { + 'type': 'application' + } + }) + return node + @staticmethod def get_children_nodes(tree_id, parent_info, user): tree_nodes = [] @@ -61,7 +77,7 @@ class GrantedAppTreeUtil: def create_tree_nodes(self, applications): tree_nodes = [] if not applications: - return tree_nodes + return [self.create_empty_node()] root_node = self.create_root_node() organizations = self.filter_organizations(applications) From 62f5662bd028d2fb619d89df53613bc2625a9c4e Mon Sep 17 00:00:00 2001 From: "Jiangjie.Bai" Date: Wed, 15 Jun 2022 19:27:51 +0800 Subject: [PATCH 11/21] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8Dopenid=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E7=99=BB=E5=BD=95=E6=97=B6=E9=BB=98=E8=AE=A4=E9=82=AE?= =?UTF-8?q?=E4=BB=B6=E5=90=8E=E7=BC=80=E4=BD=BF=E7=94=A8=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/authentication/backends/oidc/backends.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/authentication/backends/oidc/backends.py b/apps/authentication/backends/oidc/backends.py index ec5765510..9866e84f3 100644 --- a/apps/authentication/backends/oidc/backends.py +++ b/apps/authentication/backends/oidc/backends.py @@ -46,7 +46,7 @@ class UserMixin: for field, attr in settings.AUTH_OPENID_USER_ATTR_MAP.items(): user_attrs[field] = claims.get(attr, sub) email = user_attrs.get('email', '') - email = construct_user_email(user_attrs.get('username'), email, 'jumpserver.openid') + email = construct_user_email(user_attrs.get('username'), email) user_attrs.update({'email': email}) logger.debug(log_prompt.format(user_attrs)) From 3048e6311b35487c3ad4c7cb805e8c66714a8168 Mon Sep 17 00:00:00 2001 From: jiangweidong Date: Thu, 8 Sep 2022 18:08:46 +0800 Subject: [PATCH 12/21] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=8D=8E?= =?UTF-8?q?=E4=B8=BA=E7=9F=AD=E4=BF=A1=E9=85=8D=E7=BD=AE=E9=94=99=E8=AF=AF?= =?UTF-8?q?=EF=BC=8C=E5=89=8D=E7=AB=AF=E6=8F=90=E7=A4=BA=E4=B8=8D=E5=AF=B9?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/common/sdk/sms/huawei.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/common/sdk/sms/huawei.py b/apps/common/sdk/sms/huawei.py index 154b554fd..c5d6bb116 100644 --- a/apps/common/sdk/sms/huawei.py +++ b/apps/common/sdk/sms/huawei.py @@ -86,7 +86,7 @@ class HuaweiSMS(BaseSMSClient): except Exception as error: raise JMSException(code='response_bad', detail=error) - if resp_msg.get('code' != '000000'): + if resp_msg.get('code') != '000000': raise JMSException(code='response_bad', detail=resp_msg) return resp_msg From cb2bd0cf2c4a2d538a4291e2dab63ccac65a3f65 Mon Sep 17 00:00:00 2001 From: fit2bot <68588906+fit2bot@users.noreply.github.com> Date: Fri, 9 Sep 2022 16:01:08 +0800 Subject: [PATCH 13/21] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E8=B4=A6?= =?UTF-8?q?=E5=8F=B7=E5=A4=87=E4=BB=BD=E5=A4=B1=E8=B4=A5=E9=97=AE=E9=A2=98?= =?UTF-8?q?=20(#8852)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: feng626 <1304903146@qq.com> --- apps/assets/task_handlers/backup/handlers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/assets/task_handlers/backup/handlers.py b/apps/assets/task_handlers/backup/handlers.py index a29058fac..43e6a80db 100644 --- a/apps/assets/task_handlers/backup/handlers.py +++ b/apps/assets/task_handlers/backup/handlers.py @@ -158,7 +158,7 @@ class AppAccountHandler(BaseAccountHandler): continue for account in accounts: cls.replace_account_info(account, app_dict, system_user_dict) - data = AppAccountBackUpSerializer(accounts, many=True, app_type=app_type).data + data = AppAccountBackUpSerializer(accounts, many=True, tp=app_type).data data_map.update(cls.add_rows(data, header_fields, sheet_name)) logger.info('\n\033[33m- 共收集{}条应用账号\033[0m'.format(qs.count())) return data_map From c26a786287cb43228a90a845fb056e822f971bb2 Mon Sep 17 00:00:00 2001 From: ibuler Date: Tue, 13 Sep 2022 11:26:26 +0800 Subject: [PATCH 14/21] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E5=8A=A0?= =?UTF-8?q?=E5=AF=86=EF=BC=8C=E6=B2=A1=E6=9C=89rsa=E5=88=99=E4=B8=8D?= =?UTF-8?q?=E5=8A=A0=E5=AF=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/static/js/jumpserver.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/apps/static/js/jumpserver.js b/apps/static/js/jumpserver.js index c95c06c2c..b6bb6c6a4 100644 --- a/apps/static/js/jumpserver.js +++ b/apps/static/js/jumpserver.js @@ -1549,10 +1549,13 @@ function encryptPassword(password) { if (!password) { return '' } - const aesKey = (Math.random() + 1).toString(36).substring(2) // public key 是 base64 存储的 - const rsaPublicKeyText = getCookie('jms_public_key') - .replaceAll('"', '') + let rsaPublicKeyText = getCookie('jms_public_key') + if (!rsaPublicKeyText) { + return password + } + const aesKey = (Math.random() + 1).toString(36).substring(2) + rsaPublicKeyText = rsaPublicKeyText.replaceAll('"', '') const rsaPublicKey = atob(rsaPublicKeyText) const keyCipher = rsaEncrypt(aesKey, rsaPublicKey) const passwordCipher = aesEncrypt(password, aesKey) From 43d61b5348ead40fcc98a26d8804d059583f5d3e Mon Sep 17 00:00:00 2001 From: jiangweidong Date: Fri, 9 Sep 2022 19:05:36 +0800 Subject: [PATCH 15/21] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E5=AF=B9?= =?UTF-8?q?=E5=BC=80=E5=90=AFSSL/TLS=E7=9A=84MongoDb=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E6=94=B9=E5=AF=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/common/utils/file.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/apps/common/utils/file.py b/apps/common/utils/file.py index 9529fbdca..efc652870 100644 --- a/apps/common/utils/file.py +++ b/apps/common/utils/file.py @@ -4,6 +4,10 @@ import csv import pyzipper import requests +from hashlib import md5 + +from django.conf import settings + def create_csv_file(filename, headers, rows, ): with open(filename, 'w', encoding='utf-8-sig')as f: @@ -28,3 +32,18 @@ def download_file(src, path): with open(path, 'wb') as f: for chunk in r.iter_content(chunk_size=8192): f.write(chunk) + + +def save_content_to_temp_path(content, file_mode=0o400): + if not content: + return + + project_dir = settings.PROJECT_DIR + tmp_dir = os.path.join(project_dir, 'tmp') + filename = '.' + md5(content.encode('utf-8')).hexdigest() + filepath = os.path.join(tmp_dir, filename) + if not os.path.exists(filepath): + with open(filepath, 'w') as f: + f.write(content) + os.chmod(filepath, file_mode) + return filepath From 8d1fb84aaf4c576058302ecf6b4ca1332ee9fc21 Mon Sep 17 00:00:00 2001 From: feng626 <1304903146@qq.com> Date: Fri, 9 Sep 2022 15:38:59 +0800 Subject: [PATCH 16/21] =?UTF-8?q?perf:=20=E5=B7=A5=E5=8D=95=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E7=9B=B8=E5=85=B3=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/tickets/filters.py | 73 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 72 insertions(+), 1 deletion(-) diff --git a/apps/tickets/filters.py b/apps/tickets/filters.py index bf20014cc..659556c12 100644 --- a/apps/tickets/filters.py +++ b/apps/tickets/filters.py @@ -1,5 +1,6 @@ from django_filters import rest_framework as filters -from django.db.models import Subquery, OuterRef +from django.db.models.functions import Concat +from django.db.models import Subquery, OuterRef, Value, F, Q from common.drf.filters import BaseFilterSet @@ -11,6 +12,10 @@ from tickets.models import ( class TicketFilter(BaseFilterSet): assignees__id = filters.UUIDFilter(method='filter_assignees_id') + relevant_app = filters.CharFilter(method='filter_relevant_app') + relevant_asset = filters.CharFilter(method='filter_relevant_asset') + relevant_system_user = filters.CharFilter(method='filter_relevant_system_user') + relevant_command = filters.CharFilter(method='filter_relevant_command') class Meta: model = Ticket @@ -27,6 +32,72 @@ class TicketFilter(BaseFilterSet): ticket_steps__ticket_assignees__assignee__id=value ) + def filter_relevant_asset(self, queryset, name, value): + asset_ids = ApplyAssetTicket.objects.annotate( + asset_str=Concat( + F('apply_assets__hostname'), Value('('), + F('apply_assets__ip'), Value(')') + ) + ).filter( + asset_str__icontains=value + ).values_list('id', flat=True) + + login_asset_ids = ApplyLoginAssetTicket.objects.annotate( + asset_str=Concat( + F('apply_login_asset__hostname'), Value('('), + F('apply_login_asset__ip'), Value(')') + ) + ).filter( + asset_str__icontains=value + ).values_list('id', flat=True) + + command_ids = ApplyCommandTicket.objects.filter( + apply_run_asset__icontains=value + ).values_list('id', flat=True) + + ticket_ids = list(set(list(asset_ids) + list(login_asset_ids) + list(command_ids))) + return queryset.filter(id__in=ticket_ids) + + def filter_relevant_app(self, queryset, name, value): + app_ids = ApplyApplicationTicket.objects.filter( + apply_applications__name__icontains=value + ).values_list('id', flat=True) + + command_ids = ApplyCommandTicket.objects.filter( + apply_run_asset__icontains=value + ).values_list('id', flat=True) + + ticket_ids = list(set(list(app_ids) + list(command_ids))) + return queryset.filter(id__in=ticket_ids) + + def filter_relevant_system_user(self, queryset, name, value): + system_user_query = Q(apply_system_users__name__icontains=value) + asset_ids = ApplyAssetTicket.objects.filter( + system_user_query + ).values_list('id', flat=True) + + app_ids = ApplyApplicationTicket.objects.filter( + system_user_query + ).values_list('id', flat=True) + + login_asset_ids = ApplyLoginAssetTicket.objects.filter( + apply_login_system_user__name__icontains=value + ).values_list('id', flat=True) + + command_ids = ApplyCommandTicket.objects.filter( + apply_run_system_user__name__icontains=value + ).values_list('id', flat=True) + ticket_ids = list( + set(list(asset_ids) + list(app_ids) + list(login_asset_ids) + list(command_ids)) + ) + return queryset.filter(id__in=ticket_ids) + + def filter_relevant_command(self, queryset, name, value): + command_ids = ApplyCommandTicket.objects.filter( + apply_run_command__icontains=value + ).values_list('id', flat=True) + return queryset.filter(id__in=list(command_ids)) + class ApplyAssetTicketFilter(BaseFilterSet): class Meta: From c008115888c54faf418161046926718fdef6612b Mon Sep 17 00:00:00 2001 From: fit2bot <68588906+fit2bot@users.noreply.github.com> Date: Tue, 13 Sep 2022 17:20:09 +0800 Subject: [PATCH 17/21] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E9=85=8D?= =?UTF-8?q?=E7=BD=AEmfa=E5=A4=B1=E6=95=88=E6=97=A5=E6=9C=9F=20=E5=A4=B1?= =?UTF-8?q?=E6=95=88=E9=97=AE=E9=A2=98=20(#8856)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: feng626 <1304903146@qq.com> --- apps/common/permissions.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/common/permissions.py b/apps/common/permissions.py index 869107a58..b6ba60ac9 100644 --- a/apps/common/permissions.py +++ b/apps/common/permissions.py @@ -70,7 +70,8 @@ class UserConfirmation(permissions.BasePermission): return True @classmethod - def require(cls, confirm_type=ConfirmType.ReLogin, ttl=300): + def require(cls, confirm_type=ConfirmType.ReLogin, ttl=60 * 5): min_level = ConfirmType.values.index(confirm_type) + 1 + ttl = settings.SECURITY_MFA_VERIFY_TTL if confirm_type == ConfirmType.MFA else ttl name = 'UserConfirmationLevel{}TTL{}'.format(min_level, ttl) return type(name, (cls,), {'min_level': min_level, 'ttl': ttl, 'confirm_type': confirm_type}) From 11675dc850022223c467b27242dc73d46ada1f84 Mon Sep 17 00:00:00 2001 From: Bai Date: Wed, 15 Mar 2023 19:43:11 +0800 Subject: [PATCH 18/21] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E8=AE=B0=E5=BD=95=E5=88=B0syslog=E6=97=B6=E4=B8=AD?= =?UTF-8?q?=E6=96=87=E7=BC=96=E7=A0=81=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/common/utils/encode.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/common/utils/encode.py b/apps/common/utils/encode.py index 5a48261da..51b97b8b6 100644 --- a/apps/common/utils/encode.py +++ b/apps/common/utils/encode.py @@ -274,4 +274,4 @@ def ensure_last_char_is_ascii(data): def data_to_json(data, sort_keys=True, indent=2, cls=None): if cls is None: cls = DjangoJSONEncoder - return json.dumps(data, sort_keys=sort_keys, indent=indent, cls=cls) + return json.dumps(data, ensure_ascii=False, sort_keys=sort_keys, indent=indent, cls=cls) From 927251902c0dfffd60e6d14e322450b865dee279 Mon Sep 17 00:00:00 2001 From: BugKing Date: Thu, 16 Mar 2023 09:56:25 +0800 Subject: [PATCH 19/21] =?UTF-8?q?workflow:=20=E4=BF=AE=E6=94=B9=20Gitee=20?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E7=9A=84=E7=9B=AE=E7=9A=84=E4=BB=93=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/sync-gitee.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/sync-gitee.yml b/.github/workflows/sync-gitee.yml index 55871042a..d4f5e6d68 100644 --- a/.github/workflows/sync-gitee.yml +++ b/.github/workflows/sync-gitee.yml @@ -20,4 +20,4 @@ jobs: SSH_PRIVATE_KEY: ${{ secrets.GITEE_SSH_PRIVATE_KEY }} with: source-repo: 'git@github.com:jumpserver/jumpserver.git' - destination-repo: 'git@gitee.com:jumpserver/jumpserver.git' + destination-repo: 'git@gitee.com:fit2cloud-feizhiyun/JumpServer.git' From 0747cf7c5e71d4a01137cea40555fa13014f2a10 Mon Sep 17 00:00:00 2001 From: Bai Date: Thu, 16 Mar 2023 11:15:47 +0800 Subject: [PATCH 20/21] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=E8=B4=A6=E5=8F=B7=E5=8E=86=E5=8F=B2=E7=BF=BB=E8=AF=91?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/accounts/serializers/account/account.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/apps/accounts/serializers/account/account.py b/apps/accounts/serializers/account/account.py index a06a11fd6..5b7bbdbce 100644 --- a/apps/accounts/serializers/account/account.py +++ b/apps/accounts/serializers/account/account.py @@ -135,8 +135,15 @@ class AccountHistorySerializer(serializers.ModelSerializer): class Meta: model = Account.history.model - fields = ['id', 'secret', 'secret_type', 'version', 'history_date', 'history_user'] + fields = [ + 'id', 'secret', 'secret_type', 'version', 'history_date', + 'history_user' + ] read_only_fields = fields + extra_kwargs = { + 'history_user': {'label': _('User')}, + 'history_date': {'label': _('Date')}, + } class AccountTaskSerializer(serializers.Serializer): From ff4560c2a76605064b3aa7b5866046b500f3f2f6 Mon Sep 17 00:00:00 2001 From: ibuler Date: Thu, 17 Aug 2023 17:39:58 +0800 Subject: [PATCH 21/21] =?UTF-8?q?perf:=20=E4=BF=AE=E6=94=B9=20django=20cas?= =?UTF-8?q?=20version?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- poetry.lock | 6 +++--- pyproject.toml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index 7a3397d29..0bc57ce0a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1824,7 +1824,7 @@ description = "" optional = false python-versions = ">=3.7" files = [ - {file = "django-cas-ng-4.3.1.zip", hash = "sha256:aeea96ad7958e3cb40d9bb5ef6a1add66f720835dfe87cc1dfe163f92d084690"}, + {file = "django-cas-ng-4.3.2.zip", hash = "sha256:3539eae7ca857017cefa962782c99cbd35cc15ea741655b10c3417fa7e86807a"}, ] [package.dependencies] @@ -1833,7 +1833,7 @@ python-cas = ">=1.6.0" [package.source] type = "url" -url = "https://github.com/ibuler/django-cas-ng/releases/download/v4.3.1/django-cas-ng-4.3.1.zip" +url = "https://github.com/ibuler/django-cas-ng/releases/download/v4.3.2/django-cas-ng-4.3.2.zip" [[package]] name = "django-celery-beat" @@ -7223,4 +7223,4 @@ reference = "tsinghua" [metadata] lock-version = "2.0" python-versions = "^3.11" -content-hash = "0bc2878f163c8b2f48d1103d96314c56f722f10d8f8adf6dfaba0452e6eac368" +content-hash = "6772c51033ce0b8cc877596f541cef0b902fe81d7495367cf4f7febec2bc260b" diff --git a/pyproject.toml b/pyproject.toml index 00d18bf29..5df11be53 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -114,7 +114,7 @@ websockets = "11.0.3" python-ldap = "3.4.3" ldap3 = "2.9.1" django-radius = { url = "https://github.com/ibuler/django-radius/archive/refs/tags/1.5.0.zip" } -django-cas-ng = { url = "https://github.com/ibuler/django-cas-ng/releases/download/v4.3.1/django-cas-ng-4.3.1.zip" } +django-cas-ng = {url = "https://github.com/ibuler/django-cas-ng/releases/download/v4.3.2/django-cas-ng-4.3.2.zip"} python-cas = "1.6.0" django-auth-ldap = "4.4.0" boto3 = "1.28.9"