|
1 | 1 | from rest_framework.response import Response |
2 | | -from rest_framework.permissions import AllowAny |
| 2 | +from rest_framework.permissions import AllowAny, IsAuthenticated |
3 | 3 | from rest_framework.decorators import api_view, permission_classes |
| 4 | +from rest_framework import status |
4 | 5 |
|
5 | 6 | from django.utils.dateparse import parse_datetime |
6 | 7 | from DOSPORTAL.models import measurement, Record, DetectorLogbook, Detector |
@@ -38,15 +39,15 @@ def RecordGet(request): |
38 | 39 |
|
39 | 40 |
|
40 | 41 | @api_view(["GET"]) |
41 | | -@permission_classes((AllowAny,)) |
| 42 | +@permission_classes((IsAuthenticated,)) |
42 | 43 | def DetectorGet(request): |
43 | | - items = Detector.objects.all() |
| 44 | + items = Detector.objects.select_related("type__manufacturer", "owner").all() |
44 | 45 | serializer = DetectorSerializer(items, many=True) |
45 | 46 | return Response(serializer.data) |
46 | 47 |
|
47 | 48 |
|
48 | 49 | @api_view(["GET"]) |
49 | | -@permission_classes((AllowAny,)) |
| 50 | +@permission_classes((IsAuthenticated,)) |
50 | 51 | def DetectorLogbookGet(request): |
51 | 52 | items = DetectorLogbook.objects.select_related("detector", "author").all() |
52 | 53 |
|
@@ -76,10 +77,32 @@ def DetectorLogbookGet(request): |
76 | 77 |
|
77 | 78 |
|
78 | 79 | @api_view(["POST"]) |
79 | | -@permission_classes((AllowAny,)) |
| 80 | +@permission_classes((IsAuthenticated,)) |
80 | 81 | def DetectorLogbookPost(request): |
81 | | - serializer = DetectorLogbookSerializer(data=request.data) |
| 82 | + |
| 83 | + data = dict(request.data) |
| 84 | + data["author"] = request.user.id |
| 85 | + |
| 86 | + detector_id = data.get("detector") |
| 87 | + if detector_id: |
| 88 | + try: |
| 89 | + detector = Detector.objects.get(id=detector_id) |
| 90 | + user_has_access = ( |
| 91 | + detector.owner and request.user in detector.owner.users.all() |
| 92 | + ) or detector.access.filter(users=request.user).exists() |
| 93 | + |
| 94 | + if not user_has_access: |
| 95 | + return Response( |
| 96 | + {"detail": "Access to the detector denied."}, |
| 97 | + status=status.HTTP_403_FORBIDDEN, |
| 98 | + ) |
| 99 | + except Detector.DoesNotExist: |
| 100 | + return Response( |
| 101 | + {"detail": "Detektor not found."}, status=status.HTTP_404_NOT_FOUND |
| 102 | + ) |
| 103 | + |
| 104 | + serializer = DetectorLogbookSerializer(data=data) |
82 | 105 | if serializer.is_valid(): |
83 | 106 | serializer.save() |
84 | | - return Response(serializer.data) |
85 | | - return Response(serializer.errors, status=400) |
| 107 | + return Response(serializer.data, status=status.HTTP_201_CREATED) |
| 108 | + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) |
0 commit comments