mirror of https://github.com/jumpserver/jumpserver
				
				
				
			perf: change account filter by asset
							parent
							
								
									2aace05099
								
							
						
					
					
						commit
						e2b8fd0d40
					
				| 
						 | 
				
			
			@ -46,6 +46,16 @@ class AccountViewSet(OrgBulkModelViewSet):
 | 
			
		|||
    }
 | 
			
		||||
    export_as_zip = True
 | 
			
		||||
 | 
			
		||||
    def get_queryset(self):
 | 
			
		||||
        queryset = super().get_queryset()
 | 
			
		||||
        asset_id = self.request.query_params.get('asset') or self.request.query_params.get('asset_id')
 | 
			
		||||
        if not asset_id:
 | 
			
		||||
            return queryset
 | 
			
		||||
 | 
			
		||||
        asset = get_object_or_404(Asset, pk=asset_id)
 | 
			
		||||
        queryset = asset.all_accounts.all()
 | 
			
		||||
        return queryset
 | 
			
		||||
 | 
			
		||||
    @action(methods=['get'], detail=False, url_path='su-from-accounts')
 | 
			
		||||
    def su_from_accounts(self, request, *args, **kwargs):
 | 
			
		||||
        account_id = request.query_params.get('account')
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -65,7 +65,6 @@ class AccountFilterSet(UUIDFilterMixin, BaseFilterSet):
 | 
			
		|||
    address = drf_filters.CharFilter(field_name="asset__address", lookup_expr="exact")
 | 
			
		||||
    asset_name = drf_filters.CharFilter(field_name="asset__name", lookup_expr="exact")
 | 
			
		||||
    asset_id = drf_filters.CharFilter(field_name="asset", method="filter_uuid")
 | 
			
		||||
    asset = drf_filters.CharFilter(field_name="asset", method="filter_uuid")
 | 
			
		||||
    assets = drf_filters.CharFilter(field_name="asset_id", method="filter_uuid")
 | 
			
		||||
    has_secret = drf_filters.BooleanFilter(method="filter_has_secret")
 | 
			
		||||
    platform = drf_filters.CharFilter(
 | 
			
		||||
| 
						 | 
				
			
			@ -151,8 +150,9 @@ class AccountFilterSet(UUIDFilterMixin, BaseFilterSet):
 | 
			
		|||
            kwargs.update({"date_change_secret__gt": date})
 | 
			
		||||
 | 
			
		||||
        if name == "latest_secret_change_failed":
 | 
			
		||||
            queryset = queryset.filter(date_change_secret__gt=date).exclude(
 | 
			
		||||
                change_secret_status=ChangeSecretRecordStatusChoice.success
 | 
			
		||||
            queryset = (
 | 
			
		||||
                queryset.filter(date_change_secret__gt=date)
 | 
			
		||||
                .exclude(change_secret_status=ChangeSecretRecordStatusChoice.success)
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
        if kwargs:
 | 
			
		||||
| 
						 | 
				
			
			@ -162,8 +162,8 @@ class AccountFilterSet(UUIDFilterMixin, BaseFilterSet):
 | 
			
		|||
    class Meta:
 | 
			
		||||
        model = Account
 | 
			
		||||
        fields = [
 | 
			
		||||
            "id", "asset", "source_id", "secret_type", "category",
 | 
			
		||||
            "type", "privileged", "secret_reset", "connectivity", 'is_active'
 | 
			
		||||
            "id", "source_id", "secret_type", "category", "type",
 | 
			
		||||
            "privileged", "secret_reset", "connectivity", "is_active"
 | 
			
		||||
        ]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,6 @@ from rest_framework.decorators import action
 | 
			
		|||
from rest_framework.response import Response
 | 
			
		||||
from rest_framework.status import HTTP_200_OK
 | 
			
		||||
 | 
			
		||||
from accounts.filters import AccountFilterSet
 | 
			
		||||
from accounts.serializers import AccountSerializer
 | 
			
		||||
from accounts.tasks import push_accounts_to_assets_task, verify_accounts_connectivity_task
 | 
			
		||||
from assets import serializers
 | 
			
		||||
| 
						 | 
				
			
			@ -177,24 +176,6 @@ class AssetViewSet(SuggestionMixin, BaseAssetViewSet):
 | 
			
		|||
            gateways = asset.domain.gateways
 | 
			
		||||
        return self.get_paginated_response_from_queryset(gateways)
 | 
			
		||||
 | 
			
		||||
    @action(methods=["GET"], detail=True, url_path="accounts")
 | 
			
		||||
    def accounts(self, *args, **kwargs):
 | 
			
		||||
        pk = self.kwargs.get("pk")
 | 
			
		||||
        asset = get_object_or_404(self.model, pk=pk)
 | 
			
		||||
        queryset = asset.all_accounts.all()
 | 
			
		||||
 | 
			
		||||
        filterset = AccountFilterSet(
 | 
			
		||||
            data=self.request.query_params,
 | 
			
		||||
            queryset=queryset,
 | 
			
		||||
            request=self.request,
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        if not filterset.is_valid():
 | 
			
		||||
            return Response(filterset.errors, status=status.HTTP_400_BAD_REQUEST)
 | 
			
		||||
 | 
			
		||||
        queryset = filterset.qs
 | 
			
		||||
        return self.get_paginated_response_from_queryset(queryset)
 | 
			
		||||
 | 
			
		||||
    @action(methods=['post'], detail=False, url_path='sync-platform-protocols')
 | 
			
		||||
    def sync_platform_protocols(self, request, *args, **kwargs):
 | 
			
		||||
        platform_id = request.data.get('platform_id')
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,10 +15,13 @@ class DirectoryTypes(BaseType):
 | 
			
		|||
    def _get_base_constrains(cls) -> dict:
 | 
			
		||||
        return {
 | 
			
		||||
            '*': {
 | 
			
		||||
                'charset_enabled': False,
 | 
			
		||||
                'charset_enabled': True,
 | 
			
		||||
                'domain_enabled': True,
 | 
			
		||||
                'ds_enabled': False,
 | 
			
		||||
                'su_enabled': True,
 | 
			
		||||
            },
 | 
			
		||||
            cls.WINDOWS_AD: {
 | 
			
		||||
                'su_enabled': False,
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,7 +14,7 @@ def add_ds_platforms(apps, schema_editor):
 | 
			
		|||
        "created_by": "system",
 | 
			
		||||
        "updated_by": "system",
 | 
			
		||||
        "comment": "",
 | 
			
		||||
        "name": "Windows active directory",
 | 
			
		||||
        "name": "WindowsActiveDirectory",
 | 
			
		||||
        "category": "ds",
 | 
			
		||||
        "type": "windows_ad",
 | 
			
		||||
        "meta": {},
 | 
			
		||||
| 
						 | 
				
			
			@ -115,19 +115,16 @@ def add_ds_platforms(apps, schema_editor):
 | 
			
		|||
        "category": "ds",
 | 
			
		||||
        "type": "general",
 | 
			
		||||
        "meta": {
 | 
			
		||||
 | 
			
		||||
        },
 | 
			
		||||
        "internal": true,
 | 
			
		||||
        "domain_enabled": false,
 | 
			
		||||
        "su_enabled": false,
 | 
			
		||||
        "su_method": null,
 | 
			
		||||
        "custom_fields": [
 | 
			
		||||
 | 
			
		||||
        ],
 | 
			
		||||
        "automation": {
 | 
			
		||||
            "ansible_enabled": false,
 | 
			
		||||
            "ansible_config": {
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "protocols": [
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -220,6 +220,11 @@ class PlatformSerializer(ResourceLabelsMixin, CommonSerializerMixin, WritableNes
 | 
			
		|||
    def set_initial_value(self):
 | 
			
		||||
        if not hasattr(self, 'initial_data'):
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        name = self.initial_data.get('name')
 | 
			
		||||
        if ' ' in name:
 | 
			
		||||
            self.initial_data['name'] = name.replace(' ', '-')
 | 
			
		||||
 | 
			
		||||
        if self.instance:
 | 
			
		||||
            return
 | 
			
		||||
        if not self.initial_data.get('automation'):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue