feat: 同步ldap用户消息通知

pull/12533/head
wangruidong 2024-01-11 19:07:54 +08:00 committed by Bryan
parent 1275087f19
commit e428eb351b
12 changed files with 398 additions and 253 deletions

View File

@ -282,6 +282,7 @@ class Config(dict):
'AUTH_LDAP_SYNC_INTERVAL': None, 'AUTH_LDAP_SYNC_INTERVAL': None,
'AUTH_LDAP_SYNC_CRONTAB': None, 'AUTH_LDAP_SYNC_CRONTAB': None,
'AUTH_LDAP_SYNC_ORG_IDS': ['00000000-0000-0000-0000-000000000002'], 'AUTH_LDAP_SYNC_ORG_IDS': ['00000000-0000-0000-0000-000000000002'],
'AUTH_LDAP_SYNC_RECEIVERS': [],
'AUTH_LDAP_USER_LOGIN_ONLY_IN_USERS': False, 'AUTH_LDAP_USER_LOGIN_ONLY_IN_USERS': False,
'AUTH_LDAP_OPTIONS_OPT_REFERRALS': -1, 'AUTH_LDAP_OPTIONS_OPT_REFERRALS': -1,

View File

@ -50,6 +50,7 @@ AUTH_LDAP_SYNC_IS_PERIODIC = CONFIG.AUTH_LDAP_SYNC_IS_PERIODIC
AUTH_LDAP_SYNC_INTERVAL = CONFIG.AUTH_LDAP_SYNC_INTERVAL AUTH_LDAP_SYNC_INTERVAL = CONFIG.AUTH_LDAP_SYNC_INTERVAL
AUTH_LDAP_SYNC_CRONTAB = CONFIG.AUTH_LDAP_SYNC_CRONTAB AUTH_LDAP_SYNC_CRONTAB = CONFIG.AUTH_LDAP_SYNC_CRONTAB
AUTH_LDAP_SYNC_ORG_IDS = CONFIG.AUTH_LDAP_SYNC_ORG_IDS AUTH_LDAP_SYNC_ORG_IDS = CONFIG.AUTH_LDAP_SYNC_ORG_IDS
AUTH_LDAP_SYNC_RECEIVERS = CONFIG.AUTH_LDAP_SYNC_RECEIVERS
AUTH_LDAP_USER_LOGIN_ONLY_IN_USERS = CONFIG.AUTH_LDAP_USER_LOGIN_ONLY_IN_USERS AUTH_LDAP_USER_LOGIN_ONLY_IN_USERS = CONFIG.AUTH_LDAP_USER_LOGIN_ONLY_IN_USERS
# ============================================================================== # ==============================================================================

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:d8f3d621226f7e11db46fb35abf0b5f5528eb454a3a6f889499d7872d41a275d oid sha256:18c4618e0d0470e25d99b143e83de9a439ac691e5cb1d92ea5406cc32338e8f8
size 170675 size 170813

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-01-03 11:23+0800\n" "POT-Creation-Date: 2024-01-11 18:58+0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -29,8 +29,9 @@ msgstr "パラメータ 'action' は [{}] でなければなりません。"
#: authentication/confirm/password.py:26 authentication/forms.py:32 #: authentication/confirm/password.py:26 authentication/forms.py:32
#: authentication/templates/authentication/login.html:330 #: authentication/templates/authentication/login.html:330
#: settings/serializers/auth/ldap.py:25 settings/serializers/auth/ldap.py:47 #: settings/serializers/auth/ldap.py:25 settings/serializers/auth/ldap.py:47
#: terminal/serializers/storage.py:123 terminal/serializers/storage.py:142 #: settings/serializers/msg.py:35 terminal/serializers/storage.py:123
#: users/forms/profile.py:22 users/serializers/user.py:104 #: terminal/serializers/storage.py:142 users/forms/profile.py:22
#: users/serializers/user.py:104
#: users/templates/users/_msg_user_created.html:13 #: users/templates/users/_msg_user_created.html:13
#: users/templates/users/user_password_verify.html:18 #: users/templates/users/user_password_verify.html:18
#: xpack/plugins/cloud/serializers/account_attrs.py:28 #: xpack/plugins/cloud/serializers/account_attrs.py:28
@ -200,10 +201,10 @@ msgstr "作成のみ"
#: authentication/serializers/password_mfa.py:16 #: authentication/serializers/password_mfa.py:16
#: authentication/serializers/password_mfa.py:24 #: authentication/serializers/password_mfa.py:24
#: notifications/backends/__init__.py:10 settings/serializers/msg.py:22 #: notifications/backends/__init__.py:10 settings/serializers/msg.py:22
#: settings/serializers/msg.py:57 users/forms/profile.py:102 #: settings/serializers/msg.py:64 users/forms/profile.py:102
#: users/forms/profile.py:109 users/models/user.py:802 #: users/forms/profile.py:109 users/models/user.py:802
#: users/templates/users/forgot_password.html:117 #: users/templates/users/forgot_password.html:117
#: users/views/profile/reset.py:92 #: users/views/profile/reset.py:93
msgid "Email" msgid "Email"
msgstr "メール" msgstr "メール"
@ -287,11 +288,11 @@ msgstr "ソース ID"
#: accounts/serializers/automations/change_secret.py:107 #: accounts/serializers/automations/change_secret.py:107
#: accounts/serializers/automations/change_secret.py:127 #: accounts/serializers/automations/change_secret.py:127
#: acls/serializers/base.py:124 acls/templates/acls/asset_login_reminder.html:7 #: acls/serializers/base.py:124 acls/templates/acls/asset_login_reminder.html:7
#: assets/serializers/asset/common.py:125 assets/serializers/gateway.py:28 #: assets/serializers/asset/common.py:128 assets/serializers/gateway.py:28
#: audits/models.py:59 authentication/api/connection_token.py:405 #: audits/models.py:59 authentication/api/connection_token.py:405
#: ops/models/base.py:18 perms/models/asset_permission.py:75 #: ops/models/base.py:18 perms/models/asset_permission.py:75
#: perms/serializers/permission.py:41 terminal/backends/command/models.py:18 #: perms/serializers/permission.py:41 settings/serializers/msg.py:33
#: terminal/models/session/session.py:33 #: terminal/backends/command/models.py:18 terminal/models/session/session.py:33
#: terminal/templates/terminal/_msg_command_warning.html:8 #: terminal/templates/terminal/_msg_command_warning.html:8
#: terminal/templates/terminal/_msg_session_sharing.html:8 #: terminal/templates/terminal/_msg_session_sharing.html:8
#: tickets/models/ticket/command_confirm.py:13 xpack/plugins/cloud/models.py:89 #: tickets/models/ticket/command_confirm.py:13 xpack/plugins/cloud/models.py:89
@ -361,8 +362,9 @@ msgstr "アカウントバックアップ計画"
#: assets/models/automations/base.py:115 audits/models.py:65 #: assets/models/automations/base.py:115 audits/models.py:65
#: ops/models/base.py:55 ops/models/celery.py:63 ops/models/job.py:235 #: ops/models/base.py:55 ops/models/celery.py:63 ops/models/job.py:235
#: ops/templates/ops/celery_task_log.html:75 #: ops/templates/ops/celery_task_log.html:75
#: perms/models/asset_permission.py:78 terminal/models/applet/host.py:141 #: perms/models/asset_permission.py:78
#: terminal/models/session/session.py:44 #: settings/templates/ldap/_msg_import_ldap_user.html:25
#: terminal/models/applet/host.py:141 terminal/models/session/session.py:44
#: tickets/models/ticket/apply_application.py:30 #: tickets/models/ticket/apply_application.py:30
#: tickets/models/ticket/apply_asset.py:19 #: tickets/models/ticket/apply_asset.py:19
msgid "Date start" msgid "Date start"
@ -371,6 +373,7 @@ msgstr "開始日"
#: accounts/models/automations/backup_account.py:122 #: accounts/models/automations/backup_account.py:122
#: authentication/templates/authentication/_msg_oauth_bind.html:11 #: authentication/templates/authentication/_msg_oauth_bind.html:11
#: notifications/notifications.py:186 #: notifications/notifications.py:186
#: settings/templates/ldap/_msg_import_ldap_user.html:23
msgid "Time" msgid "Time"
msgstr "時間" msgstr "時間"
@ -446,6 +449,7 @@ msgstr "SSHキープッシュ方式"
#: accounts/models/automations/gather_account.py:58 #: accounts/models/automations/gather_account.py:58
#: accounts/serializers/account/backup.py:41 #: accounts/serializers/account/backup.py:41
#: accounts/serializers/automations/change_secret.py:56 #: accounts/serializers/automations/change_secret.py:56
#: settings/serializers/auth/ldap.py:81
msgid "Recipient" msgid "Recipient"
msgstr "受信者" msgstr "受信者"
@ -491,6 +495,7 @@ msgstr "ステータス"
#: authentication/templates/authentication/passkey.html:173 #: authentication/templates/authentication/passkey.html:173
#: authentication/views/base.py:42 authentication/views/base.py:43 #: authentication/views/base.py:42 authentication/views/base.py:43
#: authentication/views/base.py:44 common/const/choices.py:20 #: authentication/views/base.py:44 common/const/choices.py:20
#: settings/templates/ldap/_msg_import_ldap_user.html:16
msgid "Error" msgid "Error"
msgstr "間違い" msgstr "間違い"
@ -593,8 +598,8 @@ msgstr "パスワードルール"
#: assets/models/asset/common.py:159 assets/models/cmd_filter.py:21 #: assets/models/asset/common.py:159 assets/models/cmd_filter.py:21
#: assets/models/domain.py:19 assets/models/group.py:17 #: assets/models/domain.py:19 assets/models/group.py:17
#: assets/models/label.py:18 assets/models/platform.py:16 #: assets/models/label.py:18 assets/models/platform.py:16
#: assets/models/platform.py:95 assets/serializers/asset/common.py:146 #: assets/models/platform.py:95 assets/serializers/asset/common.py:149
#: assets/serializers/platform.py:118 assets/serializers/platform.py:235 #: assets/serializers/platform.py:118 assets/serializers/platform.py:228
#: authentication/backends/passkey/models.py:10 #: authentication/backends/passkey/models.py:10
#: authentication/serializers/connect_token_secret.py:113 #: authentication/serializers/connect_token_secret.py:113
#: authentication/serializers/connect_token_secret.py:168 labels/models.py:11 #: authentication/serializers/connect_token_secret.py:168 labels/models.py:11
@ -602,7 +607,7 @@ msgstr "パスワードルール"
#: ops/models/celery.py:57 ops/models/job.py:136 ops/models/playbook.py:28 #: ops/models/celery.py:57 ops/models/job.py:136 ops/models/playbook.py:28
#: ops/serializers/job.py:18 orgs/models.py:82 #: ops/serializers/job.py:18 orgs/models.py:82
#: perms/models/asset_permission.py:61 rbac/models/role.py:29 #: perms/models/asset_permission.py:61 rbac/models/role.py:29
#: settings/models.py:33 settings/models.py:181 settings/serializers/msg.py:82 #: settings/models.py:33 settings/models.py:181 settings/serializers/msg.py:89
#: terminal/models/applet/applet.py:33 terminal/models/component/endpoint.py:12 #: terminal/models/applet/applet.py:33 terminal/models/component/endpoint.py:12
#: terminal/models/component/endpoint.py:95 #: terminal/models/component/endpoint.py:95
#: terminal/models/component/storage.py:26 terminal/models/component/task.py:13 #: terminal/models/component/storage.py:26 terminal/models/component/task.py:13
@ -738,8 +743,8 @@ msgstr "アカウントの存在ポリシー"
#: accounts/serializers/account/account.py:193 applications/models.py:11 #: accounts/serializers/account/account.py:193 applications/models.py:11
#: assets/models/label.py:21 assets/models/platform.py:96 #: assets/models/label.py:21 assets/models/platform.py:96
#: assets/serializers/asset/common.py:122 assets/serializers/cagegory.py:12 #: assets/serializers/asset/common.py:125 assets/serializers/cagegory.py:12
#: assets/serializers/platform.py:140 assets/serializers/platform.py:236 #: assets/serializers/platform.py:140 assets/serializers/platform.py:229
#: perms/serializers/user_permission.py:26 settings/models.py:35 #: perms/serializers/user_permission.py:26 settings/models.py:35
#: tickets/models/ticket/apply_application.py:13 users/models/preference.py:12 #: tickets/models/ticket/apply_application.py:13 users/models/preference.py:12
msgid "Category" msgid "Category"
@ -750,7 +755,7 @@ msgstr "カテゴリ"
#: acls/serializers/command_acl.py:19 applications/models.py:14 #: acls/serializers/command_acl.py:19 applications/models.py:14
#: assets/models/_user.py:50 assets/models/automations/base.py:20 #: assets/models/_user.py:50 assets/models/automations/base.py:20
#: assets/models/cmd_filter.py:74 assets/models/platform.py:97 #: assets/models/cmd_filter.py:74 assets/models/platform.py:97
#: assets/serializers/asset/common.py:123 assets/serializers/platform.py:120 #: assets/serializers/asset/common.py:126 assets/serializers/platform.py:120
#: assets/serializers/platform.py:139 audits/serializers.py:53 #: assets/serializers/platform.py:139 audits/serializers.py:53
#: audits/serializers.py:170 #: audits/serializers.py:170
#: authentication/serializers/connect_token_secret.py:126 ops/models/job.py:144 #: authentication/serializers/connect_token_secret.py:126 ops/models/job.py:144
@ -868,7 +873,7 @@ msgid "Key password"
msgstr "キーパスワード" msgstr "キーパスワード"
#: accounts/serializers/account/base.py:78 #: accounts/serializers/account/base.py:78
#: assets/serializers/asset/common.py:379 #: assets/serializers/asset/common.py:381
msgid "Spec info" msgid "Spec info"
msgstr "特別情報" msgstr "特別情報"
@ -1117,8 +1122,8 @@ msgid "Users"
msgstr "ユーザー" msgstr "ユーザー"
#: acls/models/base.py:98 assets/models/automations/base.py:17 #: acls/models/base.py:98 assets/models/automations/base.py:17
#: assets/models/cmd_filter.py:38 assets/serializers/asset/common.py:378 #: assets/models/cmd_filter.py:38 perms/serializers/user_permission.py:75
#: perms/serializers/user_permission.py:75 rbac/tree.py:35 #: rbac/tree.py:35
msgid "Accounts" msgid "Accounts"
msgstr "アカウント" msgstr "アカウント"
@ -1423,8 +1428,8 @@ msgstr "脚本"
#: assets/const/category.py:10 assets/models/asset/host.py:8 #: assets/const/category.py:10 assets/models/asset/host.py:8
#: settings/serializers/auth/radius.py:16 settings/serializers/auth/sms.py:71 #: settings/serializers/auth/radius.py:16 settings/serializers/auth/sms.py:71
#: settings/serializers/feature.py:49 terminal/models/component/endpoint.py:13 #: settings/serializers/feature.py:49 settings/serializers/msg.py:31
#: terminal/serializers/applet.py:17 #: terminal/models/component/endpoint.py:13 terminal/serializers/applet.py:17
#: xpack/plugins/cloud/serializers/account_attrs.py:72 #: xpack/plugins/cloud/serializers/account_attrs.py:72
msgid "Host" msgid "Host"
msgstr "ホスト" msgstr "ホスト"
@ -1548,7 +1553,7 @@ msgid "We will consider login success when we see this prompt"
msgstr "このプロンプトが表示されたらログイン成功とみなします" msgstr "このプロンプトが表示されたらログイン成功とみなします"
#: assets/const/protocol.py:119 assets/models/asset/database.py:10 #: assets/const/protocol.py:119 assets/models/asset/database.py:10
#: settings/serializers/msg.py:40 #: settings/serializers/msg.py:47
msgid "Use SSL" msgid "Use SSL"
msgstr "SSLの使用" msgstr "SSLの使用"
@ -1663,7 +1668,7 @@ msgstr "ユーザーと同じユーザー名"
#: assets/models/_user.py:52 authentication/models/connection_token.py:41 #: assets/models/_user.py:52 authentication/models/connection_token.py:41
#: authentication/serializers/connect_token_secret.py:114 #: authentication/serializers/connect_token_secret.py:114
#: terminal/models/applet/applet.py:42 #: settings/serializers/msg.py:29 terminal/models/applet/applet.py:42
#: terminal/models/virtualapp/virtualapp.py:24 #: terminal/models/virtualapp/virtualapp.py:24
#: terminal/serializers/session.py:19 terminal/serializers/session.py:45 #: terminal/serializers/session.py:19 terminal/serializers/session.py:45
#: terminal/serializers/storage.py:71 #: terminal/serializers/storage.py:71
@ -1716,12 +1721,12 @@ msgstr "クラウド サービス"
#: assets/models/asset/common.py:94 assets/models/platform.py:17 #: assets/models/asset/common.py:94 assets/models/platform.py:17
#: settings/serializers/auth/radius.py:17 settings/serializers/auth/sms.py:72 #: settings/serializers/auth/radius.py:17 settings/serializers/auth/sms.py:72
#: terminal/serializers/storage.py:133 #: settings/serializers/msg.py:32 terminal/serializers/storage.py:133
#: xpack/plugins/cloud/serializers/account_attrs.py:73 #: xpack/plugins/cloud/serializers/account_attrs.py:73
msgid "Port" msgid "Port"
msgstr "ポート" msgstr "ポート"
#: assets/models/asset/common.py:160 assets/serializers/asset/common.py:147 #: assets/models/asset/common.py:160 assets/serializers/asset/common.py:150
msgid "Address" msgid "Address"
msgstr "アドレス" msgstr "アドレス"
@ -1745,7 +1750,7 @@ msgstr "ドメイン"
msgid "Node" msgid "Node"
msgstr "ノード" msgstr "ノード"
#: assets/models/asset/common.py:167 assets/serializers/asset/common.py:380 #: assets/models/asset/common.py:167 assets/serializers/asset/common.py:382
#: assets/serializers/asset/host.py:11 #: assets/serializers/asset/host.py:11
msgid "Gathered info" msgid "Gathered info"
msgstr "資産ハードウェア情報の収集" msgstr "資産ハードウェア情報の収集"
@ -1894,7 +1899,7 @@ msgstr "値"
#: assets/serializers/platform.py:119 #: assets/serializers/platform.py:119
#: authentication/serializers/connect_token_secret.py:124 #: authentication/serializers/connect_token_secret.py:124
#: common/serializers/common.py:85 labels/models.py:17 labels/models.py:33 #: common/serializers/common.py:85 labels/models.py:17 labels/models.py:33
#: labels/serializers.py:45 settings/serializers/msg.py:83 #: labels/serializers.py:45 settings/serializers/msg.py:90
msgid "Label" msgid "Label"
msgstr "ラベル" msgstr "ラベル"
@ -2065,7 +2070,7 @@ msgstr ""
"プラットフォームタイプがスキップされた資産に合致しない、資産内の一括更新プ" "プラットフォームタイプがスキップされた資産に合致しない、資産内の一括更新プ"
"ラットフォーム" "ラットフォーム"
#: assets/serializers/asset/common.py:124 assets/serializers/platform.py:141 #: assets/serializers/asset/common.py:127 assets/serializers/platform.py:141
#: authentication/serializers/connect_token_secret.py:30 #: authentication/serializers/connect_token_secret.py:30
#: authentication/serializers/connect_token_secret.py:75 #: authentication/serializers/connect_token_secret.py:75
#: perms/models/asset_permission.py:76 perms/serializers/permission.py:42 #: perms/models/asset_permission.py:76 perms/serializers/permission.py:42
@ -2074,29 +2079,29 @@ msgstr ""
msgid "Protocols" msgid "Protocols"
msgstr "プロトコル" msgstr "プロトコル"
#: assets/serializers/asset/common.py:126 #: assets/serializers/asset/common.py:129
#: assets/serializers/asset/common.py:148 #: assets/serializers/asset/common.py:151
msgid "Node path" msgid "Node path"
msgstr "ノードパスです" msgstr "ノードパスです"
#: assets/serializers/asset/common.py:145 #: assets/serializers/asset/common.py:148
#: assets/serializers/asset/common.py:381 #: assets/serializers/asset/common.py:383
msgid "Auto info" msgid "Auto info"
msgstr "自動情報" msgstr "自動情報"
#: assets/serializers/asset/common.py:239 #: assets/serializers/asset/common.py:242
msgid "Platform not exist" msgid "Platform not exist"
msgstr "プラットフォームが存在しません" msgstr "プラットフォームが存在しません"
#: assets/serializers/asset/common.py:275 #: assets/serializers/asset/common.py:278
msgid "port out of range (0-65535)" msgid "port out of range (0-65535)"
msgstr "ポート番号が範囲外です (0-65535)" msgstr "ポート番号が範囲外です (0-65535)"
#: assets/serializers/asset/common.py:282 #: assets/serializers/asset/common.py:285
msgid "Protocol is required: {}" msgid "Protocol is required: {}"
msgstr "プロトコルが必要です: {}" msgstr "プロトコルが必要です: {}"
#: assets/serializers/asset/common.py:310 #: assets/serializers/asset/common.py:313
msgid "Invalid data" msgid "Invalid data"
msgstr "無効なデータ" msgstr "無効なデータ"
@ -2251,7 +2256,7 @@ msgstr "デフォルト ドメイン"
msgid "type is required" msgid "type is required"
msgstr "タイプ このフィールドは必須です." msgstr "タイプ このフィールドは必須です."
#: assets/serializers/platform.py:211 #: assets/serializers/platform.py:204
msgid "Protocols is required" msgid "Protocols is required"
msgstr "同意が必要です" msgstr "同意が必要です"
@ -2606,8 +2611,8 @@ msgstr "認証トークン"
#: audits/signal_handlers/login_log.py:37 authentication/notifications.py:73 #: audits/signal_handlers/login_log.py:37 authentication/notifications.py:73
#: authentication/views/login.py:77 notifications/backends/__init__.py:11 #: authentication/views/login.py:77 notifications/backends/__init__.py:11
#: settings/serializers/auth/wecom.py:10 users/models/user.py:749 #: settings/notifications.py:68 settings/serializers/auth/wecom.py:10
#: users/models/user.py:855 #: users/models/user.py:749 users/models/user.py:855
msgid "WeCom" msgid "WeCom"
msgstr "企業微信" msgstr "企業微信"
@ -2694,16 +2699,16 @@ msgstr "ACL アクションはレビューです"
msgid "Current user not support mfa type: {}" msgid "Current user not support mfa type: {}"
msgstr "現在のユーザーはmfaタイプをサポートしていません: {}" msgstr "現在のユーザーはmfaタイプをサポートしていません: {}"
#: authentication/api/password.py:34 terminal/api/session/session.py:305 #: authentication/api/password.py:33 terminal/api/session/session.py:305
#: users/views/profile/reset.py:61 #: users/views/profile/reset.py:62
msgid "User does not exist: {}" msgid "User does not exist: {}"
msgstr "ユーザーが存在しない: {}" msgstr "ユーザーが存在しない: {}"
#: authentication/api/password.py:34 users/views/profile/reset.py:163 #: authentication/api/password.py:33 users/views/profile/reset.py:163
msgid "No user matched" msgid "No user matched"
msgstr "ユーザーにマッチしなかった" msgstr "ユーザーにマッチしなかった"
#: authentication/api/password.py:38 #: authentication/api/password.py:37
msgid "" msgid ""
"The user is from {}, please go to the corresponding system to change the " "The user is from {}, please go to the corresponding system to change the "
"password" "password"
@ -2711,7 +2716,7 @@ msgstr ""
"ユーザーは {}からです。対応するシステムにアクセスしてパスワードを変更してくだ" "ユーザーは {}からです。対応するシステムにアクセスしてパスワードを変更してくだ"
"さい。" "さい。"
#: authentication/api/password.py:67 #: authentication/api/password.py:65
#: authentication/templates/authentication/login.html:361 #: authentication/templates/authentication/login.html:361
#: users/templates/users/forgot_password.html:27 #: users/templates/users/forgot_password.html:27
#: users/templates/users/forgot_password.html:28 #: users/templates/users/forgot_password.html:28
@ -3031,7 +3036,7 @@ msgstr "メッセージ検証コードが無効"
#: authentication/serializers/password_mfa.py:24 #: authentication/serializers/password_mfa.py:24
#: settings/serializers/auth/sms.py:32 users/forms/profile.py:104 #: settings/serializers/auth/sms.py:32 users/forms/profile.py:104
#: users/forms/profile.py:109 users/templates/users/forgot_password.html:112 #: users/forms/profile.py:109 users/templates/users/forgot_password.html:112
#: users/views/profile/reset.py:98 #: users/views/profile/reset.py:99
msgid "SMS" msgid "SMS"
msgstr "メッセージ" msgstr "メッセージ"
@ -3047,7 +3052,7 @@ msgstr "電話番号を設定して有効にする"
msgid "Clear phone number to disable" msgid "Clear phone number to disable"
msgstr "無効にする電話番号をクリアする" msgstr "無効にする電話番号をクリアする"
#: authentication/middleware.py:94 settings/utils/ldap.py:676 #: authentication/middleware.py:94 settings/utils/ldap.py:679
msgid "Authentication failed (before login check failed): {}" msgid "Authentication failed (before login check failed): {}"
msgstr "認証に失敗しました (ログインチェックが失敗する前): {}" msgstr "認証に失敗しました (ログインチェックが失敗する前): {}"
@ -3171,7 +3176,7 @@ msgstr "確認済み"
msgid "Different city login reminder" msgid "Different city login reminder"
msgstr "異なる都市ログインのリマインダー" msgstr "異なる都市ログインのリマインダー"
#: authentication/notifications.py:52 #: authentication/notifications.py:52 settings/notifications.py:47
msgid "binding reminder" msgid "binding reminder"
msgstr "バインディングリマインダー" msgstr "バインディングリマインダー"
@ -3309,7 +3314,7 @@ msgstr "コードエラー"
#: authentication/templates/authentication/_msg_reset_password_code.html:9 #: authentication/templates/authentication/_msg_reset_password_code.html:9
#: authentication/templates/authentication/_msg_rest_password_success.html:2 #: authentication/templates/authentication/_msg_rest_password_success.html:2
#: authentication/templates/authentication/_msg_rest_public_key_success.html:2 #: authentication/templates/authentication/_msg_rest_public_key_success.html:2
#: jumpserver/conf.py:457 #: jumpserver/conf.py:460
#: perms/templates/perms/_msg_item_permissions_expire.html:3 #: perms/templates/perms/_msg_item_permissions_expire.html:3
#: perms/templates/perms/_msg_permed_items_expire.html:3 #: perms/templates/perms/_msg_permed_items_expire.html:3
#: tickets/templates/tickets/approve_check_password.html:32 #: tickets/templates/tickets/approve_check_password.html:32
@ -3481,7 +3486,7 @@ msgstr ""
msgid "Do you want to retry ?" msgid "Do you want to retry ?"
msgstr "再試行しますか?" msgstr "再試行しますか?"
#: authentication/utils.py:23 common/utils/ip/geoip/utils.py:24 #: authentication/utils.py:24 common/utils/ip/geoip/utils.py:24
#: xpack/plugins/cloud/const.py:32 #: xpack/plugins/cloud/const.py:32
msgid "LAN" msgid "LAN"
msgstr "ローカルエリアネットワーク" msgstr "ローカルエリアネットワーク"
@ -3818,7 +3823,7 @@ msgstr "サポートされていません Elasticsearch8"
msgid "Network error, please contact system administrator" msgid "Network error, please contact system administrator"
msgstr "ネットワークエラー、システム管理者に連絡してください" msgstr "ネットワークエラー、システム管理者に連絡してください"
#: common/sdk/im/slack/__init__.py:79 #: common/sdk/im/slack/__init__.py:77
msgid "Unknown error occur" msgid "Unknown error occur"
msgstr "不明なエラーが発生しました" msgstr "不明なエラーが発生しました"
@ -3913,15 +3918,15 @@ msgstr "無効なオプション: {}"
msgid "Labels" msgid "Labels"
msgstr "ラベル" msgstr "ラベル"
#: common/tasks.py:21 common/utils/verify_code.py:16 #: common/tasks.py:31 common/utils/verify_code.py:16
msgid "Send email" msgid "Send email"
msgstr "メールを送る" msgstr "メールを送る"
#: common/tasks.py:48 #: common/tasks.py:58
msgid "Send email attachment" msgid "Send email attachment"
msgstr "メールの添付ファイルを送信" msgstr "メールの添付ファイルを送信"
#: common/tasks.py:69 terminal/tasks.py:62 #: common/tasks.py:80 terminal/tasks.py:62
msgid "Upload session replay to external storage" msgid "Upload session replay to external storage"
msgstr "セッションの記録を外部ストレージにアップロードする" msgstr "セッションの記録を外部ストレージにアップロードする"
@ -3950,16 +3955,16 @@ msgstr "特殊文字を含むべきではない"
msgid "The mobile phone number format is incorrect" msgid "The mobile phone number format is incorrect"
msgstr "携帯電話番号の形式が正しくありません" msgstr "携帯電話番号の形式が正しくありません"
#: jumpserver/conf.py:452 #: jumpserver/conf.py:454
#, python-brace-format #, python-brace-format
msgid "The verification code is: {code}" msgid "The verification code is: {code}"
msgstr "認証コードは: {code}" msgstr "認証コードは: {code}"
#: jumpserver/conf.py:456 #: jumpserver/conf.py:459
msgid "Create account successfully" msgid "Create account successfully"
msgstr "アカウントを正常に作成" msgstr "アカウントを正常に作成"
#: jumpserver/conf.py:458 #: jumpserver/conf.py:461
msgid "Your account has been created successfully" msgid "Your account has been created successfully"
msgstr "アカウントが正常に作成されました" msgstr "アカウントが正常に作成されました"
@ -4382,6 +4387,7 @@ msgid "Is finished"
msgstr "終了しました" msgstr "終了しました"
#: ops/serializers/job.py:66 #: ops/serializers/job.py:66
#: settings/templates/ldap/_msg_import_ldap_user.html:27
msgid "Time cost" msgid "Time cost"
msgstr "時を過ごす" msgstr "時を過ごす"
@ -4867,7 +4873,7 @@ msgstr "チャットAIがオンになっていない"
msgid "Test success" msgid "Test success"
msgstr "テストの成功" msgstr "テストの成功"
#: settings/api/email.py:21 #: settings/api/email.py:22
msgid "Test mail sent to {}, please check" msgid "Test mail sent to {}, please check"
msgstr "{}に送信されたテストメールを確認してください" msgstr "{}に送信されたテストメールを確認してください"
@ -4970,6 +4976,10 @@ msgstr "他の設定を変えることができます"
msgid "Chat prompt" msgid "Chat prompt"
msgstr "チャットのヒント" msgstr "チャットのヒント"
#: settings/notifications.py:22
msgid "Notification of Synchronized LDAP User Task Results"
msgstr "LDAPユーザータスクの結果通知を同期する"
#: settings/serializers/auth/base.py:12 #: settings/serializers/auth/base.py:12
msgid "LDAP Auth" msgid "LDAP Auth"
msgstr "LDAP 認証" msgstr "LDAP 認証"
@ -5125,7 +5135,7 @@ msgstr "接続タイムアウト (秒)"
msgid "Search paged size (piece)" msgid "Search paged size (piece)"
msgstr "ページサイズを検索 (じょう)" msgstr "ページサイズを検索 (じょう)"
#: settings/serializers/auth/ldap.py:81 #: settings/serializers/auth/ldap.py:84
msgid "Enable LDAP auth" msgid "Enable LDAP auth"
msgstr "LDAP認証の有効化" msgstr "LDAP認証の有効化"
@ -5342,7 +5352,7 @@ msgstr "認証コード長"
#: settings/serializers/auth/sms.py:27 settings/serializers/auth/sms.py:49 #: settings/serializers/auth/sms.py:27 settings/serializers/auth/sms.py:49
#: settings/serializers/auth/sms.py:57 settings/serializers/auth/sms.py:66 #: settings/serializers/auth/sms.py:57 settings/serializers/auth/sms.py:66
#: settings/serializers/auth/sms.py:77 settings/serializers/msg.py:76 #: settings/serializers/auth/sms.py:77 settings/serializers/msg.py:83
msgid "Signature" msgid "Signature"
msgstr "署名" msgstr "署名"
@ -5628,74 +5638,68 @@ msgstr "仮想アプリケーション"
msgid "Enable virtual app" msgid "Enable virtual app"
msgstr "仮想アプリケーションの有効化" msgstr "仮想アプリケーションの有効化"
#: settings/serializers/msg.py:24 #: settings/serializers/msg.py:25
msgid "SMTP host" #, fuzzy
#| msgid "SMTP host"
msgid "SMTP"
msgstr "SMTPホスト" msgstr "SMTPホスト"
#: settings/serializers/msg.py:25
msgid "SMTP port"
msgstr "SMTPポート"
#: settings/serializers/msg.py:26 #: settings/serializers/msg.py:26
msgid "SMTP account" msgid "EXCHANGE"
msgstr "SMTPアカウント" msgstr ""
#: settings/serializers/msg.py:28 #: settings/serializers/msg.py:36
msgid "SMTP password"
msgstr "SMTPパスワード"
#: settings/serializers/msg.py:29
msgid "Tips: Some provider use token except password" msgid "Tips: Some provider use token except password"
msgstr "ヒント: 一部のプロバイダーはパスワード以外のトークンを使用します" msgstr "ヒント: 一部のプロバイダーはパスワード以外のトークンを使用します"
#: settings/serializers/msg.py:32 #: settings/serializers/msg.py:39
msgid "Send user" msgid "Send user"
msgstr "ユーザーを送信" msgstr "ユーザーを送信"
#: settings/serializers/msg.py:33 #: settings/serializers/msg.py:40
msgid "Tips: Send mail account, default SMTP account as the send account" msgid "Tips: Send mail account, default SMTP account as the send account"
msgstr "" msgstr ""
"ヒント: 送信メールアカウント、送信アカウントとしてのデフォルトのSMTPアカウン" "ヒント: 送信メールアカウント、送信アカウントとしてのデフォルトのSMTPアカウン"
"ト" "ト"
#: settings/serializers/msg.py:36 #: settings/serializers/msg.py:43
msgid "Test recipient" msgid "Test recipient"
msgstr "テスト受信者" msgstr "テスト受信者"
#: settings/serializers/msg.py:37 #: settings/serializers/msg.py:44
msgid "Tips: Used only as a test mail recipient" msgid "Tips: Used only as a test mail recipient"
msgstr "ヒント: テストメールの受信者としてのみ使用" msgstr "ヒント: テストメールの受信者としてのみ使用"
#: settings/serializers/msg.py:41 #: settings/serializers/msg.py:48
msgid "If SMTP port is 465, may be select" msgid "If SMTP port is 465, may be select"
msgstr "SMTPポートが465の場合は、" msgstr "SMTPポートが465の場合は、"
#: settings/serializers/msg.py:44 #: settings/serializers/msg.py:51
msgid "Use TLS" msgid "Use TLS"
msgstr "TLSの使用" msgstr "TLSの使用"
#: settings/serializers/msg.py:45 #: settings/serializers/msg.py:52
msgid "If SMTP port is 587, may be select" msgid "If SMTP port is 587, may be select"
msgstr "SMTPポートが587の場合は、" msgstr "SMTPポートが587の場合は、"
#: settings/serializers/msg.py:48 #: settings/serializers/msg.py:55
msgid "Subject prefix" msgid "Subject prefix"
msgstr "件名プレフィックス" msgstr "件名プレフィックス"
#: settings/serializers/msg.py:51 #: settings/serializers/msg.py:58
msgid "Email suffix" msgid "Email suffix"
msgstr "メールのサフィックス" msgstr "メールのサフィックス"
#: settings/serializers/msg.py:52 #: settings/serializers/msg.py:59
msgid "" msgid ""
"This is used by default if no email is returned during SSO authentication" "This is used by default if no email is returned during SSO authentication"
msgstr "これは、SSO認証中にメールが返されない場合にデフォルトで使用されます。" msgstr "これは、SSO認証中にメールが返されない場合にデフォルトで使用されます。"
#: settings/serializers/msg.py:61 #: settings/serializers/msg.py:68
msgid "Create user email subject" msgid "Create user email subject"
msgstr "ユーザーメール件名の作成" msgstr "ユーザーメール件名の作成"
#: settings/serializers/msg.py:62 #: settings/serializers/msg.py:69
msgid "" msgid ""
"Tips: When creating a user, send the subject of the email (eg:Create account " "Tips: When creating a user, send the subject of the email (eg:Create account "
"successfully)" "successfully)"
@ -5703,20 +5707,20 @@ msgstr ""
"ヒント: ユーザーを作成するときに、メールの件名を送信します (例: アカウントを" "ヒント: ユーザーを作成するときに、メールの件名を送信します (例: アカウントを"
"正常に作成)" "正常に作成)"
#: settings/serializers/msg.py:66 #: settings/serializers/msg.py:73
msgid "Create user honorific" msgid "Create user honorific"
msgstr "ユーザー敬語の作成" msgstr "ユーザー敬語の作成"
#: settings/serializers/msg.py:67 #: settings/serializers/msg.py:74
msgid "Tips: When creating a user, send the honorific of the email (eg:Hello)" msgid "Tips: When creating a user, send the honorific of the email (eg:Hello)"
msgstr "" msgstr ""
"ヒント: ユーザーを作成するときは、メールの敬語を送信します (例: こんにちは)" "ヒント: ユーザーを作成するときは、メールの敬語を送信します (例: こんにちは)"
#: settings/serializers/msg.py:71 #: settings/serializers/msg.py:78
msgid "Create user email content" msgid "Create user email content"
msgstr "ユーザーのメールコンテンツを作成する" msgstr "ユーザーのメールコンテンツを作成する"
#: settings/serializers/msg.py:73 #: settings/serializers/msg.py:80
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"Tips: When creating a user, send the content of the email, support " "Tips: When creating a user, send the content of the email, support "
@ -5725,7 +5729,7 @@ msgstr ""
"ヒント:ユーザーの作成時にパスワード設定メールの内容を送信し、{username}{name}" "ヒント:ユーザーの作成時にパスワード設定メールの内容を送信し、{username}{name}"
"{email}ラベルをサポートします。" "{email}ラベルをサポートします。"
#: settings/serializers/msg.py:77 #: settings/serializers/msg.py:84
msgid "Tips: Email signature (eg:jumpserver)" msgid "Tips: Email signature (eg:jumpserver)"
msgstr "ヒント: メール署名 (例: jumpserver)" msgstr "ヒント: メール署名 (例: jumpserver)"
@ -6085,112 +6089,129 @@ msgstr "Razor の有効化"
msgid "Enable SSH Client" msgid "Enable SSH Client"
msgstr "SSH Clientの有効化" msgstr "SSH Clientの有効化"
#: settings/tasks/ldap.py:24 #: settings/tasks/ldap.py:29
msgid "Periodic import ldap user" msgid "Periodic import ldap user"
msgstr "LDAP ユーザーを定期的にインポートする" msgstr "LDAP ユーザーを定期的にインポートする"
#: settings/tasks/ldap.py:45 #: settings/tasks/ldap.py:66
msgid "Registration periodic import ldap user task" msgid "Registration periodic import ldap user task"
msgstr "登録サイクルLDAPユーザータスクのインポート" msgstr "登録サイクルLDAPユーザータスクのインポート"
#: settings/utils/ldap.py:491 #: settings/templates/ldap/_msg_import_ldap_user.html:2
msgid "Sync task Finish"
msgstr "同期タスクが完了しました"
#: settings/templates/ldap/_msg_import_ldap_user.html:3
msgid "Synced Organization"
msgstr "組織が同期されました"
#: settings/templates/ldap/_msg_import_ldap_user.html:9
msgid "Synced User"
msgstr "同期されたユーザー"
#: settings/templates/ldap/_msg_import_ldap_user.html:26
#: terminal/models/session/session.py:45
msgid "Date end"
msgstr "終了日"
#: settings/utils/ldap.py:494
msgid "ldap:// or ldaps:// protocol is used." msgid "ldap:// or ldaps:// protocol is used."
msgstr "ldap:// または ldaps:// プロトコルが使用されます。" msgstr "ldap:// または ldaps:// プロトコルが使用されます。"
#: settings/utils/ldap.py:502 #: settings/utils/ldap.py:505
msgid "Host or port is disconnected: {}" msgid "Host or port is disconnected: {}"
msgstr "ホストまたはポートが切断されました: {}" msgstr "ホストまたはポートが切断されました: {}"
#: settings/utils/ldap.py:504 #: settings/utils/ldap.py:507
msgid "The port is not the port of the LDAP service: {}" msgid "The port is not the port of the LDAP service: {}"
msgstr "ポートはLDAPサービスのポートではありません: {}" msgstr "ポートはLDAPサービスのポートではありません: {}"
#: settings/utils/ldap.py:506 #: settings/utils/ldap.py:509
msgid "Please add certificate: {}" msgid "Please add certificate: {}"
msgstr "証明書を追加してください: {}" msgstr "証明書を追加してください: {}"
#: settings/utils/ldap.py:510 settings/utils/ldap.py:537 #: settings/utils/ldap.py:513 settings/utils/ldap.py:540
#: settings/utils/ldap.py:567 settings/utils/ldap.py:595 #: settings/utils/ldap.py:570 settings/utils/ldap.py:598
msgid "Unknown error: {}" msgid "Unknown error: {}"
msgstr "不明なエラー: {}" msgstr "不明なエラー: {}"
#: settings/utils/ldap.py:524 #: settings/utils/ldap.py:527
msgid "Bind DN or Password incorrect" msgid "Bind DN or Password incorrect"
msgstr "DNまたはパスワードのバインドが正しくありません" msgstr "DNまたはパスワードのバインドが正しくありません"
#: settings/utils/ldap.py:531 #: settings/utils/ldap.py:534
msgid "Please enter Bind DN: {}" msgid "Please enter Bind DN: {}"
msgstr "バインドDN: {} を入力してください" msgstr "バインドDN: {} を入力してください"
#: settings/utils/ldap.py:533 #: settings/utils/ldap.py:536
msgid "Please enter Password: {}" msgid "Please enter Password: {}"
msgstr "パスワードを入力してください: {}" msgstr "パスワードを入力してください: {}"
#: settings/utils/ldap.py:535 #: settings/utils/ldap.py:538
msgid "Please enter correct Bind DN and Password: {}" msgid "Please enter correct Bind DN and Password: {}"
msgstr "正しいバインドDNとパスワードを入力してください: {}" msgstr "正しいバインドDNとパスワードを入力してください: {}"
#: settings/utils/ldap.py:553 #: settings/utils/ldap.py:556
msgid "Invalid User OU or User search filter: {}" msgid "Invalid User OU or User search filter: {}"
msgstr "無効なユーザー OU またはユーザー検索フィルター: {}" msgstr "無効なユーザー OU またはユーザー検索フィルター: {}"
#: settings/utils/ldap.py:584 #: settings/utils/ldap.py:587
msgid "LDAP User attr map not include: {}" msgid "LDAP User attr map not include: {}"
msgstr "LDAP ユーザーattrマップは含まれません: {}" msgstr "LDAP ユーザーattrマップは含まれません: {}"
#: settings/utils/ldap.py:591 #: settings/utils/ldap.py:594
msgid "LDAP User attr map is not dict" msgid "LDAP User attr map is not dict"
msgstr "LDAPユーザーattrマップはdictではありません" msgstr "LDAPユーザーattrマップはdictではありません"
#: settings/utils/ldap.py:610 #: settings/utils/ldap.py:613
msgid "LDAP authentication is not enabled" msgid "LDAP authentication is not enabled"
msgstr "LDAP 認証が有効になっていない" msgstr "LDAP 認証が有効になっていない"
#: settings/utils/ldap.py:628 #: settings/utils/ldap.py:631
msgid "Error (Invalid LDAP server): {}" msgid "Error (Invalid LDAP server): {}"
msgstr "エラー (LDAPサーバーが無効): {}" msgstr "エラー (LDAPサーバーが無効): {}"
#: settings/utils/ldap.py:630 #: settings/utils/ldap.py:633
msgid "Error (Invalid Bind DN): {}" msgid "Error (Invalid Bind DN): {}"
msgstr "エラー (DNのバインドが無効): {}" msgstr "エラー (DNのバインドが無効): {}"
#: settings/utils/ldap.py:632 #: settings/utils/ldap.py:635
msgid "Error (Invalid LDAP User attr map): {}" msgid "Error (Invalid LDAP User attr map): {}"
msgstr "エラー (LDAPユーザーattrマップが無効): {}" msgstr "エラー (LDAPユーザーattrマップが無効): {}"
#: settings/utils/ldap.py:634 #: settings/utils/ldap.py:637
msgid "Error (Invalid User OU or User search filter): {}" msgid "Error (Invalid User OU or User search filter): {}"
msgstr "エラー (ユーザーOUまたはユーザー検索フィルターが無効): {}" msgstr "エラー (ユーザーOUまたはユーザー検索フィルターが無効): {}"
#: settings/utils/ldap.py:636 #: settings/utils/ldap.py:639
msgid "Error (Not enabled LDAP authentication): {}" msgid "Error (Not enabled LDAP authentication): {}"
msgstr "エラー (LDAP認証が有効化されていません): {}" msgstr "エラー (LDAP認証が有効化されていません): {}"
#: settings/utils/ldap.py:638 #: settings/utils/ldap.py:641
msgid "Error (Unknown): {}" msgid "Error (Unknown): {}"
msgstr "エラー (不明): {}" msgstr "エラー (不明): {}"
#: settings/utils/ldap.py:641 #: settings/utils/ldap.py:644
msgid "Succeed: Match {} s user" msgid "Succeed: Match {} s user"
msgstr "成功: {} 人のユーザーに一致" msgstr "成功: {} 人のユーザーに一致"
#: settings/utils/ldap.py:652 #: settings/utils/ldap.py:655
msgid "Please test the connection first" msgid "Please test the connection first"
msgstr "まず接続をテストしてください" msgstr "まず接続をテストしてください"
#: settings/utils/ldap.py:674 #: settings/utils/ldap.py:677
msgid "Authentication failed (configuration incorrect): {}" msgid "Authentication failed (configuration incorrect): {}"
msgstr "認証に失敗しました (設定が正しくありません): {}" msgstr "認証に失敗しました (設定が正しくありません): {}"
#: settings/utils/ldap.py:678 #: settings/utils/ldap.py:681
msgid "Authentication failed (username or password incorrect): {}" msgid "Authentication failed (username or password incorrect): {}"
msgstr "認証に失敗しました (ユーザー名またはパスワードが正しくありません): {}" msgstr "認証に失敗しました (ユーザー名またはパスワードが正しくありません): {}"
#: settings/utils/ldap.py:680 #: settings/utils/ldap.py:683
msgid "Authentication failed (Unknown): {}" msgid "Authentication failed (Unknown): {}"
msgstr "認証に失敗しました (不明): {}" msgstr "認証に失敗しました (不明): {}"
#: settings/utils/ldap.py:683 #: settings/utils/ldap.py:686
msgid "Authentication success: {}" msgid "Authentication success: {}"
msgstr "認証成功: {}" msgstr "認証成功: {}"
@ -6803,10 +6824,6 @@ msgstr "ログイン元"
msgid "Replay" msgid "Replay"
msgstr "リプレイ" msgstr "リプレイ"
#: terminal/models/session/session.py:45
msgid "Date end"
msgstr "終了日"
#: terminal/models/session/session.py:47 terminal/serializers/session.py:65 #: terminal/models/session/session.py:47 terminal/serializers/session.py:65
msgid "Command amount" msgid "Command amount"
msgstr "コマンド量" msgstr "コマンド量"
@ -8315,7 +8332,7 @@ msgstr "OTP無効化成功、ログインページを返す"
msgid "Password invalid" msgid "Password invalid"
msgstr "パスワード無効" msgstr "パスワード無効"
#: users/views/profile/reset.py:64 #: users/views/profile/reset.py:65
msgid "" msgid ""
"Non-local users can log in only from third-party platforms and cannot change " "Non-local users can log in only from third-party platforms and cannot change "
"their passwords: {}" "their passwords: {}"
@ -8492,7 +8509,7 @@ msgstr "そして"
msgid "Or" msgid "Or"
msgstr "または" msgstr "または"
#: xpack/plugins/cloud/manager.py:56 #: xpack/plugins/cloud/manager.py:57
msgid "Account unavailable" msgid "Account unavailable"
msgstr "利用できないアカウント" msgstr "利用できないアカウント"
@ -9042,6 +9059,15 @@ msgstr "エンタープライズプロフェッショナル版"
msgid "Ultimate edition" msgid "Ultimate edition"
msgstr "エンタープライズ・フラッグシップ・エディション" msgstr "エンタープライズ・フラッグシップ・エディション"
#~ msgid "SMTP port"
#~ msgstr "SMTPポート"
#~ msgid "SMTP account"
#~ msgstr "SMTPアカウント"
#~ msgid "SMTP password"
#~ msgstr "SMTPパスワード"
#~ msgid "Password can not contains `{{` or `}}`" #~ msgid "Password can not contains `{{` or `}}`"
#~ msgstr "パスワードには `{` または `}` 文字を含めることはできません" #~ msgstr "パスワードには `{` または `}` 文字を含めることはできません"

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:44d560db28dc9dd1a450f7e715b6de7a18ba44caece18f4e7da40c1659eefc48 oid sha256:933315b682ee1387f7433b5a870d8597c07634f4fede4c56a42b4cab540e4208
size 139920 size 140012

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: JumpServer 0.3.3\n" "Project-Id-Version: JumpServer 0.3.3\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-01-03 11:23+0800\n" "POT-Creation-Date: 2024-01-11 18:58+0800\n"
"PO-Revision-Date: 2021-05-20 10:54+0800\n" "PO-Revision-Date: 2021-05-20 10:54+0800\n"
"Last-Translator: ibuler <ibuler@qq.com>\n" "Last-Translator: ibuler <ibuler@qq.com>\n"
"Language-Team: JumpServer team<ibuler@qq.com>\n" "Language-Team: JumpServer team<ibuler@qq.com>\n"
@ -28,8 +28,9 @@ msgstr "参数 'action' 必须是 [{}]"
#: authentication/confirm/password.py:26 authentication/forms.py:32 #: authentication/confirm/password.py:26 authentication/forms.py:32
#: authentication/templates/authentication/login.html:330 #: authentication/templates/authentication/login.html:330
#: settings/serializers/auth/ldap.py:25 settings/serializers/auth/ldap.py:47 #: settings/serializers/auth/ldap.py:25 settings/serializers/auth/ldap.py:47
#: terminal/serializers/storage.py:123 terminal/serializers/storage.py:142 #: settings/serializers/msg.py:35 terminal/serializers/storage.py:123
#: users/forms/profile.py:22 users/serializers/user.py:104 #: terminal/serializers/storage.py:142 users/forms/profile.py:22
#: users/serializers/user.py:104
#: users/templates/users/_msg_user_created.html:13 #: users/templates/users/_msg_user_created.html:13
#: users/templates/users/user_password_verify.html:18 #: users/templates/users/user_password_verify.html:18
#: xpack/plugins/cloud/serializers/account_attrs.py:28 #: xpack/plugins/cloud/serializers/account_attrs.py:28
@ -199,10 +200,10 @@ msgstr "仅创建"
#: authentication/serializers/password_mfa.py:16 #: authentication/serializers/password_mfa.py:16
#: authentication/serializers/password_mfa.py:24 #: authentication/serializers/password_mfa.py:24
#: notifications/backends/__init__.py:10 settings/serializers/msg.py:22 #: notifications/backends/__init__.py:10 settings/serializers/msg.py:22
#: settings/serializers/msg.py:57 users/forms/profile.py:102 #: settings/serializers/msg.py:64 users/forms/profile.py:102
#: users/forms/profile.py:109 users/models/user.py:802 #: users/forms/profile.py:109 users/models/user.py:802
#: users/templates/users/forgot_password.html:117 #: users/templates/users/forgot_password.html:117
#: users/views/profile/reset.py:92 #: users/views/profile/reset.py:93
msgid "Email" msgid "Email"
msgstr "邮箱" msgstr "邮箱"
@ -286,11 +287,11 @@ msgstr "来源 ID"
#: accounts/serializers/automations/change_secret.py:107 #: accounts/serializers/automations/change_secret.py:107
#: accounts/serializers/automations/change_secret.py:127 #: accounts/serializers/automations/change_secret.py:127
#: acls/serializers/base.py:124 acls/templates/acls/asset_login_reminder.html:7 #: acls/serializers/base.py:124 acls/templates/acls/asset_login_reminder.html:7
#: assets/serializers/asset/common.py:125 assets/serializers/gateway.py:28 #: assets/serializers/asset/common.py:128 assets/serializers/gateway.py:28
#: audits/models.py:59 authentication/api/connection_token.py:405 #: audits/models.py:59 authentication/api/connection_token.py:405
#: ops/models/base.py:18 perms/models/asset_permission.py:75 #: ops/models/base.py:18 perms/models/asset_permission.py:75
#: perms/serializers/permission.py:41 terminal/backends/command/models.py:18 #: perms/serializers/permission.py:41 settings/serializers/msg.py:33
#: terminal/models/session/session.py:33 #: terminal/backends/command/models.py:18 terminal/models/session/session.py:33
#: terminal/templates/terminal/_msg_command_warning.html:8 #: terminal/templates/terminal/_msg_command_warning.html:8
#: terminal/templates/terminal/_msg_session_sharing.html:8 #: terminal/templates/terminal/_msg_session_sharing.html:8
#: tickets/models/ticket/command_confirm.py:13 xpack/plugins/cloud/models.py:89 #: tickets/models/ticket/command_confirm.py:13 xpack/plugins/cloud/models.py:89
@ -360,8 +361,9 @@ msgstr "账号备份计划"
#: assets/models/automations/base.py:115 audits/models.py:65 #: assets/models/automations/base.py:115 audits/models.py:65
#: ops/models/base.py:55 ops/models/celery.py:63 ops/models/job.py:235 #: ops/models/base.py:55 ops/models/celery.py:63 ops/models/job.py:235
#: ops/templates/ops/celery_task_log.html:75 #: ops/templates/ops/celery_task_log.html:75
#: perms/models/asset_permission.py:78 terminal/models/applet/host.py:141 #: perms/models/asset_permission.py:78
#: terminal/models/session/session.py:44 #: settings/templates/ldap/_msg_import_ldap_user.html:25
#: terminal/models/applet/host.py:141 terminal/models/session/session.py:44
#: tickets/models/ticket/apply_application.py:30 #: tickets/models/ticket/apply_application.py:30
#: tickets/models/ticket/apply_asset.py:19 #: tickets/models/ticket/apply_asset.py:19
msgid "Date start" msgid "Date start"
@ -370,6 +372,7 @@ msgstr "开始日期"
#: accounts/models/automations/backup_account.py:122 #: accounts/models/automations/backup_account.py:122
#: authentication/templates/authentication/_msg_oauth_bind.html:11 #: authentication/templates/authentication/_msg_oauth_bind.html:11
#: notifications/notifications.py:186 #: notifications/notifications.py:186
#: settings/templates/ldap/_msg_import_ldap_user.html:23
msgid "Time" msgid "Time"
msgstr "时间" msgstr "时间"
@ -445,6 +448,7 @@ msgstr "SSH 密钥推送方式"
#: accounts/models/automations/gather_account.py:58 #: accounts/models/automations/gather_account.py:58
#: accounts/serializers/account/backup.py:41 #: accounts/serializers/account/backup.py:41
#: accounts/serializers/automations/change_secret.py:56 #: accounts/serializers/automations/change_secret.py:56
#: settings/serializers/auth/ldap.py:81
msgid "Recipient" msgid "Recipient"
msgstr "收件人" msgstr "收件人"
@ -490,6 +494,7 @@ msgstr "状态"
#: authentication/templates/authentication/passkey.html:173 #: authentication/templates/authentication/passkey.html:173
#: authentication/views/base.py:42 authentication/views/base.py:43 #: authentication/views/base.py:42 authentication/views/base.py:43
#: authentication/views/base.py:44 common/const/choices.py:20 #: authentication/views/base.py:44 common/const/choices.py:20
#: settings/templates/ldap/_msg_import_ldap_user.html:16
msgid "Error" msgid "Error"
msgstr "错误" msgstr "错误"
@ -592,8 +597,8 @@ msgstr "密码规则"
#: assets/models/asset/common.py:159 assets/models/cmd_filter.py:21 #: assets/models/asset/common.py:159 assets/models/cmd_filter.py:21
#: assets/models/domain.py:19 assets/models/group.py:17 #: assets/models/domain.py:19 assets/models/group.py:17
#: assets/models/label.py:18 assets/models/platform.py:16 #: assets/models/label.py:18 assets/models/platform.py:16
#: assets/models/platform.py:95 assets/serializers/asset/common.py:146 #: assets/models/platform.py:95 assets/serializers/asset/common.py:149
#: assets/serializers/platform.py:118 assets/serializers/platform.py:235 #: assets/serializers/platform.py:118 assets/serializers/platform.py:228
#: authentication/backends/passkey/models.py:10 #: authentication/backends/passkey/models.py:10
#: authentication/serializers/connect_token_secret.py:113 #: authentication/serializers/connect_token_secret.py:113
#: authentication/serializers/connect_token_secret.py:168 labels/models.py:11 #: authentication/serializers/connect_token_secret.py:168 labels/models.py:11
@ -601,7 +606,7 @@ msgstr "密码规则"
#: ops/models/celery.py:57 ops/models/job.py:136 ops/models/playbook.py:28 #: ops/models/celery.py:57 ops/models/job.py:136 ops/models/playbook.py:28
#: ops/serializers/job.py:18 orgs/models.py:82 #: ops/serializers/job.py:18 orgs/models.py:82
#: perms/models/asset_permission.py:61 rbac/models/role.py:29 #: perms/models/asset_permission.py:61 rbac/models/role.py:29
#: settings/models.py:33 settings/models.py:181 settings/serializers/msg.py:82 #: settings/models.py:33 settings/models.py:181 settings/serializers/msg.py:89
#: terminal/models/applet/applet.py:33 terminal/models/component/endpoint.py:12 #: terminal/models/applet/applet.py:33 terminal/models/component/endpoint.py:12
#: terminal/models/component/endpoint.py:95 #: terminal/models/component/endpoint.py:95
#: terminal/models/component/storage.py:26 terminal/models/component/task.py:13 #: terminal/models/component/storage.py:26 terminal/models/component/task.py:13
@ -736,8 +741,8 @@ msgstr "账号存在策略"
#: accounts/serializers/account/account.py:193 applications/models.py:11 #: accounts/serializers/account/account.py:193 applications/models.py:11
#: assets/models/label.py:21 assets/models/platform.py:96 #: assets/models/label.py:21 assets/models/platform.py:96
#: assets/serializers/asset/common.py:122 assets/serializers/cagegory.py:12 #: assets/serializers/asset/common.py:125 assets/serializers/cagegory.py:12
#: assets/serializers/platform.py:140 assets/serializers/platform.py:236 #: assets/serializers/platform.py:140 assets/serializers/platform.py:229
#: perms/serializers/user_permission.py:26 settings/models.py:35 #: perms/serializers/user_permission.py:26 settings/models.py:35
#: tickets/models/ticket/apply_application.py:13 users/models/preference.py:12 #: tickets/models/ticket/apply_application.py:13 users/models/preference.py:12
msgid "Category" msgid "Category"
@ -748,7 +753,7 @@ msgstr "类别"
#: acls/serializers/command_acl.py:19 applications/models.py:14 #: acls/serializers/command_acl.py:19 applications/models.py:14
#: assets/models/_user.py:50 assets/models/automations/base.py:20 #: assets/models/_user.py:50 assets/models/automations/base.py:20
#: assets/models/cmd_filter.py:74 assets/models/platform.py:97 #: assets/models/cmd_filter.py:74 assets/models/platform.py:97
#: assets/serializers/asset/common.py:123 assets/serializers/platform.py:120 #: assets/serializers/asset/common.py:126 assets/serializers/platform.py:120
#: assets/serializers/platform.py:139 audits/serializers.py:53 #: assets/serializers/platform.py:139 audits/serializers.py:53
#: audits/serializers.py:170 #: audits/serializers.py:170
#: authentication/serializers/connect_token_secret.py:126 ops/models/job.py:144 #: authentication/serializers/connect_token_secret.py:126 ops/models/job.py:144
@ -866,7 +871,7 @@ msgid "Key password"
msgstr "密钥密码" msgstr "密钥密码"
#: accounts/serializers/account/base.py:78 #: accounts/serializers/account/base.py:78
#: assets/serializers/asset/common.py:379 #: assets/serializers/asset/common.py:381
msgid "Spec info" msgid "Spec info"
msgstr "特殊信息" msgstr "特殊信息"
@ -1113,8 +1118,8 @@ msgid "Users"
msgstr "用户管理" msgstr "用户管理"
#: acls/models/base.py:98 assets/models/automations/base.py:17 #: acls/models/base.py:98 assets/models/automations/base.py:17
#: assets/models/cmd_filter.py:38 assets/serializers/asset/common.py:378 #: assets/models/cmd_filter.py:38 perms/serializers/user_permission.py:75
#: perms/serializers/user_permission.py:75 rbac/tree.py:35 #: rbac/tree.py:35
msgid "Accounts" msgid "Accounts"
msgstr "账号管理" msgstr "账号管理"
@ -1415,8 +1420,8 @@ msgstr "脚本"
#: assets/const/category.py:10 assets/models/asset/host.py:8 #: assets/const/category.py:10 assets/models/asset/host.py:8
#: settings/serializers/auth/radius.py:16 settings/serializers/auth/sms.py:71 #: settings/serializers/auth/radius.py:16 settings/serializers/auth/sms.py:71
#: settings/serializers/feature.py:49 terminal/models/component/endpoint.py:13 #: settings/serializers/feature.py:49 settings/serializers/msg.py:31
#: terminal/serializers/applet.py:17 #: terminal/models/component/endpoint.py:13 terminal/serializers/applet.py:17
#: xpack/plugins/cloud/serializers/account_attrs.py:72 #: xpack/plugins/cloud/serializers/account_attrs.py:72
msgid "Host" msgid "Host"
msgstr "主机" msgstr "主机"
@ -1539,7 +1544,7 @@ msgid "We will consider login success when we see this prompt"
msgstr "当我们看到这个提示时,我们将认为登录成功" msgstr "当我们看到这个提示时,我们将认为登录成功"
#: assets/const/protocol.py:119 assets/models/asset/database.py:10 #: assets/const/protocol.py:119 assets/models/asset/database.py:10
#: settings/serializers/msg.py:40 #: settings/serializers/msg.py:47
msgid "Use SSL" msgid "Use SSL"
msgstr "使用 SSL" msgstr "使用 SSL"
@ -1655,7 +1660,7 @@ msgstr "用户名与用户相同"
#: assets/models/_user.py:52 authentication/models/connection_token.py:41 #: assets/models/_user.py:52 authentication/models/connection_token.py:41
#: authentication/serializers/connect_token_secret.py:114 #: authentication/serializers/connect_token_secret.py:114
#: terminal/models/applet/applet.py:42 #: settings/serializers/msg.py:29 terminal/models/applet/applet.py:42
#: terminal/models/virtualapp/virtualapp.py:24 #: terminal/models/virtualapp/virtualapp.py:24
#: terminal/serializers/session.py:19 terminal/serializers/session.py:45 #: terminal/serializers/session.py:19 terminal/serializers/session.py:45
#: terminal/serializers/storage.py:71 #: terminal/serializers/storage.py:71
@ -1708,12 +1713,12 @@ msgstr "云服务"
#: assets/models/asset/common.py:94 assets/models/platform.py:17 #: assets/models/asset/common.py:94 assets/models/platform.py:17
#: settings/serializers/auth/radius.py:17 settings/serializers/auth/sms.py:72 #: settings/serializers/auth/radius.py:17 settings/serializers/auth/sms.py:72
#: terminal/serializers/storage.py:133 #: settings/serializers/msg.py:32 terminal/serializers/storage.py:133
#: xpack/plugins/cloud/serializers/account_attrs.py:73 #: xpack/plugins/cloud/serializers/account_attrs.py:73
msgid "Port" msgid "Port"
msgstr "端口" msgstr "端口"
#: assets/models/asset/common.py:160 assets/serializers/asset/common.py:147 #: assets/models/asset/common.py:160 assets/serializers/asset/common.py:150
msgid "Address" msgid "Address"
msgstr "地址" msgstr "地址"
@ -1737,7 +1742,7 @@ msgstr "网域"
msgid "Node" msgid "Node"
msgstr "节点" msgstr "节点"
#: assets/models/asset/common.py:167 assets/serializers/asset/common.py:380 #: assets/models/asset/common.py:167 assets/serializers/asset/common.py:382
#: assets/serializers/asset/host.py:11 #: assets/serializers/asset/host.py:11
msgid "Gathered info" msgid "Gathered info"
msgstr "收集资产硬件信息" msgstr "收集资产硬件信息"
@ -1886,7 +1891,7 @@ msgstr "值"
#: assets/serializers/platform.py:119 #: assets/serializers/platform.py:119
#: authentication/serializers/connect_token_secret.py:124 #: authentication/serializers/connect_token_secret.py:124
#: common/serializers/common.py:85 labels/models.py:17 labels/models.py:33 #: common/serializers/common.py:85 labels/models.py:17 labels/models.py:33
#: labels/serializers.py:45 settings/serializers/msg.py:83 #: labels/serializers.py:45 settings/serializers/msg.py:90
msgid "Label" msgid "Label"
msgstr "标签" msgstr "标签"
@ -2055,7 +2060,7 @@ msgid ""
"type" "type"
msgstr "资产中批量更新平台,不符合平台类型跳过的资产" msgstr "资产中批量更新平台,不符合平台类型跳过的资产"
#: assets/serializers/asset/common.py:124 assets/serializers/platform.py:141 #: assets/serializers/asset/common.py:127 assets/serializers/platform.py:141
#: authentication/serializers/connect_token_secret.py:30 #: authentication/serializers/connect_token_secret.py:30
#: authentication/serializers/connect_token_secret.py:75 #: authentication/serializers/connect_token_secret.py:75
#: perms/models/asset_permission.py:76 perms/serializers/permission.py:42 #: perms/models/asset_permission.py:76 perms/serializers/permission.py:42
@ -2064,29 +2069,29 @@ msgstr "资产中批量更新平台,不符合平台类型跳过的资产"
msgid "Protocols" msgid "Protocols"
msgstr "协议组" msgstr "协议组"
#: assets/serializers/asset/common.py:126 #: assets/serializers/asset/common.py:129
#: assets/serializers/asset/common.py:148 #: assets/serializers/asset/common.py:151
msgid "Node path" msgid "Node path"
msgstr "节点路径" msgstr "节点路径"
#: assets/serializers/asset/common.py:145 #: assets/serializers/asset/common.py:148
#: assets/serializers/asset/common.py:381 #: assets/serializers/asset/common.py:383
msgid "Auto info" msgid "Auto info"
msgstr "自动化信息" msgstr "自动化信息"
#: assets/serializers/asset/common.py:239 #: assets/serializers/asset/common.py:242
msgid "Platform not exist" msgid "Platform not exist"
msgstr "平台不存在" msgstr "平台不存在"
#: assets/serializers/asset/common.py:275 #: assets/serializers/asset/common.py:278
msgid "port out of range (0-65535)" msgid "port out of range (0-65535)"
msgstr "端口超出范围 (0-65535)" msgstr "端口超出范围 (0-65535)"
#: assets/serializers/asset/common.py:282 #: assets/serializers/asset/common.py:285
msgid "Protocol is required: {}" msgid "Protocol is required: {}"
msgstr "协议是必填的: {}" msgstr "协议是必填的: {}"
#: assets/serializers/asset/common.py:310 #: assets/serializers/asset/common.py:313
msgid "Invalid data" msgid "Invalid data"
msgstr "无效的数据" msgstr "无效的数据"
@ -2236,7 +2241,7 @@ msgstr "默认网域"
msgid "type is required" msgid "type is required"
msgstr "类型 该字段是必填项。" msgstr "类型 该字段是必填项。"
#: assets/serializers/platform.py:211 #: assets/serializers/platform.py:204
msgid "Protocols is required" msgid "Protocols is required"
msgstr "协议是必填的" msgstr "协议是必填的"
@ -2589,8 +2594,8 @@ msgstr "认证令牌"
#: audits/signal_handlers/login_log.py:37 authentication/notifications.py:73 #: audits/signal_handlers/login_log.py:37 authentication/notifications.py:73
#: authentication/views/login.py:77 notifications/backends/__init__.py:11 #: authentication/views/login.py:77 notifications/backends/__init__.py:11
#: settings/serializers/auth/wecom.py:10 users/models/user.py:749 #: settings/notifications.py:68 settings/serializers/auth/wecom.py:10
#: users/models/user.py:855 #: users/models/user.py:749 users/models/user.py:855
msgid "WeCom" msgid "WeCom"
msgstr "企业微信" msgstr "企业微信"
@ -2675,22 +2680,22 @@ msgstr "ACL 动作是复核"
msgid "Current user not support mfa type: {}" msgid "Current user not support mfa type: {}"
msgstr "当前用户不支持 MFA 类型: {}" msgstr "当前用户不支持 MFA 类型: {}"
#: authentication/api/password.py:34 terminal/api/session/session.py:305 #: authentication/api/password.py:33 terminal/api/session/session.py:305
#: users/views/profile/reset.py:61 #: users/views/profile/reset.py:62
msgid "User does not exist: {}" msgid "User does not exist: {}"
msgstr "用户不存在: {}" msgstr "用户不存在: {}"
#: authentication/api/password.py:34 users/views/profile/reset.py:163 #: authentication/api/password.py:33 users/views/profile/reset.py:163
msgid "No user matched" msgid "No user matched"
msgstr "没有匹配到用户" msgstr "没有匹配到用户"
#: authentication/api/password.py:38 #: authentication/api/password.py:37
msgid "" msgid ""
"The user is from {}, please go to the corresponding system to change the " "The user is from {}, please go to the corresponding system to change the "
"password" "password"
msgstr "用户来自 {} 请去相应系统修改密码" msgstr "用户来自 {} 请去相应系统修改密码"
#: authentication/api/password.py:67 #: authentication/api/password.py:65
#: authentication/templates/authentication/login.html:361 #: authentication/templates/authentication/login.html:361
#: users/templates/users/forgot_password.html:27 #: users/templates/users/forgot_password.html:27
#: users/templates/users/forgot_password.html:28 #: users/templates/users/forgot_password.html:28
@ -3001,7 +3006,7 @@ msgstr "短信验证码校验失败"
#: authentication/serializers/password_mfa.py:24 #: authentication/serializers/password_mfa.py:24
#: settings/serializers/auth/sms.py:32 users/forms/profile.py:104 #: settings/serializers/auth/sms.py:32 users/forms/profile.py:104
#: users/forms/profile.py:109 users/templates/users/forgot_password.html:112 #: users/forms/profile.py:109 users/templates/users/forgot_password.html:112
#: users/views/profile/reset.py:98 #: users/views/profile/reset.py:99
msgid "SMS" msgid "SMS"
msgstr "短信" msgstr "短信"
@ -3017,7 +3022,7 @@ msgstr "设置手机号码启用"
msgid "Clear phone number to disable" msgid "Clear phone number to disable"
msgstr "清空手机号码禁用" msgstr "清空手机号码禁用"
#: authentication/middleware.py:94 settings/utils/ldap.py:676 #: authentication/middleware.py:94 settings/utils/ldap.py:679
msgid "Authentication failed (before login check failed): {}" msgid "Authentication failed (before login check failed): {}"
msgstr "认证失败 (登录前检查失败): {}" msgstr "认证失败 (登录前检查失败): {}"
@ -3139,7 +3144,7 @@ msgstr "已校验"
msgid "Different city login reminder" msgid "Different city login reminder"
msgstr "异地登录提醒" msgstr "异地登录提醒"
#: authentication/notifications.py:52 #: authentication/notifications.py:52 settings/notifications.py:47
msgid "binding reminder" msgid "binding reminder"
msgstr "绑定提醒" msgstr "绑定提醒"
@ -3277,7 +3282,7 @@ msgstr "代码错误"
#: authentication/templates/authentication/_msg_reset_password_code.html:9 #: authentication/templates/authentication/_msg_reset_password_code.html:9
#: authentication/templates/authentication/_msg_rest_password_success.html:2 #: authentication/templates/authentication/_msg_rest_password_success.html:2
#: authentication/templates/authentication/_msg_rest_public_key_success.html:2 #: authentication/templates/authentication/_msg_rest_public_key_success.html:2
#: jumpserver/conf.py:457 #: jumpserver/conf.py:460
#: perms/templates/perms/_msg_item_permissions_expire.html:3 #: perms/templates/perms/_msg_item_permissions_expire.html:3
#: perms/templates/perms/_msg_permed_items_expire.html:3 #: perms/templates/perms/_msg_permed_items_expire.html:3
#: tickets/templates/tickets/approve_check_password.html:32 #: tickets/templates/tickets/approve_check_password.html:32
@ -3437,7 +3442,7 @@ msgstr "本页面未使用 HTTPS 协议,请使用 HTTPS 协议以确保您的
msgid "Do you want to retry ?" msgid "Do you want to retry ?"
msgstr "是否重试 " msgstr "是否重试 "
#: authentication/utils.py:23 common/utils/ip/geoip/utils.py:24 #: authentication/utils.py:24 common/utils/ip/geoip/utils.py:24
#: xpack/plugins/cloud/const.py:32 #: xpack/plugins/cloud/const.py:32
msgid "LAN" msgid "LAN"
msgstr "局域网" msgstr "局域网"
@ -3772,7 +3777,7 @@ msgstr "不支持 Elasticsearch8"
msgid "Network error, please contact system administrator" msgid "Network error, please contact system administrator"
msgstr "网络错误,请联系系统管理员" msgstr "网络错误,请联系系统管理员"
#: common/sdk/im/slack/__init__.py:79 #: common/sdk/im/slack/__init__.py:77
msgid "Unknown error occur" msgid "Unknown error occur"
msgstr "发生未知错误" msgstr "发生未知错误"
@ -3869,15 +3874,15 @@ msgstr "标签管理"
# msgid "Labels" # msgid "Labels"
# msgstr "标签管理" # msgstr "标签管理"
#: common/tasks.py:21 common/utils/verify_code.py:16 #: common/tasks.py:31 common/utils/verify_code.py:16
msgid "Send email" msgid "Send email"
msgstr "发件邮件" msgstr "发件邮件"
#: common/tasks.py:48 #: common/tasks.py:58
msgid "Send email attachment" msgid "Send email attachment"
msgstr "发送邮件附件" msgstr "发送邮件附件"
#: common/tasks.py:69 terminal/tasks.py:62 #: common/tasks.py:80 terminal/tasks.py:62
msgid "Upload session replay to external storage" msgid "Upload session replay to external storage"
msgstr "上传会话录像到外部存储" msgstr "上传会话录像到外部存储"
@ -3906,16 +3911,16 @@ msgstr "不能包含特殊字符"
msgid "The mobile phone number format is incorrect" msgid "The mobile phone number format is incorrect"
msgstr "手机号格式不正确" msgstr "手机号格式不正确"
#: jumpserver/conf.py:452 #: jumpserver/conf.py:454
#, python-brace-format #, python-brace-format
msgid "The verification code is: {code}" msgid "The verification code is: {code}"
msgstr "验证码为: {code}" msgstr "验证码为: {code}"
#: jumpserver/conf.py:456 #: jumpserver/conf.py:459
msgid "Create account successfully" msgid "Create account successfully"
msgstr "创建账号成功" msgstr "创建账号成功"
#: jumpserver/conf.py:458 #: jumpserver/conf.py:461
msgid "Your account has been created successfully" msgid "Your account has been created successfully"
msgstr "你的账号已创建成功" msgstr "你的账号已创建成功"
@ -4331,6 +4336,7 @@ msgid "Is finished"
msgstr "是否完成" msgstr "是否完成"
#: ops/serializers/job.py:66 #: ops/serializers/job.py:66
#: settings/templates/ldap/_msg_import_ldap_user.html:27
msgid "Time cost" msgid "Time cost"
msgstr "花费时间" msgstr "花费时间"
@ -4814,7 +4820,7 @@ msgstr "聊天 AI 没有开启"
msgid "Test success" msgid "Test success"
msgstr "测试成功" msgstr "测试成功"
#: settings/api/email.py:21 #: settings/api/email.py:22
msgid "Test mail sent to {}, please check" msgid "Test mail sent to {}, please check"
msgstr "邮件已经发送{}, 请检查" msgstr "邮件已经发送{}, 请检查"
@ -4915,6 +4921,10 @@ msgstr "其它设置"
msgid "Chat prompt" msgid "Chat prompt"
msgstr "聊天提示" msgstr "聊天提示"
#: settings/notifications.py:22
msgid "Notification of Synchronized LDAP User Task Results"
msgstr "同步LDAP用户任务结果通知"
#: settings/serializers/auth/base.py:12 #: settings/serializers/auth/base.py:12
msgid "LDAP Auth" msgid "LDAP Auth"
msgstr "LDAP 认证" msgstr "LDAP 认证"
@ -5070,7 +5080,7 @@ msgstr "连接超时时间 (秒)"
msgid "Search paged size (piece)" msgid "Search paged size (piece)"
msgstr "搜索分页数量 (条)" msgstr "搜索分页数量 (条)"
#: settings/serializers/auth/ldap.py:81 #: settings/serializers/auth/ldap.py:84
msgid "Enable LDAP auth" msgid "Enable LDAP auth"
msgstr "启用 LDAP 认证" msgstr "启用 LDAP 认证"
@ -5286,7 +5296,7 @@ msgstr "验证码长度"
#: settings/serializers/auth/sms.py:27 settings/serializers/auth/sms.py:49 #: settings/serializers/auth/sms.py:27 settings/serializers/auth/sms.py:49
#: settings/serializers/auth/sms.py:57 settings/serializers/auth/sms.py:66 #: settings/serializers/auth/sms.py:57 settings/serializers/auth/sms.py:66
#: settings/serializers/auth/sms.py:77 settings/serializers/msg.py:76 #: settings/serializers/auth/sms.py:77 settings/serializers/msg.py:83
msgid "Signature" msgid "Signature"
msgstr "签名" msgstr "签名"
@ -5568,90 +5578,84 @@ msgstr "虚拟应用"
msgid "Enable virtual app" msgid "Enable virtual app"
msgstr "启用虚拟应用" msgstr "启用虚拟应用"
#: settings/serializers/msg.py:24 #: settings/serializers/msg.py:25
msgid "SMTP host" #, fuzzy
#| msgid "SMTP host"
msgid "SMTP"
msgstr "SMTP 主机" msgstr "SMTP 主机"
#: settings/serializers/msg.py:25
msgid "SMTP port"
msgstr "SMTP 端口"
#: settings/serializers/msg.py:26 #: settings/serializers/msg.py:26
msgid "SMTP account" msgid "EXCHANGE"
msgstr "SMTP 账号" msgstr ""
#: settings/serializers/msg.py:28 #: settings/serializers/msg.py:36
msgid "SMTP password"
msgstr "SMTP 密码"
#: settings/serializers/msg.py:29
msgid "Tips: Some provider use token except password" msgid "Tips: Some provider use token except password"
msgstr "提示:一些邮件提供商需要输入的是授权码" msgstr "提示:一些邮件提供商需要输入的是授权码"
#: settings/serializers/msg.py:32 #: settings/serializers/msg.py:39
msgid "Send user" msgid "Send user"
msgstr "发件人" msgstr "发件人"
#: settings/serializers/msg.py:33 #: settings/serializers/msg.py:40
msgid "Tips: Send mail account, default SMTP account as the send account" msgid "Tips: Send mail account, default SMTP account as the send account"
msgstr "提示:发送邮件账号,默认使用 SMTP 账号作为发送账号" msgstr "提示:发送邮件账号,默认使用 SMTP 账号作为发送账号"
#: settings/serializers/msg.py:36 #: settings/serializers/msg.py:43
msgid "Test recipient" msgid "Test recipient"
msgstr "测试收件人" msgstr "测试收件人"
#: settings/serializers/msg.py:37 #: settings/serializers/msg.py:44
msgid "Tips: Used only as a test mail recipient" msgid "Tips: Used only as a test mail recipient"
msgstr "提示:仅用来作为测试邮件收件人" msgstr "提示:仅用来作为测试邮件收件人"
#: settings/serializers/msg.py:41 #: settings/serializers/msg.py:48
msgid "If SMTP port is 465, may be select" msgid "If SMTP port is 465, may be select"
msgstr "如果SMTP端口是465通常需要启用 SSL" msgstr "如果SMTP端口是465通常需要启用 SSL"
#: settings/serializers/msg.py:44 #: settings/serializers/msg.py:51
msgid "Use TLS" msgid "Use TLS"
msgstr "使用 TLS" msgstr "使用 TLS"
#: settings/serializers/msg.py:45 #: settings/serializers/msg.py:52
msgid "If SMTP port is 587, may be select" msgid "If SMTP port is 587, may be select"
msgstr "如果SMTP端口是587通常需要启用 TLS" msgstr "如果SMTP端口是587通常需要启用 TLS"
#: settings/serializers/msg.py:48 #: settings/serializers/msg.py:55
msgid "Subject prefix" msgid "Subject prefix"
msgstr "主题前缀" msgstr "主题前缀"
#: settings/serializers/msg.py:51 #: settings/serializers/msg.py:58
msgid "Email suffix" msgid "Email suffix"
msgstr "邮件后缀" msgstr "邮件后缀"
#: settings/serializers/msg.py:52 #: settings/serializers/msg.py:59
msgid "" msgid ""
"This is used by default if no email is returned during SSO authentication" "This is used by default if no email is returned during SSO authentication"
msgstr "SSO认证时如果没有返回邮件地址将使用该后缀" msgstr "SSO认证时如果没有返回邮件地址将使用该后缀"
#: settings/serializers/msg.py:61 #: settings/serializers/msg.py:68
msgid "Create user email subject" msgid "Create user email subject"
msgstr "邮件主题" msgstr "邮件主题"
#: settings/serializers/msg.py:62 #: settings/serializers/msg.py:69
msgid "" msgid ""
"Tips: When creating a user, send the subject of the email (eg:Create account " "Tips: When creating a user, send the subject of the email (eg:Create account "
"successfully)" "successfully)"
msgstr "提示: 创建用户时,发送设置密码邮件的主题 (例如: 创建用户成功)" msgstr "提示: 创建用户时,发送设置密码邮件的主题 (例如: 创建用户成功)"
#: settings/serializers/msg.py:66 #: settings/serializers/msg.py:73
msgid "Create user honorific" msgid "Create user honorific"
msgstr "邮件问候语" msgstr "邮件问候语"
#: settings/serializers/msg.py:67 #: settings/serializers/msg.py:74
msgid "Tips: When creating a user, send the honorific of the email (eg:Hello)" msgid "Tips: When creating a user, send the honorific of the email (eg:Hello)"
msgstr "提示: 创建用户时,发送设置密码邮件的敬语 (例如: 你好)" msgstr "提示: 创建用户时,发送设置密码邮件的敬语 (例如: 你好)"
#: settings/serializers/msg.py:71 #: settings/serializers/msg.py:78
msgid "Create user email content" msgid "Create user email content"
msgstr "邮件的内容" msgstr "邮件的内容"
#: settings/serializers/msg.py:73 #: settings/serializers/msg.py:80
#, python-brace-format #, python-brace-format
msgid "" msgid ""
"Tips: When creating a user, send the content of the email, support " "Tips: When creating a user, send the content of the email, support "
@ -5659,7 +5663,7 @@ msgid ""
msgstr "" msgstr ""
"提示: 创建用户时,发送设置密码邮件的内容, 支持 {username} {name} {email} 标签" "提示: 创建用户时,发送设置密码邮件的内容, 支持 {username} {name} {email} 标签"
#: settings/serializers/msg.py:77 #: settings/serializers/msg.py:84
msgid "Tips: Email signature (eg:jumpserver)" msgid "Tips: Email signature (eg:jumpserver)"
msgstr "邮件署名 (如:jumpserver)" msgstr "邮件署名 (如:jumpserver)"
@ -6001,112 +6005,129 @@ msgstr "启用 Razor 服务"
msgid "Enable SSH Client" msgid "Enable SSH Client"
msgstr "启用 SSH Client" msgstr "启用 SSH Client"
#: settings/tasks/ldap.py:24 #: settings/tasks/ldap.py:29
msgid "Periodic import ldap user" msgid "Periodic import ldap user"
msgstr "周期导入 LDAP 用户" msgstr "周期导入 LDAP 用户"
#: settings/tasks/ldap.py:45 #: settings/tasks/ldap.py:66
msgid "Registration periodic import ldap user task" msgid "Registration periodic import ldap user task"
msgstr "注册周期导入 LDAP 用户 任务" msgstr "注册周期导入 LDAP 用户 任务"
#: settings/utils/ldap.py:491 #: settings/templates/ldap/_msg_import_ldap_user.html:2
msgid "Sync task Finish"
msgstr "同步任务完成"
#: settings/templates/ldap/_msg_import_ldap_user.html:3
msgid "Synced Organization"
msgstr "已同步组织"
#: settings/templates/ldap/_msg_import_ldap_user.html:9
msgid "Synced User"
msgstr "已同步用户"
#: settings/templates/ldap/_msg_import_ldap_user.html:26
#: terminal/models/session/session.py:45
msgid "Date end"
msgstr "结束日期"
#: settings/utils/ldap.py:494
msgid "ldap:// or ldaps:// protocol is used." msgid "ldap:// or ldaps:// protocol is used."
msgstr "使用 ldap:// 或 ldaps:// 协议" msgstr "使用 ldap:// 或 ldaps:// 协议"
#: settings/utils/ldap.py:502 #: settings/utils/ldap.py:505
msgid "Host or port is disconnected: {}" msgid "Host or port is disconnected: {}"
msgstr "主机或端口不可连接: {}" msgstr "主机或端口不可连接: {}"
#: settings/utils/ldap.py:504 #: settings/utils/ldap.py:507
msgid "The port is not the port of the LDAP service: {}" msgid "The port is not the port of the LDAP service: {}"
msgstr "端口不是LDAP服务端口: {}" msgstr "端口不是LDAP服务端口: {}"
#: settings/utils/ldap.py:506 #: settings/utils/ldap.py:509
msgid "Please add certificate: {}" msgid "Please add certificate: {}"
msgstr "请添加证书" msgstr "请添加证书"
#: settings/utils/ldap.py:510 settings/utils/ldap.py:537 #: settings/utils/ldap.py:513 settings/utils/ldap.py:540
#: settings/utils/ldap.py:567 settings/utils/ldap.py:595 #: settings/utils/ldap.py:570 settings/utils/ldap.py:598
msgid "Unknown error: {}" msgid "Unknown error: {}"
msgstr "未知错误: {}" msgstr "未知错误: {}"
#: settings/utils/ldap.py:524 #: settings/utils/ldap.py:527
msgid "Bind DN or Password incorrect" msgid "Bind DN or Password incorrect"
msgstr "绑定DN或密码错误" msgstr "绑定DN或密码错误"
#: settings/utils/ldap.py:531 #: settings/utils/ldap.py:534
msgid "Please enter Bind DN: {}" msgid "Please enter Bind DN: {}"
msgstr "请输入绑定DN: {}" msgstr "请输入绑定DN: {}"
#: settings/utils/ldap.py:533 #: settings/utils/ldap.py:536
msgid "Please enter Password: {}" msgid "Please enter Password: {}"
msgstr "请输入密码: {}" msgstr "请输入密码: {}"
#: settings/utils/ldap.py:535 #: settings/utils/ldap.py:538
msgid "Please enter correct Bind DN and Password: {}" msgid "Please enter correct Bind DN and Password: {}"
msgstr "请输入正确的绑定DN和密码: {}" msgstr "请输入正确的绑定DN和密码: {}"
#: settings/utils/ldap.py:553 #: settings/utils/ldap.py:556
msgid "Invalid User OU or User search filter: {}" msgid "Invalid User OU or User search filter: {}"
msgstr "不合法的用户OU或用户过滤器: {}" msgstr "不合法的用户OU或用户过滤器: {}"
#: settings/utils/ldap.py:584 #: settings/utils/ldap.py:587
msgid "LDAP User attr map not include: {}" msgid "LDAP User attr map not include: {}"
msgstr "LDAP属性映射没有包含: {}" msgstr "LDAP属性映射没有包含: {}"
#: settings/utils/ldap.py:591 #: settings/utils/ldap.py:594
msgid "LDAP User attr map is not dict" msgid "LDAP User attr map is not dict"
msgstr "LDAP属性映射不合法" msgstr "LDAP属性映射不合法"
#: settings/utils/ldap.py:610 #: settings/utils/ldap.py:613
msgid "LDAP authentication is not enabled" msgid "LDAP authentication is not enabled"
msgstr "LDAP认证没有启用" msgstr "LDAP认证没有启用"
#: settings/utils/ldap.py:628 #: settings/utils/ldap.py:631
msgid "Error (Invalid LDAP server): {}" msgid "Error (Invalid LDAP server): {}"
msgstr "错误 (不合法的LDAP服务器地址): {}" msgstr "错误 (不合法的LDAP服务器地址): {}"
#: settings/utils/ldap.py:630 #: settings/utils/ldap.py:633
msgid "Error (Invalid Bind DN): {}" msgid "Error (Invalid Bind DN): {}"
msgstr "错误 (不合法的绑定DN): {}" msgstr "错误 (不合法的绑定DN): {}"
#: settings/utils/ldap.py:632 #: settings/utils/ldap.py:635
msgid "Error (Invalid LDAP User attr map): {}" msgid "Error (Invalid LDAP User attr map): {}"
msgstr "错误 (不合法的LDAP属性映射): {}" msgstr "错误 (不合法的LDAP属性映射): {}"
#: settings/utils/ldap.py:634 #: settings/utils/ldap.py:637
msgid "Error (Invalid User OU or User search filter): {}" msgid "Error (Invalid User OU or User search filter): {}"
msgstr "错误 (不合法的用户OU或用户过滤器): {}" msgstr "错误 (不合法的用户OU或用户过滤器): {}"
#: settings/utils/ldap.py:636 #: settings/utils/ldap.py:639
msgid "Error (Not enabled LDAP authentication): {}" msgid "Error (Not enabled LDAP authentication): {}"
msgstr "错误 (没有启用LDAP认证): {}" msgstr "错误 (没有启用LDAP认证): {}"
#: settings/utils/ldap.py:638 #: settings/utils/ldap.py:641
msgid "Error (Unknown): {}" msgid "Error (Unknown): {}"
msgstr "错误 (未知): {}" msgstr "错误 (未知): {}"
#: settings/utils/ldap.py:641 #: settings/utils/ldap.py:644
msgid "Succeed: Match {} s user" msgid "Succeed: Match {} s user"
msgstr "成功匹配 {} 个用户" msgstr "成功匹配 {} 个用户"
#: settings/utils/ldap.py:652 #: settings/utils/ldap.py:655
msgid "Please test the connection first" msgid "Please test the connection first"
msgstr "请先测试连接" msgstr "请先测试连接"
#: settings/utils/ldap.py:674 #: settings/utils/ldap.py:677
msgid "Authentication failed (configuration incorrect): {}" msgid "Authentication failed (configuration incorrect): {}"
msgstr "认证失败 (配置错误): {}" msgstr "认证失败 (配置错误): {}"
#: settings/utils/ldap.py:678 #: settings/utils/ldap.py:681
msgid "Authentication failed (username or password incorrect): {}" msgid "Authentication failed (username or password incorrect): {}"
msgstr "认证失败 (用户名或密码不正确): {}" msgstr "认证失败 (用户名或密码不正确): {}"
#: settings/utils/ldap.py:680 #: settings/utils/ldap.py:683
msgid "Authentication failed (Unknown): {}" msgid "Authentication failed (Unknown): {}"
msgstr "认证失败: (未知): {}" msgstr "认证失败: (未知): {}"
#: settings/utils/ldap.py:683 #: settings/utils/ldap.py:686
msgid "Authentication success: {}" msgid "Authentication success: {}"
msgstr "认证成功: {}" msgstr "认证成功: {}"
@ -6709,10 +6730,6 @@ msgstr "登录来源"
msgid "Replay" msgid "Replay"
msgstr "回放" msgstr "回放"
#: terminal/models/session/session.py:45
msgid "Date end"
msgstr "结束日期"
#: terminal/models/session/session.py:47 terminal/serializers/session.py:65 #: terminal/models/session/session.py:47 terminal/serializers/session.py:65
msgid "Command amount" msgid "Command amount"
msgstr "命令数量" msgstr "命令数量"
@ -8193,7 +8210,7 @@ msgstr "MFA(OTP) 禁用成功,返回登录页面"
msgid "Password invalid" msgid "Password invalid"
msgstr "用户名或密码无效" msgstr "用户名或密码无效"
#: users/views/profile/reset.py:64 #: users/views/profile/reset.py:65
msgid "" msgid ""
"Non-local users can log in only from third-party platforms and cannot change " "Non-local users can log in only from third-party platforms and cannot change "
"their passwords: {}" "their passwords: {}"
@ -8368,7 +8385,7 @@ msgstr "与"
msgid "Or" msgid "Or"
msgstr "或" msgstr "或"
#: xpack/plugins/cloud/manager.py:56 #: xpack/plugins/cloud/manager.py:57
msgid "Account unavailable" msgid "Account unavailable"
msgstr "账号无效" msgstr "账号无效"
@ -8915,6 +8932,15 @@ msgstr "企业专业版"
msgid "Ultimate edition" msgid "Ultimate edition"
msgstr "企业旗舰版" msgstr "企业旗舰版"
#~ msgid "SMTP port"
#~ msgstr "SMTP 端口"
#~ msgid "SMTP account"
#~ msgstr "SMTP 账号"
#~ msgid "SMTP password"
#~ msgstr "SMTP 密码"
#~ msgid "Password can not contains `{{` or `}}`" #~ msgid "Password can not contains `{{` or `}}`"
#~ msgstr "密码不能包含 `{{` 或 `}}` 字符" #~ msgstr "密码不能包含 `{{` 或 `}}` 字符"

View File

@ -137,7 +137,7 @@ class LDAPUserImportAPI(APIView):
return Response({'msg': _('Get ldap users is None')}, status=400) return Response({'msg': _('Get ldap users is None')}, status=400)
orgs = self.get_orgs() orgs = self.get_orgs()
errors = LDAPImportUtil().perform_import(users, orgs) new_users, errors = LDAPImportUtil().perform_import(users, orgs)
if errors: if errors:
return Response({'errors': errors}, status=400) return Response({'errors': errors}, status=400)

View File

@ -0,0 +1,35 @@
from django.template.loader import render_to_string
from django.utils.translation import gettext as _
from common.utils import get_logger
from common.utils.timezone import local_now_display
from notifications.notifications import UserMessage
logger = get_logger(__file__)
class LDAPImportMessage(UserMessage):
def __init__(self, user, extra_kwargs):
super().__init__(user)
self.orgs = extra_kwargs.pop('orgs', [])
self.end_time = extra_kwargs.pop('end_time', '')
self.start_time = extra_kwargs.pop('start_time', '')
self.time_start_display = extra_kwargs.pop('time_start_display', '')
self.new_users = extra_kwargs.pop('new_users', [])
self.errors = extra_kwargs.pop('errors', [])
def get_html_msg(self) -> dict:
subject = _('Notification of Synchronized LDAP User Task Results')
context = {
'orgs': self.orgs,
'start_time': self.time_start_display,
'end_time': local_now_display(),
'cost_time': self.end_time - self.start_time,
'users': self.new_users,
'errors': self.errors
}
message = render_to_string('ldap/_msg_import_ldap_user.html', context)
return {
'subject': subject,
'message': message
}

View File

@ -77,6 +77,9 @@ class LDAPSettingSerializer(serializers.Serializer):
required=False, label=_('Connect timeout (s)'), required=False, label=_('Connect timeout (s)'),
) )
AUTH_LDAP_SEARCH_PAGED_SIZE = serializers.IntegerField(required=False, label=_('Search paged size (piece)')) AUTH_LDAP_SEARCH_PAGED_SIZE = serializers.IntegerField(required=False, label=_('Search paged size (piece)'))
AUTH_LDAP_SYNC_RECEIVERS = serializers.ListField(
required=False, label=_('Recipient'), max_length=36
)
AUTH_LDAP = serializers.BooleanField(required=False, label=_('Enable LDAP auth')) AUTH_LDAP = serializers.BooleanField(required=False, label=_('Enable LDAP auth'))

View File

@ -1,15 +1,19 @@
# coding: utf-8 # coding: utf-8
# #
import time
from celery import shared_task from celery import shared_task
from django.conf import settings from django.conf import settings
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from common.utils import get_logger from common.utils import get_logger
from common.utils.timezone import local_now_display
from ops.celery.decorator import after_app_ready_start from ops.celery.decorator import after_app_ready_start
from ops.celery.utils import ( from ops.celery.utils import (
create_or_update_celery_periodic_tasks, disable_celery_periodic_task create_or_update_celery_periodic_tasks, disable_celery_periodic_task
) )
from orgs.models import Organization from orgs.models import Organization
from settings.notifications import LDAPImportMessage
from users.models import User
from ..utils import LDAPSyncUtil, LDAPServerUtil, LDAPImportUtil from ..utils import LDAPSyncUtil, LDAPServerUtil, LDAPImportUtil
__all__ = ['sync_ldap_user', 'import_ldap_user_periodic', 'import_ldap_user'] __all__ = ['sync_ldap_user', 'import_ldap_user_periodic', 'import_ldap_user']
@ -23,6 +27,8 @@ def sync_ldap_user():
@shared_task(verbose_name=_('Periodic import ldap user')) @shared_task(verbose_name=_('Periodic import ldap user'))
def import_ldap_user(): def import_ldap_user():
start_time = time.time()
time_start_display = local_now_display()
logger.info("Start import ldap user task") logger.info("Start import ldap user task")
util_server = LDAPServerUtil() util_server = LDAPServerUtil()
util_import = LDAPImportUtil() util_import = LDAPImportUtil()
@ -35,11 +41,25 @@ def import_ldap_user():
org_ids = [Organization.DEFAULT_ID] org_ids = [Organization.DEFAULT_ID]
default_org = Organization.default() default_org = Organization.default()
orgs = list(set([Organization.get_instance(org_id, default=default_org) for org_id in org_ids])) orgs = list(set([Organization.get_instance(org_id, default=default_org) for org_id in org_ids]))
errors = util_import.perform_import(users, orgs) new_users, errors = util_import.perform_import(users, orgs)
if errors: if errors:
logger.error("Imported LDAP users errors: {}".format(errors)) logger.error("Imported LDAP users errors: {}".format(errors))
else: else:
logger.info('Imported {} users successfully'.format(len(users))) logger.info('Imported {} users successfully'.format(len(users)))
if settings.AUTH_LDAP_SYNC_RECEIVERS:
user_ids = settings.AUTH_LDAP_SYNC_RECEIVERS
recipient_list = User.objects.filter(id__in=list(user_ids))
end_time = time.time()
extra_kwargs = {
'orgs': orgs,
'end_time': end_time,
'start_time': start_time,
'time_start_display': time_start_display,
'new_users': new_users,
'errors': errors,
}
for user in recipient_list:
LDAPImportMessage(user, extra_kwargs).publish()
@shared_task(verbose_name=_('Registration periodic import ldap user task')) @shared_task(verbose_name=_('Registration periodic import ldap user task'))

View File

@ -0,0 +1,30 @@
{% load i18n %}
<p>{% trans "Sync task Finish" %}</p>
<b>{% trans 'Time' %}:</b>
<ul>
<li>{% trans 'Date start' %}: {{ start_time }}</li>
<li>{% trans 'Date end' %}: {{ end_time }}</li>
<li>{% trans 'Time cost' %}: {{ cost_time| floatformat:0 }}s</li>
</ul>
<b>{% trans "Synced Organization" %}:</b>
<ul>
{% for org in orgs %}
<li>{{ org }}</li>
{% endfor %}
</ul>
<b>{% trans "Synced User" %}:</b>
<ul>
{% for user in users %}
<li>{{ user }}</li>
{% endfor %}
</ul>
{% if errors %}
<b>{% trans 'Error' %}:</b>
<ul>
{% for error in errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}

View File

@ -400,11 +400,14 @@ class LDAPImportUtil(object):
logger.info('Start perform import ldap users, count: {}'.format(len(users))) logger.info('Start perform import ldap users, count: {}'.format(len(users)))
errors = [] errors = []
objs = [] objs = []
new_users = []
group_users_mapper = defaultdict(set) group_users_mapper = defaultdict(set)
for user in users: for user in users:
groups = user.pop('groups', []) groups = user.pop('groups', [])
try: try:
obj, created = self.update_or_create(user) obj, created = self.update_or_create(user)
if created:
new_users.append(obj)
objs.append(obj) objs.append(obj)
except Exception as e: except Exception as e:
errors.append({user['username']: str(e)}) errors.append({user['username']: str(e)})
@ -421,7 +424,7 @@ class LDAPImportUtil(object):
for org in orgs: for org in orgs:
self.bind_org(org, objs, group_users_mapper) self.bind_org(org, objs, group_users_mapper)
logger.info('End perform import ldap users') logger.info('End perform import ldap users')
return errors return new_users, errors
def exit_user_group(self, user_groups_mapper): def exit_user_group(self, user_groups_mapper):
# 通过对比查询本次导入用户需要移除的用户组 # 通过对比查询本次导入用户需要移除的用户组