mirror of https://github.com/jumpserver/jumpserver
fix: Session 过滤支持 Terminal Name 和 ID 字段
parent
757702b99d
commit
9a39aca0f1
|
@ -1845,17 +1845,15 @@ msgstr "アクティブ"
|
||||||
|
|
||||||
#: audits/models.py:110
|
#: audits/models.py:110
|
||||||
msgid "Detail"
|
msgid "Detail"
|
||||||
msgstr ""
|
msgstr "詳細"
|
||||||
|
|
||||||
#: audits/models.py:112
|
#: audits/models.py:112
|
||||||
#, fuzzy
|
|
||||||
#| msgid "Terminal ID"
|
|
||||||
msgid "Detail ID"
|
msgid "Detail ID"
|
||||||
msgstr "ターミナル ID"
|
msgstr "詳細 ID"
|
||||||
|
|
||||||
#: audits/models.py:116
|
#: audits/models.py:116
|
||||||
msgid "Activity log"
|
msgid "Activity log"
|
||||||
msgstr ""
|
msgstr "活動記録"
|
||||||
|
|
||||||
#: audits/models.py:128
|
#: audits/models.py:128
|
||||||
msgid "Change by"
|
msgid "Change by"
|
||||||
|
|
|
@ -1833,13 +1833,11 @@ msgstr "激活中"
|
||||||
|
|
||||||
#: audits/models.py:110
|
#: audits/models.py:110
|
||||||
msgid "Detail"
|
msgid "Detail"
|
||||||
msgstr ""
|
msgstr "详情"
|
||||||
|
|
||||||
#: audits/models.py:112
|
#: audits/models.py:112
|
||||||
#, fuzzy
|
|
||||||
#| msgid "Terminal ID"
|
|
||||||
msgid "Detail ID"
|
msgid "Detail ID"
|
||||||
msgstr "终端 ID"
|
msgstr "详情 ID"
|
||||||
|
|
||||||
#: audits/models.py:116
|
#: audits/models.py:116
|
||||||
msgid "Activity log"
|
msgid "Activity log"
|
||||||
|
|
|
@ -2,24 +2,25 @@
|
||||||
#
|
#
|
||||||
import os
|
import os
|
||||||
import tarfile
|
import tarfile
|
||||||
|
|
||||||
from django.core.files.storage import default_storage
|
from django.core.files.storage import default_storage
|
||||||
from django.db.models import F
|
from django.db.models import F
|
||||||
from django.http import FileResponse
|
from django.http import FileResponse
|
||||||
from django.shortcuts import get_object_or_404, reverse
|
from django.shortcuts import get_object_or_404, reverse
|
||||||
from django.utils.encoding import escape_uri_path
|
from django.utils.encoding import escape_uri_path
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
|
from django_filters import rest_framework as filters
|
||||||
from rest_framework import generics
|
from rest_framework import generics
|
||||||
from rest_framework import viewsets, views
|
from rest_framework import viewsets, views
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
from rest_framework.permissions import IsAuthenticated
|
from rest_framework.permissions import IsAuthenticated
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
|
|
||||||
|
from common.drf.filters import BaseFilterSet
|
||||||
from common.const.http import GET
|
from common.const.http import GET
|
||||||
from common.drf.filters import DatetimeRangeFilter
|
from common.drf.filters import DatetimeRangeFilter
|
||||||
from common.drf.renders import PassthroughRenderer
|
from common.drf.renders import PassthroughRenderer
|
||||||
from common.api import AsyncApiMixin
|
from common.api import AsyncApiMixin
|
||||||
from common.utils import data_to_json
|
from common.utils import data_to_json, is_uuid
|
||||||
from common.utils import get_logger, get_object_or_none
|
from common.utils import get_logger, get_object_or_none
|
||||||
from orgs.mixins.api import OrgBulkModelViewSet
|
from orgs.mixins.api import OrgBulkModelViewSet
|
||||||
from orgs.utils import tmp_to_root_org, tmp_to_org
|
from orgs.utils import tmp_to_root_org, tmp_to_org
|
||||||
|
@ -49,6 +50,24 @@ class MySessionAPIView(generics.ListAPIView):
|
||||||
return qs
|
return qs
|
||||||
|
|
||||||
|
|
||||||
|
class SessionFilterSet(BaseFilterSet):
|
||||||
|
terminal = filters.CharFilter(method='filter_terminal')
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = Session
|
||||||
|
fields = [
|
||||||
|
"user", "asset", "account", "remote_addr",
|
||||||
|
"protocol", "is_finished", 'login_from', 'terminal'
|
||||||
|
]
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def filter_terminal(queryset, name, value):
|
||||||
|
if is_uuid(value):
|
||||||
|
return queryset.filter(terminal__id=value)
|
||||||
|
else:
|
||||||
|
return queryset.filter(terminal__name=value)
|
||||||
|
|
||||||
|
|
||||||
class SessionViewSet(OrgBulkModelViewSet):
|
class SessionViewSet(OrgBulkModelViewSet):
|
||||||
model = Session
|
model = Session
|
||||||
serializer_classes = {
|
serializer_classes = {
|
||||||
|
@ -59,7 +78,7 @@ class SessionViewSet(OrgBulkModelViewSet):
|
||||||
"user", "asset", "account", "remote_addr",
|
"user", "asset", "account", "remote_addr",
|
||||||
"protocol", "is_finished", 'login_from',
|
"protocol", "is_finished", 'login_from',
|
||||||
]
|
]
|
||||||
filterset_fields = search_fields + ['terminal']
|
filterset_class = SessionFilterSet
|
||||||
date_range_filter_fields = [
|
date_range_filter_fields = [
|
||||||
('date_start', ('date_from', 'date_to'))
|
('date_start', ('date_from', 'date_to'))
|
||||||
]
|
]
|
||||||
|
|
|
@ -49,7 +49,7 @@ class SessionSerializer(BulkOrgResourceModelSerializer):
|
||||||
'is_success': {'label': _('Is success')},
|
'is_success': {'label': _('Is success')},
|
||||||
'can_replay': {'label': _('Can replay')},
|
'can_replay': {'label': _('Can replay')},
|
||||||
'can_join': {'label': _('Can join')},
|
'can_join': {'label': _('Can join')},
|
||||||
'terminal': {'label': _('Terminal ID')},
|
'terminal': {'label': _('Terminal')},
|
||||||
'is_finished': {'label': _('Is finished')},
|
'is_finished': {'label': _('Is finished')},
|
||||||
'can_terminate': {'label': _('Can terminate')},
|
'can_terminate': {'label': _('Can terminate')},
|
||||||
'terminal_display': {'label': _('Terminal display')},
|
'terminal_display': {'label': _('Terminal display')},
|
||||||
|
|
Loading…
Reference in New Issue