mirror of https://github.com/jumpserver/jumpserver
Merge remote-tracking branch 'origin/v3' into v3
# Conflicts: # apps/assets/api/platform.pypull/8873/head
commit
2ede152663
|
@ -1,5 +1,3 @@
|
||||||
from django.db.models import Q
|
|
||||||
from django.shortcuts import get_object_or_404
|
|
||||||
from django_filters import rest_framework as filters
|
from django_filters import rest_framework as filters
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
|
@ -7,52 +5,40 @@ from rest_framework.generics import CreateAPIView
|
||||||
|
|
||||||
from orgs.mixins.api import OrgBulkModelViewSet
|
from orgs.mixins.api import OrgBulkModelViewSet
|
||||||
from rbac.permissions import RBACPermission
|
from rbac.permissions import RBACPermission
|
||||||
from common.drf.filters import BaseFilterSet
|
from common.drf.filters import BaseFilterSet, UUIDInFilter
|
||||||
from common.mixins import RecordViewLogMixin
|
from common.mixins import RecordViewLogMixin
|
||||||
from common.permissions import UserConfirmation
|
from common.permissions import UserConfirmation
|
||||||
from authentication.const import ConfirmType
|
from authentication.const import ConfirmType
|
||||||
from ..tasks.account_connectivity import test_accounts_connectivity_manual
|
from ..tasks.account_connectivity import test_accounts_connectivity_manual
|
||||||
from ..models import Node, Account
|
from ..models import Account, Node
|
||||||
from .. import serializers
|
from .. import serializers
|
||||||
|
|
||||||
__all__ = ['AccountFilterSet', 'AccountViewSet', 'AccountSecretsViewSet', 'AccountTaskCreateAPI']
|
__all__ = ['AccountFilterSet', 'AccountViewSet', 'AccountSecretsViewSet', 'AccountTaskCreateAPI']
|
||||||
|
|
||||||
|
|
||||||
class AccountFilterSet(BaseFilterSet):
|
class AccountFilterSet(BaseFilterSet):
|
||||||
username = filters.CharFilter(method='do_nothing')
|
|
||||||
ip = filters.CharFilter(field_name='ip', lookup_expr='exact')
|
ip = filters.CharFilter(field_name='ip', lookup_expr='exact')
|
||||||
hostname = filters.CharFilter(field_name='name', lookup_expr='exact')
|
hostname = filters.CharFilter(field_name='name', lookup_expr='exact')
|
||||||
node = filters.CharFilter(method='do_nothing')
|
username = filters.CharFilter(field_name="username", lookup_expr='exact')
|
||||||
|
assets = UUIDInFilter(field_name='asset_id', lookup_expr='in')
|
||||||
|
nodes = UUIDInFilter(method='filter_nodes')
|
||||||
|
|
||||||
@property
|
def filter_nodes(self, queryset, name, value):
|
||||||
def qs(self):
|
nodes = Node.objects.filter(id__in=value)
|
||||||
qs = super().qs
|
if not nodes:
|
||||||
qs = self.filter_username(qs)
|
return queryset
|
||||||
qs = self.filter_node(qs)
|
|
||||||
qs = qs.distinct()
|
|
||||||
return qs
|
|
||||||
|
|
||||||
def filter_username(self, qs):
|
node_qs = Node.objects.none()
|
||||||
username = self.get_query_param('username')
|
for node in nodes:
|
||||||
if not username:
|
node_qs |= node.get_all_children(with_self=True)
|
||||||
return qs
|
node_ids = list(node_qs.values_list('id', flat=True))
|
||||||
qs = qs.filter(Q(username=username) | Q(systemuser__username=username)).distinct()
|
queryset = queryset.filter(asset__nodes__in=node_ids)
|
||||||
return qs
|
return queryset
|
||||||
|
|
||||||
def filter_node(self, qs):
|
|
||||||
node_id = self.get_query_param('node')
|
|
||||||
if not node_id:
|
|
||||||
return qs
|
|
||||||
node = get_object_or_404(Node, pk=node_id)
|
|
||||||
node_ids = node.get_all_children(with_self=True).values_list('id', flat=True)
|
|
||||||
node_ids = list(node_ids)
|
|
||||||
qs = qs.filter(asset__nodes__in=node_ids)
|
|
||||||
return qs
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Account
|
model = Account
|
||||||
fields = [
|
fields = [
|
||||||
'asset', 'id',
|
'asset', 'id'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
#
|
#
|
||||||
from rest_framework.viewsets import ModelViewSet
|
from rest_framework.viewsets import ModelViewSet
|
||||||
|
@ -309,5 +307,3 @@ class AssetPermUserGroupPermissionsListApi(BaseAssetPermUserOrUserGroupPermissio
|
||||||
user_group_id = self.kwargs.get('perm_user_group_id')
|
user_group_id = self.kwargs.get('perm_user_group_id')
|
||||||
user_group = get_object_or_404(UserGroup, pk=user_group_id)
|
user_group = get_object_or_404(UserGroup, pk=user_group_id)
|
||||||
return user_group
|
return user_group
|
||||||
|
|
||||||
>>>>>>> origin
|
|
||||||
|
|
|
@ -85,7 +85,7 @@ class DatetimeRangeFilter(filters.BaseFilterBackend):
|
||||||
lookup = "__gte"
|
lookup = "__gte"
|
||||||
else:
|
else:
|
||||||
lookup = "__lte"
|
lookup = "__lte"
|
||||||
kwargs[attr+lookup] = value
|
kwargs[attr + lookup] = value
|
||||||
except ValidationError as e:
|
except ValidationError as e:
|
||||||
print(e)
|
print(e)
|
||||||
continue
|
continue
|
||||||
|
@ -171,4 +171,13 @@ def current_user_filter(user_field='user'):
|
||||||
class CurrentUserFilter(filters.BaseFilterBackend):
|
class CurrentUserFilter(filters.BaseFilterBackend):
|
||||||
def filter_queryset(self, request, queryset, view):
|
def filter_queryset(self, request, queryset, view):
|
||||||
return queryset.filter(**{user_field: request.user})
|
return queryset.filter(**{user_field: request.user})
|
||||||
|
|
||||||
return CurrentUserFilter
|
return CurrentUserFilter
|
||||||
|
|
||||||
|
|
||||||
|
class UUIDInFilter(drf_filters.BaseInFilter, drf_filters.UUIDFilter):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class NumberInFilter(drf_filters.BaseInFilter, drf_filters.NumberFilter):
|
||||||
|
pass
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:261eee68117787809a9bc6b2034846ee7b222677224f97055f7d7398d427b1d7
|
oid sha256:d7d4ace7d7ec976b0321bde41789f994f02e3ab6f034828cbfb7e675a313611f
|
||||||
size 255
|
size 131531
|
||||||
|
|
|
@ -1,6 +1,2 @@
|
||||||
from django_filters.rest_framework import filters
|
|
||||||
|
|
||||||
|
|
||||||
class UUIDInFilter(filters.BaseInFilter, filters.UUIDFilter):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue