diff --git a/backend/database/hydra.py b/backend/database/hydra.py index d46c83c02d4d7fe6612e1aa5279d24500340f14c..b1e808342661830da590ab4c87a67f270a05686a 100644 --- a/backend/database/hydra.py +++ b/backend/database/hydra.py @@ -1,6 +1,8 @@ -from hydra_client import HydraAdmin, exceptions +from ory_hydra_client.api import admin_api +import ory_hydra_client from promise import Promise from promise.dataloader import DataLoader +from urllib.parse import urlparse import logging module_logger = logging.getLogger("backend.hydra") @@ -8,7 +10,9 @@ module_logger = logging.getLogger("backend.hydra") class oAuth2ClientLoader(DataLoader): def __init__(self, hydra_admin_url): super().__init__() - self.hydra = HydraAdmin(hydra_admin_url) + hydra_config = ory_hydra_client.Configuration(host=hydra_admin_url) + api_client = ory_hydra_client.ApiClient(hydra_config) + self.hydra = admin_api.AdminApi(api_client) self.logger = logging.getLogger("backend.hydra.oAuth2ClientLoader") # overrides DataLoader.batch_load_fn @@ -17,12 +21,8 @@ class oAuth2ClientLoader(DataLoader): def _get_hydra_client(self, client_id): try: - return self.hydra.client(id=client_id) - except exceptions.NotFound as error: + return self.hydra.get_o_auth2_client(id=client_id) + except ory_hydra_client.OpenApiException as error: self.logger.error( - "requesting resource from hydra-admin API failed - hydra oAuth client {0} not found".format(client_id)) - return None - except exceptions.ConnectionError as error: - self.logger.critical("hydra-admin API server is not reachable") - self.clear_all() + f"requesting resource from hydra-admin for client {client_id} failed. Api encoutered an error") return None diff --git a/backend/database/schema.py b/backend/database/schema.py index 9a523bac436bcf15cdb687e8ba164c2d039bed93..9b957cbf7dfd51974ceaaf908977aef05881293a 100644 --- a/backend/database/schema.py +++ b/backend/database/schema.py @@ -66,7 +66,7 @@ class Application(SQLAlchemyObjectType): def resolve_logo(parent, info): client = oauth2_client_loader.load(parent.name).then( - lambda client: None if client is None else client.logo_uri).get() + lambda client: None if client is None else client.metadata["logo_uri"]).get() # Clear the data loader cache in case the object couldn't get fetched if client is None: oauth2_client_loader.clear(parent.name) @@ -74,7 +74,7 @@ class Application(SQLAlchemyObjectType): def resolve_url(parent, info): client = oauth2_client_loader.load(parent.name).then( - lambda client: None if client is None else client.client_uri).get() + lambda client: None if client is None else client.metadata["app_url"]).get() # Clear the data loader cache in case the object couldn't get fetched if client is None: oauth2_client_loader.clear(parent.name) diff --git a/backend/requirements.txt b/backend/requirements.txt index 8e8d1d64eb8c37ea6d7203656f88914a01ce0f50..264d09a2ea16e48d769952ef4743a376fb838ccb 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -8,6 +8,6 @@ graphene_sqlalchemy Flask-GraphQL bcrypt graphqlclient -hydra-client +ory-hydra-client alembic email-validator