From c20c3e51b2f01f2e84600fd61db1a9a0ed1fca31 Mon Sep 17 00:00:00 2001 From: Arie Peterson <arie@greenhost.nl> Date: Fri, 13 Sep 2024 14:39:12 +0200 Subject: [PATCH] Adapt backend to kratos client changes --- backend/areas/apps/apps_service.py | 2 +- backend/areas/users/user_service.py | 12 ++++-------- backend/cliapp/cliapp/cli.py | 5 +---- backend/helpers/kratos_user.py | 13 +++++-------- backend/helpers/provision.py | 2 +- backend/web/login/login.py | 17 +++++++---------- 6 files changed, 19 insertions(+), 32 deletions(-) diff --git a/backend/areas/apps/apps_service.py b/backend/areas/apps/apps_service.py index 98971d8c..37025e93 100644 --- a/backend/areas/apps/apps_service.py +++ b/backend/areas/apps/apps_service.py @@ -25,7 +25,7 @@ class AppsService: def get_accessible_apps(): apps = App.query.all() - kratos_admin_api_configuration = ory_kratos_client.Configuration(host=KRATOS_ADMIN_URL, discard_unknown_keys=True) + kratos_admin_api_configuration = ory_kratos_client.Configuration(host=KRATOS_ADMIN_URL) with ory_kratos_client.ApiClient(kratos_admin_api_configuration) as kratos_admin_client: kratos_identity_api = identity_api.IdentityApi(kratos_admin_client) diff --git a/backend/areas/users/user_service.py b/backend/areas/users/user_service.py index 79746a50..5b62ebce 100644 --- a/backend/areas/users/user_service.py +++ b/backend/areas/users/user_service.py @@ -1,9 +1,7 @@ import ory_kratos_client -from ory_kratos_client.model.json_patch \ +from ory_kratos_client.models.json_patch \ import JsonPatch -from ory_kratos_client.model.json_patch_document \ - import JsonPatchDocument -from ory_kratos_client.model.update_recovery_flow_body \ +from ory_kratos_client.models.update_recovery_flow_body \ import UpdateRecoveryFlowBody from ory_kratos_client.api import frontend_api, identity_api @@ -24,8 +22,7 @@ from helpers.provision import Provision from helpers.threads import request_provision -kratos_admin_api_configuration = \ - ory_kratos_client.Configuration(host=KRATOS_ADMIN_URL, discard_unknown_keys=True) +kratos_admin_api_configuration = ory_kratos_client.Configuration(host=KRATOS_ADMIN_URL) kratos_client = ory_kratos_client.ApiClient(kratos_admin_api_configuration) kratos_frontend_api = frontend_api.FrontendApi(kratos_client) kratos_identity_api = identity_api.IdentityApi(kratos_client) @@ -148,8 +145,7 @@ class UserService: # We used a PUT before, but that deletes any attributes that we don't # specify, which is not so convenient. So we PATCH just the attributes # we're changing instead. - patch_doc = JsonPatchDocument(value=patches) - kratos_identity_api.patch_identity(id, json_patch_document=patch_doc) + kratos_identity_api.patch_identity(id, json_patch=patches) if data["app_roles"]: app_roles = data["app_roles"] diff --git a/backend/cliapp/cliapp/cli.py b/backend/cliapp/cliapp/cli.py index c8dfdf8c..73ab8824 100644 --- a/backend/cliapp/cliapp/cli.py +++ b/backend/cliapp/cliapp/cli.py @@ -27,10 +27,7 @@ from database import db # APIs # Kratos has an admin and public end-point. We create an API for the admin one. -# The kratos implementation has bugs, which forces us to set the -# discard_unknown_keys to True. -kratos_admin_api_configuration = \ - ory_kratos_client.Configuration(host=KRATOS_ADMIN_URL, discard_unknown_keys=True) +kratos_admin_api_configuration = ory_kratos_client.Configuration(host=KRATOS_ADMIN_URL) kratos_admin_client = ory_kratos_client.ApiClient(kratos_admin_api_configuration) kratos_identity_api = identity_api.IdentityApi(kratos_admin_client) diff --git a/backend/helpers/kratos_user.py b/backend/helpers/kratos_user.py index a71ef721..67fdbe7d 100644 --- a/backend/helpers/kratos_user.py +++ b/backend/helpers/kratos_user.py @@ -10,14 +10,12 @@ import urllib.request from typing import Dict from urllib.request import Request -from ory_kratos_client.model.create_identity_body import CreateIdentityBody -from ory_kratos_client.model.create_recovery_link_for_identity_body \ +from ory_kratos_client.models.create_identity_body import CreateIdentityBody +from ory_kratos_client.models.create_recovery_link_for_identity_body \ import CreateRecoveryLinkForIdentityBody -from ory_kratos_client.model.json_patch \ +from ory_kratos_client.models.json_patch \ import JsonPatch -from ory_kratos_client.model.json_patch_document \ - import JsonPatchDocument -from ory_kratos_client.model.update_identity_body import UpdateIdentityBody +from ory_kratos_client.models.update_identity_body import UpdateIdentityBody from ory_kratos_client.rest import ApiException as KratosApiException from .classes import RedirectFilter @@ -122,8 +120,7 @@ class KratosUser(): for k, v in kwargs.items(): current_app.logger.info(f" {k}={v}") patches.append(JsonPatch(op="replace", path=f"/metadata_admin/{k}", value=v)) - patch_doc = JsonPatchDocument(value=patches) - self.api.patch_identity(self.__uuid, json_patch_document=patch_doc) + self.api.patch_identity(self.__uuid, json_patch=patches) def delete(self): """Deletes the object from kratos diff --git a/backend/helpers/provision.py b/backend/helpers/provision.py index 237ad5d1..c9eee557 100644 --- a/backend/helpers/provision.py +++ b/backend/helpers/provision.py @@ -140,7 +140,7 @@ class ScimUser: class Provision: def __init__(self): # Set up kratos API client. - kratos_admin_api_configuration = ory_kratos_client.Configuration(host=config.KRATOS_ADMIN_URL, discard_unknown_keys=True) + kratos_admin_api_configuration = ory_kratos_client.Configuration(host=config.KRATOS_ADMIN_URL) kratos_admin_client = ory_kratos_client.ApiClient(kratos_admin_api_configuration) self.kratos_identity_api = identity_api.IdentityApi(kratos_admin_client) diff --git a/backend/web/login/login.py b/backend/web/login/login.py index 344a046f..e31958ab 100644 --- a/backend/web/login/login.py +++ b/backend/web/login/login.py @@ -17,7 +17,7 @@ from ory_hydra_client.models import AcceptConsentRequest, AcceptLoginRequest, Co import ory_hydra_client.exceptions as hydra_exceptions import ory_kratos_client from ory_kratos_client.api import frontend_api, identity_api -from ory_kratos_client.model.authenticator_assurance_level import AuthenticatorAssuranceLevel +from ory_kratos_client.models.authenticator_assurance_level import AuthenticatorAssuranceLevel from flask import abort, current_app, jsonify, redirect, render_template, request from database import db @@ -43,16 +43,13 @@ hydra_client = ory_hydra_client.ApiClient(hydra_admin_api_configuration) hydra_admin_api = admin_api.AdminApi(hydra_client) # Kratos has an admin and public end-point. We create an API for them -# both. The kratos implementation has bugs, which forces us to set -# the discard_unknown_keys to True. -kratos_admin_api_configuration = \ - ory_kratos_client.Configuration(host=KRATOS_ADMIN_URL, discard_unknown_keys=True) +# both. +kratos_admin_api_configuration = ory_kratos_client.Configuration(host=KRATOS_ADMIN_URL) kratos_admin_client = ory_kratos_client.ApiClient(kratos_admin_api_configuration) admin_identity_api = identity_api.IdentityApi(kratos_admin_client) admin_frontend_api = frontend_api.FrontendApi(kratos_admin_client) -kratos_public_api_configuration = \ - ory_kratos_client.Configuration(host=KRATOS_PUBLIC_URL, discard_unknown_keys=True) +kratos_public_api_configuration = ory_kratos_client.Configuration(host=KRATOS_PUBLIC_URL) kratos_public_client = ory_kratos_client.ApiClient(kratos_public_api_configuration) kratos_public_frontend_api = frontend_api.FrontendApi(kratos_public_client) @@ -152,7 +149,7 @@ def login(): cookies = request.headers['cookie'] flow = kratos_public_frontend_api.get_login_flow(flow, cookie=cookies) # current_app.logger.info("flow found in login: {}".format(flow)) - refresh = flow['refresh'] + refresh = flow.refresh if refresh: message = { "id": "S_CONFIRM_CREDENTIALS", @@ -196,10 +193,10 @@ def login(): if identity and not refresh: # We are already logged in, and don't need to refresh. - if 'name' in identity['traits']: + if 'name' in identity.traits: # Add a space in front of the "name" so the template can put it # between "Welcome" and the comma - name = " " + identity['traits']['name'] + name = " " + identity.traits['name'] else: name = "" return render_template("loggedin.html", -- GitLab