Dirk Vogt | 7160b5e | 2016-10-12 17:04:40 +0200 | [diff] [blame] | 1 | from rest_framework.decorators import api_view |
| 2 | from rest_framework.decorators import parser_classes |
| 3 | from rest_framework.decorators import permission_classes |
| 4 | |
| 5 | from rest_framework.parsers import FileUploadParser |
| 6 | from rest_framework.permissions import IsAuthenticated |
| 7 | from rest_framework.exceptions import PermissionDenied |
| 8 | from rest_framework.exceptions import NotFound |
| 9 | |
Dirk Vogt | 7160b5e | 2016-10-12 17:04:40 +0200 | [diff] [blame] | 10 | from rest_framework.response import Response |
Dirk Vogt | 83107df | 2017-05-02 12:04:19 +0200 | [diff] [blame] | 11 | |
| 12 | from crashreports.serializers import LogFileSerializer |
| 13 | |
Dirk Vogt | 7160b5e | 2016-10-12 17:04:40 +0200 | [diff] [blame] | 14 | from crashreports.models import LogFile |
| 15 | from crashreports.models import Crashreport |
| 16 | from crashreports.permissions import user_owns_uuid |
| 17 | from crashreports.permissions import user_is_hiccup_staff |
Dirk Vogt | 83107df | 2017-05-02 12:04:19 +0200 | [diff] [blame] | 18 | from crashreports.permissions import HasRightsOrIsDeviceOwnerDeviceCreation |
| 19 | from rest_framework import generics |
| 20 | |
| 21 | |
| 22 | class ListCreateView(generics.ListAPIView): |
| 23 | queryset = LogFile.objects.all() |
Mitja Nikolaus | cb50f2c | 2018-08-24 13:54:48 +0200 | [diff] [blame^] | 24 | permission_classes = (HasRightsOrIsDeviceOwnerDeviceCreation,) |
Dirk Vogt | 83107df | 2017-05-02 12:04:19 +0200 | [diff] [blame] | 25 | serializer_class = LogFileSerializer |
| 26 | |
| 27 | |
| 28 | class RetrieveUpdateDestroyView(generics.RetrieveUpdateDestroyAPIView): |
| 29 | queryset = LogFile.objects.all() |
Mitja Nikolaus | cb50f2c | 2018-08-24 13:54:48 +0200 | [diff] [blame^] | 30 | permission_classes = (HasRightsOrIsDeviceOwnerDeviceCreation,) |
Dirk Vogt | 83107df | 2017-05-02 12:04:19 +0200 | [diff] [blame] | 31 | serializer_class = LogFileSerializer |
Dirk Vogt | 7160b5e | 2016-10-12 17:04:40 +0200 | [diff] [blame] | 32 | |
| 33 | |
Mitja Nikolaus | cb50f2c | 2018-08-24 13:54:48 +0200 | [diff] [blame^] | 34 | @api_view(http_method_names=["POST"]) |
| 35 | @parser_classes([FileUploadParser]) |
| 36 | @permission_classes([IsAuthenticated]) |
Dirk Vogt | 3663569 | 2016-10-17 12:19:10 +0200 | [diff] [blame] | 37 | def logfile_put(request, uuid, device_local_id, filename): |
Dirk Vogt | 7160b5e | 2016-10-12 17:04:40 +0200 | [diff] [blame] | 38 | try: |
Mitja Nikolaus | cb50f2c | 2018-08-24 13:54:48 +0200 | [diff] [blame^] | 39 | crashreport = Crashreport.objects.get( |
| 40 | device__uuid=uuid, device_local_id=device_local_id |
| 41 | ) |
Dirk Vogt | 7160b5e | 2016-10-12 17:04:40 +0200 | [diff] [blame] | 42 | except: |
Dirk Vogt | 3663569 | 2016-10-17 12:19:10 +0200 | [diff] [blame] | 43 | raise NotFound(detail="Crashreport does not exist.") |
| 44 | |
Mitja Nikolaus | cb50f2c | 2018-08-24 13:54:48 +0200 | [diff] [blame^] | 45 | if not ( |
| 46 | user_owns_uuid(request.user, crashreport.device.uuid) |
| 47 | or user_is_hiccup_staff(request.user) |
| 48 | ): |
Dirk Vogt | 7160b5e | 2016-10-12 17:04:40 +0200 | [diff] [blame] | 49 | raise PermissionDenied(detail="Not allowed.") |
Dirk Vogt | 3663569 | 2016-10-17 12:19:10 +0200 | [diff] [blame] | 50 | f = request.data["file"] |
| 51 | logfile = LogFile(crashreport=crashreport, logfile=f) |
Dirk Vogt | 7160b5e | 2016-10-12 17:04:40 +0200 | [diff] [blame] | 52 | logfile.save() |
Dirk Vogt | 3663569 | 2016-10-17 12:19:10 +0200 | [diff] [blame] | 53 | return Response(status=201) |