From f97bfa7bf166b76af620fe889207cfed78d70e90 Mon Sep 17 00:00:00 2001 From: ibuler Date: Wed, 27 Mar 2019 12:49:46 +0800 Subject: [PATCH 1/4] =?UTF-8?q?[Update]=20=E4=BF=AE=E5=A4=8Ds3=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E6=97=B6=E7=AB=AF=E7=82=B9=E4=B8=8D=E5=90=AB=E5=8D=8F?= =?UTF-8?q?=E8=AE=AE=E7=9A=84=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/locale/zh/LC_MESSAGES/django.mo | Bin 69791 -> 70888 bytes apps/locale/zh/LC_MESSAGES/django.po | 279 +++++++++--------- .../settings/replay_storage_create.html | 8 + 3 files changed, 155 insertions(+), 132 deletions(-) diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo index 3f02ced3b75f39c7e05af529afbaa4b798798876..5bcb3f572fb8cd096ce16deb94d3346aaa363959 100644 GIT binary patch delta 21914 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 Ky%Okm>c0R;cCUN@ delta 20847 zcmYk@1$>p|`^WL;u#wvsjLy+)fQWPoC?TN|A|cHvNnuEH=uSrn5{?vUMuSL5gOmu0 zbccXSi75Zi_uSWhf1cm#_I+R1ozML|=WL+A+slI�UE?Mg-6BxV8m(UUs~n!}I

UGrJuezNV@{02 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 HeFy&!V7;nQ diff --git a/apps/locale/zh/LC_MESSAGES/django.po b/apps/locale/zh/LC_MESSAGES/django.po index afcb6e1cd..f0494f3de 100644 --- a/apps/locale/zh/LC_MESSAGES/django.po +++ b/apps/locale/zh/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Jumpserver 0.3.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-03-26 14:56+0800\n" +"POT-Creation-Date: 2019-03-27 12:48+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: ibuler \n" "Language-Team: Jumpserver team\n" @@ -203,11 +203,12 @@ msgstr "名称" #: assets/templates/assets/system_user_detail.html:62 #: assets/templates/assets/system_user_list.html:30 audits/models.py:94 #: audits/templates/audits/login_log_list.html:51 authentication/forms.py:11 +#: authentication/templates/authentication/login.html:64 +#: authentication/templates/authentication/new_login.html:90 #: ops/models/adhoc.py:164 perms/templates/perms/asset_permission_list.html:74 #: perms/templates/perms/asset_permission_user.html:55 #: settings/templates/settings/_ldap_list_users_modal.html:34 users/forms.py:13 #: users/models/user.py:52 users/templates/users/_select_user_modal.html:14 -#: users/templates/users/login.html:64 users/templates/users/new_login.html:110 #: users/templates/users/user_detail.html:67 #: users/templates/users/user_list.html:24 #: users/templates/users/user_profile.html:47 @@ -228,9 +229,10 @@ msgstr "密码或密钥密码" #: assets/forms/user.py:26 assets/models/base.py:28 #: assets/serializers/asset_user.py:19 #: assets/templates/assets/_asset_user_auth_modal.html:21 -#: authentication/forms.py:13 settings/forms.py:103 users/forms.py:15 -#: users/forms.py:27 users/templates/users/login.html:67 -#: users/templates/users/new_login.html:113 +#: authentication/forms.py:13 +#: authentication/templates/authentication/login.html:67 +#: authentication/templates/authentication/new_login.html:93 +#: settings/forms.py:103 users/forms.py:15 users/forms.py:27 #: users/templates/users/reset_password.html:53 #: users/templates/users/user_create.html:10 #: users/templates/users/user_password_authentication.html:18 @@ -1024,7 +1026,7 @@ msgstr "其它" #: settings/templates/settings/command_storage_create.html:79 #: settings/templates/settings/email_setting.html:62 #: settings/templates/settings/ldap_setting.html:62 -#: settings/templates/settings/replay_storage_create.html:151 +#: settings/templates/settings/replay_storage_create.html:152 #: settings/templates/settings/security_setting.html:70 #: settings/templates/settings/terminal_setting.html:68 #: terminal/templates/terminal/terminal_update.html:45 @@ -1039,7 +1041,7 @@ msgstr "其它" #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_create_update.html:71 #: xpack/plugins/cloud/templates/cloud/account_create_update.html:33 #: xpack/plugins/cloud/templates/cloud/sync_instance_task_create.html:35 -#: xpack/plugins/interface/templates/interface/interface.html:88 +#: xpack/plugins/interface/templates/interface/interface.html:72 msgid "Reset" msgstr "重置" @@ -1060,21 +1062,21 @@ msgstr "重置" #: settings/templates/settings/command_storage_create.html:80 #: settings/templates/settings/email_setting.html:63 #: settings/templates/settings/ldap_setting.html:63 -#: settings/templates/settings/replay_storage_create.html:152 +#: settings/templates/settings/replay_storage_create.html:153 #: settings/templates/settings/security_setting.html:71 #: settings/templates/settings/terminal_setting.html:70 #: terminal/templates/terminal/command_list.html:103 #: terminal/templates/terminal/session_list.html:126 #: terminal/templates/terminal/terminal_update.html:46 #: users/templates/users/_user.html:51 -#: users/templates/users/forgot_password.html:49 +#: users/templates/users/forgot_password.html:42 #: users/templates/users/user_bulk_update.html:24 #: users/templates/users/user_list.html:45 #: users/templates/users/user_password_update.html:72 #: users/templates/users/user_profile_update.html:64 #: users/templates/users/user_pubkey_update.html:77 #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_create_update.html:72 -#: xpack/plugins/interface/templates/interface/interface.html:89 +#: xpack/plugins/interface/templates/interface/interface.html:73 msgid "Submit" msgstr "提交" @@ -2048,8 +2050,9 @@ msgstr "登录日志" msgid "Command execution log" msgstr "命令执行" -#: authentication/api/auth.py:46 users/templates/users/login.html:52 -#: users/templates/users/new_login.html:97 +#: authentication/api/auth.py:46 +#: authentication/templates/authentication/login.html:52 +#: authentication/templates/authentication/new_login.html:77 msgid "Log in frequently and try again later" msgstr "登录频繁, 稍后重试" @@ -2128,6 +2131,122 @@ msgstr "MFA 验证码" msgid "Private Token" msgstr "ssh密钥" +#: authentication/templates/authentication/login.html:27 +#: authentication/templates/authentication/login_otp.html:27 +#: users/templates/users/reset_password.html:25 +#: xpack/plugins/interface/models.py:36 +msgid "Welcome to the Jumpserver open source fortress" +msgstr "欢迎使用Jumpserver开源堡垒机" + +#: authentication/templates/authentication/login.html:29 +#: authentication/templates/authentication/login_otp.html:29 +msgid "" +"The world's first fully open source fortress, using the GNU GPL v2.0 open " +"source protocol, is a professional operation and maintenance audit system in " +"compliance with 4A." +msgstr "" +"全球首款完全开源的堡垒机,使用GNU GPL v2.0开源协议,是符合 4A 的专业运维审计" +"系统。" + +#: authentication/templates/authentication/login.html:32 +#: authentication/templates/authentication/login_otp.html:32 +msgid "" +"Developed using Python/Django, following the Web 2.0 specification and " +"equipped with industry-leading Web Terminal solutions, with beautiful " +"interactive interface and good user experience." +msgstr "" +"使用Python / Django 进行开发,遵循 Web 2.0 规范,配备了业界领先的 Web " +"Terminal 解决方案,交互界面美观、用户体验好。" + +#: authentication/templates/authentication/login.html:35 +#: authentication/templates/authentication/login_otp.html:35 +msgid "" +"Distributed architecture is adopted to support multi-machine room deployment " +"across regions, central node provides API, and each machine room deploys " +"login node, which can be extended horizontally and without concurrent access " +"restrictions." +msgstr "" +"采纳分布式架构,支持多机房跨区域部署,中心节点提供 API,各机房部署登录节点," +"可横向扩展、无并发访问限制。" + +#: authentication/templates/authentication/login.html:38 +#: authentication/templates/authentication/login_otp.html:38 +msgid "Changes the world, starting with a little bit." +msgstr "改变世界,从一点点开始。" + +#: authentication/templates/authentication/login.html:46 +#: authentication/templates/authentication/login.html:72 +#: authentication/templates/authentication/new_login.html:99 +#: templates/_header_bar.html:101 +msgid "Login" +msgstr "登录" + +#: authentication/templates/authentication/login.html:54 +#: authentication/templates/authentication/new_login.html:79 +msgid "The user password has expired" +msgstr "用户密码已过期" + +#: authentication/templates/authentication/login.html:57 +#: authentication/templates/authentication/new_login.html:82 +msgid "Captcha invalid" +msgstr "验证码错误" + +#: authentication/templates/authentication/login.html:83 +#: authentication/templates/authentication/new_login.html:103 +#: users/templates/users/forgot_password.html:10 +#: users/templates/users/forgot_password.html:25 +msgid "Forgot password" +msgstr "忘记密码" + +#: authentication/templates/authentication/login.html:89 +msgid "More login options" +msgstr "更多登录方式" + +#: authentication/templates/authentication/login.html:93 +msgid "Keycloak" +msgstr "" + +#: authentication/templates/authentication/login_otp.html:46 +#: users/templates/users/user_detail.html:91 +#: users/templates/users/user_profile.html:85 +msgid "MFA certification" +msgstr "MFA认证" + +#: authentication/templates/authentication/login_otp.html:51 +#: users/templates/users/user_otp_authentication.html:11 +msgid "" +"The account protection has been opened, please complete the following " +"operations according to the prompts" +msgstr "账号保护已开启,请根据提示完成以下操作" + +#: authentication/templates/authentication/login_otp.html:55 +#: users/templates/users/user_otp_authentication.html:13 +msgid "Open Authenticator and enter the 6-bit dynamic code" +msgstr "请打开手机Google Authenticator应用,输入6位动态码" + +#: authentication/templates/authentication/login_otp.html:65 +#: users/templates/users/user_otp_authentication.html:23 +#: users/templates/users/user_otp_enable_bind.html:26 +msgid "Six figures" +msgstr "6位数字" + +#: authentication/templates/authentication/login_otp.html:67 +#: users/templates/users/first_login.html:105 +#: users/templates/users/user_otp_authentication.html:26 +#: users/templates/users/user_otp_enable_bind.html:29 +#: users/templates/users/user_otp_enable_install_app.html:26 +#: users/templates/users/user_password_authentication.html:21 +msgid "Next" +msgstr "下一步" + +#: authentication/templates/authentication/login_otp.html:70 +msgid "Can't provide security? Please contact the administrator!" +msgstr "如果不能提供MFA验证码,请联系管理员!" + +#: authentication/templates/authentication/new_login.html:67 +msgid "Welcome back, please enter username and password to login" +msgstr "欢迎回来,请输入用户名和密码登录" + #: authentication/views/login.py:75 msgid "Please enable cookies and try again." msgstr "设置你的浏览器支持cookie" @@ -3094,56 +3213,60 @@ msgstr "账户密钥" msgid "Endpoint" msgstr "端点" -#: settings/templates/settings/replay_storage_create.html:113 +#: settings/templates/settings/replay_storage_create.html:114 #, python-brace-format msgid "OSS: http://{REGION_NAME}.aliyuncs.com" msgstr "OSS: http://{REGION_NAME}.aliyuncs.com" -#: settings/templates/settings/replay_storage_create.html:115 +#: settings/templates/settings/replay_storage_create.html:116 msgid "Example: http://oss-cn-hangzhou.aliyuncs.com" msgstr "如: http://oss-cn-hangzhou.aliyuncs.com" -#: settings/templates/settings/replay_storage_create.html:117 +#: settings/templates/settings/replay_storage_create.html:118 #, python-brace-format msgid "S3: http://s3.{REGION_NAME}.amazonaws.com" msgstr "S3: http://s3.{REGION_NAME}.amazonaws.com" -#: settings/templates/settings/replay_storage_create.html:118 +#: settings/templates/settings/replay_storage_create.html:119 #, python-brace-format msgid "S3(China): http://s3.{REGION_NAME}.amazonaws.com.cn" msgstr "S3(中国): http://s3.{REGION_NAME}.amazonaws.com.cn" -#: settings/templates/settings/replay_storage_create.html:119 +#: settings/templates/settings/replay_storage_create.html:120 msgid "Example: http://s3.cn-north-1.amazonaws.com.cn" msgstr "如: http://s3.cn-north-1.amazonaws.com.cn" -#: settings/templates/settings/replay_storage_create.html:125 +#: settings/templates/settings/replay_storage_create.html:126 msgid "Endpoint suffix" msgstr "端点后缀" -#: settings/templates/settings/replay_storage_create.html:135 +#: settings/templates/settings/replay_storage_create.html:136 #: xpack/plugins/cloud/models.py:186 #: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:83 #: xpack/plugins/cloud/templates/cloud/sync_instance_task_instance.html:64 msgid "Region" msgstr "地域" -#: settings/templates/settings/replay_storage_create.html:140 +#: settings/templates/settings/replay_storage_create.html:141 msgid "Beijing: cn-north-1" msgstr "北京: cn-north-1" -#: settings/templates/settings/replay_storage_create.html:141 +#: settings/templates/settings/replay_storage_create.html:142 msgid "Ningxia: cn-northwest-1" msgstr "宁夏: cn-northwest-1" -#: settings/templates/settings/replay_storage_create.html:142 +#: settings/templates/settings/replay_storage_create.html:143 msgid "More" msgstr "更多" -#: settings/templates/settings/replay_storage_create.html:246 +#: settings/templates/settings/replay_storage_create.html:247 msgid "Submitting" msgstr "提交中" +#: settings/templates/settings/replay_storage_create.html:256 +msgid "Endpoint need contain protocol, ex: http" +msgstr "端点需要包含协议,如 http" + #: settings/templates/settings/security_setting.html:46 msgid "Password check rule" msgstr "密码校验规则" @@ -3263,11 +3386,6 @@ msgstr "用户页面" msgid "Logout" msgstr "注销登录" -#: templates/_header_bar.html:101 users/templates/users/login.html:46 -#: users/templates/users/login.html:72 users/templates/users/new_login.html:119 -msgid "Login" -msgstr "登录" - #: templates/_header_bar.html:114 templates/_nav.html:4 msgid "Dashboard" msgstr "仪表盘" @@ -3412,15 +3530,7 @@ msgstr "语言播放验证码" msgid "Captcha" msgstr "验证码" -#: templates/flash_message_standalone.html:35 -#: users/templates/users/login.html:27 users/templates/users/login_otp.html:27 -#: users/templates/users/new_login.html:82 -#: users/templates/users/reset_password.html:25 -#: xpack/plugins/interface/models.py:36 -msgid "Welcome to the Jumpserver open source fortress" -msgstr "欢迎使用Jumpserver开源堡垒机" - -#: templates/flash_message_standalone.html:56 +#: templates/flash_message_standalone.html:47 msgid "Return" msgstr "返回" @@ -3998,15 +4108,6 @@ msgstr "请选择同意条款和条件" msgid "Previous" msgstr "上一步" -#: users/templates/users/first_login.html:105 -#: users/templates/users/login_otp.html:67 -#: users/templates/users/user_otp_authentication.html:26 -#: users/templates/users/user_otp_enable_bind.html:29 -#: users/templates/users/user_otp_enable_install_app.html:26 -#: users/templates/users/user_password_authentication.html:21 -msgid "Next" -msgstr "下一步" - #: users/templates/users/first_login_done.html:31 msgid "Welcome to use jumpserver, visit " msgstr "欢迎使用Jumpserver开源跳板机系统" @@ -4019,96 +4120,10 @@ msgstr "向导" msgid " for more information" msgstr "获取更多信息" -#: users/templates/users/forgot_password.html:11 #: users/templates/users/forgot_password.html:31 -#: users/templates/users/login.html:83 users/templates/users/new_login.html:123 -msgid "Forgot password" -msgstr "忘记密码" - -#: users/templates/users/forgot_password.html:38 msgid "Input your email, that will send a mail to your" msgstr "输入您的邮箱, 将会发一封重置邮件到您的邮箱中" -#: users/templates/users/login.html:29 users/templates/users/login_otp.html:29 -msgid "" -"The world's first fully open source fortress, using the GNU GPL v2.0 open " -"source protocol, is a professional operation and maintenance audit system in " -"compliance with 4A." -msgstr "" -"全球首款完全开源的堡垒机,使用GNU GPL v2.0开源协议,是符合 4A 的专业运维审计" -"系统。" - -#: users/templates/users/login.html:32 users/templates/users/login_otp.html:32 -msgid "" -"Developed using Python/Django, following the Web 2.0 specification and " -"equipped with industry-leading Web Terminal solutions, with beautiful " -"interactive interface and good user experience." -msgstr "" -"使用Python / Django 进行开发,遵循 Web 2.0 规范,配备了业界领先的 Web " -"Terminal 解决方案,交互界面美观、用户体验好。" - -#: users/templates/users/login.html:35 users/templates/users/login_otp.html:35 -msgid "" -"Distributed architecture is adopted to support multi-machine room deployment " -"across regions, central node provides API, and each machine room deploys " -"login node, which can be extended horizontally and without concurrent access " -"restrictions." -msgstr "" -"采纳分布式架构,支持多机房跨区域部署,中心节点提供 API,各机房部署登录节点," -"可横向扩展、无并发访问限制。" - -#: users/templates/users/login.html:38 users/templates/users/login_otp.html:38 -msgid "Changes the world, starting with a little bit." -msgstr "改变世界,从一点点开始。" - -#: users/templates/users/login.html:54 users/templates/users/new_login.html:99 -msgid "The user password has expired" -msgstr "用户密码已过期" - -#: users/templates/users/login.html:57 users/templates/users/new_login.html:102 -msgid "Captcha invalid" -msgstr "验证码错误" - -#: users/templates/users/login.html:89 -msgid "More login options" -msgstr "更多登录方式" - -#: users/templates/users/login.html:93 -msgid "Keycloak" -msgstr "" - -#: users/templates/users/login_otp.html:46 -#: users/templates/users/user_detail.html:91 -#: users/templates/users/user_profile.html:85 -msgid "MFA certification" -msgstr "MFA认证" - -#: users/templates/users/login_otp.html:51 -#: users/templates/users/user_otp_authentication.html:11 -msgid "" -"The account protection has been opened, please complete the following " -"operations according to the prompts" -msgstr "账号保护已开启,请根据提示完成以下操作" - -#: users/templates/users/login_otp.html:55 -#: users/templates/users/user_otp_authentication.html:13 -msgid "Open Authenticator and enter the 6-bit dynamic code" -msgstr "请打开手机Google Authenticator应用,输入6位动态码" - -#: users/templates/users/login_otp.html:65 -#: users/templates/users/user_otp_authentication.html:23 -#: users/templates/users/user_otp_enable_bind.html:26 -msgid "Six figures" -msgstr "6位数字" - -#: users/templates/users/login_otp.html:70 -msgid "Can't provide security? Please contact the administrator!" -msgstr "如果不能提供MFA验证码,请联系管理员!" - -#: users/templates/users/new_login.html:87 -msgid "Welcome back, please enter username and password to login" -msgstr "欢迎回来,请输入用户名和密码登录" - #: users/templates/users/reset_password.html:28 msgid "" "Jumpserver is an open source desktop system developed using Python and " diff --git a/apps/settings/templates/settings/replay_storage_create.html b/apps/settings/templates/settings/replay_storage_create.html index 69a1ba9fc..c986b40e8 100644 --- a/apps/settings/templates/settings/replay_storage_create.html +++ b/apps/settings/templates/settings/replay_storage_create.html @@ -108,6 +108,7 @@

+
{% trans 'OSS: http://{REGION_NAME}.aliyuncs.com' %} @@ -251,6 +252,13 @@ $(document).ready(function() { var name = $(id_field).attr('name'); data[name] = $(id_field).val(); }); + if (data['ENDPOINT'] !== '' && data['ENDPOINT'].indexOf('http') === -1) { + var msg = "{% trans 'Endpoint need contain protocol, ex: http' %}"; + $("#endpoint_error").html(msg); + submitBtn.removeClass('disabled'); + submitBtn.html(origin_text); + return + } var url = "{% url 'api-settings:replay-storage-create' %}"; var success = function(data, textStatus) { location = "{% url 'settings:terminal-setting' %}"; From f6cd193f9e937aca957960c6a9f122888295174e Mon Sep 17 00:00:00 2001 From: fit2cloudrd Date: Wed, 27 Mar 2019 18:47:38 +0800 Subject: [PATCH 2/4] Update README.md (#2548) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Dev (#2544) * [Update] 更新翻译 (#2541) * [Update] 更新缓存机制 * [Update] 增加task最大允许事件,并设置命令最大运行时间为60s * Update README.md --- README.md | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 5141bb664..8a7f6a647 100644 --- a/README.md +++ b/README.md @@ -8,11 +8,11 @@ ---- -Jumpserver是全球首款完全开源的堡垒机,使用GNU GPL v2.0开源协议,是符合 4A 的专业运维审计系统。 +Jumpserver 是全球首款完全开源的堡垒机,使用 GNU GPL v2.0 开源协议,是符合 4A 的专业运维审计系统。 -Jumpserver使用Python / Django 进行开发,遵循 Web 2.0 规范,配备了业界领先的 Web Terminal 解决方案,交互界面美观、用户体验好。 +Jumpserver 使用 Python / Django 进行开发,遵循 Web 2.0 规范,配备了业界领先的 Web Terminal 解决方案,交互界面美观、用户体验好。 -Jumpserver采纳分布式架构,支持多机房跨区域部署,中心节点提供 API,各机房部署登录节点,可横向扩展、无并发限制。 +Jumpserver 采纳分布式架构,支持多机房跨区域部署,中心节点提供 API,各机房部署登录节点,可横向扩展、无并发限制。 改变世界,从一点点开始。 @@ -20,29 +20,30 @@ Jumpserver采纳分布式架构,支持多机房跨区域部署,中心节点 ### 功能 - ![Jumpserver功能](https://jumpserver-release.oss-cn-hangzhou.aliyuncs.com/Jumpserver-14.png "Jumpserver功能") + ![Jumpserver 功能](https://jumpserver-release.oss-cn-hangzhou.aliyuncs.com/Jumpserver-14.png "Jumpserver 功能") ### 开始使用 -快速开始文档 [Docker安装](http://docs.jumpserver.org/zh/docs/dockerinstall.html) +快速开始文档 [Docker 安装](http://docs.jumpserver.org/zh/docs/dockerinstall.html) -一步一步安装文档 [详细部署](http://docs.jumpserver.org/zh/docs/step_by_step.html) +Step by Step 安装文档 [详细部署](http://docs.jumpserver.org/zh/docs/step_by_step.html) -也可以查看我们完整文档包括了使用和开发 [文档](http://docs.jumpserver.org) +也可以查看我们完整文档 [文档](http://docs.jumpserver.org) -### Demo 和 截图 +### Demo、视频 和 截图 -我们提供了DEMO和截图可以让你快速了解Jumpserver +我们提供了 Demo 、演示视频和截图可以让你快速了解 Jumpserver -[DEMO](https://demo.jumpserver.org) +[Demo](https://demo.jumpserver.org/auth/login/?next=/) +[视频](https://fit2cloud2-offline-installer.oss-cn-beijing.aliyuncs.com/tools/Jumpserver%20%E4%BB%8B%E7%BB%8Dv1.4.mp4) [截图](http://docs.jumpserver.org/zh/docs/snapshot.html) ### SDK -我们还编写了一些SDK,供你其它系统快速和Jumpserver APi交互, +我们还编写了一些SDK,供你其它系统快速和 Jumpserver API 交互 -- [python](https://github.com/jumpserver/jumpserver-python-sdk) Jumpserver其它组件使用这个SDK完成交互 -- [java](https://github.com/KaiJunYan/jumpserver-java-sdk.git) 恺珺同学提供的Java版本的SDK +- [Python](https://github.com/jumpserver/jumpserver-python-sdk) Jumpserver其它组件使用这个SDK完成交互 +- [Java](https://github.com/KaiJunYan/jumpserver-java-sdk.git) 恺珺同学提供的Java版本的SDK ### License & Copyright From bf7079df9e612b474ca3424cf0808b3d299525a6 Mon Sep 17 00:00:00 2001 From: ibuler Date: Thu, 28 Mar 2019 12:35:16 +0800 Subject: [PATCH 3/4] =?UTF-8?q?[Update]=20=E4=BF=AE=E6=94=B9logo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/static/img/logo_text.png | Bin 18125 -> 21179 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/static/img/logo_text.png b/apps/static/img/logo_text.png index 9d532a2857c06703a99b64243e7f6d8ad8e4c36c..7471c24d51a4e64602e06b59962eca27077da965 100644 GIT binary patch literal 21179 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 delta 18020 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 From b82a66c83dff77dc211c6d59376a9274b73597d9 Mon Sep 17 00:00:00 2001 From: BaiJiangJie <32935519+BaiJiangJie@users.noreply.github.com> Date: Thu, 28 Mar 2019 12:50:04 +0800 Subject: [PATCH 4/4] =?UTF-8?q?[Update]=20=E4=BC=98=E5=8C=96LDAP=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E5=AF=BC=E5=85=A5=E5=8A=9F=E8=83=BD=20(#2550)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/locale/zh/LC_MESSAGES/django.mo | Bin 70888 -> 70261 bytes apps/locale/zh/LC_MESSAGES/django.po | 150 +++++----- apps/settings/api.py | 121 ++++---- apps/settings/models.py | 2 + .../settings/_ldap_list_users_modal.html | 29 +- .../templates/settings/ldap_setting.html | 18 +- apps/settings/urls/api_urls.py | 4 +- apps/settings/utils.py | 262 +++++++++--------- apps/templates/_modal.html | 1 + 9 files changed, 316 insertions(+), 271 deletions(-) diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo index 5bcb3f572fb8cd096ce16deb94d3346aaa363959..ca378770f5ef9e7b815f5e78d799eb536492b9df 100644 GIT binary patch delta 21027 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�FQKQ_xq3 z#AzzEFw+lwbz)1@O827{^bP8YzC$hKrsW^wBI4)R7w7!wJ_%o<&dd6fGmlxwEQT?( zm;K4U{}ZiY3~Hi@7SA=8Sbmkc&GHA#qo{?Q!V36<#^-6~|#qOn=RN|93-eeNS^B>M0+E8h8e3y!qy8)Og!5Cmyx@Rm=bCv&0L` zL5HyGZlFS_xEN}{+LmvMdRE$?uDFXi0J9R0H5Z^J-hvwEbMuPjAEUbO$%&05K zkGZgj#WARk_03kO&x@`WPemt_b=~Rn9$7=c&u+!(QLkA6 z)Nj3ps1ur+T~HGaMD4&x)OW`;tcZ(I{m)@xylHWon{MGbQ46ev5qkfdP|=llGy7PF z0Tz!o$D_7%nz_Q#!NM1A8n!V(n*9 zAGwz-er)Z}&5%28f(SDbHEv0>f?4$r`>%#tBy^<>un=}ct#FJv-P#wUu4IeF2d({E z)Ye|L_!&kJ2mRvuXGgV1p`L}BsPS9-tf8AFMxrK|Z1Ey<9qNjc%(ECmeBXSG8t}Op za@Vy-pz^s;7Z_!671LLbidNLpI`pxIQ5Z#j3g*L|SOCwV7WfAi#-Mxdp(~17P-E0B zYh}J`_BIny3mSzi$mdO=q7#={!x~IOyaPjVpXI+qE##cVk5K2mKwVj?U-?0b*)baX zU_qRNq4*hU;?K>mF+}hG57yyle}XMV-K)nIr@ikc&WxI8rnrkk>AmUXn_Ic~5Xre9FVYhk6JcgS1 z4C;gG3Z}w`mVbhoi39#{WUsDcB0XL`{(EIX|s2 z3ftfz%z@edc9ur9*GElw9V_A^EQwM7xM!#pW+U$V5Bp!7$~Y2G%~!5>f$apViP#l=tyE{h3R9gpEwT!@4Ib2}IAd+Gjdbuo;gp##>! zWvDB^fx4oKUV#4(B41-y;(`GIUOOC*?eRKR#VUaT?iOGc;>nl^mz&#B&%hDX0)1au z<&t^JIy^$X=YOK!*B6!#2nz7O_i0cAMWA*l7Y@ggm=-r!`=_X#*>4_0^*`&{ecnxL zxQE)}Kg^(1ZiNx36Cy1xkLp(w^I%hJ?~i(@#-Ofj1!l!hP`C7m<*%9d{rdRQutach zfd6UFj2hr|vzFP!>}d8zEo=ztA)IXaRhHj|dRC5D{)%}A{TGV+6+J~BxP+Pvx;;pEDhb%s6UdGDg@226u2-d^}L)`*Oqu$eM zs0H*veJ~BT_NA8Jh?;1x#b?dys0kmU7Wy3XV!ALlelb+O5^DUn!hCM4+mq0VT~JSZ zUyBn^w_+G-p<~SHmS1eHG&h*rP!oNI!|*HQQS)l2b>kmJ&3D2_MFXEhO>_;*U@{iQ zZ0Q2rzdpyd#J!LoIo=o83Acv__&7cdt~;X>5Ye*(3$w=B+-!7b2N zl8P2k(`2?@x1&C2f-||5cSc=dAJqAyP@im5ti4d?0RNw)N@4{0 zW~eQXLx%SsO#|7KTH6ME zhi&-T`dHeVXz?BTyMvoDh~%%7)07g{L5@83ImP)oc_i@_ zTSPB%8OWs^BWTM?$wK*)J{K`R@~h69M12t@iP+bIe~jY9^d#<6ezp;Q#X2_Nt&~x5 zE&U5(9DU=c|3!T)^}h6-g-gaX znogrIjF@lC|9fJKXH>vCRjMAHakqS6Q(q5L5a(qnNt49dq9w4VrPaRc=OA>FR zzMJ#1`$%*nu^e@z$4ajZGT!Ph==?k7n(O8bz&B`Hf**0t73!OiUsnEOC-J|O-Q@I1 zsowxP5-7#VcOc&geVa(6rBa)Oj$ID#4dR7Nc!hWc^%HoMeuF4FW;ncY7AFxmrQb8+ z|0u<&H?uZ%oyu6pD0#@~BiRn0_bDA`5d~s#I(%d;+g>^O47nVXN|Yz$-=Lq4?vyQ@ zrz5xd0d4vqs$l0Yqu!DFDlBDvT4M*|LAw8EZLk13t){G}u`;>-lta|Nr(-ShuT%fj z`ffGn(x#8I{;-lhDM$H~ew?EtkT!nTcrU5nu{Py%^ZnyRTc=Ibn^C%|g@fM*UR}y8 z+W&JY?zH!c?92*JZ=jpgUxKBjnwZ^{ztzX^tp|1Qz}s}M4x<=AlkQ5Dv}?AJMCOT|M4mR z973)WZMisai{>y5} zETHg9+}lFwO}!oJ*n#OdFC)3_6n&%WIIin&W1XtLGD&kf>F7!>fckRWi%03JuhY+{ zm-YAHr!~2fl-9&6@sj1mQ2Ld|-JE})wi3i|QeQ>A5p~}{Dmtk9kHW;&3EI->6MRNC zyS4p*3FO|QO%Luh459R==r?~fC4zd&@jjKR7APIgxixJ*rHeC+zqtoY!*I9iV_0Oqir{r|a-cknF(VVvbD3hp9pYbjrogMYU` zuD;dR(nrTn4sSnB*XREk8un3gS_iccq`XI2OnJ^kCuyrf(Qi5(XUOqaz5c)N@5&f$ zDKl+h{JQr4U$hjae+&BTvV1k-?vyn2{RVaTwh^?T{7T{hr2)y2l#S#{s0T+D>YV4=_154AspWI!_Y)Z=UCi%{k+vMK!=eeAF zv>qVYo|8{g|H)2>$Fszx$d|Mc)>GF})Z9a#3eH|34>?|C}<1D4bH3Il5Ci zkb56>3{Uy}r{Et3&=F=HaG}?pcq1o$Ou0b4DK@b_*2T|Hm_J!OwRW|{xN~XOp5-0d{$60)A$SO7*BbF5=pKKxqS@qF1}0r2SvwwZ# zC@es3HMy^_ojP#zw070|Q6h-v>wkayl;CX!s)^%CPNP17GLQi}ppNIJ>O<)B023)4 zZP0(zz%iEi2<6c${ST8LOx%$1W>5xDPfczqrqcVbV=6&S8q-pAWFr2Xfx1x2P;@k< z^d+B@J_$INd_8{)0}=NiK0@4wdOu1N>W|3nus$LWaX4*tDT^t2b^i;JEQUI|Qm;mN zOuY;fm8Z0$TqU>3`phx?C-9H7w6($|o`I3ZBCd+y)(HrmS2wLX-hdaP;X2>9r|L1ZKO~`LsJEiDrEM~$2f6p? z(};QzNP$pm8w2BVHqn2JvIFc$03=@j`0 z>KQQ(k6{^#jxT9%M>$K`$2n_hzl{rsbK+(CY{r!1F!e00qSij74`c+hR!bu2GY5x z4bT!xTYU~~6X|o1!rz{FF_i!J7{yUR(F@M~fnH>ua>oPKzUvX$Hd+=+{DBK>}&45j`7{dBxTeGc_D zl;hNO_&Ql*WgJH$)+YFf4sQ~tvG@n#&Gcz)u}*&VC~V`LdZm3T9X_Tkwzl7F($N-w zq33^u1v&5sPX2`QmgNp|LVe0$;<=O=)TdK)d_q}9eI@x3)W={Xab}Dse#tnit#3AR zt*w5Yw%3T=!TnE7u%2iPWgeZr!=mKQ<9Y`9klbEMIpUP#6XGlu6gJnX59Ki><=D&l z2PwTt6vFQ*T^M^Er4Kp(|Ni^il-{_31|3f*p_B}q@FT9lbEu;_r6%$J?^r`)0mhn0 z`NI|zj~mH<#ksp|9^Y(he2B#?*_;lSi4!QV-d_>wZ2K2enW`pcEZB)(zr>m;rv1ved@Ex338_Ywvs4egOFJfwHxpx*I4lcpx- z4NUrK@U6h4`op^gChZ3-MaV`}%lv$ESZJHbwnK-yxx45|ORU$`>itN#)cR#BRN*L6opOSNe zcMVVdMr7G?RVtKCny_np)^xY`jJY>=Yx1@O$>Y~1g`GZ;HYj=b&ZJY9q63pMT&W(E zbnt4Kz@0Z*24wQD_?NjG?o8U9JZZt*l^f=?`1wdu)Xlx2`R~k_d3)a)b+|Wv`Y#8! zCQq1t_wbUtE2r78SMHw=P1^JH{WKZxEL(eL-^|;4rr%k(P5qOi|C^U?LF#k?8FwEH s3rHPS=+2~>$x~K5Jg}GxNM5t!?x$;A{mz*Ecjj&P*B2bk5>WX603yTIumAu6 delta 21708 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 Gg8u~{u}iuD diff --git a/apps/locale/zh/LC_MESSAGES/django.po b/apps/locale/zh/LC_MESSAGES/django.po index f0494f3de..3ac062914 100644 --- a/apps/locale/zh/LC_MESSAGES/django.po +++ b/apps/locale/zh/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Jumpserver 0.3.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-03-27 12:48+0800\n" +"POT-Creation-Date: 2019-03-28 12:41+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: ibuler \n" "Language-Team: Jumpserver team\n" @@ -165,7 +165,7 @@ msgstr "SSH网关,支持代理SSH,RDP和VNC" #: perms/templates/perms/asset_permission_list.html:53 #: perms/templates/perms/asset_permission_list.html:72 #: perms/templates/perms/asset_permission_user.html:54 settings/models.py:29 -#: settings/templates/settings/_ldap_list_users_modal.html:35 +#: settings/templates/settings/_ldap_list_users_modal.html:38 #: settings/templates/settings/command_storage_create.html:41 #: settings/templates/settings/replay_storage_create.html:44 #: settings/templates/settings/terminal_setting.html:80 @@ -207,7 +207,7 @@ msgstr "名称" #: authentication/templates/authentication/new_login.html:90 #: ops/models/adhoc.py:164 perms/templates/perms/asset_permission_list.html:74 #: perms/templates/perms/asset_permission_user.html:55 -#: settings/templates/settings/_ldap_list_users_modal.html:34 users/forms.py:13 +#: settings/templates/settings/_ldap_list_users_modal.html:37 users/forms.py:13 #: users/models/user.py:52 users/templates/users/_select_user_modal.html:14 #: users/templates/users/user_detail.html:67 #: users/templates/users/user_list.html:24 @@ -1025,8 +1025,8 @@ msgstr "其它" #: settings/templates/settings/basic_setting.html:61 #: settings/templates/settings/command_storage_create.html:79 #: settings/templates/settings/email_setting.html:62 -#: settings/templates/settings/ldap_setting.html:62 -#: settings/templates/settings/replay_storage_create.html:152 +#: settings/templates/settings/ldap_setting.html:61 +#: settings/templates/settings/replay_storage_create.html:151 #: settings/templates/settings/security_setting.html:70 #: settings/templates/settings/terminal_setting.html:68 #: terminal/templates/terminal/terminal_update.html:45 @@ -1061,8 +1061,8 @@ msgstr "重置" #: settings/templates/settings/basic_setting.html:62 #: settings/templates/settings/command_storage_create.html:80 #: settings/templates/settings/email_setting.html:63 -#: settings/templates/settings/ldap_setting.html:63 -#: settings/templates/settings/replay_storage_create.html:153 +#: settings/templates/settings/ldap_setting.html:64 +#: settings/templates/settings/replay_storage_create.html:152 #: settings/templates/settings/security_setting.html:71 #: settings/templates/settings/terminal_setting.html:70 #: terminal/templates/terminal/command_list.html:103 @@ -1087,7 +1087,8 @@ msgid "Asset detail" msgstr "资产详情" #: assets/templates/assets/_user_asset_detail_modal.html:23 -#: templates/_modal.html:21 +#: settings/templates/settings/_ldap_list_users_modal.html:96 +#: templates/_modal.html:22 msgid "Close" msgstr "关闭" @@ -1259,7 +1260,7 @@ msgstr "选择节点" #: assets/templates/assets/system_user_detail.html:182 #: assets/templates/assets/system_user_list.html:143 #: settings/templates/settings/terminal_setting.html:165 -#: templates/_modal.html:22 terminal/templates/terminal/session_detail.html:108 +#: templates/_modal.html:23 terminal/templates/terminal/session_detail.html:108 #: users/templates/users/user_detail.html:388 #: users/templates/users/user_detail.html:414 #: users/templates/users/user_detail.html:437 @@ -1392,6 +1393,7 @@ msgid "Create asset" msgstr "创建资产" #: assets/templates/assets/asset_list.html:73 +#: settings/templates/settings/_ldap_list_users_modal.html:97 #: users/templates/users/user_list.html:7 #: xpack/plugins/license/templates/license/license_detail.html:101 msgid "Import" @@ -1611,7 +1613,7 @@ msgstr "创建网关" #: assets/templates/assets/domain_gateway_list.html:99 #: assets/templates/assets/domain_gateway_list.html:101 #: settings/templates/settings/email_setting.html:61 -#: settings/templates/settings/ldap_setting.html:61 +#: settings/templates/settings/ldap_setting.html:62 msgid "Test connection" msgstr "测试连接" @@ -2834,38 +2836,33 @@ msgstr "资产授权用户列表" msgid "Asset permission asset list" msgstr "资产授权资产列表" -#: settings/api.py:23 +#: settings/api.py:26 msgid "Test mail sent to {}, please check" msgstr "邮件已经发送{}, 请检查" -#: settings/api.py:47 +#: settings/api.py:50 msgid "Test ldap success" msgstr "连接LDAP成功" -#: settings/api.py:77 settings/utils.py:23 -msgid "Search no entry matched in ou {}" -msgstr "在ou:{}中没有匹配条目" - -#: settings/api.py:86 +#: settings/api.py:87 msgid "Match {} s users" msgstr "匹配 {} 个用户" -#: settings/api.py:109 -msgid "" -"User is not currently selected, please check the user you want to import" -msgstr "当前无勾选用户,请勾选你想要导入的用户" +#: settings/api.py:120 +msgid "succeed: {} failed: {} total: {}" +msgstr "成功:{} 失败:{} 总数:{}" -#: settings/api.py:139 settings/api.py:175 +#: settings/api.py:142 settings/api.py:178 msgid "" "Error: Account invalid (Please make sure the information such as Access key " "or Secret key is correct)" msgstr "错误:账户无效 (请确保 Access key 或 Secret key 等信息正确)" -#: settings/api.py:145 settings/api.py:181 +#: settings/api.py:148 settings/api.py:184 msgid "Create succeed" msgstr "创建成功" -#: settings/api.py:163 settings/api.py:201 +#: settings/api.py:166 settings/api.py:204 #: settings/templates/settings/terminal_setting.html:151 msgid "Delete succeed" msgstr "删除成功" @@ -3108,24 +3105,28 @@ msgid "" "characters" msgstr "开启后,用户密码修改、重置必须包含特殊字符" -#: settings/models.py:126 users/templates/users/reset_password.html:68 +#: settings/models.py:128 users/templates/users/reset_password.html:68 #: users/templates/users/user_profile.html:20 msgid "Setting" msgstr "设置" #: settings/templates/settings/_ldap_list_users_modal.html:7 -msgid "Ldap users" -msgstr "Ldap 用户列表" +msgid "LDAP user list" +msgstr "LDAP 用户列表" -#: settings/templates/settings/_ldap_list_users_modal.html:36 +#: settings/templates/settings/_ldap_list_users_modal.html:9 +msgid "Please submit the LDAP configuration before import" +msgstr "请先提交LDAP配置再进行导入" + +#: settings/templates/settings/_ldap_list_users_modal.html:39 #: users/models/user.py:56 users/templates/users/user_detail.html:71 #: users/templates/users/user_profile.html:59 msgid "Email" msgstr "邮件" -#: settings/templates/settings/_ldap_list_users_modal.html:37 -msgid "Is imported" -msgstr "是否已经导入" +#: settings/templates/settings/_ldap_list_users_modal.html:40 +msgid "Existing" +msgstr "已存在" #: settings/templates/settings/basic_setting.html:15 #: settings/templates/settings/email_setting.html:15 @@ -3182,8 +3183,13 @@ msgid "Doc type" msgstr "文档类型" #: settings/templates/settings/ldap_setting.html:65 -msgid "Sync User" -msgstr "同步用户" +msgid "Bulk import" +msgstr "一键导入" + +#: settings/templates/settings/ldap_setting.html:116 +msgid "" +"User is not currently selected, please check the user you want to import" +msgstr "当前无勾选用户,请勾选你想要导入的用户" #: settings/templates/settings/replay_storage_create.html:66 msgid "Bucket" @@ -3289,44 +3295,17 @@ msgstr "删除失败" msgid "Are you sure about deleting it?" msgstr "您确定删除吗?" -#: settings/utils.py:30 -msgid "Have user but attr mapping error" -msgstr "有用户但attr映射错误" - -#: settings/utils.py:60 -#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:86 -msgid "No" -msgstr "否" - #: settings/utils.py:69 -#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:84 -msgid "Yes" -msgstr "是" +msgid "User does not exist" +msgstr "用户不存在" -#: settings/utils.py:137 -msgid "" -"Import {} users successfully; import {} users failed, the database already " -"exists with the same name" -msgstr "导入 {} 个用户成功; 导入 {} 这些用户失败,数据库已经存在同名的用户" +#: settings/utils.py:72 +msgid "The user source is not LDAP" +msgstr "用户来源不是LDAP" -#: settings/utils.py:142 -msgid "" -"Import {} users successfully; import {} users failed, the database already " -"exists with the same name; import {}users failed, Because’TypeError' object " -"has no attribute 'keys'" -msgstr "" -"导入 {} 个用户成功; 导入 {} 这些用户失败,数据库已经存在同名的用户; 导入 {} " -"这些用户失败,因为对象没有属性'keys'" - -#: settings/utils.py:148 -msgid "Import {} users successfully" -msgstr "导入 {} 个用户成功" - -#: settings/utils.py:151 -msgid "" -"Import {} users successfully;import {} users failed, Because’TypeError' " -"object has no attribute 'keys'" -msgstr "导入 {} 个用户成功; 导入 {} 这些用户失败,因为对象没有属性'keys'" +#: settings/utils.py:146 +msgid "Search no entry matched in ou {}" +msgstr "在ou:{}中没有匹配条目" #: settings/views.py:18 settings/views.py:44 settings/views.py:70 #: settings/views.py:99 settings/views.py:126 settings/views.py:138 @@ -4920,6 +4899,14 @@ msgstr "更改资产上的用户密码时,将会使用与该资产关联的管 msgid "Length" msgstr "长度" +#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:84 +msgid "Yes" +msgstr "是" + +#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:86 +msgid "No" +msgstr "否" + #: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:134 msgid "Run plan manually" msgstr "手动执行计划" @@ -5369,6 +5356,33 @@ msgstr "创建组织" msgid "Update org" msgstr "更新组织" +#~ msgid "Sync User" +#~ msgstr "同步用户" + +#~ msgid "Have user but attr mapping error" +#~ msgstr "有用户但attr映射错误" + +#~ msgid "" +#~ "Import {} users successfully; import {} users failed, the database " +#~ "already exists with the same name" +#~ msgstr "导入 {} 个用户成功; 导入 {} 这些用户失败,数据库已经存在同名的用户" + +#~ msgid "" +#~ "Import {} users successfully; import {} users failed, the database " +#~ "already exists with the same name; import {}users failed, " +#~ "Because’TypeError' object has no attribute 'keys'" +#~ msgstr "" +#~ "导入 {} 个用户成功; 导入 {} 这些用户失败,数据库已经存在同名的用户; 导入 " +#~ "{} 这些用户失败,因为对象没有属性'keys'" + +#~ msgid "Import {} users successfully" +#~ msgstr "导入 {} 个用户成功" + +#~ msgid "" +#~ "Import {} users successfully;import {} users failed, Because’TypeError' " +#~ "object has no attribute 'keys'" +#~ msgstr "导入 {} 个用户成功; 导入 {} 这些用户失败,因为对象没有属性'keys'" + #~ msgid "Monitor" #~ msgstr "监控" diff --git a/apps/settings/api.py b/apps/settings/api.py index ff265c076..a65df113d 100644 --- a/apps/settings/api.py +++ b/apps/settings/api.py @@ -5,18 +5,21 @@ import os import json import jms_storage -from ldap3 import Server, Connection from rest_framework.views import Response, APIView from django.conf import settings from django.core.mail import send_mail from django.utils.translation import ugettext_lazy as _ from .models import Setting -from .utils import get_ldap_users_list, save_user +from .utils import LDAPUtil from common.permissions import IsOrgAdmin, IsSuperUser +from common.utils import get_logger from .serializers import MailTestSerializer, LDAPTestSerializer +logger = get_logger(__file__) + + class MailTestingAPI(APIView): permission_classes = (IsOrgAdmin,) serializer_class = MailTestSerializer @@ -46,78 +49,78 @@ class LDAPTestingAPI(APIView): serializer_class = LDAPTestSerializer success_message = _("Test ldap success") + @staticmethod + def get_ldap_util(serializer): + host = serializer.validated_data["AUTH_LDAP_SERVER_URI"] + bind_dn = serializer.validated_data["AUTH_LDAP_BIND_DN"] + password = serializer.validated_data["AUTH_LDAP_BIND_PASSWORD"] + use_ssl = serializer.validated_data.get("AUTH_LDAP_START_TLS", False) + search_ougroup = serializer.validated_data["AUTH_LDAP_SEARCH_OU"] + search_filter = serializer.validated_data["AUTH_LDAP_SEARCH_FILTER"] + attr_map = serializer.validated_data["AUTH_LDAP_USER_ATTR_MAP"] + try: + attr_map = json.loads(attr_map) + except json.JSONDecodeError: + return Response({"error": "AUTH_LDAP_USER_ATTR_MAP not valid"}, status=401) + + util = LDAPUtil( + use_settings_config=False, server_uri=host, bind_dn=bind_dn, + password=password, use_ssl=use_ssl, + search_ougroup=search_ougroup, search_filter=search_filter, + attr_map=attr_map + ) + return util + def post(self, request): serializer = self.serializer_class(data=request.data) - if serializer.is_valid(): - host = serializer.validated_data["AUTH_LDAP_SERVER_URI"] - bind_dn = serializer.validated_data["AUTH_LDAP_BIND_DN"] - password = serializer.validated_data["AUTH_LDAP_BIND_PASSWORD"] - use_ssl = serializer.validated_data.get("AUTH_LDAP_START_TLS", False) - search_ougroup = serializer.validated_data["AUTH_LDAP_SEARCH_OU"] - search_filter = serializer.validated_data["AUTH_LDAP_SEARCH_FILTER"] - attr_map = serializer.validated_data["AUTH_LDAP_USER_ATTR_MAP"] - - try: - attr_map = json.loads(attr_map) - except json.JSONDecodeError: - return Response({"error": "AUTH_LDAP_USER_ATTR_MAP not valid"}, status=401) - - server = Server(host, use_ssl=use_ssl) - conn = Connection(server, bind_dn, password) - try: - conn.bind() - except Exception as e: - return Response({"error": str(e)}, status=401) - - users = [] - for search_ou in str(search_ougroup).split("|"): - ok = conn.search(search_ou, search_filter % ({"user": "*"}), - attributes=list(attr_map.values())) - if not ok: - return Response({"error": _("Search no entry matched in ou {}").format(search_ou)}, status=401) - - for entry in conn.entries: - user = {} - for attr, mapping in attr_map.items(): - if hasattr(entry, mapping): - user[attr] = getattr(entry, mapping) - users.append(user) - if len(users) > 0: - return Response({"msg": _("Match {} s users").format(len(users))}) - else: - return Response({"error": "Have user but attr mapping error"}, status=401) - else: + if not serializer.is_valid(): return Response({"error": str(serializer.errors)}, status=401) + util = self.get_ldap_util(serializer) -class LDAPSyncAPI(APIView): + try: + users = util.get_search_user_items() + except Exception as e: + return Response({"error": str(e)}, status=401) + + if len(users) > 0: + return Response({"msg": _("Match {} s users").format(len(users))}) + else: + return Response({"error": "Have user but attr mapping error"}, status=401) + + +class LDAPUserListApi(APIView): permission_classes = (IsOrgAdmin,) def get(self, request): - ldap_users_list = get_ldap_users_list() - if not isinstance(ldap_users_list, list): - return Response(ldap_users_list, status=401) - return Response(ldap_users_list) + util = LDAPUtil() + try: + users = util.get_search_user_items() + except Exception as e: + users = [] + logger.error(e, exc_info=True) + else: + users = sorted(users, key=lambda u: (u['existing'], u['username'])) + return Response(users) -class LDAPConfirmSyncAPI(APIView): +class LDAPUserSyncAPI(APIView): permission_classes = (IsOrgAdmin,) def post(self, request): user_names = request.data.get('user_names', '') - if not user_names: - error = _('User is not currently selected, please check the user ' - 'you want to import') - return Response({'error': error}, status=401) - ldap_users_list = get_ldap_users_list(user_names=user_names) - if not isinstance(ldap_users_list, list): - return Response(ldap_users_list, status=401) - - save_result = save_user(ldap_users_list) - if 'error' in save_result.keys(): - return Response(save_result, status=401) - return Response(save_result) + util = LDAPUtil() + try: + result = util.sync_users(username_set=user_names) + except Exception as e: + logger.error(e, exc_info=True) + return Response({'error': str(e)}, status=401) + else: + msg = _("succeed: {} failed: {} total: {}").format( + result['succeed'], result['failed'], result['total'] + ) + return Response({'msg': msg}) class ReplayStorageCreateAPI(APIView): diff --git a/apps/settings/models.py b/apps/settings/models.py index 3364037a3..524fa9349 100644 --- a/apps/settings/models.py +++ b/apps/settings/models.py @@ -79,6 +79,8 @@ class Setting(models.Model): obj.cleaned_value = data else: value = obj.cleaned_value + if value is None: + value = {} value.update(data) obj.cleaned_value = value obj.save() diff --git a/apps/settings/templates/settings/_ldap_list_users_modal.html b/apps/settings/templates/settings/_ldap_list_users_modal.html index 433cfc92e..2009e9b58 100644 --- a/apps/settings/templates/settings/_ldap_list_users_modal.html +++ b/apps/settings/templates/settings/_ldap_list_users_modal.html @@ -4,7 +4,10 @@ {% block modal_class %}modal-lg{% endblock %} {% block modal_id %}ldap_list_users_modal{% endblock %} -{% block modal_title%}{% trans "Ldap users" %}{% endblock %} +{% block modal_title%}{% trans "LDAP user list" %}{% endblock %} + +{% block modal_help_message%}
{% trans 'Please submit the LDAP configuration before import' %}
{% endblock %} + {% block modal_body %} @@ -34,7 +37,7 @@ {% trans 'Username' %} {% trans 'Name' %} {% trans 'Email' %} - {% trans 'Is imported' %} + {% trans 'Existing' %} @@ -47,16 +50,25 @@