Skip to content

Commit c086578

Browse files
committed
adding smart on fhir configuration endpoint
1 parent bc3004b commit c086578

File tree

3 files changed

+44
-2
lines changed

3 files changed

+44
-2
lines changed

apps/wellknown/urls.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from waffle.decorators import waffle_switch
33
from .views import (
44
openid_configuration,
5+
smart_on_fhir_configuration,
56
ApplicationListView,
67
ApplicationLabelView,
78
PublicApplicationListView,
@@ -10,6 +11,7 @@
1011

1112
urlpatterns = [
1213
path("openid-configuration", openid_configuration, name="openid-configuration"),
14+
path("smart-on-fhir-configuration", smart_on_fhir_configuration, name="smart-on-fhir-configuration"),
1315
path(
1416
"applications",
1517
waffle_switch("wellknown_applications")(ApplicationListView.as_view()),
@@ -28,6 +30,9 @@
2830
path(
2931
"openid-configuration-v2", openid_configuration, name="openid-configuration-v2"
3032
),
33+
path(
34+
"smart-on-fhir-configuration", smart_on_fhir_configuration, name="smart-on-fhir-configuration"
35+
),
3136
path(
3237
"applications-v2",
3338
waffle_switch("wellknown_applications")(ApplicationListView.as_view()),

apps/wellknown/views/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
from .openid import openid_configuration, base_issuer, build_endpoint_info # NOQA
1+
from .openid import openid_configuration, smart_on_fhir_configuration, base_issuer, build_endpoint_info # NOQA
22
from .application import ApplicationListView, ApplicationLabelView # NOQA
33
from .public_applications import ApplicationListView as PublicApplicationListView # NOQA

apps/wellknown/views/openid.py

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,16 @@
99
import apps.logging.request_logger as bb2logging
1010

1111
logger = logging.getLogger(bb2logging.HHS_SERVER_LOGNAME_FMT.format(__name__))
12-
12+
SCOPES_SUPPORTED = ["profile", "patient/Patient.read", "patient/ExplanationOfBenefit.read", "patient/Coverage.read"]
13+
CODE_CHALLENGE_METHODS_SUPPORTED = ["S256"]
14+
CAPABILITIES = [
15+
"client-confidential-symmetric",
16+
"sso-openid-connect",
17+
"launch-standalone",
18+
"permission-offline",
19+
"permission-patient",
20+
"permission-v1"
21+
]
1322

1423
@require_GET
1524
def openid_configuration(request):
@@ -22,6 +31,17 @@ def openid_configuration(request):
2231
data = build_endpoint_info(data, issuer=issuer, v2=v2)
2332
return JsonResponse(data)
2433

34+
@require_GET
35+
def smart_on_fhir_configuration(request):
36+
"""
37+
Views that returns smart_configuration.
38+
"""
39+
data = OrderedDict()
40+
issuer = base_issuer(request)
41+
v2 = request.path.endswith('smart-configuration-v2') or request.path.endswith('smartConfigV2')
42+
data = build_smart_config_endpoint(data, issuer=issuer, v2=v2)
43+
return JsonResponse(data)
44+
2545

2646
def base_issuer(request):
2747
"""
@@ -84,3 +104,20 @@ def build_endpoint_info(data=OrderedDict(), v2=False, issuer=""):
84104
data["fhir_metadata_uri"] = issuer + \
85105
reverse('fhir_conformance_metadata' if not v2 else 'fhir_conformance_metadata_v2')
86106
return data
107+
108+
def build_smart_config_endpoint(data=OrderedDict(), v2=False, issuer=""):
109+
"""
110+
construct the smart config endpoint response. Takes in
111+
issuer should be http: or https:// prefixed url.
112+
113+
:param data:
114+
:return:
115+
"""
116+
117+
data = build_endpoint_info(data, issuer=issuer, v2=v2)
118+
119+
data["scopes_supported"] = SCOPES_SUPPORTED
120+
data["code_challenge_methods_supported"] = CODE_CHALLENGE_METHODS_SUPPORTED
121+
data["capabilities"] = CAPABILITIES
122+
123+
return data

0 commit comments

Comments
 (0)