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