blob: df3bbcb85822a45aeba4e8555d1334cbd4e8f569 [file] [log] [blame]
Dirk Vogt7160b5e2016-10-12 17:04:40 +02001from rest_framework.decorators import api_view
2from rest_framework.decorators import parser_classes
3from rest_framework.decorators import permission_classes
4
5from rest_framework.parsers import FileUploadParser
6from rest_framework.permissions import IsAuthenticated
7from rest_framework.exceptions import PermissionDenied
8from rest_framework.exceptions import NotFound
9
Dirk Vogt7160b5e2016-10-12 17:04:40 +020010from rest_framework.response import Response
Dirk Vogt83107df2017-05-02 12:04:19 +020011
12from crashreports.serializers import LogFileSerializer
13
Dirk Vogt7160b5e2016-10-12 17:04:40 +020014from crashreports.models import LogFile
15from crashreports.models import Crashreport
16from crashreports.permissions import user_owns_uuid
17from crashreports.permissions import user_is_hiccup_staff
Dirk Vogt83107df2017-05-02 12:04:19 +020018from crashreports.permissions import HasRightsOrIsDeviceOwnerDeviceCreation
19from rest_framework import generics
20
21
22class ListCreateView(generics.ListAPIView):
23 queryset = LogFile.objects.all()
Mitja Nikolauscb50f2c2018-08-24 13:54:48 +020024 permission_classes = (HasRightsOrIsDeviceOwnerDeviceCreation,)
Dirk Vogt83107df2017-05-02 12:04:19 +020025 serializer_class = LogFileSerializer
26
27
28class RetrieveUpdateDestroyView(generics.RetrieveUpdateDestroyAPIView):
29 queryset = LogFile.objects.all()
Mitja Nikolauscb50f2c2018-08-24 13:54:48 +020030 permission_classes = (HasRightsOrIsDeviceOwnerDeviceCreation,)
Dirk Vogt83107df2017-05-02 12:04:19 +020031 serializer_class = LogFileSerializer
Dirk Vogt7160b5e2016-10-12 17:04:40 +020032
33
Mitja Nikolauscb50f2c2018-08-24 13:54:48 +020034@api_view(http_method_names=["POST"])
35@parser_classes([FileUploadParser])
36@permission_classes([IsAuthenticated])
Dirk Vogt36635692016-10-17 12:19:10 +020037def logfile_put(request, uuid, device_local_id, filename):
Dirk Vogt7160b5e2016-10-12 17:04:40 +020038 try:
Mitja Nikolauscb50f2c2018-08-24 13:54:48 +020039 crashreport = Crashreport.objects.get(
40 device__uuid=uuid, device_local_id=device_local_id
41 )
Dirk Vogt7160b5e2016-10-12 17:04:40 +020042 except:
Dirk Vogt36635692016-10-17 12:19:10 +020043 raise NotFound(detail="Crashreport does not exist.")
44
Mitja Nikolauscb50f2c2018-08-24 13:54:48 +020045 if not (
46 user_owns_uuid(request.user, crashreport.device.uuid)
47 or user_is_hiccup_staff(request.user)
48 ):
Dirk Vogt7160b5e2016-10-12 17:04:40 +020049 raise PermissionDenied(detail="Not allowed.")
Dirk Vogt36635692016-10-17 12:19:10 +020050 f = request.data["file"]
51 logfile = LogFile(crashreport=crashreport, logfile=f)
Dirk Vogt7160b5e2016-10-12 17:04:40 +020052 logfile.save()
Dirk Vogt36635692016-10-17 12:19:10 +020053 return Response(status=201)