fix: invalid response type on post request (#15609)

This commit is contained in:
Peter Braun 2024-11-14 12:58:55 +01:00 committed by GitHub
parent 989a4387df
commit 54487573f3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
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.db import connection, transaction
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.template.loader import render_to_string
from django.utils.encoding import smart_str
@ -81,6 +81,7 @@ analytics_logger = logging.getLogger('awx.analytics.performance')
class LoggedLoginView(auth_views.LoginView):
def get(self, request, *args, **kwargs):
if is_proxied_request():
next = request.GET.get('next', "")
@ -105,7 +106,7 @@ class LoggedLoginView(auth_views.LoginView):
def post(self, request, *args, **kwargs):
if is_proxied_request():
# Give a message, saying to login via AAP
return Response(
return JsonResponse(
{
'detail': _('Please log in via Platform Authentication.'),
},

View File

@ -1,13 +1,17 @@
import pytest
from django.contrib import auth
from django.http import JsonResponse
from django.test import Client
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 pytest_mock import MockerFixture
@pytest.mark.django_db
def test_invalid_login():
@ -21,6 +25,25 @@ def test_invalid_login():
request = factory.post(url, data)
request.user = anon
response = LoggedLoginView.as_view()(request)
response = awx.api.generics.LoggedLoginView.as_view()(request)
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