blob: df3bbcb85822a45aeba4e8555d1334cbd4e8f569 [file] [log] [blame]
from rest_framework.decorators import api_view
from rest_framework.decorators import parser_classes
from rest_framework.decorators import permission_classes
from rest_framework.parsers import FileUploadParser
from rest_framework.permissions import IsAuthenticated
from rest_framework.exceptions import PermissionDenied
from rest_framework.exceptions import NotFound
from rest_framework.response import Response
from crashreports.serializers import LogFileSerializer
from crashreports.models import LogFile
from crashreports.models import Crashreport
from crashreports.permissions import user_owns_uuid
from crashreports.permissions import user_is_hiccup_staff
from crashreports.permissions import HasRightsOrIsDeviceOwnerDeviceCreation
from rest_framework import generics
class ListCreateView(generics.ListAPIView):
queryset = LogFile.objects.all()
permission_classes = (HasRightsOrIsDeviceOwnerDeviceCreation,)
serializer_class = LogFileSerializer
class RetrieveUpdateDestroyView(generics.RetrieveUpdateDestroyAPIView):
queryset = LogFile.objects.all()
permission_classes = (HasRightsOrIsDeviceOwnerDeviceCreation,)
serializer_class = LogFileSerializer
@api_view(http_method_names=["POST"])
@parser_classes([FileUploadParser])
@permission_classes([IsAuthenticated])
def logfile_put(request, uuid, device_local_id, filename):
try:
crashreport = Crashreport.objects.get(
device__uuid=uuid, device_local_id=device_local_id
)
except:
raise NotFound(detail="Crashreport does not exist.")
if not (
user_owns_uuid(request.user, crashreport.device.uuid)
or user_is_hiccup_staff(request.user)
):
raise PermissionDenied(detail="Not allowed.")
f = request.data["file"]
logfile = LogFile(crashreport=crashreport, logfile=f)
logfile.save()
return Response(status=201)