mirror of https://github.com/jumpserver/jumpserver
parent
9cc6d6a9af
commit
0778a39894
|
@ -29,6 +29,7 @@ from terminal.models import default_storage
|
||||||
from users.models import User
|
from users.models import User
|
||||||
from .backends import TYPE_ENGINE_MAPPING
|
from .backends import TYPE_ENGINE_MAPPING
|
||||||
from .const import ActivityChoices
|
from .const import ActivityChoices
|
||||||
|
from .filters import UserSessionFilterSet
|
||||||
from .models import (
|
from .models import (
|
||||||
FTPLog, UserLoginLog, OperateLog, PasswordChangeLog,
|
FTPLog, UserLoginLog, OperateLog, PasswordChangeLog,
|
||||||
ActivityLog, JobLog, UserSession
|
ActivityLog, JobLog, UserSession
|
||||||
|
@ -255,7 +256,7 @@ class PasswordChangeLogViewSet(OrgReadonlyModelViewSet):
|
||||||
class UserSessionViewSet(CommonApiMixin, viewsets.ModelViewSet):
|
class UserSessionViewSet(CommonApiMixin, viewsets.ModelViewSet):
|
||||||
http_method_names = ('get', 'post', 'head', 'options', 'trace')
|
http_method_names = ('get', 'post', 'head', 'options', 'trace')
|
||||||
serializer_class = UserSessionSerializer
|
serializer_class = UserSessionSerializer
|
||||||
filterset_fields = ['id', 'ip', 'city', 'type']
|
filterset_class = UserSessionFilterSet
|
||||||
search_fields = ['id', 'ip', 'city']
|
search_fields = ['id', 'ip', 'city']
|
||||||
rbac_perms = {
|
rbac_perms = {
|
||||||
'offline': ['audits.offline_usersession']
|
'offline': ['audits.offline_usersession']
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
from django.db.models import F, Value
|
from django.core.cache import cache
|
||||||
from django.db.models.functions import Concat
|
from django_filters import rest_framework as drf_filters
|
||||||
from django_filters.rest_framework import CharFilter
|
|
||||||
from rest_framework import filters
|
from rest_framework import filters
|
||||||
from rest_framework.compat import coreapi, coreschema
|
from rest_framework.compat import coreapi, coreschema
|
||||||
|
|
||||||
from orgs.utils import current_org
|
|
||||||
from common.drf.filters import BaseFilterSet
|
from common.drf.filters import BaseFilterSet
|
||||||
|
from notifications.ws import WS_SESSION_KEY
|
||||||
|
from orgs.utils import current_org
|
||||||
|
from .models import UserSession
|
||||||
|
|
||||||
__all__ = ['CurrentOrgMembersFilter']
|
__all__ = ['CurrentOrgMembersFilter']
|
||||||
|
|
||||||
|
@ -34,21 +35,21 @@ class CurrentOrgMembersFilter(filters.BaseFilterBackend):
|
||||||
queryset = queryset.filter(user__in=self._get_user_list())
|
queryset = queryset.filter(user__in=self._get_user_list())
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
#
|
|
||||||
# class CommandExecutionFilter(BaseFilterSet):
|
class UserSessionFilterSet(BaseFilterSet):
|
||||||
# hostname_ip = CharFilter(method='filter_hostname_ip')
|
is_active = drf_filters.BooleanFilter(method='filter_is_active')
|
||||||
#
|
|
||||||
# class Meta:
|
@staticmethod
|
||||||
# model = CommandExecution.hosts.through
|
def filter_is_active(queryset, name, is_active):
|
||||||
# fields = (
|
redis_client = cache.client.get_client()
|
||||||
# 'id', 'asset', 'commandexecution', 'hostname_ip'
|
members = redis_client.smembers(WS_SESSION_KEY)
|
||||||
# )
|
members = [member.decode('utf-8') for member in members]
|
||||||
#
|
if is_active:
|
||||||
# def filter_hostname_ip(self, queryset, name, value):
|
queryset = queryset.filter(key__in=members)
|
||||||
# queryset = queryset.annotate(
|
else:
|
||||||
# hostname_ip=Concat(
|
queryset = queryset.exclude(key__in=members)
|
||||||
# F('asset__hostname'), Value('('),
|
return queryset
|
||||||
# F('asset__address'), Value(')')
|
|
||||||
# )
|
class Meta:
|
||||||
# ).filter(hostname_ip__icontains=value)
|
model = UserSession
|
||||||
# return queryset
|
fields = ['id', 'ip', 'city', 'type']
|
||||||
|
|
Loading…
Reference in New Issue