mirror of https://github.com/jumpserver/jumpserver
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
2.6 KiB
75 lines
2.6 KiB
from rest_framework.response import Response |
|
from rest_framework import status |
|
from django.utils import translation |
|
from django.utils.translation import gettext_noop |
|
|
|
from audits.const import ActionChoices |
|
from common.views.mixins import RecordViewLogMixin |
|
from common.utils import i18n_fmt |
|
|
|
|
|
class AccountRecordViewLogMixin(RecordViewLogMixin): |
|
get_object: callable |
|
get_queryset: callable |
|
|
|
@staticmethod |
|
def _filter_params(params): |
|
new_params = {} |
|
need_pop_params = ('format', 'order') |
|
for key, value in params.items(): |
|
if key in need_pop_params: |
|
continue |
|
if isinstance(value, list): |
|
value = list(filter(None, value)) |
|
if value: |
|
new_params[key] = value |
|
return new_params |
|
|
|
def get_resource_display(self, request): |
|
query_params = dict(request.query_params) |
|
params = self._filter_params(query_params) |
|
|
|
spm_filter = params.pop("spm", None) |
|
|
|
if not params and not spm_filter: |
|
display_message = gettext_noop("Export all") |
|
elif spm_filter: |
|
display_message = gettext_noop("Export only selected items") |
|
else: |
|
query = ",".join( |
|
["%s=%s" % (key, value) for key, value in params.items()] |
|
) |
|
display_message = i18n_fmt(gettext_noop("Export filtered: %s"), query) |
|
return display_message |
|
|
|
@property |
|
def detail_msg(self): |
|
return i18n_fmt( |
|
gettext_noop('User %s view/export secret'), self.request.user |
|
) |
|
|
|
def list(self, request, *args, **kwargs): |
|
list_func = getattr(super(), 'list') |
|
if not callable(list_func): |
|
return Response(status=status.HTTP_405_METHOD_NOT_ALLOWED) |
|
response = list_func(request, *args, **kwargs) |
|
with translation.override('en'): |
|
resource_display = self.get_resource_display(request) |
|
ids = [q.id for q in self.get_queryset()] |
|
self.record_logs( |
|
ids, ActionChoices.view, self.detail_msg, resource_display=resource_display |
|
) |
|
return response |
|
|
|
def retrieve(self, request, *args, **kwargs): |
|
retrieve_func = getattr(super(), 'retrieve') |
|
if not callable(retrieve_func): |
|
return Response(status=status.HTTP_405_METHOD_NOT_ALLOWED) |
|
response = retrieve_func(request, *args, **kwargs) |
|
with translation.override('en'): |
|
resource = self.get_object() |
|
self.record_logs( |
|
[resource.id], ActionChoices.view, self.detail_msg, resource=resource |
|
) |
|
return response |
|
|
|
|