# -*- coding: utf-8 -*- # from django.views.generic import ListView, View from django.conf import settings from django.utils.translation import ugettext as _ from django.http import HttpResponse from django.template import loader import time from common.mixins import DatetimeSearchMixin from common.permissions import PermissionsMixin, IsOrgAdmin, IsAuditor from ..models import Command from .. import utils from ..backends import get_multi_command_storage __all__ = ['CommandListView', 'CommandExportView'] common_storage = get_multi_command_storage() class CommandListView(DatetimeSearchMixin, PermissionsMixin, ListView): model = Command template_name = "terminal/command_list.html" context_object_name = 'command_list' paginate_by = settings.DISPLAY_PER_PAGE command = user = asset = system_user = "" date_from = date_to = None permission_classes = [IsOrgAdmin | IsAuditor] def get_queryset(self): self.command = self.request.GET.get('command', '') self.user = self.request.GET.get("user", '') self.asset = self.request.GET.get('asset', '') self.system_user = self.request.GET.get('system_user', '') filter_kwargs = dict() filter_kwargs['date_from'] = self.date_from filter_kwargs['date_to'] = self.date_to if self.user: filter_kwargs['user'] = self.user if self.asset: filter_kwargs['asset'] = self.asset if self.system_user: filter_kwargs['system_user'] = self.system_user if self.command: filter_kwargs['input'] = self.command queryset = common_storage.filter(**filter_kwargs) return queryset def get_context_data(self, **kwargs): context = { 'app': _('Sessions'), 'action': _('Command list'), 'user_list': utils.get_session_user_list(), 'asset_list': utils.get_session_asset_list(), 'system_user_list': utils.get_session_system_user_list(), 'command': self.command, 'date_from': self.date_from, 'date_to': self.date_to, 'user': self.user, 'asset': self.asset, 'system_user': self.system_user, } kwargs.update(context) return super().get_context_data(**kwargs) class CommandExportView(DatetimeSearchMixin, PermissionsMixin, View): model = Command command = user = asset = system_user = action = '' date_from = date_to = None permission_classes = [IsOrgAdmin | IsAuditor] def get(self, request, *args, **kwargs): queryset = self.get_queryset() template = 'terminal/command_report.html' context = { 'queryset': queryset, 'total_count': len(queryset), 'now': time.time(), } content = loader.render_to_string(template, context, request) content_type = 'application/octet-stream' response = HttpResponse(content, content_type) filename = 'command-report-{}.html'.format(int(time.time())) response['Content-Disposition'] = 'attachment; filename="%s"' % filename return response def get_queryset(self): self.get_date_range() self.action = self.request.GET.get('action', '') self.command = self.request.GET.get('command', '') self.user = self.request.GET.get("user", '') self.asset = self.request.GET.get('asset', '') self.system_user = self.request.GET.get('system_user', '') filter_kwargs = dict() filter_kwargs['date_from'] = self.date_from filter_kwargs['date_to'] = self.date_to if self.user: filter_kwargs['user'] = self.user if self.asset: filter_kwargs['asset'] = self.asset if self.system_user: filter_kwargs['system_user'] = self.system_user if self.command: filter_kwargs['input'] = self.command queryset = common_storage.filter(**filter_kwargs) return queryset