kopia lustrzana https://dev.funkwhale.audio/funkwhale/funkwhale
82 wiersze
2.6 KiB
Python
82 wiersze
2.6 KiB
Python
from django.db import IntegrityError
|
|
|
|
from rest_framework import mixins
|
|
from rest_framework import response
|
|
from rest_framework import status
|
|
from rest_framework import viewsets
|
|
|
|
from funkwhale_api.federation import routes
|
|
from funkwhale_api.federation import utils as federation_utils
|
|
|
|
from . import models
|
|
from . import serializers
|
|
|
|
|
|
class UserFilterViewSet(
|
|
mixins.ListModelMixin,
|
|
mixins.CreateModelMixin,
|
|
mixins.RetrieveModelMixin,
|
|
mixins.DestroyModelMixin,
|
|
viewsets.GenericViewSet,
|
|
):
|
|
lookup_field = "uuid"
|
|
queryset = (
|
|
models.UserFilter.objects.all()
|
|
.order_by("-creation_date")
|
|
.select_related("target_artist")
|
|
)
|
|
serializer_class = serializers.UserFilterSerializer
|
|
required_scope = "filters"
|
|
ordering_fields = ("creation_date",)
|
|
|
|
def create(self, request, *args, **kwargs):
|
|
try:
|
|
return super().create(request, *args, **kwargs)
|
|
except IntegrityError:
|
|
content = {"detail": "A content filter already exists for this object"}
|
|
return response.Response(content, status=status.HTTP_400_BAD_REQUEST)
|
|
|
|
def get_queryset(self):
|
|
qs = super().get_queryset()
|
|
return qs.filter(user=self.request.user)
|
|
|
|
def perform_create(self, serializer):
|
|
serializer.save(user=self.request.user)
|
|
|
|
|
|
class ReportsViewSet(mixins.CreateModelMixin, viewsets.GenericViewSet):
|
|
lookup_field = "uuid"
|
|
queryset = models.Report.objects.all().order_by("-creation_date")
|
|
serializer_class = serializers.ReportSerializer
|
|
required_scope = "reports"
|
|
ordering_fields = ("creation_date",)
|
|
anonymous_policy = "setting"
|
|
anonymous_scopes = {"write:reports"}
|
|
throttling_scopes = {
|
|
"create": {
|
|
"anonymous": "anonymous-reports",
|
|
"authenticated": "authenticated-reports",
|
|
}
|
|
}
|
|
|
|
def get_serializer_context(self):
|
|
context = super().get_serializer_context()
|
|
if self.request.user.is_authenticated:
|
|
context["submitter"] = self.request.user.actor
|
|
return context
|
|
|
|
def perform_create(self, serializer):
|
|
submitter = None
|
|
if self.request.user.is_authenticated:
|
|
submitter = self.request.user.actor
|
|
report = serializer.save(submitter=submitter)
|
|
forward = self.request.data.get("forward", False)
|
|
if (
|
|
forward
|
|
and report.target
|
|
and report.target_owner
|
|
and hasattr(report.target, "fid")
|
|
and not federation_utils.is_local(report.target.fid)
|
|
):
|
|
routes.outbox.dispatch({"type": "Flag"}, context={"report": report})
|