|
15 | 15 | from rest_framework.response import Response |
16 | 16 | from django.conf import settings |
17 | 17 |
|
| 18 | +from izpitnik.accounts.api.filters import filter_user_response |
18 | 19 | from izpitnik.accounts.api.permissions import IsOwnerPermission, add_or_change_permission_decorator, \ |
19 | 20 | delete_permission_decorator |
20 | 21 | from izpitnik.accounts.mixins import GenerateTokenMixin |
@@ -93,24 +94,31 @@ def post(self, request): |
93 | 94 | return Response(form.errors, status=400) |
94 | 95 |
|
95 | 96 | class GetUpdateDeleteProfileAPIView(RetrieveUpdateDestroyAPIView): |
96 | | - permission_classes = [IsOwnerPermission] |
| 97 | + # permission_classes = [IsOwnerPermission] |
| 98 | + permission_classes = [AllowAny] |
97 | 99 | lookup_url_kwarg = "user_id" |
98 | 100 | serializer_class = UserProfileSerializer |
99 | 101 | parser_classes = (MultiPartParser, FormParser, JSONParser) |
| 102 | + allowed_kwarg_values = ['my'] |
100 | 103 |
|
101 | 104 | def get_queryset(self): |
102 | 105 | from izpitnik.accounts.models import User |
103 | 106 | user_id = self.rectify_kwarg(self.request, self.kwargs).get(self.lookup_url_kwarg) |
104 | 107 | return User.objects.filter(pk=user_id).prefetch_related("profile") |
105 | 108 |
|
| 109 | + @filter_user_response |
106 | 110 | def get(self, request, *args, **kwargs): |
107 | 111 | kwargs = self.rectify_kwarg(request, kwargs) |
108 | 112 | response = super().get(request,*args, **kwargs) |
109 | 113 | return response |
110 | 114 |
|
111 | 115 | def rectify_kwarg(self, request, kwargs): |
112 | 116 | user_id = kwargs.get(self.lookup_url_kwarg) |
| 117 | + if not user_id.isdigit() and user_id not in self.allowed_kwarg_values: |
| 118 | + raise AuthenticationFailed('Invalid user identifier.') |
113 | 119 | if user_id == 'my': |
| 120 | + if not request.user.is_authenticated: |
| 121 | + raise AuthenticationFailed('Authentication credentials were not provided.') |
114 | 122 | kwargs[self.lookup_url_kwarg] = str(request.user.pk) |
115 | 123 | return kwargs |
116 | 124 |
|
|
0 commit comments