88from django .conf import settings
99from django .contrib .auth .models import AnonymousUser , User
1010from django .core .exceptions import ValidationError
11- from django .http import Http404
1211from django .utils import timezone
1312from guardian .shortcuts import assign_perm
1413from guardian .shortcuts import get_objects_for_user
@@ -104,15 +103,15 @@ def list(self, request, **kwargs):
104103 if request .user != app .owner and \
105104 not request .user .has_perm (perm_name , app ) and \
106105 not request .user .is_superuser :
107- return Response (status = status .HTTP_404_NOT_FOUND )
106+ return Response (status = status .HTTP_403_FORBIDDEN )
108107 usernames = [u .username for u in get_users_with_perms (app )
109108 if u .has_perm (perm_name , app )]
110109 return Response ({'users' : usernames })
111110
112111 def create (self , request , ** kwargs ):
113112 app = get_object_or_404 (self .model , id = kwargs ['id' ])
114113 if request .user != app .owner and not request .user .is_superuser :
115- return Response (status = status .HTTP_404_NOT_FOUND )
114+ return Response (status = status .HTTP_403_FORBIDDEN )
116115 user = get_object_or_404 (User , username = request .DATA ['username' ])
117116 assign_perm (self .perm , user , app )
118117 models .log_event (app , "User {} was granted access to {}" .format (user , app ))
@@ -121,14 +120,14 @@ def create(self, request, **kwargs):
121120 def destroy (self , request , ** kwargs ):
122121 app = get_object_or_404 (self .model , id = kwargs ['id' ])
123122 if request .user != app .owner and not request .user .is_superuser :
124- return Response (status = status .HTTP_404_NOT_FOUND )
123+ return Response (status = status .HTTP_403_FORBIDDEN )
125124 user = get_object_or_404 (User , username = kwargs ['username' ])
126125 if user .has_perm (self .perm , app ):
127126 remove_perm (self .perm , user , app )
128127 models .log_event (app , "User {} was revoked access to {}" .format (user , app ))
129128 return Response (status = status .HTTP_204_NO_CONTENT )
130129 else :
131- return Response (status = status .HTTP_404_NOT_FOUND )
130+ return Response (status = status .HTTP_403_FORBIDDEN )
132131
133132
134133class AdminPermsViewSet (viewsets .ModelViewSet ):
@@ -138,22 +137,8 @@ class AdminPermsViewSet(viewsets.ModelViewSet):
138137 serializer_class = serializers .AdminUserSerializer
139138 permission_classes = (IsAdmin ,)
140139
141- def check_obj_permissions (self , obj ):
142- """
143- Small wrapper around check_object_permissions().
144-
145- If the user is denied permission to the object, then
146- it should return a 404 so the user is not aware of the
147- application resource.
148- """
149- try :
150- self .check_object_permissions (self .request , obj )
151- except PermissionDenied :
152- raise Http404 ("No {} matches the given query." .format (
153- self .model ._meta .object_name ))
154-
155140 def get_queryset (self , ** kwargs ):
156- self .check_obj_permissions ( self .request .user )
141+ self .check_object_permissions ( self . request , self .request .user )
157142 return self .model .objects .filter (is_active = True , is_superuser = True )
158143
159144 def create (self , request , ** kwargs ):
@@ -240,31 +225,17 @@ class BaseAppViewSet(viewsets.ModelViewSet):
240225
241226 permission_classes = (permissions .IsAuthenticated , IsAppUser )
242227
243- def check_obj_permissions (self , obj ):
244- """
245- Small wrapper around check_object_permissions().
246-
247- If the user is denied permission to the object, then
248- it should return a 404 so the user is not aware of the
249- application resource.
250- """
251- try :
252- self .check_object_permissions (self .request , obj )
253- except PermissionDenied :
254- raise Http404 ("No {} matches the given query." .format (
255- self .model ._meta .object_name ))
256-
257228 def pre_save (self , obj ):
258229 obj .owner = self .request .user
259230
260231 def get_queryset (self , ** kwargs ):
261232 app = get_object_or_404 (models .App , id = self .kwargs ['id' ])
262- self .check_obj_permissions ( app )
233+ self .check_object_permissions ( self . request , app )
263234 return self .model .objects .filter (app = app )
264235
265236 def get_object (self , * args , ** kwargs ):
266237 obj = self .get_queryset ().latest ('created' )
267- self .check_obj_permissions ( obj )
238+ self .check_object_permissions ( self . request , obj )
268239 return obj
269240
270241
@@ -285,7 +256,7 @@ def get_success_headers(self, data):
285256
286257 def create (self , request , * args , ** kwargs ):
287258 app = get_object_or_404 (models .App , id = self .kwargs ['id' ])
288- self .check_obj_permissions ( app )
259+ self .check_object_permissions ( self . request , app )
289260 request ._data = request .DATA .copy ()
290261 request .DATA ['app' ] = app
291262 try :
@@ -303,7 +274,7 @@ class AppConfigViewSet(BaseAppViewSet):
303274 def get_object (self , * args , ** kwargs ):
304275 """Return the Config associated with the App's latest Release."""
305276 app = get_object_or_404 (models .App , id = self .kwargs ['id' ])
306- self .check_obj_permissions ( app )
277+ self .check_object_permissions ( self . request , app )
307278 return app .release_set .latest ().config
308279
309280 def pre_save (self , config ):
@@ -418,35 +389,21 @@ class DomainViewSet(OwnerViewSet):
418389 model = models .Domain
419390 serializer_class = serializers .DomainSerializer
420391
421- def check_obj_permissions (self , obj ):
422- """
423- Small wrapper around check_object_permissions().
424-
425- If the user is denied permission to the object, then
426- it should return a 404 so the user is not aware of the
427- application resource.
428- """
429- try :
430- self .check_object_permissions (self .request , obj )
431- except PermissionDenied :
432- raise Http404 ("No {} matches the given query." .format (
433- self .model ._meta .object_name ))
434-
435392 def create (self , request , * args , ** kwargs ):
436393 app = get_object_or_404 (models .App , id = self .kwargs ['id' ])
437- self .check_obj_permissions ( app )
394+ self .check_object_permissions ( self . request , app )
438395 request ._data = request .DATA .copy ()
439396 request .DATA ['app' ] = app
440397 return super (DomainViewSet , self ).create (request , * args , ** kwargs )
441398
442399 def get_queryset (self , ** kwargs ):
443400 app = get_object_or_404 (models .App , id = self .kwargs ['id' ])
444- self .check_obj_permissions ( app )
401+ self .check_object_permissions ( self . request , app )
445402 return self .model .objects .filter (app = app )
446403
447404 def get_object (self , * args , ** kwargs ):
448- obj = self .get_queryset (). get ( domain = self . kwargs [ 'domain' ] )
449- self . check_obj_permissions ( obj )
405+ qs = self .get_queryset (** kwargs )
406+ obj = qs . get ( domain = self . kwargs [ 'domain' ] )
450407 return obj
451408
452409
0 commit comments