blob: 7e02dab94dcdc43cc8aef2f29f1923fac8a1d2f6 [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)