From c0865782ed5db04f10f6f8e3a1c4cfe7d8a388b2 Mon Sep 17 00:00:00 2001 From: Brandon Wang Date: Wed, 27 Nov 2024 13:31:46 -0600 Subject: [PATCH 01/15] adding smart on fhir configuration endpoint --- apps/wellknown/urls.py | 5 ++++ apps/wellknown/views/__init__.py | 2 +- apps/wellknown/views/openid.py | 39 +++++++++++++++++++++++++++++++- 3 files changed, 44 insertions(+), 2 deletions(-) diff --git a/apps/wellknown/urls.py b/apps/wellknown/urls.py index 343ddf6cb..03c2956c4 100644 --- a/apps/wellknown/urls.py +++ b/apps/wellknown/urls.py @@ -2,6 +2,7 @@ from waffle.decorators import waffle_switch from .views import ( openid_configuration, + smart_on_fhir_configuration, ApplicationListView, ApplicationLabelView, PublicApplicationListView, @@ -10,6 +11,7 @@ urlpatterns = [ path("openid-configuration", openid_configuration, name="openid-configuration"), + path("smart-on-fhir-configuration", smart_on_fhir_configuration, name="smart-on-fhir-configuration"), path( "applications", waffle_switch("wellknown_applications")(ApplicationListView.as_view()), @@ -28,6 +30,9 @@ path( "openid-configuration-v2", openid_configuration, name="openid-configuration-v2" ), + path( + "smart-on-fhir-configuration", smart_on_fhir_configuration, name="smart-on-fhir-configuration" + ), path( "applications-v2", waffle_switch("wellknown_applications")(ApplicationListView.as_view()), diff --git a/apps/wellknown/views/__init__.py b/apps/wellknown/views/__init__.py index ad4db96d2..89d5278c3 100644 --- a/apps/wellknown/views/__init__.py +++ b/apps/wellknown/views/__init__.py @@ -1,3 +1,3 @@ -from .openid import openid_configuration, base_issuer, build_endpoint_info # NOQA +from .openid import openid_configuration, smart_on_fhir_configuration, base_issuer, build_endpoint_info # NOQA from .application import ApplicationListView, ApplicationLabelView # NOQA from .public_applications import ApplicationListView as PublicApplicationListView # NOQA diff --git a/apps/wellknown/views/openid.py b/apps/wellknown/views/openid.py index 68f3ac9b2..5015cc7d3 100644 --- a/apps/wellknown/views/openid.py +++ b/apps/wellknown/views/openid.py @@ -9,7 +9,16 @@ import apps.logging.request_logger as bb2logging logger = logging.getLogger(bb2logging.HHS_SERVER_LOGNAME_FMT.format(__name__)) - +SCOPES_SUPPORTED = ["profile", "patient/Patient.read", "patient/ExplanationOfBenefit.read", "patient/Coverage.read"] +CODE_CHALLENGE_METHODS_SUPPORTED = ["S256"] +CAPABILITIES = [ + "client-confidential-symmetric", + "sso-openid-connect", + "launch-standalone", + "permission-offline", + "permission-patient", + "permission-v1" + ] @require_GET def openid_configuration(request): @@ -22,6 +31,17 @@ def openid_configuration(request): data = build_endpoint_info(data, issuer=issuer, v2=v2) return JsonResponse(data) +@require_GET +def smart_on_fhir_configuration(request): + """ + Views that returns smart_configuration. + """ + data = OrderedDict() + issuer = base_issuer(request) + v2 = request.path.endswith('smart-configuration-v2') or request.path.endswith('smartConfigV2') + data = build_smart_config_endpoint(data, issuer=issuer, v2=v2) + return JsonResponse(data) + def base_issuer(request): """ @@ -84,3 +104,20 @@ def build_endpoint_info(data=OrderedDict(), v2=False, issuer=""): data["fhir_metadata_uri"] = issuer + \ reverse('fhir_conformance_metadata' if not v2 else 'fhir_conformance_metadata_v2') return data + +def build_smart_config_endpoint(data=OrderedDict(), v2=False, issuer=""): + """ + construct the smart config endpoint response. Takes in + issuer should be http: or https:// prefixed url. + + :param data: + :return: + """ + + data = build_endpoint_info(data, issuer=issuer, v2=v2) + + data["scopes_supported"] = SCOPES_SUPPORTED + data["code_challenge_methods_supported"] = CODE_CHALLENGE_METHODS_SUPPORTED + data["capabilities"] = CAPABILITIES + + return data \ No newline at end of file From e585d92ef9b72c4345de6ae4402ce73e79ec7adb Mon Sep 17 00:00:00 2001 From: Brandon Wang Date: Fri, 29 Nov 2024 11:26:03 -0600 Subject: [PATCH 02/15] fixing pylint errors --- apps/wellknown/views/openid.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/apps/wellknown/views/openid.py b/apps/wellknown/views/openid.py index 5015cc7d3..458d5d5ef 100644 --- a/apps/wellknown/views/openid.py +++ b/apps/wellknown/views/openid.py @@ -18,7 +18,8 @@ "permission-offline", "permission-patient", "permission-v1" - ] + ] + @require_GET def openid_configuration(request): @@ -31,6 +32,7 @@ def openid_configuration(request): data = build_endpoint_info(data, issuer=issuer, v2=v2) return JsonResponse(data) + @require_GET def smart_on_fhir_configuration(request): """ @@ -105,6 +107,7 @@ def build_endpoint_info(data=OrderedDict(), v2=False, issuer=""): reverse('fhir_conformance_metadata' if not v2 else 'fhir_conformance_metadata_v2') return data + def build_smart_config_endpoint(data=OrderedDict(), v2=False, issuer=""): """ construct the smart config endpoint response. Takes in @@ -120,4 +123,4 @@ def build_smart_config_endpoint(data=OrderedDict(), v2=False, issuer=""): data["code_challenge_methods_supported"] = CODE_CHALLENGE_METHODS_SUPPORTED data["capabilities"] = CAPABILITIES - return data \ No newline at end of file + return data From 2b414fb9222e796f730a1e8d8a0d6f5202801982 Mon Sep 17 00:00:00 2001 From: Brandon Wang Date: Fri, 29 Nov 2024 11:42:53 -0600 Subject: [PATCH 03/15] more fixing of pylint errors --- apps/wellknown/views/openid.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/wellknown/views/openid.py b/apps/wellknown/views/openid.py index 458d5d5ef..0fa47a6bb 100644 --- a/apps/wellknown/views/openid.py +++ b/apps/wellknown/views/openid.py @@ -18,7 +18,7 @@ "permission-offline", "permission-patient", "permission-v1" - ] +] @require_GET @@ -110,7 +110,7 @@ def build_endpoint_info(data=OrderedDict(), v2=False, issuer=""): def build_smart_config_endpoint(data=OrderedDict(), v2=False, issuer=""): """ - construct the smart config endpoint response. Takes in + construct the smart config endpoint response. Takes in output of build_endpoint_info since they share many fields issuer should be http: or https:// prefixed url. :param data: @@ -122,5 +122,5 @@ def build_smart_config_endpoint(data=OrderedDict(), v2=False, issuer=""): data["scopes_supported"] = SCOPES_SUPPORTED data["code_challenge_methods_supported"] = CODE_CHALLENGE_METHODS_SUPPORTED data["capabilities"] = CAPABILITIES - + return data From 83109afef71a0b2d132a2da5c3ac63f397091f55 Mon Sep 17 00:00:00 2001 From: Brandon Wang Date: Fri, 29 Nov 2024 12:29:01 -0600 Subject: [PATCH 04/15] removing unnecessary fields for smart configuration response --- apps/wellknown/urls.py | 6 +++--- apps/wellknown/views/__init__.py | 2 +- apps/wellknown/views/openid.py | 7 ++++++- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/apps/wellknown/urls.py b/apps/wellknown/urls.py index 03c2956c4..ade5ad3e0 100644 --- a/apps/wellknown/urls.py +++ b/apps/wellknown/urls.py @@ -2,7 +2,7 @@ from waffle.decorators import waffle_switch from .views import ( openid_configuration, - smart_on_fhir_configuration, + smart_configuration, ApplicationListView, ApplicationLabelView, PublicApplicationListView, @@ -11,7 +11,7 @@ urlpatterns = [ path("openid-configuration", openid_configuration, name="openid-configuration"), - path("smart-on-fhir-configuration", smart_on_fhir_configuration, name="smart-on-fhir-configuration"), + path("smart-configuration", smart_configuration, name="smart-configuration"), path( "applications", waffle_switch("wellknown_applications")(ApplicationListView.as_view()), @@ -31,7 +31,7 @@ "openid-configuration-v2", openid_configuration, name="openid-configuration-v2" ), path( - "smart-on-fhir-configuration", smart_on_fhir_configuration, name="smart-on-fhir-configuration" + "smart-on-fhir-configuration", smart_configuration, name="smart-on-fhir-configuration" ), path( "applications-v2", diff --git a/apps/wellknown/views/__init__.py b/apps/wellknown/views/__init__.py index 89d5278c3..329343281 100644 --- a/apps/wellknown/views/__init__.py +++ b/apps/wellknown/views/__init__.py @@ -1,3 +1,3 @@ -from .openid import openid_configuration, smart_on_fhir_configuration, base_issuer, build_endpoint_info # NOQA +from .openid import openid_configuration, smart_configuration, base_issuer, build_endpoint_info # NOQA from .application import ApplicationListView, ApplicationLabelView # NOQA from .public_applications import ApplicationListView as PublicApplicationListView # NOQA diff --git a/apps/wellknown/views/openid.py b/apps/wellknown/views/openid.py index 0fa47a6bb..309934ff0 100644 --- a/apps/wellknown/views/openid.py +++ b/apps/wellknown/views/openid.py @@ -34,7 +34,7 @@ def openid_configuration(request): @require_GET -def smart_on_fhir_configuration(request): +def smart_configuration(request): """ Views that returns smart_configuration. """ @@ -118,6 +118,11 @@ def build_smart_config_endpoint(data=OrderedDict(), v2=False, issuer=""): """ data = build_endpoint_info(data, issuer=issuer, v2=v2) + del(data["userinfo_endpoint"]) + del(data["ui_locales_supported"]) + del(data["service_documentation"]) + del(data["op_tos_uri"]) + del(data["fhir_metadata_uri"]) data["scopes_supported"] = SCOPES_SUPPORTED data["code_challenge_methods_supported"] = CODE_CHALLENGE_METHODS_SUPPORTED From e5ebec87c0adf463ada47f850a2fa016ac99ad0f Mon Sep 17 00:00:00 2001 From: Brandon Wang Date: Fri, 29 Nov 2024 12:38:37 -0600 Subject: [PATCH 05/15] fixing url path for smart config v2 --- apps/wellknown/urls.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/wellknown/urls.py b/apps/wellknown/urls.py index ade5ad3e0..32873851b 100644 --- a/apps/wellknown/urls.py +++ b/apps/wellknown/urls.py @@ -31,7 +31,7 @@ "openid-configuration-v2", openid_configuration, name="openid-configuration-v2" ), path( - "smart-on-fhir-configuration", smart_configuration, name="smart-on-fhir-configuration" + "smart-configuration-v2", smart_configuration, name="smart-on-fhir-configuration-v2" ), path( "applications-v2", From 910390d76920db93b832d1007268232c1f743f7a Mon Sep 17 00:00:00 2001 From: Brandon Wang Date: Fri, 29 Nov 2024 12:51:53 -0600 Subject: [PATCH 06/15] adding authorize-post to capabilities --- apps/wellknown/views/openid.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/wellknown/views/openid.py b/apps/wellknown/views/openid.py index 309934ff0..28d401d02 100644 --- a/apps/wellknown/views/openid.py +++ b/apps/wellknown/views/openid.py @@ -17,7 +17,8 @@ "launch-standalone", "permission-offline", "permission-patient", - "permission-v1" + "permission-v1", + "authorize-post" ] From 9f323b0be8a39fa12787add9de854ee23b07b13a Mon Sep 17 00:00:00 2001 From: Brandon Wang Date: Mon, 2 Dec 2024 13:35:40 -0600 Subject: [PATCH 07/15] removing v1 response and changing all OIDC config responses to v2 --- apps/wellknown/views/openid.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/apps/wellknown/views/openid.py b/apps/wellknown/views/openid.py index 28d401d02..63a14e8a1 100644 --- a/apps/wellknown/views/openid.py +++ b/apps/wellknown/views/openid.py @@ -29,8 +29,7 @@ def openid_configuration(request): """ data = OrderedDict() issuer = base_issuer(request) - v2 = request.path.endswith('openid-configuration-v2') or request.path.endswith('openidConfigV2') - data = build_endpoint_info(data, issuer=issuer, v2=v2) + data = build_endpoint_info(data, issuer=issuer) return JsonResponse(data) @@ -73,7 +72,7 @@ def base_issuer(request): return issuer -def build_endpoint_info(data=OrderedDict(), v2=False, issuer=""): +def build_endpoint_info(data=OrderedDict(), issuer=""): """ construct the data package issuer should be http: or https:// prefixed url. @@ -83,12 +82,12 @@ def build_endpoint_info(data=OrderedDict(), v2=False, issuer=""): """ data["issuer"] = issuer data["authorization_endpoint"] = issuer + \ - reverse('oauth2_provider:authorize' if not v2 else 'oauth2_provider_v2:authorize-v2') + reverse('oauth2_provider_v2:authorize-v2') data["revocation_endpoint"] = issuer + reverse('oauth2_provider:revoke') data["token_endpoint"] = issuer + \ - reverse('oauth2_provider:token' if not v2 else 'oauth2_provider_v2:token-v2') + reverse('oauth2_provider_v2:token-v2') data["userinfo_endpoint"] = issuer + \ - reverse('openid_connect_userinfo' if not v2 else 'openid_connect_userinfo_v2') + reverse('openid_connect_userinfo_v2') data["ui_locales_supported"] = ["en-US", ] data["service_documentation"] = getattr(settings, 'DEVELOPER_DOCS_URI', @@ -105,7 +104,7 @@ def build_endpoint_info(data=OrderedDict(), v2=False, issuer=""): data["response_types_supported"] = ["code", "token"] data["fhir_metadata_uri"] = issuer + \ - reverse('fhir_conformance_metadata' if not v2 else 'fhir_conformance_metadata_v2') + reverse('fhir_conformance_metadata_v2') return data From c389c2b3df60b92ac3861993b5694f9c3709b5f9 Mon Sep 17 00:00:00 2001 From: Brandon Wang Date: Mon, 2 Dec 2024 13:48:06 -0600 Subject: [PATCH 08/15] fixing smart config url pattern --- apps/wellknown/urls.py | 5 ----- apps/wellknown/views/openid.py | 7 +++---- hhs_oauth_server/urls.py | 3 +++ 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/apps/wellknown/urls.py b/apps/wellknown/urls.py index 32873851b..343ddf6cb 100644 --- a/apps/wellknown/urls.py +++ b/apps/wellknown/urls.py @@ -2,7 +2,6 @@ from waffle.decorators import waffle_switch from .views import ( openid_configuration, - smart_configuration, ApplicationListView, ApplicationLabelView, PublicApplicationListView, @@ -11,7 +10,6 @@ urlpatterns = [ path("openid-configuration", openid_configuration, name="openid-configuration"), - path("smart-configuration", smart_configuration, name="smart-configuration"), path( "applications", waffle_switch("wellknown_applications")(ApplicationListView.as_view()), @@ -30,9 +28,6 @@ path( "openid-configuration-v2", openid_configuration, name="openid-configuration-v2" ), - path( - "smart-configuration-v2", smart_configuration, name="smart-on-fhir-configuration-v2" - ), path( "applications-v2", waffle_switch("wellknown_applications")(ApplicationListView.as_view()), diff --git a/apps/wellknown/views/openid.py b/apps/wellknown/views/openid.py index 63a14e8a1..6e08091d2 100644 --- a/apps/wellknown/views/openid.py +++ b/apps/wellknown/views/openid.py @@ -40,8 +40,7 @@ def smart_configuration(request): """ data = OrderedDict() issuer = base_issuer(request) - v2 = request.path.endswith('smart-configuration-v2') or request.path.endswith('smartConfigV2') - data = build_smart_config_endpoint(data, issuer=issuer, v2=v2) + data = build_smart_config_endpoint(data, issuer=issuer) return JsonResponse(data) @@ -108,7 +107,7 @@ def build_endpoint_info(data=OrderedDict(), issuer=""): return data -def build_smart_config_endpoint(data=OrderedDict(), v2=False, issuer=""): +def build_smart_config_endpoint(data=OrderedDict(), issuer=""): """ construct the smart config endpoint response. Takes in output of build_endpoint_info since they share many fields issuer should be http: or https:// prefixed url. @@ -117,7 +116,7 @@ def build_smart_config_endpoint(data=OrderedDict(), v2=False, issuer=""): :return: """ - data = build_endpoint_info(data, issuer=issuer, v2=v2) + data = build_endpoint_info(data, issuer=issuer) del(data["userinfo_endpoint"]) del(data["ui_locales_supported"]) del(data["service_documentation"]) diff --git a/hhs_oauth_server/urls.py b/hhs_oauth_server/urls.py index 6e9812530..5b5ae5118 100644 --- a/hhs_oauth_server/urls.py +++ b/hhs_oauth_server/urls.py @@ -6,6 +6,7 @@ from django.contrib import admin from apps.accounts.views.oauth2_profile import openidconnect_userinfo from apps.fhir.bluebutton.views.home import fhir_conformance, fhir_conformance_v2 +from apps.wellknown.views.openid import smart_configuration from hhs_oauth_server.hhs_oauth_server_context import IsAppInstalled admin.autodiscover() @@ -17,6 +18,7 @@ urlpatterns = [ path("health", include("apps.health.urls")), re_path(r"^.well-known/", include("apps.wellknown.urls")), + path("v1/fhir/.wellknown/smart-configuration", smart_configuration, name="smart_configuration"), path("forms/", include("apps.forms.urls")), path("v1/accounts/", include("apps.accounts.urls")), re_path( @@ -32,6 +34,7 @@ openidconnect_userinfo, name="openid_connect_userinfo_v2", ), + path("v2/fhir/.wellknown/smart-configuration", smart_configuration, name="smart_configuration"), path("v2/fhir/metadata", fhir_conformance_v2, name="fhir_conformance_metadata_v2"), path("v2/fhir/", include("apps.fhir.bluebutton.v2.urls")), path("v2/o/", include("apps.dot_ext.v2.urls")), From b6c5e3c0631d6710239421a8abd9fc1ab3d9f04f Mon Sep 17 00:00:00 2001 From: Brandon Wang Date: Tue, 3 Dec 2024 09:15:39 -0600 Subject: [PATCH 09/15] fixing linter errors --- apps/wellknown/views/openid.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/wellknown/views/openid.py b/apps/wellknown/views/openid.py index 6e08091d2..efc29085e 100644 --- a/apps/wellknown/views/openid.py +++ b/apps/wellknown/views/openid.py @@ -117,11 +117,11 @@ def build_smart_config_endpoint(data=OrderedDict(), issuer=""): """ data = build_endpoint_info(data, issuer=issuer) - del(data["userinfo_endpoint"]) - del(data["ui_locales_supported"]) - del(data["service_documentation"]) - del(data["op_tos_uri"]) - del(data["fhir_metadata_uri"]) + del (data["userinfo_endpoint"]) + del (data["ui_locales_supported"]) + del (data["service_documentation"]) + del (data["op_tos_uri"]) + del (data["fhir_metadata_uri"]) data["scopes_supported"] = SCOPES_SUPPORTED data["code_challenge_methods_supported"] = CODE_CHALLENGE_METHODS_SUPPORTED From 29a14c37eace889b65599dc52dfb87c0dd72f829 Mon Sep 17 00:00:00 2001 From: Brandon Wang Date: Tue, 3 Dec 2024 11:07:57 -0600 Subject: [PATCH 10/15] updating revocation endpoint to v2 and updating swagger openid config to match between versions --- apps/wellknown/views/openid.py | 3 ++- static/openapi.yaml | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/wellknown/views/openid.py b/apps/wellknown/views/openid.py index efc29085e..2987eb316 100644 --- a/apps/wellknown/views/openid.py +++ b/apps/wellknown/views/openid.py @@ -82,7 +82,7 @@ def build_endpoint_info(data=OrderedDict(), issuer=""): data["issuer"] = issuer data["authorization_endpoint"] = issuer + \ reverse('oauth2_provider_v2:authorize-v2') - data["revocation_endpoint"] = issuer + reverse('oauth2_provider:revoke') + data["revocation_endpoint"] = issuer + reverse('oauth2_provider_v2:revoke-token-v2') data["token_endpoint"] = issuer + \ reverse('oauth2_provider_v2:token-v2') data["userinfo_endpoint"] = issuer + \ @@ -122,6 +122,7 @@ def build_smart_config_endpoint(data=OrderedDict(), issuer=""): del (data["service_documentation"]) del (data["op_tos_uri"]) del (data["fhir_metadata_uri"]) + data["grant_types_supported"].remove("refresh_token") data["scopes_supported"] = SCOPES_SUPPORTED data["code_challenge_methods_supported"] = CODE_CHALLENGE_METHODS_SUPPORTED diff --git a/static/openapi.yaml b/static/openapi.yaml index 646955f26..4b743978d 100755 --- a/static/openapi.yaml +++ b/static/openapi.yaml @@ -365,7 +365,7 @@ paths: description: "Error: Bad Gateway, e.g. An error occurred contacting the FHIR server." tags: - v1 - /.well-known/openid-configuration-v2: + /.well-known/openid-configuration: get: operationId: openIdConfig_v2 description: "Returns OIDC (OpenID Connect protocol) Discovery: listing of the OpenID/OAuth endpoints, supported scopes and claims (public access, no token needed)" From 88505186fc62e78e52b9d80a3878e2e8634bad46 Mon Sep 17 00:00:00 2001 From: Brandon Wang Date: Tue, 3 Dec 2024 11:13:40 -0600 Subject: [PATCH 11/15] removing deprecated v2 param --- apps/fhir/bluebutton/utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/fhir/bluebutton/utils.py b/apps/fhir/bluebutton/utils.py index 291bb95cf..00bc2648b 100644 --- a/apps/fhir/bluebutton/utils.py +++ b/apps/fhir/bluebutton/utils.py @@ -599,14 +599,14 @@ def get_response_text(fhir_response=None): return text_in -def build_oauth_resource(request, v2=False, format_type="json"): +def build_oauth_resource(request, format_type="json"): """ Create a resource entry for oauth endpoint(s) for insertion into the conformance/capabilityStatement :return: security """ - endpoints = build_endpoint_info(OrderedDict(), v2, issuer=base_issuer(request)) + endpoints = build_endpoint_info(OrderedDict(), issuer=base_issuer(request)) if format_type.lower() == "xml": From 98862ea8cd3b8c3cad6bd200a9425f89f120635a Mon Sep 17 00:00:00 2001 From: Brandon Wang Date: Tue, 3 Dec 2024 11:43:28 -0600 Subject: [PATCH 12/15] updating tests to handle v2 cases --- apps/fhir/bluebutton/views/home.py | 2 +- apps/wellknown/tests.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/fhir/bluebutton/views/home.py b/apps/fhir/bluebutton/views/home.py index 02015a273..553d3ea89 100644 --- a/apps/fhir/bluebutton/views/home.py +++ b/apps/fhir/bluebutton/views/home.py @@ -66,7 +66,7 @@ def fhir_conformance(request, via_oauth=False, v2=False, *args): od = conformance_filter(text_out) # Append Security to ConformanceStatement - security_endpoint = build_oauth_resource(request, v2, format_type="json") + security_endpoint = build_oauth_resource(request, format_type="json") od['rest'][0]['security'] = security_endpoint # Fix format values od['format'] = ['application/json', 'application/fhir+json'] diff --git a/apps/wellknown/tests.py b/apps/wellknown/tests.py index 059d3ada0..9cc0fc648 100644 --- a/apps/wellknown/tests.py +++ b/apps/wellknown/tests.py @@ -21,8 +21,8 @@ def test_valid_response(self): response = self.client.get(self.url) self.assertEqual(response.status_code, 200) self.assertContains( - response, reverse('oauth2_provider:token')) - self.assertContains(response, reverse('openid_connect_userinfo')) + response, reverse('oauth2_provider_v2:token-v2')) + self.assertContains(response, reverse('openid_connect_userinfo_v2')) self.assertContains(response, "response_types_supported") self.assertContains(response, getattr(settings, 'HOSTNAME_URL')) response_content = response.content From 84e7332f147234e209fb4904b97979218e274934 Mon Sep 17 00:00:00 2001 From: Brandon Wang Date: Tue, 3 Dec 2024 12:05:05 -0600 Subject: [PATCH 13/15] removing deprecated v2 param --- apps/fhir/bluebutton/tests/test_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/fhir/bluebutton/tests/test_utils.py b/apps/fhir/bluebutton/tests/test_utils.py index e21a6af56..7da820379 100644 --- a/apps/fhir/bluebutton/tests/test_utils.py +++ b/apps/fhir/bluebutton/tests/test_utils.py @@ -309,7 +309,7 @@ def test_oauth_resource_xml(self): """ request = self.factory.get('/cmsblue/fhir/v1/metadata') - result = build_oauth_resource(request, False, "xml") + result = build_oauth_resource(request, "xml") expected = "true" From d80085264bf281b90f1e347c129fa07fdfab7a0a Mon Sep 17 00:00:00 2001 From: Brandon Wang Date: Thu, 5 Dec 2024 13:22:09 -0600 Subject: [PATCH 14/15] removing unnecessary fields --- apps/wellknown/views/openid.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/apps/wellknown/views/openid.py b/apps/wellknown/views/openid.py index 2987eb316..aa233e223 100644 --- a/apps/wellknown/views/openid.py +++ b/apps/wellknown/views/openid.py @@ -13,7 +13,6 @@ CODE_CHALLENGE_METHODS_SUPPORTED = ["S256"] CAPABILITIES = [ "client-confidential-symmetric", - "sso-openid-connect", "launch-standalone", "permission-offline", "permission-patient", @@ -117,15 +116,14 @@ def build_smart_config_endpoint(data=OrderedDict(), issuer=""): """ data = build_endpoint_info(data, issuer=issuer) + del (data["issuer"]) del (data["userinfo_endpoint"]) del (data["ui_locales_supported"]) del (data["service_documentation"]) del (data["op_tos_uri"]) del (data["fhir_metadata_uri"]) data["grant_types_supported"].remove("refresh_token") - data["scopes_supported"] = SCOPES_SUPPORTED data["code_challenge_methods_supported"] = CODE_CHALLENGE_METHODS_SUPPORTED data["capabilities"] = CAPABILITIES - return data From 2fe9e846a4d039d6c2b10023f053dcd2549f43ab Mon Sep 17 00:00:00 2001 From: Brandon Wang Date: Thu, 12 Dec 2024 11:05:39 -0600 Subject: [PATCH 15/15] fixing typo for smart config endpoint --- hhs_oauth_server/urls.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hhs_oauth_server/urls.py b/hhs_oauth_server/urls.py index 5b5ae5118..5c05de7ab 100644 --- a/hhs_oauth_server/urls.py +++ b/hhs_oauth_server/urls.py @@ -18,7 +18,7 @@ urlpatterns = [ path("health", include("apps.health.urls")), re_path(r"^.well-known/", include("apps.wellknown.urls")), - path("v1/fhir/.wellknown/smart-configuration", smart_configuration, name="smart_configuration"), + path("v1/fhir/.well-known/smart-configuration", smart_configuration, name="smart_configuration"), path("forms/", include("apps.forms.urls")), path("v1/accounts/", include("apps.accounts.urls")), re_path( @@ -34,7 +34,7 @@ openidconnect_userinfo, name="openid_connect_userinfo_v2", ), - path("v2/fhir/.wellknown/smart-configuration", smart_configuration, name="smart_configuration"), + path("v2/fhir/.well-known/smart-configuration", smart_configuration, name="smart_configuration"), path("v2/fhir/metadata", fhir_conformance_v2, name="fhir_conformance_metadata_v2"), path("v2/fhir/", include("apps.fhir.bluebutton.v2.urls")), path("v2/o/", include("apps.dot_ext.v2.urls")),