about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--gn_auth/__init__.py3
-rw-r--r--gn_auth/errors.py20
2 files changed, 23 insertions, 0 deletions
diff --git a/gn_auth/__init__.py b/gn_auth/__init__.py
index 446ba19..6df1bc7 100644
--- a/gn_auth/__init__.py
+++ b/gn_auth/__init__.py
@@ -12,6 +12,7 @@ from gn_auth.auth.views import oauth2
 from gn_auth.auth.authentication.oauth2.server import setup_oauth2_server
 
 from . import settings
+from .errors import register_error_handlers
 
 class ConfigurationError(Exception):
     """Raised in case of a configuration error."""
@@ -74,4 +75,6 @@ def create_app(config: Optional[dict] = None) -> Flask:
     app.register_blueprint(misc, url_prefix="/")
     app.register_blueprint(oauth2, url_prefix="/auth")
 
+    register_error_handlers(app)
+
     return app
diff --git a/gn_auth/errors.py b/gn_auth/errors.py
new file mode 100644
index 0000000..bd2c5eb
--- /dev/null
+++ b/gn_auth/errors.py
@@ -0,0 +1,20 @@
+"""Handle application level errors."""
+from flask import Flask, jsonify, current_app
+
+from gn_auth.auth.authorisation.errors import AuthorisationError
+
+def handle_authorisation_error(exc: AuthorisationError):
+    """Handle AuthorisationError if not handled anywhere else."""
+    current_app.logger.error(exc)
+    return jsonify({
+        "error": type(exc).__name__,
+        "error_description": " :: ".join(exc.args)
+    }), exc.error_code
+
+__error_handlers__ = {
+    AuthorisationError: handle_authorisation_error
+}
+def register_error_handlers(app: Flask):
+    """Register ALL defined error handlers"""
+    for klass, error_handler in __error_handlers__.items():
+        app.register_error_handler(klass, error_handler)