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.
76 lines
2.6 KiB
76 lines
2.6 KiB
1 year ago
|
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
|
||
|
|