mirror of https://github.com/jumpserver/jumpserver
Merge branch 'v3' of github.com:jumpserver/jumpserver into v3
commit
c9b8c087c7
|
@ -64,7 +64,7 @@ class LoginAssetACL(BaseACL, OrgModelMixin):
|
||||||
Q(assets__hostname_group__contains=asset.name) |
|
Q(assets__hostname_group__contains=asset.name) |
|
||||||
Q(assets__hostname_group__contains='*')
|
Q(assets__hostname_group__contains='*')
|
||||||
)
|
)
|
||||||
ids = [q.id for q in queryset if contains_ip(asset.ip, q.assets.get('ip_group', []))]
|
ids = [q.id for q in queryset if contains_ip(asset.address, q.assets.get('ip_group', []))]
|
||||||
queryset = cls.objects.filter(id__in=ids)
|
queryset = cls.objects.filter(id__in=ids)
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.generics import CreateAPIView
|
from rest_framework.generics import CreateAPIView, get_object_or_404
|
||||||
|
|
||||||
from orgs.mixins.api import OrgBulkModelViewSet
|
from orgs.mixins.api import OrgBulkModelViewSet
|
||||||
from rbac.permissions import RBACPermission
|
from rbac.permissions import RBACPermission
|
||||||
|
@ -26,7 +26,7 @@ class AccountViewSet(OrgBulkModelViewSet):
|
||||||
}
|
}
|
||||||
rbac_perms = {
|
rbac_perms = {
|
||||||
'verify': 'assets.test_account',
|
'verify': 'assets.test_account',
|
||||||
'partial_update': 'assets.change_assetaccountsecret',
|
'partial_update': 'assets.change_accountsecret',
|
||||||
}
|
}
|
||||||
|
|
||||||
@action(methods=['post'], detail=True, url_path='verify')
|
@action(methods=['post'], detail=True, url_path='verify')
|
||||||
|
@ -41,9 +41,10 @@ class AccountSecretsViewSet(RecordViewLogMixin, AccountViewSet):
|
||||||
因为可能要导出所有账号,所以单独建立了一个 viewset
|
因为可能要导出所有账号,所以单独建立了一个 viewset
|
||||||
"""
|
"""
|
||||||
serializer_classes = {
|
serializer_classes = {
|
||||||
'default': serializers.AccountSecretSerializer
|
'default': serializers.AccountSecretSerializer,
|
||||||
|
'histories': serializers.AccountHistorySerializer,
|
||||||
}
|
}
|
||||||
http_method_names = ['get']
|
http_method_names = ['get', 'options']
|
||||||
# Todo: 记得打开
|
# Todo: 记得打开
|
||||||
# permission_classes = [RBACPermission, UserConfirmation.require(ConfirmType.MFA)]
|
# permission_classes = [RBACPermission, UserConfirmation.require(ConfirmType.MFA)]
|
||||||
rbac_perms = {
|
rbac_perms = {
|
||||||
|
@ -52,12 +53,11 @@ class AccountSecretsViewSet(RecordViewLogMixin, AccountViewSet):
|
||||||
'histories': ['assets.view_accountsecret'],
|
'histories': ['assets.view_accountsecret'],
|
||||||
}
|
}
|
||||||
|
|
||||||
@action(methods=['get'], detail=True, url_path='histories', serializer_class=serializers.AccountHistorySerializer)
|
@action(methods=['get'], detail=True, url_path='histories')
|
||||||
def histories(self, request, *args, **kwargs):
|
def histories(self, request, *args, **kwargs):
|
||||||
account = self.get_object()
|
account = get_object_or_404(self.get_queryset(), **kwargs)
|
||||||
histories = account.history.all()
|
self.queryset = account.history.all()
|
||||||
serializer = serializers.AccountHistorySerializer(histories, many=True)
|
return super().list(request, *args, **kwargs)
|
||||||
return Response(serializer.data)
|
|
||||||
|
|
||||||
|
|
||||||
class AccountTaskCreateAPI(CreateAPIView):
|
class AccountTaskCreateAPI(CreateAPIView):
|
||||||
|
|
|
@ -39,8 +39,11 @@ class GatherAccountsFilter:
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def windows_filter(info):
|
def windows_filter(info):
|
||||||
# TODO
|
info = info[4:-2]
|
||||||
result = {}
|
result = {}
|
||||||
|
for i in info:
|
||||||
|
for username in i.split():
|
||||||
|
result[username] = {}
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def run(self, method_id_meta_mapper, info):
|
def run(self, method_id_meta_mapper, info):
|
||||||
|
|
|
@ -142,7 +142,7 @@ class IpInFilterBackend(filters.BaseFilterBackend):
|
||||||
if not ips:
|
if not ips:
|
||||||
return queryset
|
return queryset
|
||||||
ip_list = [i.strip() for i in ips.split(',')]
|
ip_list = [i.strip() for i in ips.split(',')]
|
||||||
queryset = queryset.filter(ip__in=ip_list)
|
queryset = queryset.filter(address__in=ip_list)
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
def get_schema_fields(self, view):
|
def get_schema_fields(self, view):
|
||||||
|
|
|
@ -113,7 +113,7 @@ class ConnectionTokenAssetSerializer(serializers.ModelSerializer):
|
||||||
""" Asset """
|
""" Asset """
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Asset
|
model = Asset
|
||||||
fields = ['id', 'name', 'ip', 'protocols', 'org_id']
|
fields = ['id', 'name', 'address', 'protocols', 'org_id']
|
||||||
|
|
||||||
|
|
||||||
class ConnectionTokenAccountSerializer(serializers.ModelSerializer):
|
class ConnectionTokenAccountSerializer(serializers.ModelSerializer):
|
||||||
|
|
|
@ -31,7 +31,7 @@ class CeleryTaskSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = CeleryTask
|
model = CeleryTask
|
||||||
fields = [
|
fields = [
|
||||||
'id', 'name', 'meta', 'publish_count', 'state', 'success_count', 'last_published_time',
|
'id', 'name', 'meta', 'state', 'last_published_time',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue