mirror of https://github.com/jumpserver/jumpserver
				
				
				
			Merge branch 'dev' of http://github.com/jumpserver/jumpserver into pr@dev@perf_navicat_support_mongodb_ssl
						commit
						2e451574ee
					
				| 
						 | 
				
			
			@ -20,7 +20,6 @@ class AccountBackupPlanViewSet(OrgBulkModelViewSet):
 | 
			
		|||
    model = AccountBackupAutomation
 | 
			
		||||
    filter_fields = ('name',)
 | 
			
		||||
    search_fields = filter_fields
 | 
			
		||||
    ordering_fields = ('name',)
 | 
			
		||||
    ordering = ('name',)
 | 
			
		||||
    serializer_class = serializers.AccountBackupSerializer
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,7 +25,6 @@ class ChangeSecretAutomationViewSet(OrgBulkModelViewSet):
 | 
			
		|||
    model = ChangeSecretAutomation
 | 
			
		||||
    filter_fields = ('name', 'secret_type', 'secret_strategy')
 | 
			
		||||
    search_fields = filter_fields
 | 
			
		||||
    ordering_fields = ('name',)
 | 
			
		||||
    serializer_class = serializers.ChangeSecretAutomationSerializer
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,7 +15,6 @@ class GatherAccountsAutomationViewSet(OrgBulkModelViewSet):
 | 
			
		|||
    model = GatherAccountsAutomation
 | 
			
		||||
    filter_fields = ('name',)
 | 
			
		||||
    search_fields = filter_fields
 | 
			
		||||
    ordering_fields = ('name',)
 | 
			
		||||
    serializer_class = serializers.GatherAccountAutomationSerializer
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -22,7 +22,6 @@ class PushAccountAutomationViewSet(OrgBulkModelViewSet):
 | 
			
		|||
    model = PushAccountAutomation
 | 
			
		||||
    filter_fields = ('name', 'secret_type', 'secret_strategy')
 | 
			
		||||
    search_fields = filter_fields
 | 
			
		||||
    ordering_fields = ('name',)
 | 
			
		||||
    serializer_class = serializers.PushAccountAutomationSerializer
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -95,7 +95,6 @@ class AssetViewSet(SuggestionMixin, NodeFilterMixin, OrgBulkModelViewSet):
 | 
			
		|||
    model = Asset
 | 
			
		||||
    filterset_class = AssetFilterSet
 | 
			
		||||
    search_fields = ("name", "address")
 | 
			
		||||
    ordering_fields = ("name", "address", "connectivity")
 | 
			
		||||
    ordering = ("name", "connectivity")
 | 
			
		||||
    serializer_classes = (
 | 
			
		||||
        ("default", serializers.AssetSerializer),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,8 +3,9 @@ from django.utils.translation import ugettext as _
 | 
			
		|||
from django.views.generic.detail import SingleObjectMixin
 | 
			
		||||
from rest_framework.serializers import ValidationError
 | 
			
		||||
from rest_framework.views import APIView, Response
 | 
			
		||||
from common.utils import get_logger
 | 
			
		||||
 | 
			
		||||
from assets.tasks import test_gateways_connectivity_manual
 | 
			
		||||
from common.utils import get_logger
 | 
			
		||||
from orgs.mixins.api import OrgBulkModelViewSet
 | 
			
		||||
from .asset import HostViewSet
 | 
			
		||||
from .. import serializers
 | 
			
		||||
| 
						 | 
				
			
			@ -18,14 +19,12 @@ class DomainViewSet(OrgBulkModelViewSet):
 | 
			
		|||
    model = Domain
 | 
			
		||||
    filterset_fields = ("name",)
 | 
			
		||||
    search_fields = filterset_fields
 | 
			
		||||
    serializer_class = serializers.DomainSerializer
 | 
			
		||||
    ordering_fields = ('name',)
 | 
			
		||||
    ordering = ('name',)
 | 
			
		||||
 | 
			
		||||
    def get_serializer_class(self):
 | 
			
		||||
        if self.request.query_params.get('gateway'):
 | 
			
		||||
            return serializers.DomainWithGatewaySerializer
 | 
			
		||||
        return super().get_serializer_class()
 | 
			
		||||
        return serializers.DomainSerializer
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class GatewayViewSet(HostViewSet):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,38 @@
 | 
			
		|||
# Generated by Django 3.2.14 on 2023-02-20 02:51
 | 
			
		||||
 | 
			
		||||
from django.db import migrations, models
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Migration(migrations.Migration):
 | 
			
		||||
 | 
			
		||||
    dependencies = [
 | 
			
		||||
        ('assets', '0109_alter_asset_options'),
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    operations = [
 | 
			
		||||
        migrations.AddField(
 | 
			
		||||
            model_name='platform',
 | 
			
		||||
            name='created_by',
 | 
			
		||||
            field=models.CharField(blank=True, max_length=128, null=True, verbose_name='Created by'),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AddField(
 | 
			
		||||
            model_name='platform',
 | 
			
		||||
            name='date_created',
 | 
			
		||||
            field=models.DateTimeField(auto_now_add=True, null=True, verbose_name='Date created'),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AddField(
 | 
			
		||||
            model_name='platform',
 | 
			
		||||
            name='date_updated',
 | 
			
		||||
            field=models.DateTimeField(auto_now=True, verbose_name='Date updated'),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AddField(
 | 
			
		||||
            model_name='platform',
 | 
			
		||||
            name='updated_by',
 | 
			
		||||
            field=models.CharField(blank=True, max_length=128, null=True, verbose_name='Updated by'),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AlterField(
 | 
			
		||||
            model_name='platform',
 | 
			
		||||
            name='comment',
 | 
			
		||||
            field=models.TextField(blank=True, default='', verbose_name='Comment'),
 | 
			
		||||
        ),
 | 
			
		||||
    ]
 | 
			
		||||
| 
						 | 
				
			
			@ -4,6 +4,7 @@ from django.utils.translation import gettext_lazy as _
 | 
			
		|||
from assets.const import AllTypes
 | 
			
		||||
from assets.const import Protocol
 | 
			
		||||
from common.db.fields import JsonDictTextField
 | 
			
		||||
from common.db.models import JMSBaseModel
 | 
			
		||||
 | 
			
		||||
__all__ = ['Platform', 'PlatformProtocol', 'PlatformAutomation']
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -61,7 +62,7 @@ class PlatformAutomation(models.Model):
 | 
			
		|||
    )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Platform(models.Model):
 | 
			
		||||
class Platform(JMSBaseModel):
 | 
			
		||||
    """
 | 
			
		||||
    对资产提供 约束和默认值
 | 
			
		||||
    对资产进行抽象
 | 
			
		||||
| 
						 | 
				
			
			@ -71,12 +72,12 @@ class Platform(models.Model):
 | 
			
		|||
        utf8 = 'utf-8', 'UTF-8'
 | 
			
		||||
        gbk = 'gbk', 'GBK'
 | 
			
		||||
 | 
			
		||||
    id = models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')
 | 
			
		||||
    name = models.SlugField(verbose_name=_("Name"), unique=True, allow_unicode=True)
 | 
			
		||||
    category = models.CharField(default='host', max_length=32, verbose_name=_("Category"))
 | 
			
		||||
    type = models.CharField(max_length=32, default='linux', verbose_name=_("Type"))
 | 
			
		||||
    meta = JsonDictTextField(blank=True, null=True, verbose_name=_("Meta"))
 | 
			
		||||
    internal = models.BooleanField(default=False, verbose_name=_("Internal"))
 | 
			
		||||
    comment = models.TextField(blank=True, null=True, verbose_name=_("Comment"))
 | 
			
		||||
    # 资产有关的
 | 
			
		||||
    charset = models.CharField(
 | 
			
		||||
        default=CharsetChoices.utf8, choices=CharsetChoices.choices, max_length=8, verbose_name=_("Charset")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -106,12 +106,13 @@ class PlatformSerializer(WritableNestedModelSerializer):
 | 
			
		|||
        fields_small = fields_mini + [
 | 
			
		||||
            "category", "type", "charset",
 | 
			
		||||
        ]
 | 
			
		||||
        fields = fields_small + [
 | 
			
		||||
            "protocols",
 | 
			
		||||
            "domain_enabled", "su_enabled",
 | 
			
		||||
            "su_method", "automation",
 | 
			
		||||
            "comment",
 | 
			
		||||
        fields_other = [
 | 
			
		||||
            'date_created', 'date_updated', 'created_by', 'updated_by',
 | 
			
		||||
        ]
 | 
			
		||||
        fields = fields_small + [
 | 
			
		||||
            "protocols", "domain_enabled", "su_enabled",
 | 
			
		||||
            "su_method", "automation", "comment",
 | 
			
		||||
        ] + fields_other
 | 
			
		||||
        extra_kwargs = {
 | 
			
		||||
            "su_enabled": {"label": _('Su enabled')},
 | 
			
		||||
            "domain_enabled": {"label": _('Domain enabled')},
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,13 +1,14 @@
 | 
			
		|||
# -*- coding: utf-8 -*-
 | 
			
		||||
#
 | 
			
		||||
import logging
 | 
			
		||||
from itertools import chain
 | 
			
		||||
 | 
			
		||||
from django.db import models
 | 
			
		||||
from rest_framework.settings import api_settings
 | 
			
		||||
 | 
			
		||||
from common.drf.filters import IDSpmFilter, CustomFilter, IDInFilter
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
__all__ = ['ExtraFilterFieldsMixin']
 | 
			
		||||
__all__ = ['ExtraFilterFieldsMixin', 'OrderingFielderFieldsMixin']
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ExtraFilterFieldsMixin:
 | 
			
		||||
| 
						 | 
				
			
			@ -33,3 +34,55 @@ class ExtraFilterFieldsMixin:
 | 
			
		|||
        for backend in self.get_filter_backends():
 | 
			
		||||
            queryset = backend().filter_queryset(self.request, queryset, self)
 | 
			
		||||
        return queryset
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class OrderingFielderFieldsMixin:
 | 
			
		||||
    """
 | 
			
		||||
    额外的 api ordering
 | 
			
		||||
    """
 | 
			
		||||
    ordering_fields = None
 | 
			
		||||
    extra_ordering_fields = []
 | 
			
		||||
 | 
			
		||||
    def __init__(self, *args, **kwargs):
 | 
			
		||||
        super().__init__(*args, **kwargs)
 | 
			
		||||
        self.ordering_fields = self._get_ordering_fields()
 | 
			
		||||
 | 
			
		||||
    def _get_ordering_fields(self):
 | 
			
		||||
        if isinstance(self.__class__.ordering_fields, (list, tuple)):
 | 
			
		||||
            return self.__class__.ordering_fields
 | 
			
		||||
 | 
			
		||||
        try:
 | 
			
		||||
            valid_fields = self.get_valid_ordering_fields()
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            logging.debug('get_valid_ordering_fields error: %s' % e)
 | 
			
		||||
            valid_fields = []
 | 
			
		||||
 | 
			
		||||
        fields = list(chain(
 | 
			
		||||
            valid_fields,
 | 
			
		||||
            self.extra_ordering_fields
 | 
			
		||||
        ))
 | 
			
		||||
        return fields
 | 
			
		||||
 | 
			
		||||
    def get_valid_ordering_fields(self):
 | 
			
		||||
        if getattr(self, 'model', None):
 | 
			
		||||
            model = self.model
 | 
			
		||||
        elif getattr(self, 'queryset', None):
 | 
			
		||||
            model = self.queryset.model
 | 
			
		||||
        else:
 | 
			
		||||
            queryset = self.get_queryset()
 | 
			
		||||
            model = queryset.model
 | 
			
		||||
 | 
			
		||||
        if not model:
 | 
			
		||||
            return []
 | 
			
		||||
 | 
			
		||||
        excludes_fields = (
 | 
			
		||||
            models.UUIDField, models.Model, models.ForeignKey,
 | 
			
		||||
            models.FileField, models.JSONField, models.ManyToManyField,
 | 
			
		||||
            models.DurationField,
 | 
			
		||||
        )
 | 
			
		||||
        valid_fields = []
 | 
			
		||||
        for field in model._meta.fields:
 | 
			
		||||
            if isinstance(field, excludes_fields):
 | 
			
		||||
                continue
 | 
			
		||||
            valid_fields.append(field.name)
 | 
			
		||||
        return valid_fields
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,7 +7,7 @@ from django.db.models.signals import m2m_changed
 | 
			
		|||
from rest_framework.response import Response
 | 
			
		||||
 | 
			
		||||
from .action import RenderToJsonMixin
 | 
			
		||||
from .filter import ExtraFilterFieldsMixin
 | 
			
		||||
from .filter import ExtraFilterFieldsMixin, OrderingFielderFieldsMixin
 | 
			
		||||
from .serializer import SerializerMixin
 | 
			
		||||
 | 
			
		||||
__all__ = [
 | 
			
		||||
| 
						 | 
				
			
			@ -98,7 +98,6 @@ class QuerySetMixin:
 | 
			
		|||
        return queryset
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CommonApiMixin(SerializerMixin, ExtraFilterFieldsMixin,
 | 
			
		||||
                     QuerySetMixin, RenderToJsonMixin,
 | 
			
		||||
                     PaginatedResponseMixin):
 | 
			
		||||
class CommonApiMixin(SerializerMixin, ExtraFilterFieldsMixin, OrderingFielderFieldsMixin,
 | 
			
		||||
                     QuerySetMixin, RenderToJsonMixin, PaginatedResponseMixin):
 | 
			
		||||
    pass
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,18 +1,20 @@
 | 
			
		|||
# -*- coding: utf-8 -*-
 | 
			
		||||
#
 | 
			
		||||
from rest_framework import filters
 | 
			
		||||
from rest_framework.fields import DateTimeField
 | 
			
		||||
from rest_framework.serializers import ValidationError
 | 
			
		||||
from rest_framework.compat import coreapi, coreschema
 | 
			
		||||
import logging
 | 
			
		||||
 | 
			
		||||
from django.core.cache import cache
 | 
			
		||||
from django.core.exceptions import ImproperlyConfigured
 | 
			
		||||
from django_filters import rest_framework as drf_filters
 | 
			
		||||
import logging
 | 
			
		||||
from rest_framework import filters
 | 
			
		||||
from rest_framework.compat import coreapi, coreschema
 | 
			
		||||
from rest_framework.fields import DateTimeField
 | 
			
		||||
from rest_framework.serializers import ValidationError
 | 
			
		||||
 | 
			
		||||
from common import const
 | 
			
		||||
 | 
			
		||||
__all__ = [
 | 
			
		||||
    "DatetimeRangeFilter", "IDSpmFilter", 'IDInFilter', "CustomFilter",
 | 
			
		||||
    "DatetimeRangeFilter", "IDSpmFilter",
 | 
			
		||||
    'IDInFilter', "CustomFilter",
 | 
			
		||||
    "BaseFilterSet"
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,9 +1,9 @@
 | 
			
		|||
# ~*~ coding: utf-8 ~*~
 | 
			
		||||
from __future__ import unicode_literals
 | 
			
		||||
from rest_framework import serializers
 | 
			
		||||
from django.utils.translation import gettext_lazy as _
 | 
			
		||||
 | 
			
		||||
from django.utils.translation import gettext_lazy as _
 | 
			
		||||
from django_celery_beat.models import PeriodicTask
 | 
			
		||||
from rest_framework import serializers
 | 
			
		||||
 | 
			
		||||
__all__ = [
 | 
			
		||||
    'CeleryResultSerializer', 'CeleryTaskExecutionSerializer',
 | 
			
		||||
| 
						 | 
				
			
			@ -41,7 +41,7 @@ class CeleryTaskExecutionSerializer(serializers.ModelSerializer):
 | 
			
		|||
    class Meta:
 | 
			
		||||
        model = CeleryTaskExecution
 | 
			
		||||
        fields = [
 | 
			
		||||
            "id", "name", "args", "kwargs", "time_cost", "timedelta", "is_success", "is_finished", "date_published",
 | 
			
		||||
            "date_start",
 | 
			
		||||
            "date_finished"
 | 
			
		||||
            "id", "name", "args", "kwargs", "time_cost", "timedelta",
 | 
			
		||||
            "is_success", "is_finished", "date_published",
 | 
			
		||||
            "date_start", "date_finished"
 | 
			
		||||
        ]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,20 +1,20 @@
 | 
			
		|||
# -*- coding: utf-8 -*-
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
from django.utils.translation import ugettext as _
 | 
			
		||||
from django.conf import settings
 | 
			
		||||
from rest_framework_bulk import BulkModelViewSet
 | 
			
		||||
from rest_framework.generics import RetrieveAPIView
 | 
			
		||||
from django.utils.translation import ugettext as _
 | 
			
		||||
from rest_framework.exceptions import PermissionDenied
 | 
			
		||||
from rest_framework.generics import RetrieveAPIView
 | 
			
		||||
 | 
			
		||||
from common.utils import get_logger
 | 
			
		||||
from common.permissions import IsValidUser
 | 
			
		||||
from users.models import User, UserGroup
 | 
			
		||||
from assets.models import (
 | 
			
		||||
    Asset, Domain, Label, Node,
 | 
			
		||||
)
 | 
			
		||||
from perms.models import AssetPermission
 | 
			
		||||
from common.api import JMSBulkModelViewSet
 | 
			
		||||
from common.permissions import IsValidUser
 | 
			
		||||
from common.utils import get_logger
 | 
			
		||||
from orgs.utils import current_org, tmp_to_root_org
 | 
			
		||||
from perms.models import AssetPermission
 | 
			
		||||
from users.models import User, UserGroup
 | 
			
		||||
from .models import Organization
 | 
			
		||||
from .serializers import (
 | 
			
		||||
    OrgSerializer, CurrentOrgSerializer
 | 
			
		||||
| 
						 | 
				
			
			@ -29,12 +29,11 @@ org_related_models = [
 | 
			
		|||
]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class OrgViewSet(BulkModelViewSet):
 | 
			
		||||
class OrgViewSet(JMSBulkModelViewSet):
 | 
			
		||||
    filterset_fields = ('name',)
 | 
			
		||||
    search_fields = ('name', 'comment')
 | 
			
		||||
    queryset = Organization.objects.all()
 | 
			
		||||
    serializer_class = OrgSerializer
 | 
			
		||||
    ordering_fields = ('name',)
 | 
			
		||||
    ordering = ('name',)
 | 
			
		||||
 | 
			
		||||
    def get_serializer_class(self):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,5 +16,4 @@ class AssetPermissionViewSet(OrgBulkModelViewSet):
 | 
			
		|||
    serializer_class = serializers.AssetPermissionSerializer
 | 
			
		||||
    filterset_class = AssetPermissionFilter
 | 
			
		||||
    search_fields = ('name',)
 | 
			
		||||
    ordering_fields = ('name',)
 | 
			
		||||
    ordering = ('name',)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,19 +1,18 @@
 | 
			
		|||
import abc
 | 
			
		||||
 | 
			
		||||
from rest_framework.generics import ListAPIView
 | 
			
		||||
 | 
			
		||||
from assets.models import Asset, Node
 | 
			
		||||
from assets.api.asset.asset import AssetFilterSet
 | 
			
		||||
from assets.models import Asset, Node
 | 
			
		||||
from common.utils import get_logger, lazyproperty
 | 
			
		||||
from perms import serializers
 | 
			
		||||
from perms.pagination import AllPermedAssetPagination
 | 
			
		||||
from perms.pagination import NodePermedAssetPagination
 | 
			
		||||
from perms.utils import UserPermAssetUtil
 | 
			
		||||
from common.utils import get_logger, lazyproperty
 | 
			
		||||
 | 
			
		||||
from .mixin import (
 | 
			
		||||
    SelfOrPKUserMixin
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
__all__ = [
 | 
			
		||||
    'UserAllPermedAssetsApi',
 | 
			
		||||
    'UserDirectPermedAssetsApi',
 | 
			
		||||
| 
						 | 
				
			
			@ -26,8 +25,8 @@ logger = get_logger(__name__)
 | 
			
		|||
 | 
			
		||||
class BaseUserPermedAssetsApi(SelfOrPKUserMixin, ListAPIView):
 | 
			
		||||
    ordering = ('name',)
 | 
			
		||||
    ordering_fields = ("name", "address")
 | 
			
		||||
    search_fields = ('name', 'address', 'comment')
 | 
			
		||||
    ordering_fields = ("name", "address")
 | 
			
		||||
    filterset_class = AssetFilterSet
 | 
			
		||||
    serializer_class = serializers.AssetPermedSerializer
 | 
			
		||||
    only_fields = serializers.AssetPermedSerializer.Meta.only_fields
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,22 +1,23 @@
 | 
			
		|||
# -*- coding: utf-8 -*-
 | 
			
		||||
#
 | 
			
		||||
import logging
 | 
			
		||||
from rest_framework.views import APIView, Response
 | 
			
		||||
from rest_framework_bulk import BulkModelViewSet
 | 
			
		||||
 | 
			
		||||
from rest_framework import status
 | 
			
		||||
from rest_framework.permissions import IsAuthenticated
 | 
			
		||||
from rest_framework.views import APIView, Response
 | 
			
		||||
 | 
			
		||||
from common.api import JMSBulkModelViewSet
 | 
			
		||||
from common.utils import get_object_or_none
 | 
			
		||||
from orgs.utils import tmp_to_root_org
 | 
			
		||||
from terminal.models import Session, Task
 | 
			
		||||
from terminal import serializers
 | 
			
		||||
from terminal.models import Session, Task
 | 
			
		||||
from terminal.utils import is_session_approver
 | 
			
		||||
 | 
			
		||||
__all__ = ['TaskViewSet', 'KillSessionAPI', 'KillSessionForTicketAPI']
 | 
			
		||||
logger = logging.getLogger(__file__)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TaskViewSet(BulkModelViewSet):
 | 
			
		||||
class TaskViewSet(JMSBulkModelViewSet):
 | 
			
		||||
    queryset = Task.objects.all()
 | 
			
		||||
    serializer_class = serializers.TaskSerializer
 | 
			
		||||
    filterset_fields = ('is_finished',)
 | 
			
		||||
| 
						 | 
				
			
			@ -51,7 +52,7 @@ class KillSessionAPI(APIView):
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
class KillSessionForTicketAPI(APIView):
 | 
			
		||||
    permission_classes = (IsAuthenticated, )
 | 
			
		||||
    permission_classes = (IsAuthenticated,)
 | 
			
		||||
 | 
			
		||||
    def post(self, request, *args, **kwargs):
 | 
			
		||||
        session_ids = request.data
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -35,10 +35,6 @@ class TicketViewSet(CommonApiMixin, viewsets.ModelViewSet):
 | 
			
		|||
    search_fields = [
 | 
			
		||||
        'title', 'type', 'status'
 | 
			
		||||
    ]
 | 
			
		||||
    ordering_fields = (
 | 
			
		||||
        'title', 'status', 'state', 'action_display',
 | 
			
		||||
        'date_created', 'serial_num',
 | 
			
		||||
    )
 | 
			
		||||
    ordering = ('-date_created',)
 | 
			
		||||
    rbac_perms = {
 | 
			
		||||
        'open': 'tickets.view_ticket',
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,10 +1,9 @@
 | 
			
		|||
# -*- coding: utf-8 -*-
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
from ..serializers import UserGroupSerializer
 | 
			
		||||
from ..models import UserGroup
 | 
			
		||||
from orgs.mixins.api import OrgBulkModelViewSet
 | 
			
		||||
 | 
			
		||||
from ..models import UserGroup
 | 
			
		||||
from ..serializers import UserGroupSerializer
 | 
			
		||||
 | 
			
		||||
__all__ = ['UserGroupViewSet']
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -14,5 +13,4 @@ class UserGroupViewSet(OrgBulkModelViewSet):
 | 
			
		|||
    filterset_fields = ("name",)
 | 
			
		||||
    search_fields = filterset_fields
 | 
			
		||||
    serializer_class = UserGroupSerializer
 | 
			
		||||
    ordering_fields = ('name', )
 | 
			
		||||
    ordering = ('name', )
 | 
			
		||||
    ordering = ('name',)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -39,7 +39,6 @@ class UserViewSet(CommonApiMixin, UserQuerysetMixin, SuggestionMixin, BulkModelV
 | 
			
		|||
        'suggestion': MiniUserSerializer,
 | 
			
		||||
        'invite': InviteSerializer,
 | 
			
		||||
    }
 | 
			
		||||
    ordering_fields = ('name',)
 | 
			
		||||
    ordering = ('name',)
 | 
			
		||||
    rbac_perms = {
 | 
			
		||||
        'match': 'users.match_user',
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue