From 1182313c1a6bee4d36edaf9165c56101e2b6448e Mon Sep 17 00:00:00 2001 From: BaiJiangJie Date: Fri, 13 Jul 2018 19:30:48 +0800 Subject: [PATCH] =?UTF-8?q?[Update]=20=E5=8F=96=E6=B6=88=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E7=94=A8=E6=88=B7-=E6=B8=85=E9=99=A4=E8=AE=A4=E8=AF=81?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=EF=BC=8C=E5=8F=96=E6=B6=88-=E7=BD=91?= =?UTF-8?q?=E5=85=B3rdp=E5=8D=8F=E8=AE=AE=E8=AE=A4=E8=AF=81=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=EF=BC=8C=E6=B7=BB=E5=8A=A0=E7=94=A8=E6=88=B7unblock?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../assets/gateway_create_update.html | 15 ++- .../templates/assets/system_user_detail.html | 17 ++- apps/i18n/zh/LC_MESSAGES/django.mo | Bin 36764 -> 36926 bytes apps/i18n/zh/LC_MESSAGES/django.po | 103 ++++++++++-------- apps/users/api.py | 15 ++- apps/users/templates/users/user_detail.html | 35 ++++++ apps/users/urls/api_urls.py | 2 + apps/users/views/login.py | 4 +- 8 files changed, 133 insertions(+), 58 deletions(-) diff --git a/apps/assets/templates/assets/gateway_create_update.html b/apps/assets/templates/assets/gateway_create_update.html index 7c1bf14b2..fea540385 100644 --- a/apps/assets/templates/assets/gateway_create_update.html +++ b/apps/assets/templates/assets/gateway_create_update.html @@ -42,7 +42,7 @@ {% bootstrap_field form.domain layout="horizontal" %} {% block auth %} -

{% trans 'Auth' %}

+

{% trans 'Auth' %}

{% bootstrap_field form.username layout="horizontal" %} {% bootstrap_field form.password layout="horizontal" %} @@ -72,14 +72,23 @@ var protocol_id = '#' + '{{ form.protocol.id_for_label }}'; var private_key_id = '#' + '{{ form.private_key_file.id_for_label }}'; var port = '#' + '{{ form.port.id_for_label }}'; +var username = '#' + '{{ form.username.id_for_label }}'; +var password = '#' + '{{ form.password.id_for_label }}'; +var auth_title = '#auth_title'; function protocolChange() { if ($(protocol_id + " option:selected").text() === 'rdp') { {#$(port).val(3389);#} - $(private_key_id).closest('.form-group').addClass('hidden') + $(private_key_id).closest('.form-group').addClass('hidden'); + $(username).closest('.form-group').addClass('hidden'); + $(password).closest('.form-group').addClass('hidden'); + $(auth_title).addClass('hidden'); } else { {#$(port).val(22);#} - $(private_key_id).closest('.form-group').removeClass('hidden') + $(private_key_id).closest('.form-group').removeClass('hidden'); + $(username).closest('.form-group').removeClass('hidden'); + $(password).closest('.form-group').removeClass('hidden'); + $(auth_title).removeClass('hidden'); } } diff --git a/apps/assets/templates/assets/system_user_detail.html b/apps/assets/templates/assets/system_user_detail.html index f0ed6030c..dd188bdab 100644 --- a/apps/assets/templates/assets/system_user_detail.html +++ b/apps/assets/templates/assets/system_user_detail.html @@ -152,15 +152,14 @@ - - - {% trans 'Clear auth' %}: - - - - - - +{# #} +{# {% trans 'Clear auth' %}:#} +{# #} +{# #} +{# #} +{# #} +{# #} +{# #} {# #} {# {% trans 'Change auth period' %}:#} diff --git a/apps/i18n/zh/LC_MESSAGES/django.mo b/apps/i18n/zh/LC_MESSAGES/django.mo index 78d56177ea093bf518cc027eff07aab406c1a7c5..182ca35ceb4330dca81cc003be9451c796084219 100644 GIT binary patch delta 10828 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 delta 10638 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 v<(|U)q{>Uf2L=T\n" "Language-Team: Jumpserver team\n" @@ -32,7 +32,7 @@ msgstr "" #: assets/forms/asset.py:24 assets/models/asset.py:89 assets/models/user.py:112 #: assets/templates/assets/asset_detail.html:183 #: assets/templates/assets/asset_detail.html:191 -#: assets/templates/assets/system_user_detail.html:179 perms/models.py:33 +#: assets/templates/assets/system_user_detail.html:178 perms/models.py:33 msgid "Nodes" msgstr "节点管理" @@ -101,7 +101,7 @@ msgstr "端口" #: assets/forms/domain.py:14 assets/forms/label.py:13 #: assets/models/asset.py:237 assets/templates/assets/admin_user_list.html:25 #: assets/templates/assets/domain_detail.html:60 -#: assets/templates/assets/domain_list.html:15 +#: assets/templates/assets/domain_list.html:23 #: assets/templates/assets/label_list.html:16 #: assets/templates/assets/system_user_list.html:30 audits/models.py:11 #: audits/templates/audits/ftp_log_list.html:41 @@ -125,7 +125,7 @@ msgstr "资产" #: assets/templates/assets/admin_user_list.html:23 #: assets/templates/assets/domain_detail.html:56 #: assets/templates/assets/domain_gateway_list.html:56 -#: assets/templates/assets/domain_list.html:14 +#: assets/templates/assets/domain_list.html:22 #: assets/templates/assets/label_list.html:14 #: assets/templates/assets/system_user_detail.html:58 #: assets/templates/assets/system_user_list.html:26 common/models.py:26 @@ -356,7 +356,7 @@ msgstr "创建日期" #: assets/templates/assets/asset_detail.html:125 #: assets/templates/assets/domain_detail.html:76 #: assets/templates/assets/domain_gateway_list.html:61 -#: assets/templates/assets/domain_list.html:17 +#: assets/templates/assets/domain_list.html:25 #: assets/templates/assets/system_user_detail.html:104 #: assets/templates/assets/system_user_list.html:34 common/models.py:30 #: ops/models/adhoc.py:42 perms/models.py:40 perms/models.py:83 @@ -756,7 +756,7 @@ msgstr "测试" #: assets/templates/assets/domain_detail.html:24 #: assets/templates/assets/domain_detail.html:103 #: assets/templates/assets/domain_gateway_list.html:85 -#: assets/templates/assets/domain_list.html:42 +#: assets/templates/assets/domain_list.html:50 #: assets/templates/assets/label_list.html:38 #: assets/templates/assets/system_user_detail.html:26 #: assets/templates/assets/system_user_list.html:89 @@ -780,7 +780,7 @@ msgstr "更新" #: assets/templates/assets/domain_detail.html:28 #: assets/templates/assets/domain_detail.html:104 #: assets/templates/assets/domain_gateway_list.html:86 -#: assets/templates/assets/domain_list.html:43 +#: assets/templates/assets/domain_list.html:51 #: assets/templates/assets/label_list.html:39 #: assets/templates/assets/system_user_detail.html:30 #: assets/templates/assets/system_user_list.html:90 @@ -808,12 +808,13 @@ msgstr "选择节点" #: assets/templates/assets/admin_user_detail.html:100 #: assets/templates/assets/asset_detail.html:200 #: assets/templates/assets/asset_list.html:638 -#: assets/templates/assets/system_user_detail.html:196 +#: assets/templates/assets/system_user_detail.html:195 #: assets/templates/assets/system_user_list.html:139 templates/_modal.html:22 #: terminal/templates/terminal/session_detail.html:108 -#: users/templates/users/user_detail.html:366 -#: users/templates/users/user_detail.html:391 -#: users/templates/users/user_detail.html:414 +#: users/templates/users/user_detail.html:374 +#: users/templates/users/user_detail.html:399 +#: users/templates/users/user_detail.html:422 +#: users/templates/users/user_detail.html:458 #: users/templates/users/user_group_create_update.html:32 #: users/templates/users/user_group_list.html:86 #: users/templates/users/user_list.html:200 @@ -841,7 +842,7 @@ msgstr "比例" #: assets/templates/assets/admin_user_list.html:30 #: assets/templates/assets/asset_list.html:91 #: assets/templates/assets/domain_gateway_list.html:62 -#: assets/templates/assets/domain_list.html:18 +#: assets/templates/assets/domain_list.html:26 #: assets/templates/assets/label_list.html:17 #: assets/templates/assets/system_user_list.html:35 #: ops/templates/ops/adhoc_history.html:59 ops/templates/ops/task_adhoc.html:64 @@ -905,8 +906,8 @@ msgid "Refresh" msgstr "刷新" #: assets/templates/assets/asset_detail.html:300 -#: users/templates/users/user_detail.html:286 -#: users/templates/users/user_detail.html:313 +#: users/templates/users/user_detail.html:294 +#: users/templates/users/user_detail.html:321 msgid "Update successfully!" msgstr "更新成功" @@ -1002,8 +1003,9 @@ msgstr "存在资产,不能删除" #: assets/templates/assets/asset_list.html:633 #: assets/templates/assets/system_user_list.html:134 -#: users/templates/users/user_detail.html:361 -#: users/templates/users/user_detail.html:386 +#: users/templates/users/user_detail.html:369 +#: users/templates/users/user_detail.html:394 +#: users/templates/users/user_detail.html:453 #: users/templates/users/user_group_list.html:81 #: users/templates/users/user_list.html:195 msgid "Are you sure?" @@ -1043,7 +1045,7 @@ msgstr "您确定删除吗?" #: assets/templates/assets/domain_detail.html:21 #: assets/templates/assets/domain_detail.html:64 #: assets/templates/assets/domain_gateway_list.html:21 -#: assets/templates/assets/domain_list.html:16 +#: assets/templates/assets/domain_list.html:24 msgid "Gateway" msgstr "网关" @@ -1063,7 +1065,7 @@ msgstr "创建网关" msgid "Test connection" msgstr "测试连接" -#: assets/templates/assets/domain_list.html:6 assets/views/domain.py:46 +#: assets/templates/assets/domain_list.html:14 assets/views/domain.py:46 msgid "Create domain" msgstr "创建网域" @@ -1106,20 +1108,15 @@ msgstr "家目录" msgid "Uid" msgstr "Uid" -#: assets/templates/assets/system_user_detail.html:157 -#: assets/templates/assets/system_user_detail.html:343 -msgid "Clear auth" -msgstr "清除认证信息" - -#: assets/templates/assets/system_user_detail.html:160 -msgid "Clear" -msgstr "清除" - -#: assets/templates/assets/system_user_detail.html:187 +#: assets/templates/assets/system_user_detail.html:186 msgid "Add to node" msgstr "添加到节点" -#: assets/templates/assets/system_user_detail.html:343 +#: assets/templates/assets/system_user_detail.html:353 +msgid "Clear auth" +msgstr "清除认证信息" + +#: assets/templates/assets/system_user_detail.html:353 msgid "success" msgstr "成功" @@ -1238,6 +1235,7 @@ msgstr "文件名" #: audits/models.py:15 audits/templates/audits/ftp_log_list.html:77 #: ops/templates/ops/task_list.html:39 users/models/authentication.py:66 +#: users/templates/users/user_detail.html:443 msgid "Success" msgstr "成功" @@ -1854,7 +1852,7 @@ msgstr "选择用户" #: perms/templates/perms/asset_permission_list.html:136 templates/_nav.html:14 #: users/models/group.py:23 users/models/user.py:55 #: users/templates/users/_select_user_modal.html:16 -#: users/templates/users/user_detail.html:192 +#: users/templates/users/user_detail.html:200 #: users/templates/users/user_list.html:26 msgid "User group" msgstr "用户组" @@ -1907,7 +1905,7 @@ msgid "Add node to this permission" msgstr "添加节点" #: perms/templates/perms/asset_permission_asset.html:125 -#: users/templates/users/user_detail.html:209 +#: users/templates/users/user_detail.html:217 msgid "Join" msgstr "加入" @@ -2326,7 +2324,7 @@ msgid "" "You should use your ssh client tools connect terminal: {}

{}" msgstr "你可以使用ssh客户端工具连接终端" -#: users/api.py:208 users/templates/users/login.html:50 +#: users/api.py:221 users/templates/users/login.html:50 msgid "Log in frequently and try again later" msgstr "登录频繁, 稍后重试" @@ -2405,7 +2403,7 @@ msgstr "" msgid "Paste user id_rsa.pub here." msgstr "复制用户公钥到这里" -#: users/forms.py:73 users/templates/users/user_detail.html:200 +#: users/forms.py:73 users/templates/users/user_detail.html:208 msgid "Join user groups" msgstr "添加到用户组" @@ -2701,7 +2699,7 @@ msgid "Can't provide security? Please contact the administrator!" msgstr "如果不能提供MFA验证码,请联系管理员!" #: users/templates/users/reset_password.html:46 -#: users/templates/users/user_detail.html:352 users/utils.py:80 +#: users/templates/users/user_detail.html:360 users/utils.py:80 msgid "Reset password" msgstr "重置密码" @@ -2773,44 +2771,57 @@ msgstr "发送" msgid "Send reset ssh key mail" msgstr "发送重置密钥邮件" -#: users/templates/users/user_detail.html:295 +#: users/templates/users/user_detail.html:186 +#: users/templates/users/user_detail.html:444 +msgid "Unblock user" +msgstr "解锁用户" + +#: users/templates/users/user_detail.html:189 +msgid "Unblock" +msgstr "解锁" + +#: users/templates/users/user_detail.html:303 msgid "Goto profile page enable MFA" msgstr "请去个人信息页面启用自己的MFA" -#: users/templates/users/user_detail.html:351 +#: users/templates/users/user_detail.html:359 msgid "An e-mail has been sent to the user`s mailbox." msgstr "已发送邮件到用户邮箱" -#: users/templates/users/user_detail.html:362 +#: users/templates/users/user_detail.html:370 msgid "This will reset the user password and send a reset mail" msgstr "将失效用户当前密码,并发送重设密码邮件到用户邮箱" -#: users/templates/users/user_detail.html:376 +#: users/templates/users/user_detail.html:384 msgid "" "The reset-ssh-public-key E-mail has been sent successfully. Please inform " "the user to update his new ssh public key." msgstr "重设密钥邮件将会发送到用户邮箱" -#: users/templates/users/user_detail.html:377 +#: users/templates/users/user_detail.html:385 msgid "Reset SSH public key" msgstr "重置SSH密钥" -#: users/templates/users/user_detail.html:387 +#: users/templates/users/user_detail.html:395 msgid "This will reset the user public key and send a reset mail" msgstr "将会失效用户当前密钥,并发送重置邮件到用户邮箱" -#: users/templates/users/user_detail.html:404 +#: users/templates/users/user_detail.html:412 #: users/templates/users/user_profile.html:211 msgid "Successfully updated the SSH public key." msgstr "更新ssh密钥成功" -#: users/templates/users/user_detail.html:405 -#: users/templates/users/user_detail.html:409 +#: users/templates/users/user_detail.html:413 +#: users/templates/users/user_detail.html:417 #: users/templates/users/user_profile.html:212 #: users/templates/users/user_profile.html:217 msgid "User SSH public key update" msgstr "ssh密钥" +#: users/templates/users/user_detail.html:454 +msgid "After unlocking the user, the user can log in normally." +msgstr "解锁用户后,此用户即可正常登录" + #: users/templates/users/user_group_create_update.html:31 msgid "Cancel" msgstr "取消" @@ -3169,5 +3180,11 @@ msgstr "MFA 解绑成功" msgid "MFA disable success, return login page" msgstr "MFA 解绑成功,返回登录页面" +#~ msgid "Unblock user successfully. " +#~ msgstr "解锁用户成功" + +#~ msgid "Clear" +#~ msgstr "清除" + #~ msgid "MFA setting" #~ msgstr "MFA 设置" diff --git a/apps/users/api.py b/apps/users/api.py index c23112384..a3a613622 100644 --- a/apps/users/api.py +++ b/apps/users/api.py @@ -95,6 +95,19 @@ class UserUpdatePKApi(generics.UpdateAPIView): user.save() +class UserUnblockPKApi(generics.UpdateAPIView): + queryset = User.objects.all() + permission_classes = (IsSuperUser,) + serializer_class = UserSerializer + key_prefix_limit = "_LOGIN_LIMIT_{}_{}" + + def perform_update(self, serializer): + user = self.get_object() + username = user.username if user else '' + key_limit = self.key_prefix_limit.format(username, '*') + cache.delete_pattern(key_limit) + + class UserGroupViewSet(IDInFilterMixin, BulkModelViewSet): queryset = UserGroup.objects.all() serializer_class = UserGroupSerializer @@ -203,7 +216,7 @@ class UserAuthApi(APIView): username = request.data.get('username') ip = request.data.get('remote_addr', None) ip = ip if ip else get_login_ip(request) - key_limit = self.key_prefix_limit.format(ip, username) + key_limit = self.key_prefix_limit.format(username, ip) if is_block_login(key_limit): msg = _("Log in frequently and try again later") return Response({'msg': msg}, status=401) diff --git a/apps/users/templates/users/user_detail.html b/apps/users/templates/users/user_detail.html index d40251563..0182cf521 100644 --- a/apps/users/templates/users/user_detail.html +++ b/apps/users/templates/users/user_detail.html @@ -182,6 +182,14 @@ + + {% trans 'Unblock user' %} + + + + + +
@@ -426,6 +434,33 @@ $(document).ready(function() { var the_url = '{% url "api-users:user-detail" pk=DEFAULT_PK %}'.replace('{{ DEFAULT_PK }}', uid); var redirect_url = "{% url 'users:user-list' %}"; objectDelete($this, name, the_url, redirect_url); +}).on('click', '#btn-unblock-user', function () { + function doReset() { + {#var the_url = '{% url "api-users:user-reset-password" pk=user_object.id %}';#} + var the_url = '{% url "api-users:user-unblock" pk=user_object.id %}'; + var body = {}; + var success = function() { + var msg = "{% trans "Success" %}"; + swal("{% trans 'Unblock user' %}", msg, "success"); + }; + APIUpdateAttr({ + url: the_url, + body: JSON.stringify(body), + success: success + }); + } + swal({ + title: "{% trans 'Are you sure?' %}", + text: "{% trans "After unlocking the user, the user can log in normally."%}", + type: "warning", + showCancelButton: true, + confirmButtonColor: "#DD6B55", + confirmButtonText: "{% trans 'Confirm' %}", + closeOnConfirm: false + }, function() { + doReset(); + }); + }) {% endblock %} diff --git a/apps/users/urls/api_urls.py b/apps/users/urls/api_urls.py index 683638a4e..017224421 100644 --- a/apps/users/urls/api_urls.py +++ b/apps/users/urls/api_urls.py @@ -29,6 +29,8 @@ urlpatterns = [ api.UserResetPKApi.as_view(), name='user-public-key-reset'), url(r'^v1/users/(?P[0-9a-zA-Z\-]{36})/pubkey/update/$', api.UserUpdatePKApi.as_view(), name='user-public-key-update'), + url(r'^v1/users/(?P[0-9a-zA-Z\-]{36})/unblock/$', + api.UserUnblockPKApi.as_view(), name='user-unblock'), url(r'^v1/users/(?P[0-9a-zA-Z\-]{36})/groups/$', api.UserUpdateGroupApi.as_view(), name='user-update-group'), url(r'^v1/groups/(?P[0-9a-zA-Z\-]{36})/users/$', diff --git a/apps/users/views/login.py b/apps/users/views/login.py index 94071924f..2b86df19a 100644 --- a/apps/users/views/login.py +++ b/apps/users/views/login.py @@ -64,7 +64,7 @@ class UserLoginView(FormView): # limit login authentication ip = get_login_ip(request) username = self.request.POST.get('username') - key_limit = self.key_prefix_limit.format(ip, username) + key_limit = self.key_prefix_limit.format(username, ip) if is_block_login(key_limit): return self.render_to_response(self.get_context_data(block_login=True)) @@ -90,7 +90,7 @@ class UserLoginView(FormView): # limit user login failed count ip = get_login_ip(self.request) - key_limit = self.key_prefix_limit.format(ip, username) + key_limit = self.key_prefix_limit.format(username, ip) set_user_login_failed_count_to_cache(key_limit) # show captcha