blob: 7e02dab94dcdc43cc8aef2f29f1923fac8a1d2f6 [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()
24 permission_classes = (HasRightsOrIsDeviceOwnerDeviceCreation, )
25 serializer_class = LogFileSerializer
26
27
28class RetrieveUpdateDestroyView(generics.RetrieveUpdateDestroyAPIView):
29 queryset = LogFile.objects.all()
30 permission_classes = (HasRightsOrIsDeviceOwnerDeviceCreation, )
31 serializer_class = LogFileSerializer
Dirk Vogt7160b5e2016-10-12 17:04:40 +020032
33
34@api_view(http_method_names=['POST'], )
Dirk Vogt36635692016-10-17 12:19:10 +020035@parser_classes([FileUploadParser, ])
36@permission_classes([IsAuthenticated, ])
37def logfile_put(request, uuid, device_local_id, filename):
Dirk Vogt7160b5e2016-10-12 17:04:40 +020038 try:
Dirk Vogt36635692016-10-17 12:19:10 +020039 crashreport = Crashreport.objects.get(device__uuid=uuid,
40 device_local_id=device_local_id)
Dirk Vogt7160b5e2016-10-12 17:04:40 +020041 except:
Dirk Vogt36635692016-10-17 12:19:10 +020042 raise NotFound(detail="Crashreport does not exist.")
43
Dirk Vogt7160b5e2016-10-12 17:04:40 +020044 if (not (user_owns_uuid(request.user, crashreport.device.uuid)
45 or user_is_hiccup_staff(request.user))):
46 raise PermissionDenied(detail="Not allowed.")
Dirk Vogt36635692016-10-17 12:19:10 +020047 f = request.data["file"]
48 logfile = LogFile(crashreport=crashreport, logfile=f)
Dirk Vogt7160b5e2016-10-12 17:04:40 +020049 logfile.save()
Dirk Vogt36635692016-10-17 12:19:10 +020050 return Response(status=201)