# ~*~ coding: utf-8 ~*~ # from __future__ import absolute_import, unicode_literals from rest_framework import generics, viewsets from rest_framework_bulk import BulkModelViewSet from audits.backends import command_store, record_store from audits.backends.command.serializers import CommandLogSerializer from audits.backends.record.serializers import RecordSerializer from . import models, serializers from .hands import IsSuperUserOrAppUser, IsAppUser class ProxyLogReceiveView(generics.CreateAPIView): queryset = models.ProxyLog.objects.all() serializer_class = serializers.ProxyLogSerializer permission_classes = (IsAppUser,) def get_serializer(self, *args, **kwargs): kwargs['data']['terminal'] = self.request.user.terminal.name return super(ProxyLogReceiveView, self).get_serializer(*args, **kwargs) class ProxyLogViewSet(viewsets.ModelViewSet): """User proxy to backend server need call this api. params: { "username": "", "name": "", "hostname": "", "ip": "", "terminal": "", "login_type": "", "system_user": "", "was_failed": "", "date_start": "" } """ queryset = models.ProxyLog.objects.all() serializer_class = serializers.ProxyLogSerializer permission_classes = (IsSuperUserOrAppUser,) class CommandLogViewSet(BulkModelViewSet): """接受app发送来的command log, 格式如下 { "proxy_log_id": 23, "user": "admin", "asset": "localhost", "system_user": "web", "command_no": 1, "command": "whoami", "output": "d2hvbWFp", # base64.b64encode(s) "timestamp": 1485238673.0 } """ queryset = command_store.all() serializer_class = CommandLogSerializer permission_classes = (IsSuperUserOrAppUser,) class RecordLogViewSet(BulkModelViewSet): """接受app发送来的record log, 格式如下 { "proxy_log_id": 23, "output": "d2hvbWFp", # base64.b64encode(s) "timestamp": 1485238673.0 } """ serializer_class = RecordSerializer permission_classes = (IsSuperUserOrAppUser,) def get_queryset(self): filter_kwargs = {} proxy_log_id = self.request.query_params.get('proxy_log_id') data_from_ts = self.request.query_params.get('date_from_ts') if proxy_log_id: filter_kwargs['proxy_log_id'] = proxy_log_id if data_from_ts: filter_kwargs['date_from_ts'] = data_from_ts if filter_kwargs: return record_store.filter(**filter_kwargs) else: return record_store.all()