mirror of
https://github.com/cisagov/manage.get.gov.git
synced 2025-05-15 09:07:02 +02:00
Refactor
This commit is contained in:
parent
d046ee8315
commit
b4829d650a
6 changed files with 35 additions and 64 deletions
|
@ -6,12 +6,13 @@ from django.conf import settings
|
|||
from django.contrib.auth import logout as auth_logout
|
||||
from django.contrib.auth import authenticate, login
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.shortcuts import redirect, render
|
||||
from django.shortcuts import redirect
|
||||
from urllib.parse import parse_qs, urlencode
|
||||
|
||||
from djangooidc.oidc import Client
|
||||
from djangooidc import exceptions as o_e
|
||||
from registrar.models import User
|
||||
from registrar.views.utility.error_views import custom_500_error_view, custom_401_error_view
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
@ -49,27 +50,19 @@ def error_page(request, error):
|
|||
"""Display a sensible message and log the error."""
|
||||
logger.error(error)
|
||||
if isinstance(error, o_e.AuthenticationFailed):
|
||||
return render(
|
||||
request,
|
||||
"401.html",
|
||||
context={
|
||||
"friendly_message": error.friendly_message,
|
||||
"log_identifier": error.locator,
|
||||
},
|
||||
status=401,
|
||||
)
|
||||
}
|
||||
return custom_401_error_view(request, context)
|
||||
if isinstance(error, o_e.InternalError):
|
||||
return render(
|
||||
request,
|
||||
"500.html",
|
||||
context={
|
||||
"friendly_message": error.friendly_message,
|
||||
"log_identifier": error.locator,
|
||||
},
|
||||
status=500,
|
||||
)
|
||||
}
|
||||
return custom_500_error_view(request, context)
|
||||
if isinstance(error, Exception):
|
||||
return render(request, "500.html", status=500)
|
||||
return custom_500_error_view(request)
|
||||
|
||||
|
||||
def openid(request):
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
For more information see:
|
||||
https://docs.djangoproject.com/en/4.0/topics/http/urls/
|
||||
"""
|
||||
|
||||
from django.conf.urls import handler500
|
||||
from django.contrib import admin
|
||||
from django.urls import include, path
|
||||
from django.views.generic import RedirectView
|
||||
|
@ -149,6 +149,10 @@ urlpatterns = [
|
|||
),
|
||||
]
|
||||
|
||||
# Djangooidc strips out context data from that context, so we define a custom error
|
||||
# view through this method.
|
||||
handler500 = "registrar.views.utility.error_views.custom_500_error_view"
|
||||
|
||||
# we normally would guard these with `if settings.DEBUG` but tests run with
|
||||
# DEBUG = False even when these apps have been loaded because settings.DEBUG
|
||||
# was actually True. Instead, let's add these URLs any time we are able to
|
||||
|
|
|
@ -325,6 +325,7 @@ class Domain(TimeStampedModel, DomainHelper):
|
|||
Subordinate hosts (something.your-domain.gov) MUST have IP addresses,
|
||||
while non-subordinate hosts MUST NOT.
|
||||
"""
|
||||
raise ValueError("test")
|
||||
try:
|
||||
# attempt to retrieve hosts from registry and store in cache and db
|
||||
hosts = self._get_property("hosts")
|
||||
|
|
|
@ -136,36 +136,3 @@ class TestEnvironmentVariablesEffects(TestCase):
|
|||
|
||||
self.assertNotContains(contact_page_500, "You are on a test site.")
|
||||
|
||||
@less_console_noise_decorator
|
||||
@override_settings(IS_PRODUCTION=False)
|
||||
def test_non_production_environment_raises_403_and_shows_banner(self):
|
||||
"""Test if the non-prod banner is shown when a 403 is raised"""
|
||||
|
||||
fake_domain, _ = Domain.objects.get_or_create(name="igorville.gov")
|
||||
|
||||
# Test navigating to the contact page. Should return a 403,
|
||||
# but the banner should still appear.
|
||||
contact_page_403 = self.client.get(
|
||||
reverse("domain-dns-nameservers", kwargs={"pk": fake_domain.id}),
|
||||
)
|
||||
|
||||
self.assertEqual(contact_page_403.status_code, 403)
|
||||
|
||||
self.assertContains(contact_page_403, "You are on a test site.", status_code=403)
|
||||
|
||||
@less_console_noise_decorator
|
||||
@override_settings(IS_PRODUCTION=True)
|
||||
def test_production_environment_raises_403_and_doesnt_show_banner(self):
|
||||
"""Test if the non-prod banner is not shown on production when a 403 is raised"""
|
||||
|
||||
fake_domain, _ = Domain.objects.get_or_create(name="igorville.gov")
|
||||
|
||||
# Test navigating to the contact page. Should return a 403,
|
||||
# but the banner should still appear.
|
||||
contact_page_403 = self.client.get(
|
||||
reverse("domain-dns-nameservers", kwargs={"pk": fake_domain.id}),
|
||||
)
|
||||
|
||||
self.assertEqual(contact_page_403.status_code, 403)
|
||||
|
||||
self.assertNotContains(contact_page_403, "You are on a test site.", status_code=403)
|
||||
|
|
16
src/registrar/views/utility/error_views.py
Normal file
16
src/registrar/views/utility/error_views.py
Normal file
|
@ -0,0 +1,16 @@
|
|||
"""Custom views that allow for error view customization"""
|
||||
from django.shortcuts import render
|
||||
|
||||
def custom_500_error_view(request, context=None):
|
||||
"""Used to redirect 500 errors to a custom view"""
|
||||
if context is None:
|
||||
return render(request, "500.html", status=500)
|
||||
else:
|
||||
return render(request, "500.html", context=context, status=500)
|
||||
|
||||
def custom_401_error_view(request, context=None):
|
||||
"""Used to redirect 401 errors to a custom view"""
|
||||
if context is None:
|
||||
return render(request, "401.html", status=401)
|
||||
else:
|
||||
return render(request, "401.html", context=context, status=401)
|
|
@ -32,16 +32,6 @@ class DomainPermissionView(DomainPermission, DetailView, abc.ABC):
|
|||
# variable name in template context for the model object
|
||||
context_object_name = "domain"
|
||||
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
"""
|
||||
Custom implementation of dispatch to ensure that 500 error pages (and others)
|
||||
have access to the IS_PRODUCTION flag
|
||||
"""
|
||||
if "IS_PRODUCTION" not in request.session:
|
||||
# Pass the production flag to the context
|
||||
request.session["IS_PRODUCTION"] = settings.IS_PRODUCTION
|
||||
return super().dispatch(request, *args, **kwargs)
|
||||
|
||||
# Adds context information for user permissions
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue