From 1740ccbe30946aa6693a6a9ed8211a2ff7cfbf3d Mon Sep 17 00:00:00 2001 From: Frederick Muriuki Muriithi Date: Wed, 9 Jul 2025 11:51:37 -0500 Subject: Improve error handling and reporting. - Refactor out common functionality into reusable utilities - Handle errors from the Authlib library/package - Handle 4xx errors generically. --- gn_auth/errors/http/http_4xx_errors.py | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) (limited to 'gn_auth/errors/http/http_4xx_errors.py') diff --git a/gn_auth/errors/http/http_4xx_errors.py b/gn_auth/errors/http/http_4xx_errors.py index 704f11b..3a2ed88 100644 --- a/gn_auth/errors/http/http_4xx_errors.py +++ b/gn_auth/errors/http/http_4xx_errors.py @@ -1,31 +1,23 @@ """Handlers for HTTP 4** errors""" import logging -from werkzeug.exceptions import NotFound -from flask import request, jsonify, render_template +from werkzeug.exceptions import NotFound, Forbidden, Unauthorized -from gn_auth.errors.tracing import add_trace +from gn_auth.errors.common import build_handler __all__ = ["http_4xx_error_handlers"] logger = logging.getLogger(__name__) -def page_not_found(exc): - """404 handler.""" - logger.error("Page '%s' was not found.", request.url, exc_info=True) - content_type = request.content_type - if bool(content_type) and content_type.lower() == "application/json": - return jsonify(add_trace(exc, { - "error": exc.name, - "error_description": (f"The page '{request.url}' does not exist on " - "this server.") - })), exc.code - - return render_template("404.html", page=request.url), exc.code - def http_4xx_error_handlers() -> dict: """Return handlers for HTTP errors in the 400-499 range""" return { - NotFound: page_not_found + Forbidden: build_handler( + "You do not have the necessary privileges to access the requested " + "resource."), + NotFound: build_handler( + "The requested page does not exist on this server."), + Unauthorized: build_handler( + "You are not authorised to access the requested resource.") } -- cgit v1.2.3