From a99321706d075f192a7a3060172bbb8a0f03fa24 Mon Sep 17 00:00:00 2001 From: Mark Date: Wed, 24 Mar 2021 14:10:52 +0100 Subject: [PATCH 1/8] use new upstream library and meta fields --- backend/database/hydra.py | 23 +++++++++++++++++++---- backend/database/schema.py | 4 ++-- backend/requirements.txt | 2 +- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/backend/database/hydra.py b/backend/database/hydra.py index d46c83c..817da18 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,16 @@ module_logger = logging.getLogger("backend.hydra") class oAuth2ClientLoader(DataLoader): def __init__(self, hydra_admin_url): super().__init__() - self.hydra = HydraAdmin(hydra_admin_url) + ## Hydra uses the base url now + ## TODO: remove this here and pass the base url via env + url = urlparse(hyra_admin_url) + hydra_url = f"{url.scheme}://{url.netloc}" + if url.port is not None: + hydra_url = hydra_url[:hydra_url.find(":")] + + hydra_config = ory_hydra_client.Configuration(host=hydra_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,11 +28,15 @@ 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.NotFoundException 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.ApiException as error: + self.logger.error( + "requesting resource from hydra-admin API failed. Api encoutered an error") + return None except exceptions.ConnectionError as error: self.logger.critical("hydra-admin API server is not reachable") self.clear_all() diff --git a/backend/database/schema.py b/backend/database/schema.py index 9a523ba..9b957cb 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 8e8d1d6..264d09a 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 -- GitLab From b7cccaa0f4150a9f5c6f6b52f868c09e0a8827d6 Mon Sep 17 00:00:00 2001 From: Mark Date: Wed, 24 Mar 2021 14:19:53 +0100 Subject: [PATCH 2/8] fix --- backend/database/hydra.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/database/hydra.py b/backend/database/hydra.py index 817da18..932f5f7 100644 --- a/backend/database/hydra.py +++ b/backend/database/hydra.py @@ -12,7 +12,7 @@ class oAuth2ClientLoader(DataLoader): super().__init__() ## Hydra uses the base url now ## TODO: remove this here and pass the base url via env - url = urlparse(hyra_admin_url) + url = urlparse(hydra_admin_url) hydra_url = f"{url.scheme}://{url.netloc}" if url.port is not None: hydra_url = hydra_url[:hydra_url.find(":")] -- GitLab From 35aead48b22fab89170fe22db96a1a0360b8c594 Mon Sep 17 00:00:00 2001 From: Mark Date: Wed, 24 Mar 2021 14:25:34 +0100 Subject: [PATCH 3/8] fix --- backend/database/hydra.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/backend/database/hydra.py b/backend/database/hydra.py index 932f5f7..7503eb2 100644 --- a/backend/database/hydra.py +++ b/backend/database/hydra.py @@ -29,11 +29,7 @@ class oAuth2ClientLoader(DataLoader): def _get_hydra_client(self, client_id): try: return self.hydra.get_o_auth2_client(id=client_id) - except ory_hydra_client.NotFoundException 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.ApiException as error: + except ory_hydra_client.OpenApiException as error: self.logger.error( "requesting resource from hydra-admin API failed. Api encoutered an error") return None -- GitLab From 89558edd5eccafcb25a39a3312ba21b3082924cd Mon Sep 17 00:00:00 2001 From: Mark Date: Wed, 24 Mar 2021 14:30:50 +0100 Subject: [PATCH 4/8] fix --- backend/database/hydra.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/backend/database/hydra.py b/backend/database/hydra.py index 7503eb2..b85fe91 100644 --- a/backend/database/hydra.py +++ b/backend/database/hydra.py @@ -33,7 +33,3 @@ class oAuth2ClientLoader(DataLoader): self.logger.error( "requesting resource from hydra-admin API failed. Api encoutered an error") return None - except exceptions.ConnectionError as error: - self.logger.critical("hydra-admin API server is not reachable") - self.clear_all() - return None -- GitLab From cb296aa57a6d2c6164a4c0843c0e100f7f78c05c Mon Sep 17 00:00:00 2001 From: Mark Date: Wed, 24 Mar 2021 14:39:07 +0100 Subject: [PATCH 5/8] reverse some of the changes that were made when changing to new lib --- backend/database/hydra.py | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/backend/database/hydra.py b/backend/database/hydra.py index b85fe91..85adf9c 100644 --- a/backend/database/hydra.py +++ b/backend/database/hydra.py @@ -10,14 +10,7 @@ module_logger = logging.getLogger("backend.hydra") class oAuth2ClientLoader(DataLoader): def __init__(self, hydra_admin_url): super().__init__() - ## Hydra uses the base url now - ## TODO: remove this here and pass the base url via env - url = urlparse(hydra_admin_url) - hydra_url = f"{url.scheme}://{url.netloc}" - if url.port is not None: - hydra_url = hydra_url[:hydra_url.find(":")] - - hydra_config = ory_hydra_client.Configuration(host=hydra_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") -- GitLab From d11a9552907d0f12c2745effed9a7a852017cbae Mon Sep 17 00:00:00 2001 From: Mark Date: Wed, 24 Mar 2021 14:45:39 +0100 Subject: [PATCH 6/8] add reason to exception --- backend/database/hydra.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/database/hydra.py b/backend/database/hydra.py index 85adf9c..5f63bd2 100644 --- a/backend/database/hydra.py +++ b/backend/database/hydra.py @@ -24,5 +24,5 @@ class oAuth2ClientLoader(DataLoader): 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. Api encoutered an error") + f"requesting resource from hydra-admin API failed. Api encoutered an error: {error.reason}") return None -- GitLab From 22afef29854da95b85206bef47096bc86e89c6ad Mon Sep 17 00:00:00 2001 From: Mark Date: Wed, 24 Mar 2021 14:46:48 +0100 Subject: [PATCH 7/8] add client info --- backend/database/hydra.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/database/hydra.py b/backend/database/hydra.py index 5f63bd2..4871fbe 100644 --- a/backend/database/hydra.py +++ b/backend/database/hydra.py @@ -24,5 +24,5 @@ class oAuth2ClientLoader(DataLoader): return self.hydra.get_o_auth2_client(id=client_id) except ory_hydra_client.OpenApiException as error: self.logger.error( - f"requesting resource from hydra-admin API failed. Api encoutered an error: {error.reason}") + f"requesting resource from hydra-admin for client {client_id} failed. Api encoutered an error: {error.reason}") return None -- GitLab From 489713a1d54991bdca379e451d224be013d1b0e7 Mon Sep 17 00:00:00 2001 From: Mark Date: Wed, 24 Mar 2021 14:58:42 +0100 Subject: [PATCH 8/8] fix --- backend/database/hydra.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/database/hydra.py b/backend/database/hydra.py index 4871fbe..b1e8083 100644 --- a/backend/database/hydra.py +++ b/backend/database/hydra.py @@ -24,5 +24,5 @@ class oAuth2ClientLoader(DataLoader): return self.hydra.get_o_auth2_client(id=client_id) except ory_hydra_client.OpenApiException as error: self.logger.error( - f"requesting resource from hydra-admin for client {client_id} failed. Api encoutered an error: {error.reason}") + f"requesting resource from hydra-admin for client {client_id} failed. Api encoutered an error") return None -- GitLab