diff --git a/consent_provider/app.py b/consent_provider/app.py index 40d9de2440894150a177ebbe77407796638ff8f9..0e17b7bb39634b711655f154ee978e84ec0bf856 100644 --- a/consent_provider/app.py +++ b/consent_provider/app.py @@ -2,8 +2,7 @@ from flask import abort, Flask, redirect, request from flask.views import View from os import urandom, environ from hydra_client import HydraAdmin -from db import User -import urllib +from db import User, BackendConnectionError HYDRA_ADMIN_URL = environ['HYDRA_ADMIN_URL'] @@ -20,10 +19,10 @@ def home(): username = consent_request.subject try: user = User(username) - except urllib.error.HTTPError as e: + except BackendConnectionError as error: # TODO: replace with propper logging via logger print("Retrieving user object from GraphQL server failed") - print(e) + print(error) return redirect(consent_request.reject( "Permission denied", error_description="Login request was denied due to an internal server error")) diff --git a/consent_provider/db.py b/consent_provider/db.py index 6e9f0206e37cd405539e29e77e4eaf0e6399d68a..b0302f7a2fcaa0ae9623c78e0a57786a5f90d095 100644 --- a/consent_provider/db.py +++ b/consent_provider/db.py @@ -13,8 +13,11 @@ class User(): self.username = username try: self._load_remote_user_info() - except urllib.error.HTTPError as e: - raise e + except urllib.error.HTTPError as error: + raise BackendConnectionError( + error.code, + error.headers, + ("Error during retrieval of userdata - " + error.reason)) def _load_remote_user_info(self): querystring = '''{{ @@ -57,3 +60,17 @@ class User(): "email" : self.email, "picture": ""} } + + +class BackendConnectionError(Exception): + """Raised when requests to the backend server fail + + Attributes: + code -- http response code + headers -- http response headers + reason -- reson for the error + """ + def __init__(self, code, headers, reason): + self.code = code + self.headers = headers + self.reaseon = reason