diff --git a/swift_browser_ui/middlewares.py b/swift_browser_ui/middlewares.py index 3a857ab8b..3f08bf77c 100644 --- a/swift_browser_ui/middlewares.py +++ b/swift_browser_ui/middlewares.py @@ -5,41 +5,40 @@ from .settings import setd +def return_error_response(error_code): + """Return the correct error page with correct status code.""" + with open( + setd["static_directory"] + "/" + str(error_code) + ".html" + ) as resp: + return web.Response( + body="".join(resp.readlines()), + status=error_code, + content_type="text/html", + headers={ + "Cache-Control": "no-cache, no-store, must-revalidate", + "Pragma": "no-cache", + "Expires": "0" + } + ) + + @web.middleware async def error_middleware(request, handler): """Return the correct HTTP Error page.""" try: response = await handler(request) if response.status == 401: - return web.FileResponse( - setd["static_directory"] + "/401.html", - status=401 - ) + return return_error_response(401) if response.status == 403: - return web.FileResponse( - setd["static_directory"] + "/403.html", - status=403 - ) + return return_error_response(403) if response.status == 404: - return web.FileResponse( - setd["static_directory"] + "/404.html", - status=404 - ) + return return_error_response(404) return response except web.HTTPException as ex: if ex.status == 401: - return web.FileResponse( - setd["static_directory"] + "/401.html", - status=401 - ) + return return_error_response(401) if ex.status == 403: - return web.FileResponse( - setd["static_directory"] + "/403.html", - status=403 - ) + return return_error_response(403) if ex.status == 404: - return web.FileResponse( - setd["static_directory"] + "/404.html", - status=404 - ) + return return_error_response(404) raise diff --git a/tests/test_middlewares.py b/tests/test_middlewares.py index 84bad576b..3c54417d1 100644 --- a/tests/test_middlewares.py +++ b/tests/test_middlewares.py @@ -52,37 +52,37 @@ async def test_401_return(self): """Test 401 middleware when the 401 status is returned.""" resp = await error_middleware(None, return_401_handler) self.assertEqual(resp.status, 401) - self.assertIsInstance(resp, FileResponse) + self.assertIsInstance(resp, Response) async def test_401_exception(self): """Test 401 middleware when the 401 status is risen.""" resp = await error_middleware(True, return_401_handler) self.assertEqual(resp.status, 401) - self.assertIsInstance(resp, FileResponse) + self.assertIsInstance(resp, Response) async def test_403_return(self): """Test 403 middleware when the 403 status is returned.""" resp = await error_middleware(None, return_403_handler) self.assertEqual(resp.status, 403) - self.assertIsInstance(resp, FileResponse) + self.assertIsInstance(resp, Response) async def test_403_exception(self): """Test 403 middleware when the 403 status is risen.""" resp = await error_middleware(True, return_403_handler) self.assertEqual(resp.status, 403) - self.assertIsInstance(resp, FileResponse) + self.assertIsInstance(resp, Response) async def test_404_return(self): """Test 404 middleware when the 404 status is returned.""" resp = await error_middleware(None, return_404_handler) self.assertEqual(resp.status, 404) - self.assertIsInstance(resp, FileResponse) + self.assertIsInstance(resp, Response) async def test_404_exception(self): """Test 404 middlewrae when the 404 status is risen.""" resp = await error_middleware(True, return_404_handler) self.assertEqual(resp.status, 404) - self.assertIsInstance(resp, FileResponse) + self.assertIsInstance(resp, Response) async def test_error_middleware_no_error(self): """Test the general error middleware with correct status.""" diff --git a/tox.ini b/tox.ini index ab953fc3c..d983294d2 100644 --- a/tox.ini +++ b/tox.ini @@ -16,7 +16,7 @@ deps = pydocstyle==3.0.0 flake8 flake8-docstrings -commands = flake8 . +commands = flake8 swift_browser_ui tests ui_tests [testenv:docs] ; skip_install = true