mirror of
https://github.com/FunnyWolf/agentic-soc-platform.git
synced 2026-08-22 13:12:56 +02:00
40 lines
1.7 KiB
Python
40 lines
1.7 KiB
Python
from django_filters.rest_framework import DjangoFilterBackend
|
|
from rest_framework import viewsets, permissions
|
|
from rest_framework.filters import OrderingFilter, SearchFilter
|
|
|
|
from apps.accounts.permissions import IsBusinessWriterOrReadOnly
|
|
from apps.audit.mixins import AuditActorMixin
|
|
from apps.common.advanced_filters import AdvancedFilterBackend
|
|
from .models import Enrichment
|
|
from .serializers import EnrichmentSerializer
|
|
|
|
|
|
class EnrichmentViewSet(AuditActorMixin, viewsets.ModelViewSet):
|
|
queryset = Enrichment.objects.select_related("case", "alert", "artifact")
|
|
serializer_class = EnrichmentSerializer
|
|
permission_classes = [permissions.IsAuthenticated, IsBusinessWriterOrReadOnly]
|
|
lookup_field = "id"
|
|
filter_backends = (DjangoFilterBackend, SearchFilter, OrderingFilter, AdvancedFilterBackend)
|
|
search_fields = ("enrichment_id", "name", "type", "provider", "uid", "value", "desc")
|
|
ordering_fields = ("created_at", "updated_at", "type", "provider")
|
|
filterset_fields = ("type", "provider", "case", "alert", "artifact")
|
|
advanced_filter_fields = {
|
|
"enrichment_id": "text",
|
|
"type": "select",
|
|
"provider": "select",
|
|
"name": "text",
|
|
"uid": "text",
|
|
"value": "text",
|
|
"desc": "text",
|
|
"created_at": "date",
|
|
"updated_at": "date",
|
|
}
|
|
|
|
def get_queryset(self):
|
|
queryset = super().get_queryset()
|
|
content_type = self.request.query_params.get("content_type")
|
|
object_id = self.request.query_params.get("object_id")
|
|
if content_type and object_id and content_type in {"case", "alert", "artifact"}:
|
|
return queryset.filter(**{content_type: object_id})
|
|
return queryset
|