Fix: invalid response type on post request (#15609) (#6763)

This commit is contained in:
Peter Braun
2024-12-10 22:12:49 +01:00
committed by GitHub
parent f2ae68f302
commit 0ce0023561
2 changed files with 28 additions and 4 deletions

View File

@@ -13,7 +13,7 @@ from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import FieldDoesNotExist from django.core.exceptions import FieldDoesNotExist
from django.db import connection, transaction from django.db import connection, transaction
from django.db.models.fields.related import OneToOneRel from django.db.models.fields.related import OneToOneRel
from django.http import QueryDict from django.http import QueryDict, JsonResponse
from django.shortcuts import get_object_or_404, redirect from django.shortcuts import get_object_or_404, redirect
from django.template.loader import render_to_string from django.template.loader import render_to_string
from django.utils.encoding import smart_str from django.utils.encoding import smart_str
@@ -79,6 +79,7 @@ analytics_logger = logging.getLogger('awx.analytics.performance')
class LoggedLoginView(auth_views.LoginView): class LoggedLoginView(auth_views.LoginView):
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
if is_proxied_request(): if is_proxied_request():
next = request.GET.get('next', "") next = request.GET.get('next', "")
@@ -103,7 +104,7 @@ class LoggedLoginView(auth_views.LoginView):
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
if is_proxied_request(): if is_proxied_request():
# Give a message, saying to login via AAP # Give a message, saying to login via AAP
return Response( return JsonResponse(
{ {
'detail': _('Please log in via Platform Authentication.'), 'detail': _('Please log in via Platform Authentication.'),
}, },

View File

@@ -1,13 +1,17 @@
import pytest import pytest
from django.contrib import auth from django.contrib import auth
from django.http import JsonResponse
from django.test import Client from django.test import Client
from rest_framework.test import APIRequestFactory from rest_framework.test import APIRequestFactory
from awx.api.generics import LoggedLoginView import awx.api.generics
from rest_framework.reverse import reverse as drf_reverse from rest_framework.reverse import reverse as drf_reverse
from pytest_mock import MockerFixture
@pytest.mark.django_db @pytest.mark.django_db
def test_invalid_login(): def test_invalid_login():
@@ -21,6 +25,25 @@ def test_invalid_login():
request = factory.post(url, data) request = factory.post(url, data)
request.user = anon request.user = anon
response = LoggedLoginView.as_view()(request) response = awx.api.generics.LoggedLoginView.as_view()(request)
assert response.status_code == 401 assert response.status_code == 401
@pytest.mark.django_db
def test_invalid_post(mocker: MockerFixture, monkeypatch: pytest.MonkeyPatch):
url = drf_reverse('api:login')
factory = APIRequestFactory()
request = factory.post(url)
is_proxied_request_mock = mocker.Mock(
autospec=True,
name='is_proxied_request',
return_value=True,
)
monkeypatch.setattr(awx.api.generics, 'is_proxied_request', is_proxied_request_mock)
response = awx.api.generics.LoggedLoginView.as_view()(request)
assert isinstance(response, JsonResponse)
assert b'Please log in via Platform Authentication.' in response.content
assert response.status_code == 401