From ce94ba4c835c8a55af268b30f83217a0d82aaabc Mon Sep 17 00:00:00 2001 From: Ryan Petrello Date: Fri, 8 Dec 2017 09:56:01 -0500 Subject: [PATCH] change how we detect the current user to avoid a nuanced recursion error see: https://github.com/ansible/ansible-tower/issues/7802 --- awx/api/generics.py | 6 +++++- awx/main/signals.py | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/awx/api/generics.py b/awx/api/generics.py index fcc48322ce..869c29277a 100644 --- a/awx/api/generics.py +++ b/awx/api/generics.py @@ -21,7 +21,7 @@ from django.utils.translation import ugettext_lazy as _ # Django REST Framework from rest_framework.authentication import get_authorization_header -from rest_framework.exceptions import PermissionDenied +from rest_framework.exceptions import PermissionDenied, AuthenticationFailed from rest_framework import generics from rest_framework.response import Response from rest_framework import status @@ -115,6 +115,10 @@ class APIView(views.APIView): drf_request = super(APIView, self).initialize_request(request, *args, **kwargs) request.drf_request = drf_request + try: + request.drf_request_user = getattr(drf_request, 'user', False) + except AuthenticationFailed: + request.drf_request_user = None return drf_request def finalize_response(self, request, response, *args, **kwargs): diff --git a/awx/main/signals.py b/awx/main/signals.py index aa5266d31a..bc885b2c7f 100644 --- a/awx/main/signals.py +++ b/awx/main/signals.py @@ -558,8 +558,8 @@ def get_current_user_from_drf_request(sender, **kwargs): drf_request on the underlying Django Request object. ''' request = get_current_request() - drf_request = getattr(request, 'drf_request', None) - return (getattr(drf_request, 'user', False), 0) + drf_request_user = getattr(request, 'drf_request_user', False) + return (drf_request_user, 0) @receiver(pre_delete, sender=Organization)