diff --git a/apps/assets/templates/assets/admin_user_create_update.html b/apps/assets/templates/assets/admin_user_create_update.html index 5a2f3d6c959ecc19cadc0e8de2c04c2f911cdec5..c94a67a9e48e867c350d73522787ed9f3c6741ea 100644 --- a/apps/assets/templates/assets/admin_user_create_update.html +++ b/apps/assets/templates/assets/admin_user_create_update.html @@ -70,8 +70,6 @@ $(document).ready(function () { {% endif %} var form = $("form"); var data = form.serializeObject(); - console.log($("#id_private_key").data("file")); - data["private_key"] = $("#id_private_key").data('file'); var props = { diff --git a/apps/assets/templates/assets/asset_list.html b/apps/assets/templates/assets/asset_list.html index 0cdcb176a3735f99c3b31b139e4122106525a33e..a20d4f35f2dbb9ecb047d11cfd4c45edbe81dd18 100644 --- a/apps/assets/templates/assets/asset_list.html +++ b/apps/assets/templates/assets/asset_list.html @@ -346,8 +346,8 @@ $(document).ready(function(){ var data = { 'resources': id_list }; - function refreshTag() { - $('#asset_list_table').DataTable().ajax.reload(); + function refreshPage() { + setTimeout( function () {window.location.reload();}, 300); } function doDeactive() { @@ -356,15 +356,11 @@ $(document).ready(function(){ var obj = {"pk": object_id, "is_active": false}; data.push(obj); }); - function success() { - setTimeout( function () { - window.location.reload();}, 500); - } requestApi({ url: the_url, method: 'PATCH', body: JSON.stringify(data), - success: success + success: refreshPage }); } function doActive() { @@ -373,15 +369,11 @@ $(document).ready(function(){ var obj = {"pk": object_id, "is_active": true}; data.push(obj); }); - function success() { - setTimeout( function () { - window.location.reload();}, 300); - } requestApi({ url: the_url, method: 'PATCH', body: JSON.stringify(data), - success: success + success: refreshPage }); } function doDelete() { @@ -400,7 +392,7 @@ $(document).ready(function(){ requestApi({ url:url, method:'DELETE', - success:refreshTag, + success:refreshPage, flash_message:false, }); var msg = "{% trans 'Asset Deleted.' %}"; diff --git a/apps/assets/templates/assets/system_user_list.html b/apps/assets/templates/assets/system_user_list.html index 621e18201b1b594c5bb30472a61e9d35020916fb..b48226f4123709086983a5ed2a4635b23ef8946e 100644 --- a/apps/assets/templates/assets/system_user_list.html +++ b/apps/assets/templates/assets/system_user_list.html @@ -78,43 +78,9 @@ function initTable() { var detail_btn = '<a href="{% url "assets:system-user-detail" pk=DEFAULT_PK %}">' + cellData + '</a>'; $(td).html(detail_btn.replace('{{ DEFAULT_PK }}', rowData.id)); }}, - {#{targets: 6, createdCell: function (td, cellData) {#} - {# var innerHtml = "";#} - {# var data = cellData.reachable;#} - {# if (data !== 0) {#} - {# innerHtml = "<span class='text-navy'>" + data + "</span>";#} - {# } else {#} - {# innerHtml = "<span>" + data + "</span>";#} - {# }#} - {# $(td).html(innerHtml)#} - {#}},#} - {#{targets: 7, createdCell: function (td, cellData) {#} - {# var data = cellData.unreachable;#} - {# var innerHtml = "";#} - {# if (data !== 0) {#} - {# innerHtml = "<span class='text-danger'>" + data + "</span>";#} - {# } else {#} - {# innerHtml = "<span>" + data + "</span>";#} - {# }#} - {# $(td).html('<span href="javascript:void(0);" data-toggle="tooltip" title="' + data + '">' + innerHtml + '</span>');#} - {#}},#} - {#{targets: 8, createdCell: function (td, cellData, rowData) {#} - {# var val = 0;#} - {# var innerHtml = "";#} - {# var total = rowData.assets_amount;#} - {# var reachable = cellData.reachable;#} - {# if (total && total !== 0) {#} - {# val = reachable/total * 100;#} - {# }#} - {##} - {# if (val === 100) {#} - {# innerHtml = "<span class='text-navy'>" + val + "% </span>";#} - {# } else {#} - {# var num = new Number(val);#} - {# innerHtml = "<span class='text-danger'>" + num.toFixed(1) + "% </span>";#} - {# }#} - {# $(td).html('<span href="javascript:void(0);" data-toggle="tooltip" title="' + cellData + '">' + innerHtml + '</span>');#} - {#}},#} + {targets: 4, createdCell: function (td, cellData, rowData) { + $(td).html(rowData.login_mode_display); + }}, {targets: 7, createdCell: function (td, cellData, rowData) { var update_btn = '<a href="{% url "assets:system-user-update" pk=DEFAULT_PK %}" class="btn btn-xs m-l-xs btn-info">{% trans "Update" %}</a>'.replace('{{ DEFAULT_PK }}', cellData); var del_btn = '<a class="btn btn-xs btn-danger m-l-xs btn_admin_user_delete" data-uid="{{ DEFAULT_PK }}">{% trans "Delete" %}</a>'.replace('{{ DEFAULT_PK }}', cellData); @@ -123,8 +89,9 @@ function initTable() { ], ajax_url: '{% url "api-assets:system-user-list" %}', columns: [ - {data: "id" }, {data: "name" }, {data: "username" }, {data: "protocol"}, {data: "login_mode_display"}, {data: "assets_amount" }, - {data: "comment" }, {data: "id" } + {data: "id" }, {data: "name" }, {data: "username" }, {data: "protocol"}, + {data: "login_mode"}, {data: "assets_amount", orderable: false }, + {data: "comment" }, {data: "id", orderable: false } ], op_html: $('#actions').html() }; diff --git a/apps/jumpserver/views.py b/apps/jumpserver/views.py index 9ad8f7b39f2e867867d112d34817d9e569800230..f9d692f31362051e42b6d76d17ea6ecc303428a7 100644 --- a/apps/jumpserver/views.py +++ b/apps/jumpserver/views.py @@ -100,13 +100,19 @@ class IndexView(PermissionsMixin, TemplateView): return self.session_month.values('user').distinct().count() def get_month_inactive_user_total(self): - return current_org.get_org_users().count() - self.get_month_active_user_total() + count = current_org.get_org_users().count() - self.get_month_active_user_total() + if count < 0: + count = 0 + return count def get_month_active_asset_total(self): return self.session_month.values('asset').distinct().count() def get_month_inactive_asset_total(self): - return Asset.objects.all().count() - self.get_month_active_asset_total() + count = Asset.objects.all().count() - self.get_month_active_asset_total() + if count < 0: + count = 0 + return count @staticmethod def get_user_disabled_total(): @@ -180,6 +186,7 @@ class IndexView(PermissionsMixin, TemplateView): 'week_asset_hot_ten': self.get_week_top10_asset(), 'last_login_ten': self.get_last10_sessions(), 'week_user_hot_ten': self.get_week_top10_user(), + 'app': _("Dashboard"), } kwargs.update(context) diff --git a/apps/perms/api/mixin.py b/apps/perms/api/mixin.py index 9c726691f6fc217ac05a0a2f0fb570491d22370b..17c7c833dbfe4fe09bf562b348dbc456539d33a8 100644 --- a/apps/perms/api/mixin.py +++ b/apps/perms/api/mixin.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -from functools import reduce +import uuid from hashlib import md5 from django.core.cache import cache from django.db.models import Q @@ -186,6 +186,20 @@ class GrantAssetsMixin(LabelFilterMixin): data = self.get_serializer_queryset(queryset_list) return super().get_serializer(data, many=True) + def filter_queryset_by_id(self, assets_items): + i = self.request.query_params.get("id") + if not i: + return assets_items + try: + pk = uuid.UUID(i) + except ValueError: + return assets_items + assets_map = {asset['id']: asset for asset in assets_items} + if pk in assets_map: + return [assets_map.get(pk)] + else: + return [] + def search_queryset(self, assets_items): search = self.request.query_params.get("search") if not search: @@ -221,7 +235,8 @@ class GrantAssetsMixin(LabelFilterMixin): return [assets_map.get(asset_id) for asset_id in assets_ids_search] def filter_queryset(self, assets_items): + assets_items = self.filter_queryset_by_id(assets_items) assets_items = self.search_queryset(assets_items) assets_items = self.filter_queryset_by_label(assets_items) assets_items = self.sort_queryset(assets_items) - return assets_items \ No newline at end of file + return assets_items diff --git a/apps/perms/api/user_permission.py b/apps/perms/api/user_permission.py index 13ee0795111a97409753e98e840e245c9ef8bb11..bb7a497267f06b21c804bf65f13d3bcd1f9c8d9c 100644 --- a/apps/perms/api/user_permission.py +++ b/apps/perms/api/user_permission.py @@ -1,10 +1,6 @@ # -*- coding: utf-8 -*- # -import time -import traceback -from functools import reduce import uuid -from django.db.models import Q from django.shortcuts import get_object_or_404 from rest_framework.views import APIView, Response from rest_framework.generics import ( diff --git a/apps/templates/_header_bar.html b/apps/templates/_header_bar.html index 7c7f696b38724846eaeb809c1e15cb4e889d8463..24469a633c6ee155371a7dcc8e86976b0d0680af 100644 --- a/apps/templates/_header_bar.html +++ b/apps/templates/_header_bar.html @@ -110,9 +110,6 @@ <div class="col-sm-10"> <h2></h2> <ol class="breadcrumb"> - <li> - <a href="">{% trans 'Dashboard' %}</a> - </li> {% if app %} <li> <a>{{ app }}</a> diff --git a/apps/users/templates/users/_granted_assets.html b/apps/users/templates/users/_granted_assets.html index 36cc27a1c4a847640f7e7820344541f5252e6354..8df8317e90d1acf2c3b666fd5c73216eea3496c8 100644 --- a/apps/users/templates/users/_granted_assets.html +++ b/apps/users/templates/users/_granted_assets.html @@ -12,11 +12,11 @@ </div> <div class="col-lg-9 animated fadeInRight"> <div class="mail-box-header"> - <div class="btn-group" style="float: right"> - <button data-toggle="dropdown" class="btn btn-default btn-sm labels dropdown-toggle">{% trans 'Label' %} <span class="caret"></span></button> - <ul class="dropdown-menu labels-menu"> - </ul> - </div> +{# <div class="btn-group" style="float: right">#} +{# <button data-toggle="dropdown" class="btn btn-default btn-sm labels dropdown-toggle">{% trans 'Label' %} <span class="caret"></span></button>#} +{# <ul class="dropdown-menu labels-menu">#} +{# </ul>#} +{# </div>#} <table class="table table-striped table-bordered table-hover" id="user_assets_table" > <thead> <tr> diff --git a/apps/users/templates/users/user_list.html b/apps/users/templates/users/user_list.html index 2dfab41f7230dedf4ec4fb48ac26721af3a6d080..0c74640dee35269896c27cfcb2d0f9cf4b86471d 100644 --- a/apps/users/templates/users/user_list.html +++ b/apps/users/templates/users/user_list.html @@ -76,10 +76,16 @@ function initTable() { var detail_btn = '<a href="{% url "users:user-detail" pk=DEFAULT_PK %}">' + cellData + '</a>'; $(td).html(detail_btn.replace("{{ DEFAULT_PK }}", rowData.id)); }}, + {targets: 3, createdCell: function (td, cellData, rowData) { + $(td).html(rowData.role_display); + }}, {targets: 4, createdCell: function (td, cellData) { var innerHtml = cellData.length > 20 ? cellData.substring(0, 20) + '...': cellData; $(td).html('<span href="javascript:void(0);" data-toggle="tooltip" title="' + cellData + '">' + innerHtml + '</span>'); }}, + {targets: 5, createdCell: function (td, cellData, rowData) { + $(td).html(rowData.source_display); + }}, {targets: 6, createdCell: function (td, cellData, rowData) { if (cellData) { $(td).html('<i class="fa fa-check text-navy"></i>') @@ -114,9 +120,9 @@ function initTable() { ajax_url: '{% url "api-users:user-list" %}', columns: [ {data: "id"}, {data: "name" }, {data: "username" }, - {data: "role_display", orderable: false}, + {data: "role"}, {data: "groups_display", orderable: false}, - {data: "source_display", orderable: false}, + {data: "source"}, {data: "is_valid", orderable: false}, {data: "id", orderable: false} ], @@ -209,8 +215,8 @@ $(document).ready(function(){ var data = { 'resources': id_list }; - function refreshTag() { - $('#user_list_table').DataTable().ajax.reload() + function reloadPage() { + setTimeout( function () {window.location.reload();}, 300); } function doDeactive() { var data = []; @@ -218,15 +224,11 @@ $(document).ready(function(){ var obj = {"pk": object_id, "is_active": false}; data.push(obj); }); - function success() { - setTimeout( function () { - window.location.reload();}, 300); - } requestApi({ url: the_url, method: 'PATCH', body: JSON.stringify(data), - success: success + success: reloadPage }); } function doActive() { @@ -235,15 +237,11 @@ $(document).ready(function(){ var obj = {"pk": object_id, "is_active": true}; data.push(obj); }); - function success() { - setTimeout( function () { - window.location.reload();}, 300); - } requestApi({ url: the_url, method: 'PATCH', body: JSON.stringify(data), - success: success + success: reloadPage }); } function doDelete() { @@ -262,7 +260,7 @@ $(document).ready(function(){ requestApi({ url:url, method:'DELETE', - success:refreshTag, + success:reloadPage, flash_message:false, }); var msg = "{% trans 'User Deleted.' %}";