diff --git a/apps/jumpserver/conf.py b/apps/jumpserver/conf.py index d6fb241db..741a0e5db 100644 --- a/apps/jumpserver/conf.py +++ b/apps/jumpserver/conf.py @@ -282,6 +282,7 @@ class Config(dict): 'AUTH_LDAP_SYNC_INTERVAL': None, 'AUTH_LDAP_SYNC_CRONTAB': None, 'AUTH_LDAP_SYNC_ORG_IDS': ['00000000-0000-0000-0000-000000000002'], + 'AUTH_LDAP_SYNC_RECEIVERS': [], 'AUTH_LDAP_USER_LOGIN_ONLY_IN_USERS': False, 'AUTH_LDAP_OPTIONS_OPT_REFERRALS': -1, diff --git a/apps/jumpserver/settings/auth.py b/apps/jumpserver/settings/auth.py index 66ae6289c..5e44a22a4 100644 --- a/apps/jumpserver/settings/auth.py +++ b/apps/jumpserver/settings/auth.py @@ -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_CRONTAB = CONFIG.AUTH_LDAP_SYNC_CRONTAB 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 # ============================================================================== diff --git a/apps/locale/ja/LC_MESSAGES/django.mo b/apps/locale/ja/LC_MESSAGES/django.mo index 169dd1e30..ba844d417 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:d8f3d621226f7e11db46fb35abf0b5f5528eb454a3a6f889499d7872d41a275d -size 170675 +oid sha256:18c4618e0d0470e25d99b143e83de9a439ac691e5cb1d92ea5406cc32338e8f8 +size 170813 diff --git a/apps/locale/ja/LC_MESSAGES/django.po b/apps/locale/ja/LC_MESSAGES/django.po index b566534c4..54a52ff27 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: 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" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -29,8 +29,9 @@ msgstr "パラメータ 'action' は [{}] でなければなりません。" #: authentication/confirm/password.py:26 authentication/forms.py:32 #: authentication/templates/authentication/login.html:330 #: settings/serializers/auth/ldap.py:25 settings/serializers/auth/ldap.py:47 -#: terminal/serializers/storage.py:123 terminal/serializers/storage.py:142 -#: users/forms/profile.py:22 users/serializers/user.py:104 +#: settings/serializers/msg.py:35 terminal/serializers/storage.py:123 +#: 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/user_password_verify.html:18 #: xpack/plugins/cloud/serializers/account_attrs.py:28 @@ -200,10 +201,10 @@ msgstr "作成のみ" #: authentication/serializers/password_mfa.py:16 #: authentication/serializers/password_mfa.py:24 #: 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/templates/users/forgot_password.html:117 -#: users/views/profile/reset.py:92 +#: users/views/profile/reset.py:93 msgid "Email" msgstr "メール" @@ -287,11 +288,11 @@ msgstr "ソース ID" #: accounts/serializers/automations/change_secret.py:107 #: accounts/serializers/automations/change_secret.py:127 #: acls/serializers/base.py:124 acls/templates/acls/asset_login_reminder.html:7 -#: assets/serializers/asset/common.py:125 assets/serializers/gateway.py:28 +#: assets/serializers/asset/common.py:128 assets/serializers/gateway.py:28 #: audits/models.py:59 authentication/api/connection_token.py:405 #: ops/models/base.py:18 perms/models/asset_permission.py:75 -#: perms/serializers/permission.py:41 terminal/backends/command/models.py:18 -#: terminal/models/session/session.py:33 +#: perms/serializers/permission.py:41 settings/serializers/msg.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_session_sharing.html:8 #: 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 #: ops/models/base.py:55 ops/models/celery.py:63 ops/models/job.py:235 #: ops/templates/ops/celery_task_log.html:75 -#: perms/models/asset_permission.py:78 terminal/models/applet/host.py:141 -#: terminal/models/session/session.py:44 +#: perms/models/asset_permission.py:78 +#: 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_asset.py:19 msgid "Date start" @@ -371,6 +373,7 @@ msgstr "開始日" #: accounts/models/automations/backup_account.py:122 #: authentication/templates/authentication/_msg_oauth_bind.html:11 #: notifications/notifications.py:186 +#: settings/templates/ldap/_msg_import_ldap_user.html:23 msgid "Time" msgstr "時間" @@ -446,6 +449,7 @@ msgstr "SSHキープッシュ方式" #: accounts/models/automations/gather_account.py:58 #: accounts/serializers/account/backup.py:41 #: accounts/serializers/automations/change_secret.py:56 +#: settings/serializers/auth/ldap.py:81 msgid "Recipient" msgstr "受信者" @@ -491,6 +495,7 @@ msgstr "ステータス" #: authentication/templates/authentication/passkey.html:173 #: authentication/views/base.py:42 authentication/views/base.py:43 #: authentication/views/base.py:44 common/const/choices.py:20 +#: settings/templates/ldap/_msg_import_ldap_user.html:16 msgid "Error" msgstr "間違い" @@ -593,8 +598,8 @@ msgstr "パスワードルール" #: assets/models/asset/common.py:159 assets/models/cmd_filter.py:21 #: assets/models/domain.py:19 assets/models/group.py:17 #: assets/models/label.py:18 assets/models/platform.py:16 -#: assets/models/platform.py:95 assets/serializers/asset/common.py:146 -#: assets/serializers/platform.py:118 assets/serializers/platform.py:235 +#: assets/models/platform.py:95 assets/serializers/asset/common.py:149 +#: assets/serializers/platform.py:118 assets/serializers/platform.py:228 #: authentication/backends/passkey/models.py:10 #: authentication/serializers/connect_token_secret.py:113 #: 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/serializers/job.py:18 orgs/models.py:82 #: 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/component/endpoint.py:95 #: 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 #: assets/models/label.py:21 assets/models/platform.py:96 -#: assets/serializers/asset/common.py:122 assets/serializers/cagegory.py:12 -#: assets/serializers/platform.py:140 assets/serializers/platform.py:236 +#: assets/serializers/asset/common.py:125 assets/serializers/cagegory.py:12 +#: assets/serializers/platform.py:140 assets/serializers/platform.py:229 #: perms/serializers/user_permission.py:26 settings/models.py:35 #: tickets/models/ticket/apply_application.py:13 users/models/preference.py:12 msgid "Category" @@ -750,7 +755,7 @@ msgstr "カテゴリ" #: acls/serializers/command_acl.py:19 applications/models.py:14 #: assets/models/_user.py:50 assets/models/automations/base.py:20 #: 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 #: audits/serializers.py:170 #: authentication/serializers/connect_token_secret.py:126 ops/models/job.py:144 @@ -868,7 +873,7 @@ msgid "Key password" msgstr "キーパスワード" #: accounts/serializers/account/base.py:78 -#: assets/serializers/asset/common.py:379 +#: assets/serializers/asset/common.py:381 msgid "Spec info" msgstr "特別情報" @@ -1117,8 +1122,8 @@ msgid "Users" msgstr "ユーザー" #: acls/models/base.py:98 assets/models/automations/base.py:17 -#: assets/models/cmd_filter.py:38 assets/serializers/asset/common.py:378 -#: perms/serializers/user_permission.py:75 rbac/tree.py:35 +#: assets/models/cmd_filter.py:38 perms/serializers/user_permission.py:75 +#: rbac/tree.py:35 msgid "Accounts" msgstr "アカウント" @@ -1423,8 +1428,8 @@ msgstr "脚本" #: 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/feature.py:49 terminal/models/component/endpoint.py:13 -#: terminal/serializers/applet.py:17 +#: settings/serializers/feature.py:49 settings/serializers/msg.py:31 +#: terminal/models/component/endpoint.py:13 terminal/serializers/applet.py:17 #: xpack/plugins/cloud/serializers/account_attrs.py:72 msgid "Host" msgstr "ホスト" @@ -1548,7 +1553,7 @@ msgid "We will consider login success when we see this prompt" msgstr "このプロンプトが表示されたらログイン成功とみなします" #: assets/const/protocol.py:119 assets/models/asset/database.py:10 -#: settings/serializers/msg.py:40 +#: settings/serializers/msg.py:47 msgid "Use SSL" msgstr "SSLの使用" @@ -1663,7 +1668,7 @@ msgstr "ユーザーと同じユーザー名" #: assets/models/_user.py:52 authentication/models/connection_token.py:41 #: 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/serializers/session.py:19 terminal/serializers/session.py:45 #: terminal/serializers/storage.py:71 @@ -1716,12 +1721,12 @@ msgstr "クラウド サービス" #: assets/models/asset/common.py:94 assets/models/platform.py:17 #: 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 msgid "Port" 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" msgstr "アドレス" @@ -1745,7 +1750,7 @@ msgstr "ドメイン" msgid "Node" 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 msgid "Gathered info" msgstr "資産ハードウェア情報の収集" @@ -1894,7 +1899,7 @@ msgstr "値" #: assets/serializers/platform.py:119 #: authentication/serializers/connect_token_secret.py:124 #: 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" 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:75 #: perms/models/asset_permission.py:76 perms/serializers/permission.py:42 @@ -2074,29 +2079,29 @@ msgstr "" msgid "Protocols" msgstr "プロトコル" -#: assets/serializers/asset/common.py:126 -#: assets/serializers/asset/common.py:148 +#: assets/serializers/asset/common.py:129 +#: assets/serializers/asset/common.py:151 msgid "Node path" msgstr "ノードパスです" -#: assets/serializers/asset/common.py:145 -#: assets/serializers/asset/common.py:381 +#: assets/serializers/asset/common.py:148 +#: assets/serializers/asset/common.py:383 msgid "Auto info" msgstr "自動情報" -#: assets/serializers/asset/common.py:239 +#: assets/serializers/asset/common.py:242 msgid "Platform not exist" msgstr "プラットフォームが存在しません" -#: assets/serializers/asset/common.py:275 +#: assets/serializers/asset/common.py:278 msgid "port out of range (0-65535)" msgstr "ポート番号が範囲外です (0-65535)" -#: assets/serializers/asset/common.py:282 +#: assets/serializers/asset/common.py:285 msgid "Protocol is required: {}" msgstr "プロトコルが必要です: {}" -#: assets/serializers/asset/common.py:310 +#: assets/serializers/asset/common.py:313 msgid "Invalid data" msgstr "無効なデータ" @@ -2251,7 +2256,7 @@ msgstr "デフォルト ドメイン" msgid "type is required" msgstr "タイプ このフィールドは必須です." -#: assets/serializers/platform.py:211 +#: assets/serializers/platform.py:204 msgid "Protocols is required" msgstr "同意が必要です" @@ -2606,8 +2611,8 @@ msgstr "認証トークン" #: audits/signal_handlers/login_log.py:37 authentication/notifications.py:73 #: authentication/views/login.py:77 notifications/backends/__init__.py:11 -#: settings/serializers/auth/wecom.py:10 users/models/user.py:749 -#: users/models/user.py:855 +#: settings/notifications.py:68 settings/serializers/auth/wecom.py:10 +#: users/models/user.py:749 users/models/user.py:855 msgid "WeCom" msgstr "企業微信" @@ -2694,16 +2699,16 @@ msgstr "ACL アクションはレビューです" msgid "Current user not support mfa type: {}" msgstr "現在のユーザーはmfaタイプをサポートしていません: {}" -#: authentication/api/password.py:34 terminal/api/session/session.py:305 -#: users/views/profile/reset.py:61 +#: authentication/api/password.py:33 terminal/api/session/session.py:305 +#: users/views/profile/reset.py:62 msgid "User does not exist: {}" 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" msgstr "ユーザーにマッチしなかった" -#: authentication/api/password.py:38 +#: authentication/api/password.py:37 msgid "" "The user is from {}, please go to the corresponding system to change the " "password" @@ -2711,7 +2716,7 @@ msgstr "" "ユーザーは {}からです。対応するシステムにアクセスしてパスワードを変更してくだ" "さい。" -#: authentication/api/password.py:67 +#: authentication/api/password.py:65 #: authentication/templates/authentication/login.html:361 #: users/templates/users/forgot_password.html:27 #: users/templates/users/forgot_password.html:28 @@ -3031,7 +3036,7 @@ msgstr "メッセージ検証コードが無効" #: authentication/serializers/password_mfa.py:24 #: settings/serializers/auth/sms.py:32 users/forms/profile.py:104 #: 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" msgstr "メッセージ" @@ -3047,7 +3052,7 @@ msgstr "電話番号を設定して有効にする" msgid "Clear phone number to disable" 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): {}" msgstr "認証に失敗しました (ログインチェックが失敗する前): {}" @@ -3171,7 +3176,7 @@ msgstr "確認済み" msgid "Different city login reminder" msgstr "異なる都市ログインのリマインダー" -#: authentication/notifications.py:52 +#: authentication/notifications.py:52 settings/notifications.py:47 msgid "binding reminder" msgstr "バインディングリマインダー" @@ -3309,7 +3314,7 @@ msgstr "コードエラー" #: authentication/templates/authentication/_msg_reset_password_code.html:9 #: authentication/templates/authentication/_msg_rest_password_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_permed_items_expire.html:3 #: tickets/templates/tickets/approve_check_password.html:32 @@ -3481,7 +3486,7 @@ msgstr "" msgid "Do you want to retry ?" 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 msgid "LAN" msgstr "ローカルエリアネットワーク" @@ -3818,7 +3823,7 @@ msgstr "サポートされていません Elasticsearch8" msgid "Network error, please contact system administrator" msgstr "ネットワークエラー、システム管理者に連絡してください" -#: common/sdk/im/slack/__init__.py:79 +#: common/sdk/im/slack/__init__.py:77 msgid "Unknown error occur" msgstr "不明なエラーが発生しました" @@ -3913,15 +3918,15 @@ msgstr "無効なオプション: {}" msgid "Labels" msgstr "ラベル" -#: common/tasks.py:21 common/utils/verify_code.py:16 +#: common/tasks.py:31 common/utils/verify_code.py:16 msgid "Send email" msgstr "メールを送る" -#: common/tasks.py:48 +#: common/tasks.py:58 msgid "Send email attachment" msgstr "メールの添付ファイルを送信" -#: common/tasks.py:69 terminal/tasks.py:62 +#: common/tasks.py:80 terminal/tasks.py:62 msgid "Upload session replay to external storage" msgstr "セッションの記録を外部ストレージにアップロードする" @@ -3950,16 +3955,16 @@ msgstr "特殊文字を含むべきではない" msgid "The mobile phone number format is incorrect" msgstr "携帯電話番号の形式が正しくありません" -#: jumpserver/conf.py:452 +#: jumpserver/conf.py:454 #, python-brace-format msgid "The verification code is: {code}" msgstr "認証コードは: {code}" -#: jumpserver/conf.py:456 +#: jumpserver/conf.py:459 msgid "Create account successfully" msgstr "アカウントを正常に作成" -#: jumpserver/conf.py:458 +#: jumpserver/conf.py:461 msgid "Your account has been created successfully" msgstr "アカウントが正常に作成されました" @@ -4382,6 +4387,7 @@ msgid "Is finished" msgstr "終了しました" #: ops/serializers/job.py:66 +#: settings/templates/ldap/_msg_import_ldap_user.html:27 msgid "Time cost" msgstr "時を過ごす" @@ -4867,7 +4873,7 @@ msgstr "チャットAIがオンになっていない" msgid "Test success" msgstr "テストの成功" -#: settings/api/email.py:21 +#: settings/api/email.py:22 msgid "Test mail sent to {}, please check" msgstr "{}に送信されたテストメールを確認してください" @@ -4970,6 +4976,10 @@ msgstr "他の設定を変えることができます" msgid "Chat prompt" msgstr "チャットのヒント" +#: settings/notifications.py:22 +msgid "Notification of Synchronized LDAP User Task Results" +msgstr "LDAPユーザータスクの結果通知を同期する" + #: settings/serializers/auth/base.py:12 msgid "LDAP Auth" msgstr "LDAP 認証" @@ -5125,7 +5135,7 @@ msgstr "接続タイムアウト (秒)" msgid "Search paged size (piece)" msgstr "ページサイズを検索 (じょう)" -#: settings/serializers/auth/ldap.py:81 +#: settings/serializers/auth/ldap.py:84 msgid "Enable LDAP auth" msgstr "LDAP認証の有効化" @@ -5342,7 +5352,7 @@ msgstr "認証コード長" #: 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:77 settings/serializers/msg.py:76 +#: settings/serializers/auth/sms.py:77 settings/serializers/msg.py:83 msgid "Signature" msgstr "署名" @@ -5628,74 +5638,68 @@ msgstr "仮想アプリケーション" msgid "Enable virtual app" msgstr "仮想アプリケーションの有効化" -#: settings/serializers/msg.py:24 -msgid "SMTP host" +#: settings/serializers/msg.py:25 +#, fuzzy +#| msgid "SMTP host" +msgid "SMTP" msgstr "SMTPホスト" -#: settings/serializers/msg.py:25 -msgid "SMTP port" -msgstr "SMTPポート" - #: settings/serializers/msg.py:26 -msgid "SMTP account" -msgstr "SMTPアカウント" +msgid "EXCHANGE" +msgstr "" -#: settings/serializers/msg.py:28 -msgid "SMTP password" -msgstr "SMTPパスワード" - -#: settings/serializers/msg.py:29 +#: settings/serializers/msg.py:36 msgid "Tips: Some provider use token except password" msgstr "ヒント: 一部のプロバイダーはパスワード以外のトークンを使用します" -#: settings/serializers/msg.py:32 +#: settings/serializers/msg.py:39 msgid "Send user" msgstr "ユーザーを送信" -#: settings/serializers/msg.py:33 +#: settings/serializers/msg.py:40 msgid "Tips: Send mail account, default SMTP account as the send account" msgstr "" "ヒント: 送信メールアカウント、送信アカウントとしてのデフォルトのSMTPアカウン" "ト" -#: settings/serializers/msg.py:36 +#: settings/serializers/msg.py:43 msgid "Test recipient" msgstr "テスト受信者" -#: settings/serializers/msg.py:37 +#: settings/serializers/msg.py:44 msgid "Tips: Used only as a test mail recipient" msgstr "ヒント: テストメールの受信者としてのみ使用" -#: settings/serializers/msg.py:41 +#: settings/serializers/msg.py:48 msgid "If SMTP port is 465, may be select" msgstr "SMTPポートが465の場合は、" -#: settings/serializers/msg.py:44 +#: settings/serializers/msg.py:51 msgid "Use TLS" msgstr "TLSの使用" -#: settings/serializers/msg.py:45 +#: settings/serializers/msg.py:52 msgid "If SMTP port is 587, may be select" msgstr "SMTPポートが587の場合は、" -#: settings/serializers/msg.py:48 +#: settings/serializers/msg.py:55 msgid "Subject prefix" msgstr "件名プレフィックス" -#: settings/serializers/msg.py:51 +#: settings/serializers/msg.py:58 msgid "Email suffix" msgstr "メールのサフィックス" -#: settings/serializers/msg.py:52 +#: settings/serializers/msg.py:59 msgid "" "This is used by default if no email is returned during SSO authentication" msgstr "これは、SSO認証中にメールが返されない場合にデフォルトで使用されます。" -#: settings/serializers/msg.py:61 +#: settings/serializers/msg.py:68 msgid "Create user email subject" msgstr "ユーザーメール件名の作成" -#: settings/serializers/msg.py:62 +#: settings/serializers/msg.py:69 msgid "" "Tips: When creating a user, send the subject of the email (eg:Create account " "successfully)" @@ -5703,20 +5707,20 @@ msgstr "" "ヒント: ユーザーを作成するときに、メールの件名を送信します (例: アカウントを" "正常に作成)" -#: settings/serializers/msg.py:66 +#: settings/serializers/msg.py:73 msgid "Create user honorific" 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)" msgstr "" "ヒント: ユーザーを作成するときは、メールの敬語を送信します (例: こんにちは)" -#: settings/serializers/msg.py:71 +#: settings/serializers/msg.py:78 msgid "Create user email content" msgstr "ユーザーのメールコンテンツを作成する" -#: settings/serializers/msg.py:73 +#: settings/serializers/msg.py:80 #, python-brace-format msgid "" "Tips: When creating a user, send the content of the email, support " @@ -5725,7 +5729,7 @@ msgstr "" "ヒント:ユーザーの作成時にパスワード設定メールの内容を送信し、{username}{name}" "{email}ラベルをサポートします。" -#: settings/serializers/msg.py:77 +#: settings/serializers/msg.py:84 msgid "Tips: Email signature (eg:jumpserver)" msgstr "ヒント: メール署名 (例: jumpserver)" @@ -6085,112 +6089,129 @@ msgstr "Razor の有効化" msgid "Enable SSH Client" msgstr "SSH Clientの有効化" -#: settings/tasks/ldap.py:24 +#: settings/tasks/ldap.py:29 msgid "Periodic import ldap user" msgstr "LDAP ユーザーを定期的にインポートする" -#: settings/tasks/ldap.py:45 +#: settings/tasks/ldap.py:66 msgid "Registration periodic import ldap user task" 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." msgstr "ldap:// または ldaps:// プロトコルが使用されます。" -#: settings/utils/ldap.py:502 +#: settings/utils/ldap.py:505 msgid "Host or port is disconnected: {}" msgstr "ホストまたはポートが切断されました: {}" -#: settings/utils/ldap.py:504 +#: settings/utils/ldap.py:507 msgid "The port is not the port of the LDAP service: {}" msgstr "ポートはLDAPサービスのポートではありません: {}" -#: settings/utils/ldap.py:506 +#: settings/utils/ldap.py:509 msgid "Please add certificate: {}" msgstr "証明書を追加してください: {}" -#: settings/utils/ldap.py:510 settings/utils/ldap.py:537 -#: settings/utils/ldap.py:567 settings/utils/ldap.py:595 +#: settings/utils/ldap.py:513 settings/utils/ldap.py:540 +#: settings/utils/ldap.py:570 settings/utils/ldap.py:598 msgid "Unknown error: {}" msgstr "不明なエラー: {}" -#: settings/utils/ldap.py:524 +#: settings/utils/ldap.py:527 msgid "Bind DN or Password incorrect" msgstr "DNまたはパスワードのバインドが正しくありません" -#: settings/utils/ldap.py:531 +#: settings/utils/ldap.py:534 msgid "Please enter Bind DN: {}" msgstr "バインドDN: {} を入力してください" -#: settings/utils/ldap.py:533 +#: settings/utils/ldap.py:536 msgid "Please enter Password: {}" msgstr "パスワードを入力してください: {}" -#: settings/utils/ldap.py:535 +#: settings/utils/ldap.py:538 msgid "Please enter correct Bind DN and Password: {}" msgstr "正しいバインドDNとパスワードを入力してください: {}" -#: settings/utils/ldap.py:553 +#: settings/utils/ldap.py:556 msgid "Invalid User OU or User search filter: {}" msgstr "無効なユーザー OU またはユーザー検索フィルター: {}" -#: settings/utils/ldap.py:584 +#: settings/utils/ldap.py:587 msgid "LDAP User attr map not include: {}" msgstr "LDAP ユーザーattrマップは含まれません: {}" -#: settings/utils/ldap.py:591 +#: settings/utils/ldap.py:594 msgid "LDAP User attr map is not dict" msgstr "LDAPユーザーattrマップはdictではありません" -#: settings/utils/ldap.py:610 +#: settings/utils/ldap.py:613 msgid "LDAP authentication is not enabled" msgstr "LDAP 認証が有効になっていない" -#: settings/utils/ldap.py:628 +#: settings/utils/ldap.py:631 msgid "Error (Invalid LDAP server): {}" msgstr "エラー (LDAPサーバーが無効): {}" -#: settings/utils/ldap.py:630 +#: settings/utils/ldap.py:633 msgid "Error (Invalid Bind DN): {}" msgstr "エラー (DNのバインドが無効): {}" -#: settings/utils/ldap.py:632 +#: settings/utils/ldap.py:635 msgid "Error (Invalid LDAP User attr map): {}" msgstr "エラー (LDAPユーザーattrマップが無効): {}" -#: settings/utils/ldap.py:634 +#: settings/utils/ldap.py:637 msgid "Error (Invalid User OU or User search filter): {}" msgstr "エラー (ユーザーOUまたはユーザー検索フィルターが無効): {}" -#: settings/utils/ldap.py:636 +#: settings/utils/ldap.py:639 msgid "Error (Not enabled LDAP authentication): {}" msgstr "エラー (LDAP認証が有効化されていません): {}" -#: settings/utils/ldap.py:638 +#: settings/utils/ldap.py:641 msgid "Error (Unknown): {}" msgstr "エラー (不明): {}" -#: settings/utils/ldap.py:641 +#: settings/utils/ldap.py:644 msgid "Succeed: Match {} s user" msgstr "成功: {} 人のユーザーに一致" -#: settings/utils/ldap.py:652 +#: settings/utils/ldap.py:655 msgid "Please test the connection first" msgstr "まず接続をテストしてください" -#: settings/utils/ldap.py:674 +#: settings/utils/ldap.py:677 msgid "Authentication failed (configuration incorrect): {}" msgstr "認証に失敗しました (設定が正しくありません): {}" -#: settings/utils/ldap.py:678 +#: settings/utils/ldap.py:681 msgid "Authentication failed (username or password incorrect): {}" msgstr "認証に失敗しました (ユーザー名またはパスワードが正しくありません): {}" -#: settings/utils/ldap.py:680 +#: settings/utils/ldap.py:683 msgid "Authentication failed (Unknown): {}" msgstr "認証に失敗しました (不明): {}" -#: settings/utils/ldap.py:683 +#: settings/utils/ldap.py:686 msgid "Authentication success: {}" msgstr "認証成功: {}" @@ -6803,10 +6824,6 @@ msgstr "ログイン元" msgid "Replay" msgstr "リプレイ" -#: terminal/models/session/session.py:45 -msgid "Date end" -msgstr "終了日" - #: terminal/models/session/session.py:47 terminal/serializers/session.py:65 msgid "Command amount" msgstr "コマンド量" @@ -8315,7 +8332,7 @@ msgstr "OTP無効化成功、ログインページを返す" msgid "Password invalid" msgstr "パスワード無効" -#: users/views/profile/reset.py:64 +#: users/views/profile/reset.py:65 msgid "" "Non-local users can log in only from third-party platforms and cannot change " "their passwords: {}" @@ -8492,7 +8509,7 @@ msgstr "そして" msgid "Or" msgstr "または" -#: xpack/plugins/cloud/manager.py:56 +#: xpack/plugins/cloud/manager.py:57 msgid "Account unavailable" msgstr "利用できないアカウント" @@ -9042,6 +9059,15 @@ msgstr "エンタープライズプロフェッショナル版" msgid "Ultimate edition" msgstr "エンタープライズ・フラッグシップ・エディション" +#~ msgid "SMTP port" +#~ msgstr "SMTPポート" + +#~ msgid "SMTP account" +#~ msgstr "SMTPアカウント" + +#~ msgid "SMTP password" +#~ msgstr "SMTPパスワード" + #~ msgid "Password can not contains `{{` or `}}`" #~ msgstr "パスワードには `{` または `}` 文字を含めることはできません" diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo index 4efb8d030..efb8daa9d 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:44d560db28dc9dd1a450f7e715b6de7a18ba44caece18f4e7da40c1659eefc48 -size 139920 +oid sha256:933315b682ee1387f7433b5a870d8597c07634f4fede4c56a42b4cab540e4208 +size 140012 diff --git a/apps/locale/zh/LC_MESSAGES/django.po b/apps/locale/zh/LC_MESSAGES/django.po index 335b5d3de..aabbbb733 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: 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" "Last-Translator: ibuler \n" "Language-Team: JumpServer team\n" @@ -28,8 +28,9 @@ msgstr "参数 'action' 必须是 [{}]" #: authentication/confirm/password.py:26 authentication/forms.py:32 #: authentication/templates/authentication/login.html:330 #: settings/serializers/auth/ldap.py:25 settings/serializers/auth/ldap.py:47 -#: terminal/serializers/storage.py:123 terminal/serializers/storage.py:142 -#: users/forms/profile.py:22 users/serializers/user.py:104 +#: settings/serializers/msg.py:35 terminal/serializers/storage.py:123 +#: 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/user_password_verify.html:18 #: xpack/plugins/cloud/serializers/account_attrs.py:28 @@ -199,10 +200,10 @@ msgstr "仅创建" #: authentication/serializers/password_mfa.py:16 #: authentication/serializers/password_mfa.py:24 #: 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/templates/users/forgot_password.html:117 -#: users/views/profile/reset.py:92 +#: users/views/profile/reset.py:93 msgid "Email" msgstr "邮箱" @@ -286,11 +287,11 @@ msgstr "来源 ID" #: accounts/serializers/automations/change_secret.py:107 #: accounts/serializers/automations/change_secret.py:127 #: acls/serializers/base.py:124 acls/templates/acls/asset_login_reminder.html:7 -#: assets/serializers/asset/common.py:125 assets/serializers/gateway.py:28 +#: assets/serializers/asset/common.py:128 assets/serializers/gateway.py:28 #: audits/models.py:59 authentication/api/connection_token.py:405 #: ops/models/base.py:18 perms/models/asset_permission.py:75 -#: perms/serializers/permission.py:41 terminal/backends/command/models.py:18 -#: terminal/models/session/session.py:33 +#: perms/serializers/permission.py:41 settings/serializers/msg.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_session_sharing.html:8 #: 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 #: ops/models/base.py:55 ops/models/celery.py:63 ops/models/job.py:235 #: ops/templates/ops/celery_task_log.html:75 -#: perms/models/asset_permission.py:78 terminal/models/applet/host.py:141 -#: terminal/models/session/session.py:44 +#: perms/models/asset_permission.py:78 +#: 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_asset.py:19 msgid "Date start" @@ -370,6 +372,7 @@ msgstr "开始日期" #: accounts/models/automations/backup_account.py:122 #: authentication/templates/authentication/_msg_oauth_bind.html:11 #: notifications/notifications.py:186 +#: settings/templates/ldap/_msg_import_ldap_user.html:23 msgid "Time" msgstr "时间" @@ -445,6 +448,7 @@ msgstr "SSH 密钥推送方式" #: accounts/models/automations/gather_account.py:58 #: accounts/serializers/account/backup.py:41 #: accounts/serializers/automations/change_secret.py:56 +#: settings/serializers/auth/ldap.py:81 msgid "Recipient" msgstr "收件人" @@ -490,6 +494,7 @@ msgstr "状态" #: authentication/templates/authentication/passkey.html:173 #: authentication/views/base.py:42 authentication/views/base.py:43 #: authentication/views/base.py:44 common/const/choices.py:20 +#: settings/templates/ldap/_msg_import_ldap_user.html:16 msgid "Error" msgstr "错误" @@ -592,8 +597,8 @@ msgstr "密码规则" #: assets/models/asset/common.py:159 assets/models/cmd_filter.py:21 #: assets/models/domain.py:19 assets/models/group.py:17 #: assets/models/label.py:18 assets/models/platform.py:16 -#: assets/models/platform.py:95 assets/serializers/asset/common.py:146 -#: assets/serializers/platform.py:118 assets/serializers/platform.py:235 +#: assets/models/platform.py:95 assets/serializers/asset/common.py:149 +#: assets/serializers/platform.py:118 assets/serializers/platform.py:228 #: authentication/backends/passkey/models.py:10 #: authentication/serializers/connect_token_secret.py:113 #: 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/serializers/job.py:18 orgs/models.py:82 #: 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/component/endpoint.py:95 #: 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 #: assets/models/label.py:21 assets/models/platform.py:96 -#: assets/serializers/asset/common.py:122 assets/serializers/cagegory.py:12 -#: assets/serializers/platform.py:140 assets/serializers/platform.py:236 +#: assets/serializers/asset/common.py:125 assets/serializers/cagegory.py:12 +#: assets/serializers/platform.py:140 assets/serializers/platform.py:229 #: perms/serializers/user_permission.py:26 settings/models.py:35 #: tickets/models/ticket/apply_application.py:13 users/models/preference.py:12 msgid "Category" @@ -748,7 +753,7 @@ msgstr "类别" #: acls/serializers/command_acl.py:19 applications/models.py:14 #: assets/models/_user.py:50 assets/models/automations/base.py:20 #: 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 #: audits/serializers.py:170 #: authentication/serializers/connect_token_secret.py:126 ops/models/job.py:144 @@ -866,7 +871,7 @@ msgid "Key password" msgstr "密钥密码" #: accounts/serializers/account/base.py:78 -#: assets/serializers/asset/common.py:379 +#: assets/serializers/asset/common.py:381 msgid "Spec info" msgstr "特殊信息" @@ -1113,8 +1118,8 @@ msgid "Users" msgstr "用户管理" #: acls/models/base.py:98 assets/models/automations/base.py:17 -#: assets/models/cmd_filter.py:38 assets/serializers/asset/common.py:378 -#: perms/serializers/user_permission.py:75 rbac/tree.py:35 +#: assets/models/cmd_filter.py:38 perms/serializers/user_permission.py:75 +#: rbac/tree.py:35 msgid "Accounts" msgstr "账号管理" @@ -1415,8 +1420,8 @@ msgstr "脚本" #: 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/feature.py:49 terminal/models/component/endpoint.py:13 -#: terminal/serializers/applet.py:17 +#: settings/serializers/feature.py:49 settings/serializers/msg.py:31 +#: terminal/models/component/endpoint.py:13 terminal/serializers/applet.py:17 #: xpack/plugins/cloud/serializers/account_attrs.py:72 msgid "Host" msgstr "主机" @@ -1539,7 +1544,7 @@ msgid "We will consider login success when we see this prompt" msgstr "当我们看到这个提示时,我们将认为登录成功" #: assets/const/protocol.py:119 assets/models/asset/database.py:10 -#: settings/serializers/msg.py:40 +#: settings/serializers/msg.py:47 msgid "Use SSL" msgstr "使用 SSL" @@ -1655,7 +1660,7 @@ msgstr "用户名与用户相同" #: assets/models/_user.py:52 authentication/models/connection_token.py:41 #: 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/serializers/session.py:19 terminal/serializers/session.py:45 #: terminal/serializers/storage.py:71 @@ -1708,12 +1713,12 @@ msgstr "云服务" #: assets/models/asset/common.py:94 assets/models/platform.py:17 #: 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 msgid "Port" 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" msgstr "地址" @@ -1737,7 +1742,7 @@ msgstr "网域" msgid "Node" 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 msgid "Gathered info" msgstr "收集资产硬件信息" @@ -1886,7 +1891,7 @@ msgstr "值" #: assets/serializers/platform.py:119 #: authentication/serializers/connect_token_secret.py:124 #: 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" msgstr "标签" @@ -2055,7 +2060,7 @@ msgid "" "type" 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:75 #: perms/models/asset_permission.py:76 perms/serializers/permission.py:42 @@ -2064,29 +2069,29 @@ msgstr "资产中批量更新平台,不符合平台类型跳过的资产" msgid "Protocols" msgstr "协议组" -#: assets/serializers/asset/common.py:126 -#: assets/serializers/asset/common.py:148 +#: assets/serializers/asset/common.py:129 +#: assets/serializers/asset/common.py:151 msgid "Node path" msgstr "节点路径" -#: assets/serializers/asset/common.py:145 -#: assets/serializers/asset/common.py:381 +#: assets/serializers/asset/common.py:148 +#: assets/serializers/asset/common.py:383 msgid "Auto info" msgstr "自动化信息" -#: assets/serializers/asset/common.py:239 +#: assets/serializers/asset/common.py:242 msgid "Platform not exist" msgstr "平台不存在" -#: assets/serializers/asset/common.py:275 +#: assets/serializers/asset/common.py:278 msgid "port out of range (0-65535)" msgstr "端口超出范围 (0-65535)" -#: assets/serializers/asset/common.py:282 +#: assets/serializers/asset/common.py:285 msgid "Protocol is required: {}" msgstr "协议是必填的: {}" -#: assets/serializers/asset/common.py:310 +#: assets/serializers/asset/common.py:313 msgid "Invalid data" msgstr "无效的数据" @@ -2236,7 +2241,7 @@ msgstr "默认网域" msgid "type is required" msgstr "类型 该字段是必填项。" -#: assets/serializers/platform.py:211 +#: assets/serializers/platform.py:204 msgid "Protocols is required" msgstr "协议是必填的" @@ -2589,8 +2594,8 @@ msgstr "认证令牌" #: audits/signal_handlers/login_log.py:37 authentication/notifications.py:73 #: authentication/views/login.py:77 notifications/backends/__init__.py:11 -#: settings/serializers/auth/wecom.py:10 users/models/user.py:749 -#: users/models/user.py:855 +#: settings/notifications.py:68 settings/serializers/auth/wecom.py:10 +#: users/models/user.py:749 users/models/user.py:855 msgid "WeCom" msgstr "企业微信" @@ -2675,22 +2680,22 @@ msgstr "ACL 动作是复核" msgid "Current user not support mfa type: {}" msgstr "当前用户不支持 MFA 类型: {}" -#: authentication/api/password.py:34 terminal/api/session/session.py:305 -#: users/views/profile/reset.py:61 +#: authentication/api/password.py:33 terminal/api/session/session.py:305 +#: users/views/profile/reset.py:62 msgid "User does not exist: {}" 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" msgstr "没有匹配到用户" -#: authentication/api/password.py:38 +#: authentication/api/password.py:37 msgid "" "The user is from {}, please go to the corresponding system to change the " "password" msgstr "用户来自 {} 请去相应系统修改密码" -#: authentication/api/password.py:67 +#: authentication/api/password.py:65 #: authentication/templates/authentication/login.html:361 #: users/templates/users/forgot_password.html:27 #: users/templates/users/forgot_password.html:28 @@ -3001,7 +3006,7 @@ msgstr "短信验证码校验失败" #: authentication/serializers/password_mfa.py:24 #: settings/serializers/auth/sms.py:32 users/forms/profile.py:104 #: 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" msgstr "短信" @@ -3017,7 +3022,7 @@ msgstr "设置手机号码启用" msgid "Clear phone number to disable" 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): {}" msgstr "认证失败 (登录前检查失败): {}" @@ -3139,7 +3144,7 @@ msgstr "已校验" msgid "Different city login reminder" msgstr "异地登录提醒" -#: authentication/notifications.py:52 +#: authentication/notifications.py:52 settings/notifications.py:47 msgid "binding reminder" msgstr "绑定提醒" @@ -3277,7 +3282,7 @@ msgstr "代码错误" #: authentication/templates/authentication/_msg_reset_password_code.html:9 #: authentication/templates/authentication/_msg_rest_password_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_permed_items_expire.html:3 #: tickets/templates/tickets/approve_check_password.html:32 @@ -3437,7 +3442,7 @@ msgstr "本页面未使用 HTTPS 协议,请使用 HTTPS 协议以确保您的 msgid "Do you want to retry ?" 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 msgid "LAN" msgstr "局域网" @@ -3772,7 +3777,7 @@ msgstr "不支持 Elasticsearch8" msgid "Network error, please contact system administrator" msgstr "网络错误,请联系系统管理员" -#: common/sdk/im/slack/__init__.py:79 +#: common/sdk/im/slack/__init__.py:77 msgid "Unknown error occur" msgstr "发生未知错误" @@ -3869,15 +3874,15 @@ msgstr "标签管理" # msgid "Labels" # msgstr "标签管理" -#: common/tasks.py:21 common/utils/verify_code.py:16 +#: common/tasks.py:31 common/utils/verify_code.py:16 msgid "Send email" msgstr "发件邮件" -#: common/tasks.py:48 +#: common/tasks.py:58 msgid "Send email attachment" msgstr "发送邮件附件" -#: common/tasks.py:69 terminal/tasks.py:62 +#: common/tasks.py:80 terminal/tasks.py:62 msgid "Upload session replay to external storage" msgstr "上传会话录像到外部存储" @@ -3906,16 +3911,16 @@ msgstr "不能包含特殊字符" msgid "The mobile phone number format is incorrect" msgstr "手机号格式不正确" -#: jumpserver/conf.py:452 +#: jumpserver/conf.py:454 #, python-brace-format msgid "The verification code is: {code}" msgstr "验证码为: {code}" -#: jumpserver/conf.py:456 +#: jumpserver/conf.py:459 msgid "Create account successfully" msgstr "创建账号成功" -#: jumpserver/conf.py:458 +#: jumpserver/conf.py:461 msgid "Your account has been created successfully" msgstr "你的账号已创建成功" @@ -4331,6 +4336,7 @@ msgid "Is finished" msgstr "是否完成" #: ops/serializers/job.py:66 +#: settings/templates/ldap/_msg_import_ldap_user.html:27 msgid "Time cost" msgstr "花费时间" @@ -4814,7 +4820,7 @@ msgstr "聊天 AI 没有开启" msgid "Test success" msgstr "测试成功" -#: settings/api/email.py:21 +#: settings/api/email.py:22 msgid "Test mail sent to {}, please check" msgstr "邮件已经发送{}, 请检查" @@ -4915,6 +4921,10 @@ msgstr "其它设置" msgid "Chat prompt" msgstr "聊天提示" +#: settings/notifications.py:22 +msgid "Notification of Synchronized LDAP User Task Results" +msgstr "同步LDAP用户任务结果通知" + #: settings/serializers/auth/base.py:12 msgid "LDAP Auth" msgstr "LDAP 认证" @@ -5070,7 +5080,7 @@ msgstr "连接超时时间 (秒)" msgid "Search paged size (piece)" msgstr "搜索分页数量 (条)" -#: settings/serializers/auth/ldap.py:81 +#: settings/serializers/auth/ldap.py:84 msgid "Enable LDAP auth" msgstr "启用 LDAP 认证" @@ -5286,7 +5296,7 @@ msgstr "验证码长度" #: 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:77 settings/serializers/msg.py:76 +#: settings/serializers/auth/sms.py:77 settings/serializers/msg.py:83 msgid "Signature" msgstr "签名" @@ -5568,90 +5578,84 @@ msgstr "虚拟应用" msgid "Enable virtual app" msgstr "启用虚拟应用" -#: settings/serializers/msg.py:24 -msgid "SMTP host" +#: settings/serializers/msg.py:25 +#, fuzzy +#| msgid "SMTP host" +msgid "SMTP" msgstr "SMTP 主机" -#: settings/serializers/msg.py:25 -msgid "SMTP port" -msgstr "SMTP 端口" - #: settings/serializers/msg.py:26 -msgid "SMTP account" -msgstr "SMTP 账号" +msgid "EXCHANGE" +msgstr "" -#: settings/serializers/msg.py:28 -msgid "SMTP password" -msgstr "SMTP 密码" - -#: settings/serializers/msg.py:29 +#: settings/serializers/msg.py:36 msgid "Tips: Some provider use token except password" msgstr "提示:一些邮件提供商需要输入的是授权码" -#: settings/serializers/msg.py:32 +#: settings/serializers/msg.py:39 msgid "Send user" msgstr "发件人" -#: settings/serializers/msg.py:33 +#: settings/serializers/msg.py:40 msgid "Tips: Send mail account, default SMTP account as the send account" msgstr "提示:发送邮件账号,默认使用 SMTP 账号作为发送账号" -#: settings/serializers/msg.py:36 +#: settings/serializers/msg.py:43 msgid "Test recipient" msgstr "测试收件人" -#: settings/serializers/msg.py:37 +#: settings/serializers/msg.py:44 msgid "Tips: Used only as a test mail recipient" msgstr "提示:仅用来作为测试邮件收件人" -#: settings/serializers/msg.py:41 +#: settings/serializers/msg.py:48 msgid "If SMTP port is 465, may be select" msgstr "如果SMTP端口是465,通常需要启用 SSL" -#: settings/serializers/msg.py:44 +#: settings/serializers/msg.py:51 msgid "Use TLS" msgstr "使用 TLS" -#: settings/serializers/msg.py:45 +#: settings/serializers/msg.py:52 msgid "If SMTP port is 587, may be select" msgstr "如果SMTP端口是587,通常需要启用 TLS" -#: settings/serializers/msg.py:48 +#: settings/serializers/msg.py:55 msgid "Subject prefix" msgstr "主题前缀" -#: settings/serializers/msg.py:51 +#: settings/serializers/msg.py:58 msgid "Email suffix" msgstr "邮件后缀" -#: settings/serializers/msg.py:52 +#: settings/serializers/msg.py:59 msgid "" "This is used by default if no email is returned during SSO authentication" msgstr "SSO认证时,如果没有返回邮件地址,将使用该后缀" -#: settings/serializers/msg.py:61 +#: settings/serializers/msg.py:68 msgid "Create user email subject" msgstr "邮件主题" -#: settings/serializers/msg.py:62 +#: settings/serializers/msg.py:69 msgid "" "Tips: When creating a user, send the subject of the email (eg:Create account " "successfully)" msgstr "提示: 创建用户时,发送设置密码邮件的主题 (例如: 创建用户成功)" -#: settings/serializers/msg.py:66 +#: settings/serializers/msg.py:73 msgid "Create user honorific" 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)" msgstr "提示: 创建用户时,发送设置密码邮件的敬语 (例如: 你好)" -#: settings/serializers/msg.py:71 +#: settings/serializers/msg.py:78 msgid "Create user email content" msgstr "邮件的内容" -#: settings/serializers/msg.py:73 +#: settings/serializers/msg.py:80 #, python-brace-format msgid "" "Tips: When creating a user, send the content of the email, support " @@ -5659,7 +5663,7 @@ msgid "" msgstr "" "提示: 创建用户时,发送设置密码邮件的内容, 支持 {username} {name} {email} 标签" -#: settings/serializers/msg.py:77 +#: settings/serializers/msg.py:84 msgid "Tips: Email signature (eg:jumpserver)" msgstr "邮件署名 (如:jumpserver)" @@ -6001,112 +6005,129 @@ msgstr "启用 Razor 服务" msgid "Enable SSH Client" msgstr "启用 SSH Client" -#: settings/tasks/ldap.py:24 +#: settings/tasks/ldap.py:29 msgid "Periodic import ldap user" msgstr "周期导入 LDAP 用户" -#: settings/tasks/ldap.py:45 +#: settings/tasks/ldap.py:66 msgid "Registration periodic import ldap user task" 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." msgstr "使用 ldap:// 或 ldaps:// 协议" -#: settings/utils/ldap.py:502 +#: settings/utils/ldap.py:505 msgid "Host or port is disconnected: {}" msgstr "主机或端口不可连接: {}" -#: settings/utils/ldap.py:504 +#: settings/utils/ldap.py:507 msgid "The port is not the port of the LDAP service: {}" msgstr "端口不是LDAP服务端口: {}" -#: settings/utils/ldap.py:506 +#: settings/utils/ldap.py:509 msgid "Please add certificate: {}" msgstr "请添加证书" -#: settings/utils/ldap.py:510 settings/utils/ldap.py:537 -#: settings/utils/ldap.py:567 settings/utils/ldap.py:595 +#: settings/utils/ldap.py:513 settings/utils/ldap.py:540 +#: settings/utils/ldap.py:570 settings/utils/ldap.py:598 msgid "Unknown error: {}" msgstr "未知错误: {}" -#: settings/utils/ldap.py:524 +#: settings/utils/ldap.py:527 msgid "Bind DN or Password incorrect" msgstr "绑定DN或密码错误" -#: settings/utils/ldap.py:531 +#: settings/utils/ldap.py:534 msgid "Please enter Bind DN: {}" msgstr "请输入绑定DN: {}" -#: settings/utils/ldap.py:533 +#: settings/utils/ldap.py:536 msgid "Please enter Password: {}" msgstr "请输入密码: {}" -#: settings/utils/ldap.py:535 +#: settings/utils/ldap.py:538 msgid "Please enter correct Bind DN and Password: {}" msgstr "请输入正确的绑定DN和密码: {}" -#: settings/utils/ldap.py:553 +#: settings/utils/ldap.py:556 msgid "Invalid User OU or User search filter: {}" msgstr "不合法的用户OU或用户过滤器: {}" -#: settings/utils/ldap.py:584 +#: settings/utils/ldap.py:587 msgid "LDAP User attr map not include: {}" msgstr "LDAP属性映射没有包含: {}" -#: settings/utils/ldap.py:591 +#: settings/utils/ldap.py:594 msgid "LDAP User attr map is not dict" msgstr "LDAP属性映射不合法" -#: settings/utils/ldap.py:610 +#: settings/utils/ldap.py:613 msgid "LDAP authentication is not enabled" msgstr "LDAP认证没有启用" -#: settings/utils/ldap.py:628 +#: settings/utils/ldap.py:631 msgid "Error (Invalid LDAP server): {}" msgstr "错误 (不合法的LDAP服务器地址): {}" -#: settings/utils/ldap.py:630 +#: settings/utils/ldap.py:633 msgid "Error (Invalid Bind DN): {}" msgstr "错误 (不合法的绑定DN): {}" -#: settings/utils/ldap.py:632 +#: settings/utils/ldap.py:635 msgid "Error (Invalid LDAP User attr map): {}" msgstr "错误 (不合法的LDAP属性映射): {}" -#: settings/utils/ldap.py:634 +#: settings/utils/ldap.py:637 msgid "Error (Invalid User OU or User search filter): {}" msgstr "错误 (不合法的用户OU或用户过滤器): {}" -#: settings/utils/ldap.py:636 +#: settings/utils/ldap.py:639 msgid "Error (Not enabled LDAP authentication): {}" msgstr "错误 (没有启用LDAP认证): {}" -#: settings/utils/ldap.py:638 +#: settings/utils/ldap.py:641 msgid "Error (Unknown): {}" msgstr "错误 (未知): {}" -#: settings/utils/ldap.py:641 +#: settings/utils/ldap.py:644 msgid "Succeed: Match {} s user" msgstr "成功匹配 {} 个用户" -#: settings/utils/ldap.py:652 +#: settings/utils/ldap.py:655 msgid "Please test the connection first" msgstr "请先测试连接" -#: settings/utils/ldap.py:674 +#: settings/utils/ldap.py:677 msgid "Authentication failed (configuration incorrect): {}" msgstr "认证失败 (配置错误): {}" -#: settings/utils/ldap.py:678 +#: settings/utils/ldap.py:681 msgid "Authentication failed (username or password incorrect): {}" msgstr "认证失败 (用户名或密码不正确): {}" -#: settings/utils/ldap.py:680 +#: settings/utils/ldap.py:683 msgid "Authentication failed (Unknown): {}" msgstr "认证失败: (未知): {}" -#: settings/utils/ldap.py:683 +#: settings/utils/ldap.py:686 msgid "Authentication success: {}" msgstr "认证成功: {}" @@ -6709,10 +6730,6 @@ msgstr "登录来源" msgid "Replay" msgstr "回放" -#: terminal/models/session/session.py:45 -msgid "Date end" -msgstr "结束日期" - #: terminal/models/session/session.py:47 terminal/serializers/session.py:65 msgid "Command amount" msgstr "命令数量" @@ -8193,7 +8210,7 @@ msgstr "MFA(OTP) 禁用成功,返回登录页面" msgid "Password invalid" msgstr "用户名或密码无效" -#: users/views/profile/reset.py:64 +#: users/views/profile/reset.py:65 msgid "" "Non-local users can log in only from third-party platforms and cannot change " "their passwords: {}" @@ -8368,7 +8385,7 @@ msgstr "与" msgid "Or" msgstr "或" -#: xpack/plugins/cloud/manager.py:56 +#: xpack/plugins/cloud/manager.py:57 msgid "Account unavailable" msgstr "账号无效" @@ -8915,6 +8932,15 @@ msgstr "企业专业版" msgid "Ultimate edition" msgstr "企业旗舰版" +#~ msgid "SMTP port" +#~ msgstr "SMTP 端口" + +#~ msgid "SMTP account" +#~ msgstr "SMTP 账号" + +#~ msgid "SMTP password" +#~ msgstr "SMTP 密码" + #~ msgid "Password can not contains `{{` or `}}`" #~ msgstr "密码不能包含 `{{` 或 `}}` 字符" diff --git a/apps/settings/api/ldap.py b/apps/settings/api/ldap.py index 9c619e24d..f13a2e9af 100644 --- a/apps/settings/api/ldap.py +++ b/apps/settings/api/ldap.py @@ -137,7 +137,7 @@ class LDAPUserImportAPI(APIView): return Response({'msg': _('Get ldap users is None')}, status=400) orgs = self.get_orgs() - errors = LDAPImportUtil().perform_import(users, orgs) + new_users, errors = LDAPImportUtil().perform_import(users, orgs) if errors: return Response({'errors': errors}, status=400) diff --git a/apps/settings/notifications.py b/apps/settings/notifications.py new file mode 100644 index 000000000..b8ddde70d --- /dev/null +++ b/apps/settings/notifications.py @@ -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 + } diff --git a/apps/settings/serializers/auth/ldap.py b/apps/settings/serializers/auth/ldap.py index 054fe6144..a79c0081f 100644 --- a/apps/settings/serializers/auth/ldap.py +++ b/apps/settings/serializers/auth/ldap.py @@ -77,6 +77,9 @@ class LDAPSettingSerializer(serializers.Serializer): required=False, label=_('Connect timeout (s)'), ) 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')) diff --git a/apps/settings/tasks/ldap.py b/apps/settings/tasks/ldap.py index 0530680e8..6a52e038d 100644 --- a/apps/settings/tasks/ldap.py +++ b/apps/settings/tasks/ldap.py @@ -1,15 +1,19 @@ # coding: utf-8 # +import time from celery import shared_task from django.conf import settings from django.utils.translation import gettext_lazy as _ 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.utils import ( create_or_update_celery_periodic_tasks, disable_celery_periodic_task ) from orgs.models import Organization +from settings.notifications import LDAPImportMessage +from users.models import User from ..utils import LDAPSyncUtil, LDAPServerUtil, LDAPImportUtil __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')) def import_ldap_user(): + start_time = time.time() + time_start_display = local_now_display() logger.info("Start import ldap user task") util_server = LDAPServerUtil() util_import = LDAPImportUtil() @@ -35,11 +41,25 @@ def import_ldap_user(): org_ids = [Organization.DEFAULT_ID] default_org = Organization.default() 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: logger.error("Imported LDAP users errors: {}".format(errors)) else: 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')) diff --git a/apps/settings/templates/ldap/_msg_import_ldap_user.html b/apps/settings/templates/ldap/_msg_import_ldap_user.html new file mode 100644 index 000000000..f801dde36 --- /dev/null +++ b/apps/settings/templates/ldap/_msg_import_ldap_user.html @@ -0,0 +1,30 @@ +{% load i18n %} +

{% trans "Sync task Finish" %}

+{% trans 'Time' %}: +
    +
  • {% trans 'Date start' %}: {{ start_time }}
  • +
  • {% trans 'Date end' %}: {{ end_time }}
  • +
  • {% trans 'Time cost' %}: {{ cost_time| floatformat:0 }}s
  • +
+{% trans "Synced Organization" %}: +
    + {% for org in orgs %} +
  • {{ org }}
  • + {% endfor %} +
+{% trans "Synced User" %}: +
    + {% for user in users %} +
  • {{ user }}
  • + {% endfor %} +
+{% if errors %} + {% trans 'Error' %}: +
    + {% for error in errors %} +
  • {{ error }}
  • + {% endfor %} +
+{% endif %} + + diff --git a/apps/settings/utils/ldap.py b/apps/settings/utils/ldap.py index b4f21affa..6333f0350 100644 --- a/apps/settings/utils/ldap.py +++ b/apps/settings/utils/ldap.py @@ -400,11 +400,14 @@ class LDAPImportUtil(object): logger.info('Start perform import ldap users, count: {}'.format(len(users))) errors = [] objs = [] + new_users = [] group_users_mapper = defaultdict(set) for user in users: groups = user.pop('groups', []) try: obj, created = self.update_or_create(user) + if created: + new_users.append(obj) objs.append(obj) except Exception as e: errors.append({user['username']: str(e)}) @@ -421,7 +424,7 @@ class LDAPImportUtil(object): for org in orgs: self.bind_org(org, objs, group_users_mapper) logger.info('End perform import ldap users') - return errors + return new_users, errors def exit_user_group(self, user_groups_mapper): # 通过对比查询本次导入用户需要移除的用户组