diff --git a/apps/audits/hands.py b/apps/audits/hands.py index f530b5e78..36358cbf5 100644 --- a/apps/audits/hands.py +++ b/apps/audits/hands.py @@ -1,5 +1,7 @@ # ~*~ coding: utf-8 ~*~ # +from users.models import User +from assets.models import Asset, SystemUser from users.backends import IsSuperUserOrTerminalUser from terminal.models import Terminal diff --git a/apps/audits/models.py b/apps/audits/models.py index 1479ade7e..a98178a0d 100644 --- a/apps/audits/models.py +++ b/apps/audits/models.py @@ -71,7 +71,7 @@ class ProxyLog(models.Model): class CommandLog(models.Model): - proxy_log = models.ForeignKey(ProxyLog, on_delete=models.CASCADE, related_name='command_log') + proxy_log = models.ForeignKey(ProxyLog, on_delete=models.CASCADE, related_name='commands') command_no = models.IntegerField() command = models.CharField(max_length=1000, blank=True) output = models.TextField(blank=True) diff --git a/apps/audits/serializers.py b/apps/audits/serializers.py index 881f84666..4d02ef5b4 100644 --- a/apps/audits/serializers.py +++ b/apps/audits/serializers.py @@ -14,7 +14,8 @@ class ProxyLogSerializer(serializers.ModelSerializer): class Meta: model = models.ProxyLog fields = ['id', 'name', 'username', 'hostname', 'ip', 'system_user', 'login_type', 'terminal', - 'log_file', 'was_failed', 'is_finished', 'date_start', 'time', 'command_length', "commands_dict"] + 'log_file', 'was_failed', 'is_finished', 'date_start', 'date_finished', 'time', + 'command_length', "commands_dict"] @staticmethod def get_time(obj): @@ -25,7 +26,7 @@ class ProxyLogSerializer(serializers.ModelSerializer): @staticmethod def get_command_length(obj): - return len(obj.command_log.all()) + return len(obj.commands.all()) class CommandLogSerializer(serializers.ModelSerializer): diff --git a/apps/audits/templates/audits/command_log_list.html b/apps/audits/templates/audits/command_log_list.html index fffcbf223..bfbe943f1 100644 --- a/apps/audits/templates/audits/command_log_list.html +++ b/apps/audits/templates/audits/command_log_list.html @@ -3,10 +3,44 @@ {% load static %} {% load common_tags %} {% block content_left_head %} -{# {% trans "Create permission" %} #} + {% endblock %} +{% block table_search %} +
+{% endblock %} {% block table_container %}Username | IP | System user | +Proxy log | Datetime | Output | @@ -23,11 +58,12 @@ {% for command in command_list %}|||
---|---|---|---|---|---|---|---|---|
{{ command.command_no }} | +{{ command.id }} | {{ command.command }} | {{ command.proxy_log.username }} | {{ command.proxy_log.ip }} | {{ command.proxy_log.system_user }} | +{{ command.proxy_log.id}} | {{ command.datetime }} | {{ command.output_decode |safe }} | {% trans 'ID' %} | @@ -22,8 +71,8 @@{{ proxy_log.username }} | {{ proxy_log.ip }} | -{{ proxy_log.system_user.name }} | -{{ proxy_log.command.count }} | +{{ proxy_log.system_user }} | +{{ proxy_log.commands.all|length}} | {% if proxy_log.was_failed %} @@ -33,25 +82,33 @@ | {% if proxy_log.is_finished %} - - {% else %} + {% else %} + {% endif %} | {{ proxy_log.date_start }} | -{{ proxy_log.date_finished }} | +{{ proxy_log.date_finished|timeuntil:proxy_log.date_start }} | {% endfor %} {% endblock %} {% block custom_foot_js %} + {% endblock %} diff --git a/apps/audits/views.py b/apps/audits/views.py index bd1c9bf74..c4cfdafaf 100644 --- a/apps/audits/views.py +++ b/apps/audits/views.py @@ -1,25 +1,66 @@ # ~*~ coding: utf-8 ~*~ # +import datetime from django.views.generic import ListView, UpdateView, DeleteView, DetailView, TemplateView from django.views.generic.edit import SingleObjectMixin from django.utils.translation import ugettext as _ +from django.utils import timezone from django.urls import reverse_lazy from django.conf import settings +from django.db.models import Q from .models import ProxyLog, CommandLog from .utils import AdminUserRequiredMixin +from .hands import User, Asset, SystemUser -class ProxyLogListView(ListView): +class ProxyLogListView(AdminUserRequiredMixin, ListView): model = ProxyLog template_name = 'audits/proxy_log_list.html' context_object_name = 'proxy_log_list' + def get_queryset(self): + self.queryset = super(ProxyLogListView, self).get_queryset() + self.keyword = keyword = self.request.GET.get('keyword', '') + self.username = username = self.request.GET.get('username', '') + self.ip = ip = self.request.GET.get('ip', '') + self.date_from_s = date_from_s = \ + self.request.GET.get('date_from', '%s' % (datetime.datetime.now()-datetime.timedelta(7)).strftime('%m/%d/%Y')) + self.date_to_s = date_to_s = self.request.GET.get('date_to', '%s' % datetime.datetime.now().strftime('%m/%d/%Y')) + + if date_from_s: + date_from = timezone.datetime.strptime(date_from_s, '%m/%d/%Y') + self.queryset = self.queryset.filter(date_start__gt=date_from) + + if date_to_s: + date_to = timezone.datetime.strptime(date_to_s + ' 23:59:59', '%m/%d/%Y %H:%M:%S') + self.queryset = self.queryset.filter(date_start__lt=date_to) + if username: + self.queryset = self.queryset.filter(username=username) + if ip: + self.queryset = self.queryset.filter(ip=ip) + if keyword: + self.queryset = self.queryset.filter(Q(username__contains=keyword) | + Q(name__icontains=keyword) | + Q(hostname__icontains=keyword) | + Q(ip__icontains=keyword) | + Q(system_user__icontains=keyword)).distinct() + return self.queryset + def get_context_data(self, **kwargs): - context = super(ProxyLogListView, self).get_context_data(**kwargs) - context.update({'app': _('Audits'), 'action': _('Proxy log list')}) - return context + context = { + 'app': _('Audits'), + 'action': _('Proxy log list'), + 'user_list': User.objects.all(), + 'asset_list': Asset.objects.all(), + 'system_user_list': SystemUser.objects.all(), + 'keyword': self.keyword, + 'date_from': self.date_from_s, + 'date_to': self.date_to_s, + } + kwargs.update(context) + return super(ProxyLogListView, self).get_context_data(**kwargs) class ProxyLogDetailView(AdminUserRequiredMixin, SingleObjectMixin, ListView): @@ -31,7 +72,7 @@ class ProxyLogDetailView(AdminUserRequiredMixin, SingleObjectMixin, ListView): return super(ProxyLogDetailView, self).get(request, *args, **kwargs) def get_queryset(self): - return list(self.object.command_log.all()) + return list(self.object.commands.all()) def get_context_data(self, **kwargs): context = { @@ -74,8 +115,11 @@ class CommandLogListView(AdminUserRequiredMixin, ListView): def get_context_data(self, **kwargs): context = { - 'app': 'Audits', - 'action': 'Command log list' + 'app': _('Audits'), + 'action': _('Command log list'), + 'user_list': User.objects.all(), + 'asset_list': Asset.objects.all(), + 'system_user_list': SystemUser.objects.all(), } kwargs.update(context) return super(CommandLogListView, self).get_context_data(**kwargs) diff --git a/apps/perms/templates/perms/asset_permission_create_update.html b/apps/perms/templates/perms/asset_permission_create_update.html index 15325f6f1..8d7c10924 100644 --- a/apps/perms/templates/perms/asset_permission_create_update.html +++ b/apps/perms/templates/perms/asset_permission_create_update.html @@ -76,7 +76,7 @@ {% endblock %} {% block custom_foot_js %} - + + +