smart_app_launch_test_kit 0.4.6 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/config/presets/inferno_reference_server_preset.json +103 -0
- data/config/presets/inferno_reference_server_stu2_2_preset.json +89 -0
- data/config/presets/inferno_reference_server_stu2_preset.json +89 -0
- data/config/presets/smart_access_brands.json.erb +13 -0
- data/config/presets/smart_access_brands_example_1.json +37 -0
- data/config/presets/smart_access_brands_example_2.json +37 -0
- data/config/presets/smart_access_brands_example_3.json +37 -0
- data/config/presets/smart_access_brands_example_4.json +37 -0
- data/lib/smart_app_launch/app_launch_test.rb +8 -2
- data/lib/smart_app_launch/app_redirect_test.rb +9 -3
- data/lib/smart_app_launch/app_redirect_test_stu2.rb +9 -1
- data/lib/smart_app_launch/metadata.rb +75 -0
- data/lib/smart_app_launch/smart_access_brands_examples/smart_access_brands_example.json.erb +198 -0
- data/lib/smart_app_launch/smart_access_brands_suite.rb +4 -1
- data/lib/smart_app_launch/smart_stu1_suite.rb +7 -6
- data/lib/smart_app_launch/smart_stu2_2_suite.rb +3 -2
- data/lib/smart_app_launch/smart_stu2_suite.rb +11 -10
- data/lib/smart_app_launch/token_exchange_test.rb +8 -2
- data/lib/smart_app_launch/version.rb +2 -1
- data/lib/smart_app_launch_test_kit.rb +1 -0
- metadata +19 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f80a6156d7f541a28a876f54e29a1d7457b84c06feb6aea21d54a499e734ef91
|
4
|
+
data.tar.gz: 9f0990127c9bd562c1328e82a53d0c431c08fb3fbb1fbd24735049a40303eaba
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 819be8732a3feed22713a508e3f316101c5cfab62055b68666c94991359c79bc41159086c721b62886c3e38db51305e085ef4ef0dcaed7a9ab615600542a417c
|
7
|
+
data.tar.gz: c811a8aaaea089ca2ebaddb559a3ab2fa3ab2a73e2afbcc485e2375654735a6a68ba20fcbc95e0483ba65c83fed367d449289ee79020522887d418e1e9a0a0fb
|
@@ -0,0 +1,103 @@
|
|
1
|
+
{
|
2
|
+
"title": "Inferno Reference Server",
|
3
|
+
"id": "smart_stu1_reference_server",
|
4
|
+
"test_suite_id": "smart",
|
5
|
+
"inputs": [
|
6
|
+
{
|
7
|
+
"name": "url",
|
8
|
+
"type": "text",
|
9
|
+
"value": "https://inferno.healthit.gov/reference-server/r4"
|
10
|
+
},
|
11
|
+
{
|
12
|
+
"name": "standalone_client_id",
|
13
|
+
"type": "text",
|
14
|
+
"value": "SAMPLE_PUBLIC_CLIENT_ID"
|
15
|
+
},
|
16
|
+
{
|
17
|
+
"name": "standalone_requested_scopes",
|
18
|
+
"type": "text",
|
19
|
+
"value": "launch/patient openid fhirUser offline_access patient/*.read"
|
20
|
+
},
|
21
|
+
{
|
22
|
+
"name": "use_pkce",
|
23
|
+
"type": "radio",
|
24
|
+
"title": "Proof Key for Code Exchange (PKCE)",
|
25
|
+
"options": {
|
26
|
+
"list_options": [
|
27
|
+
{
|
28
|
+
"label": "Enabled",
|
29
|
+
"value": "true"
|
30
|
+
},
|
31
|
+
{
|
32
|
+
"label": "Disabled",
|
33
|
+
"value": "false"
|
34
|
+
}
|
35
|
+
]
|
36
|
+
},
|
37
|
+
"value": "false"
|
38
|
+
},
|
39
|
+
{
|
40
|
+
"name": "pkce_code_challenge_method",
|
41
|
+
"type": "radio",
|
42
|
+
"optional": true,
|
43
|
+
"title": "PKCE Code Challenge Method",
|
44
|
+
"options": {
|
45
|
+
"list_options": [
|
46
|
+
{
|
47
|
+
"label": "S256",
|
48
|
+
"value": "S256"
|
49
|
+
},
|
50
|
+
{
|
51
|
+
"label": "plain",
|
52
|
+
"value": "plain"
|
53
|
+
}
|
54
|
+
]
|
55
|
+
},
|
56
|
+
"value": "S256"
|
57
|
+
},
|
58
|
+
{
|
59
|
+
"name": "client_auth_type",
|
60
|
+
"value": "public",
|
61
|
+
"_title": "Client Authentication Method",
|
62
|
+
"_type": "radio",
|
63
|
+
"_options": {
|
64
|
+
"list_options": [
|
65
|
+
{
|
66
|
+
"label": "Public",
|
67
|
+
"value": "public"
|
68
|
+
},
|
69
|
+
{
|
70
|
+
"label": "Confidential Symmetric",
|
71
|
+
"value": "confidential_symmetric"
|
72
|
+
},
|
73
|
+
{
|
74
|
+
"label": "Confidential Asymmetric",
|
75
|
+
"value": "confidential_asymmetric"
|
76
|
+
}
|
77
|
+
]
|
78
|
+
}
|
79
|
+
},
|
80
|
+
{
|
81
|
+
"name": "standalone_client_secret",
|
82
|
+
"type": "text",
|
83
|
+
"optional": true,
|
84
|
+
"value": null
|
85
|
+
},
|
86
|
+
{
|
87
|
+
"name": "ehr_client_id",
|
88
|
+
"type": "text",
|
89
|
+
"value": "SAMPLE_PUBLIC_CLIENT_ID"
|
90
|
+
},
|
91
|
+
{
|
92
|
+
"name": "ehr_requested_scopes",
|
93
|
+
"type": "text",
|
94
|
+
"value": "launch openid fhirUser offline_access user/*.read"
|
95
|
+
},
|
96
|
+
{
|
97
|
+
"name": "ehr_client_secret",
|
98
|
+
"type": "text",
|
99
|
+
"optional": true,
|
100
|
+
"value": null
|
101
|
+
}
|
102
|
+
]
|
103
|
+
}
|
@@ -0,0 +1,89 @@
|
|
1
|
+
{
|
2
|
+
"title": "Inferno Reference Server",
|
3
|
+
"id": "smart_stu2_2_reference_server",
|
4
|
+
"test_suite_id": "smart_stu2_2",
|
5
|
+
"inputs": [
|
6
|
+
{
|
7
|
+
"name": "url",
|
8
|
+
"type": "text",
|
9
|
+
"value": "https://inferno.healthit.gov/reference-server/r4"
|
10
|
+
},
|
11
|
+
{
|
12
|
+
"name": "standalone_client_id",
|
13
|
+
"type": "text",
|
14
|
+
"value": "SAMPLE_PUBLIC_CLIENT_ID"
|
15
|
+
},
|
16
|
+
{
|
17
|
+
"name": "standalone_requested_scopes",
|
18
|
+
"type": "text",
|
19
|
+
"value": "launch/patient openid fhirUser offline_access patient/*.read"
|
20
|
+
},
|
21
|
+
{
|
22
|
+
"name": "standalone_client_secret",
|
23
|
+
"type": "text",
|
24
|
+
"optional": true,
|
25
|
+
"value": null
|
26
|
+
},
|
27
|
+
{
|
28
|
+
"name": "ehr_client_id",
|
29
|
+
"type": "text",
|
30
|
+
"value": "SAMPLE_PUBLIC_CLIENT_ID"
|
31
|
+
},
|
32
|
+
{
|
33
|
+
"name": "ehr_requested_scopes",
|
34
|
+
"type": "text",
|
35
|
+
"value": "launch openid fhirUser offline_access user/*.read"
|
36
|
+
},
|
37
|
+
{
|
38
|
+
"name": "ehr_client_secret",
|
39
|
+
"type": "text",
|
40
|
+
"optional": true,
|
41
|
+
"value": null
|
42
|
+
},
|
43
|
+
{
|
44
|
+
"name": "client_auth_encryption_method",
|
45
|
+
"value": "ES384",
|
46
|
+
"_title": "Encryption Method (Confidential Asymmetric Client Auth Only)",
|
47
|
+
"_type": "radio",
|
48
|
+
"_options": {
|
49
|
+
"list_options": [
|
50
|
+
{
|
51
|
+
"label": "ES384",
|
52
|
+
"value": "ES384"
|
53
|
+
},
|
54
|
+
{
|
55
|
+
"label": "RS384",
|
56
|
+
"value": "RS384"
|
57
|
+
}
|
58
|
+
]
|
59
|
+
}
|
60
|
+
},
|
61
|
+
{
|
62
|
+
"name": "client_auth_type",
|
63
|
+
"value": "public",
|
64
|
+
"_title": "Client Authentication Method",
|
65
|
+
"_type": "radio",
|
66
|
+
"_options": {
|
67
|
+
"list_options": [
|
68
|
+
{
|
69
|
+
"label": "Public",
|
70
|
+
"value": "public"
|
71
|
+
},
|
72
|
+
{
|
73
|
+
"label": "Confidential Symmetric",
|
74
|
+
"value": "confidential_symmetric"
|
75
|
+
},
|
76
|
+
{
|
77
|
+
"label": "Confidential Asymmetric",
|
78
|
+
"value": "confidential_asymmetric"
|
79
|
+
}
|
80
|
+
]
|
81
|
+
}
|
82
|
+
},
|
83
|
+
{
|
84
|
+
"name": "backend_services_client_id",
|
85
|
+
"type": "text",
|
86
|
+
"value": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InJlZ2lzdHJhdGlvbi10b2tlbiJ9.eyJqd2tzX3VybCI6Imh0dHA6Ly8xMC4xNS4yNTIuNzMvaW5mZXJuby8ud2VsbC1rbm93bi9qd2tzLmpzb24iLCJhY2Nlc3NUb2tlbnNFeHBpcmVJbiI6MTUsImlhdCI6MTU5NzQxMzE5NX0.q4v4Msc74kN506KTZ0q_minyapJw0gwlT6M_uiL73S4"
|
87
|
+
}
|
88
|
+
]
|
89
|
+
}
|
@@ -0,0 +1,89 @@
|
|
1
|
+
{
|
2
|
+
"title": "Inferno Reference Server",
|
3
|
+
"id": "smart_stu2_reference_server",
|
4
|
+
"test_suite_id": "smart_stu2",
|
5
|
+
"inputs": [
|
6
|
+
{
|
7
|
+
"name": "url",
|
8
|
+
"type": "text",
|
9
|
+
"value": "https://inferno.healthit.gov/reference-server/r4"
|
10
|
+
},
|
11
|
+
{
|
12
|
+
"name": "standalone_client_id",
|
13
|
+
"type": "text",
|
14
|
+
"value": "SAMPLE_PUBLIC_CLIENT_ID"
|
15
|
+
},
|
16
|
+
{
|
17
|
+
"name": "standalone_requested_scopes",
|
18
|
+
"type": "text",
|
19
|
+
"value": "launch/patient openid fhirUser offline_access patient/*.read"
|
20
|
+
},
|
21
|
+
{
|
22
|
+
"name": "standalone_client_secret",
|
23
|
+
"type": "text",
|
24
|
+
"optional": true,
|
25
|
+
"value": null
|
26
|
+
},
|
27
|
+
{
|
28
|
+
"name": "ehr_client_id",
|
29
|
+
"type": "text",
|
30
|
+
"value": "SAMPLE_PUBLIC_CLIENT_ID"
|
31
|
+
},
|
32
|
+
{
|
33
|
+
"name": "ehr_requested_scopes",
|
34
|
+
"type": "text",
|
35
|
+
"value": "launch openid fhirUser offline_access user/*.read"
|
36
|
+
},
|
37
|
+
{
|
38
|
+
"name": "ehr_client_secret",
|
39
|
+
"type": "text",
|
40
|
+
"optional": true,
|
41
|
+
"value": null
|
42
|
+
},
|
43
|
+
{
|
44
|
+
"name": "client_auth_encryption_method",
|
45
|
+
"value": "ES384",
|
46
|
+
"_title": "Encryption Method (Confidential Asymmetric Client Auth Only)",
|
47
|
+
"_type": "radio",
|
48
|
+
"_options": {
|
49
|
+
"list_options": [
|
50
|
+
{
|
51
|
+
"label": "ES384",
|
52
|
+
"value": "ES384"
|
53
|
+
},
|
54
|
+
{
|
55
|
+
"label": "RS384",
|
56
|
+
"value": "RS384"
|
57
|
+
}
|
58
|
+
]
|
59
|
+
}
|
60
|
+
},
|
61
|
+
{
|
62
|
+
"name": "client_auth_type",
|
63
|
+
"value": "public",
|
64
|
+
"_title": "Client Authentication Method",
|
65
|
+
"_type": "radio",
|
66
|
+
"_options": {
|
67
|
+
"list_options": [
|
68
|
+
{
|
69
|
+
"label": "Public",
|
70
|
+
"value": "public"
|
71
|
+
},
|
72
|
+
{
|
73
|
+
"label": "Confidential Symmetric",
|
74
|
+
"value": "confidential_symmetric"
|
75
|
+
},
|
76
|
+
{
|
77
|
+
"label": "Confidential Asymmetric",
|
78
|
+
"value": "confidential_asymmetric"
|
79
|
+
}
|
80
|
+
]
|
81
|
+
}
|
82
|
+
},
|
83
|
+
{
|
84
|
+
"name": "backend_services_client_id",
|
85
|
+
"type": "text",
|
86
|
+
"value": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InJlZ2lzdHJhdGlvbi10b2tlbiJ9.eyJqd2tzX3VybCI6Imh0dHA6Ly8xMC4xNS4yNTIuNzMvaW5mZXJuby8ud2VsbC1rbm93bi9qd2tzLmpzb24iLCJhY2Nlc3NUb2tlbnNFeHBpcmVJbiI6MTUsImlhdCI6MTU5NzQxMzE5NX0.q4v4Msc74kN506KTZ0q_minyapJw0gwlT6M_uiL73S4"
|
87
|
+
}
|
88
|
+
]
|
89
|
+
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
{
|
2
|
+
"title": "Inferno Example SMART Access Brands Bundle",
|
3
|
+
"id": "smart_access_brands_bundle_example_inferno",
|
4
|
+
"test_suite_id": "smart_access_brands",
|
5
|
+
"inputs": [
|
6
|
+
{
|
7
|
+
"name": "smart_access_brands_publication_url",
|
8
|
+
"value": "<%= Inferno::Application['base_url'] %>/custom/smart_access_brands/examples/smart_access_brands_example.json",
|
9
|
+
"title": "SMART Access Brands Bundle URL",
|
10
|
+
"type": "text"
|
11
|
+
}
|
12
|
+
]
|
13
|
+
}
|
@@ -0,0 +1,37 @@
|
|
1
|
+
{
|
2
|
+
"title": "Labs with Locations Nationwide IG Example SMART Access Brands Bundle",
|
3
|
+
"id": "smart_access_brands_bundle_example_1",
|
4
|
+
"test_suite_id": "smart_access_brands",
|
5
|
+
"inputs": [
|
6
|
+
{
|
7
|
+
"name": "user_access_brands_publication_url",
|
8
|
+
"value": "https://hl7.org/fhir/smart-app-launch/STU2.2/Bundle-example1.json",
|
9
|
+
"title": "User Access Brands Publication URL",
|
10
|
+
"type": "text"
|
11
|
+
},
|
12
|
+
{
|
13
|
+
"name": "endpoint_availability_success_rate",
|
14
|
+
"default": "all",
|
15
|
+
"description": "Select an option to choose how many Endpoints have to be available and send back a valid capability statement for the Endpoint validation test to pass.",
|
16
|
+
"options": {
|
17
|
+
"list_options": [
|
18
|
+
{
|
19
|
+
"label": "All",
|
20
|
+
"value": "all"
|
21
|
+
},
|
22
|
+
{
|
23
|
+
"label": "At Least 1",
|
24
|
+
"value": "at_least_1"
|
25
|
+
},
|
26
|
+
{
|
27
|
+
"label": "None",
|
28
|
+
"value": "none"
|
29
|
+
}
|
30
|
+
]
|
31
|
+
},
|
32
|
+
"title": "Endpoint Availability Success Rate",
|
33
|
+
"type": "radio",
|
34
|
+
"value": "none"
|
35
|
+
}
|
36
|
+
]
|
37
|
+
}
|
@@ -0,0 +1,37 @@
|
|
1
|
+
{
|
2
|
+
"title": "Regional Health System IG Example SMART Access Brands Bundle",
|
3
|
+
"id": "smart_access_brands_bundle_example_2",
|
4
|
+
"test_suite_id": "smart_access_brands",
|
5
|
+
"inputs": [
|
6
|
+
{
|
7
|
+
"name": "user_access_brands_publication_url",
|
8
|
+
"value": "https://hl7.org/fhir/smart-app-launch/STU2.2/Bundle-example2.json",
|
9
|
+
"title": "User Access Brands Publication URL",
|
10
|
+
"type": "text"
|
11
|
+
},
|
12
|
+
{
|
13
|
+
"name": "endpoint_availability_success_rate",
|
14
|
+
"default": "all",
|
15
|
+
"description": "Select an option to choose how many Endpoints have to be available and send back a valid capability statement for the Endpoint validation test to pass.",
|
16
|
+
"options": {
|
17
|
+
"list_options": [
|
18
|
+
{
|
19
|
+
"label": "All",
|
20
|
+
"value": "all"
|
21
|
+
},
|
22
|
+
{
|
23
|
+
"label": "At Least 1",
|
24
|
+
"value": "at_least_1"
|
25
|
+
},
|
26
|
+
{
|
27
|
+
"label": "None",
|
28
|
+
"value": "none"
|
29
|
+
}
|
30
|
+
]
|
31
|
+
},
|
32
|
+
"title": "Endpoint Availability Success Rate",
|
33
|
+
"type": "radio",
|
34
|
+
"value": "none"
|
35
|
+
}
|
36
|
+
]
|
37
|
+
}
|
@@ -0,0 +1,37 @@
|
|
1
|
+
{
|
2
|
+
"title": "Different EHRs IG Example SMART Access Brands Bundle",
|
3
|
+
"id": "smart_access_brands_bundle_example_3",
|
4
|
+
"test_suite_id": "smart_access_brands",
|
5
|
+
"inputs": [
|
6
|
+
{
|
7
|
+
"name": "user_access_brands_publication_url",
|
8
|
+
"value": "https://hl7.org/fhir/smart-app-launch/STU2.2/Bundle-example3.json",
|
9
|
+
"title": "User Access Brands Publication URL",
|
10
|
+
"type": "text"
|
11
|
+
},
|
12
|
+
{
|
13
|
+
"name": "endpoint_availability_success_rate",
|
14
|
+
"default": "all",
|
15
|
+
"description": "Select an option to choose how many Endpoints have to be available and send back a valid capability statement for the Endpoint validation test to pass.",
|
16
|
+
"options": {
|
17
|
+
"list_options": [
|
18
|
+
{
|
19
|
+
"label": "All",
|
20
|
+
"value": "all"
|
21
|
+
},
|
22
|
+
{
|
23
|
+
"label": "At Least 1",
|
24
|
+
"value": "at_least_1"
|
25
|
+
},
|
26
|
+
{
|
27
|
+
"label": "None",
|
28
|
+
"value": "none"
|
29
|
+
}
|
30
|
+
]
|
31
|
+
},
|
32
|
+
"title": "Endpoint Availability Success Rate",
|
33
|
+
"type": "radio",
|
34
|
+
"value": "none"
|
35
|
+
}
|
36
|
+
]
|
37
|
+
}
|
@@ -0,0 +1,37 @@
|
|
1
|
+
{
|
2
|
+
"title": "Co-equal Brands IG Example SMART Access Brands Bundle",
|
3
|
+
"id": "smart_access_brands_bundle_example_4",
|
4
|
+
"test_suite_id": "smart_access_brands",
|
5
|
+
"inputs": [
|
6
|
+
{
|
7
|
+
"name": "user_access_brands_publication_url",
|
8
|
+
"value": "https://hl7.org/fhir/smart-app-launch/STU2.2/Bundle-example4.json",
|
9
|
+
"title": "User Access Brands Publication URL",
|
10
|
+
"type": "text"
|
11
|
+
},
|
12
|
+
{
|
13
|
+
"name": "endpoint_availability_success_rate",
|
14
|
+
"default": "all",
|
15
|
+
"description": "Select an option to choose how many Endpoints have to be available and send back a valid capability statement for the Endpoint validation test to pass.",
|
16
|
+
"options": {
|
17
|
+
"list_options": [
|
18
|
+
{
|
19
|
+
"label": "All",
|
20
|
+
"value": "all"
|
21
|
+
},
|
22
|
+
{
|
23
|
+
"label": "At Least 1",
|
24
|
+
"value": "at_least_1"
|
25
|
+
},
|
26
|
+
{
|
27
|
+
"label": "None",
|
28
|
+
"value": "none"
|
29
|
+
}
|
30
|
+
]
|
31
|
+
},
|
32
|
+
"title": "Endpoint Availability Success Rate",
|
33
|
+
"type": "radio",
|
34
|
+
"value": "none"
|
35
|
+
}
|
36
|
+
]
|
37
|
+
}
|
@@ -10,7 +10,13 @@ module SMARTAppLaunch
|
|
10
10
|
input :url
|
11
11
|
receives_request :launch
|
12
12
|
|
13
|
-
|
13
|
+
def default_launch_uri
|
14
|
+
"#{Inferno::Application['base_url']}/custom/smart/launch"
|
15
|
+
end
|
16
|
+
|
17
|
+
def launch_uri
|
18
|
+
config.options[:launch_uri].presence || default_launch_uri
|
19
|
+
end
|
14
20
|
|
15
21
|
def wait_message
|
16
22
|
return instance_exec(&config.options[:launch_message_proc]) if config.options[:launch_message_proc].present?
|
@@ -21,7 +27,7 @@ module SMARTAppLaunch
|
|
21
27
|
Waiting for Inferno to be launched from the EHR.
|
22
28
|
|
23
29
|
Tests will resume once Inferno receives a launch request at
|
24
|
-
`#{
|
30
|
+
`#{launch_uri}` with an `iss` of `#{url}`.
|
25
31
|
)
|
26
32
|
end
|
27
33
|
|
@@ -47,7 +47,13 @@ module SMARTAppLaunch
|
|
47
47
|
output :state, :pkce_code_challenge, :pkce_code_verifier
|
48
48
|
receives_request :redirect
|
49
49
|
|
50
|
-
|
50
|
+
def default_redirect_uri
|
51
|
+
"#{Inferno::Application['base_url']}/custom/smart/redirect"
|
52
|
+
end
|
53
|
+
|
54
|
+
def redirect_uri
|
55
|
+
config.options[:redirect_uri].presence || default_redirect_uri
|
56
|
+
end
|
51
57
|
|
52
58
|
def self.calculate_s256_challenge(verifier)
|
53
59
|
Base64.urlsafe_encode64(Digest::SHA256.digest(verifier), padding: false)
|
@@ -68,7 +74,7 @@ module SMARTAppLaunch
|
|
68
74
|
[Follow this link to authorize with the SMART server](#{auth_url}).
|
69
75
|
|
70
76
|
Tests will resume once Inferno receives a request at
|
71
|
-
`#{
|
77
|
+
`#{redirect_uri}` with a state of `#{state}`.
|
72
78
|
)
|
73
79
|
end
|
74
80
|
|
@@ -94,7 +100,7 @@ module SMARTAppLaunch
|
|
94
100
|
oauth2_params = {
|
95
101
|
'response_type' => 'code',
|
96
102
|
'client_id' => client_id,
|
97
|
-
'redirect_uri' =>
|
103
|
+
'redirect_uri' => redirect_uri,
|
98
104
|
'scope' => requested_scopes,
|
99
105
|
'state' => state,
|
100
106
|
'aud' => aud
|
@@ -32,12 +32,20 @@ module SMARTAppLaunch
|
|
32
32
|
]
|
33
33
|
}
|
34
34
|
|
35
|
+
def default_post_authorization_uri
|
36
|
+
"#{Inferno::Application['base_url']}/custom/smart_stu2/post_auth"
|
37
|
+
end
|
38
|
+
|
39
|
+
def post_authorization_uri
|
40
|
+
config.options[:post_authorization_uri].presence || default_post_authorization_uri
|
41
|
+
end
|
42
|
+
|
35
43
|
def authorization_url_builder(url, params)
|
36
44
|
return super if authorization_method == 'get'
|
37
45
|
|
38
46
|
post_params = params.merge(auth_url: url)
|
39
47
|
|
40
|
-
post_url = URI(
|
48
|
+
post_url = URI(post_authorization_uri)
|
41
49
|
post_url.query = URI.encode_www_form(post_params)
|
42
50
|
post_url.to_s
|
43
51
|
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require_relative 'version'
|
2
|
+
|
3
|
+
module SMARTAppLaunch
|
4
|
+
class Metadata < Inferno::TestKit
|
5
|
+
id :smart_app_launch_test_kit
|
6
|
+
title 'SMART App Launch Test Kit'
|
7
|
+
description <<~DESCRIPTION
|
8
|
+
The SMART App Launch Test Kit primarily validates the conformance of an
|
9
|
+
authorization server implementation to a specified version of the [SMART
|
10
|
+
Application Launch Framework Implementation
|
11
|
+
Guide](http://hl7.org/fhir/smart-app-launch/index.html). This Test Kit also
|
12
|
+
provides Brand Bundle Publisher testing for the User-access Brands and Endpoints
|
13
|
+
specification. This Test Kit supports following versions of the SMART App
|
14
|
+
Launch IG: [STU1](https://hl7.org/fhir/smart-app-launch/1.0.0/),
|
15
|
+
[STU2](http://hl7.org/fhir/smart-app-launch/STU2/), and
|
16
|
+
[STU2.2](http://hl7.org/fhir/smart-app-launch/STU2.2/).
|
17
|
+
<!-- break -->
|
18
|
+
|
19
|
+
This Test Kit is [open
|
20
|
+
source](https://github.com/inferno-framework/smart-app-launch-test-kit#license)
|
21
|
+
and freely available for use or adoption by the health IT community including
|
22
|
+
EHR vendors, health app developers, and testing labs. It is built using the
|
23
|
+
[Inferno Framework](https://inferno-framework.github.io/inferno-core/). The
|
24
|
+
Inferno Framework is designed for reuse and aims to make it easier to build test
|
25
|
+
kits for any FHIR-based data exchange.
|
26
|
+
|
27
|
+
To run tests for a SMART App Launch authorization server, select one of the
|
28
|
+
"SMART App Launch" suites. To run tests for a Brand Bundle Publisher, select
|
29
|
+
the "SMART User-access Brands and Endpoints" suite.
|
30
|
+
|
31
|
+
## Status
|
32
|
+
|
33
|
+
The SMART App Launch Test Kit primarily verifies that systems correctly
|
34
|
+
implement the SMART App Launch IG for providing authorization and/or
|
35
|
+
authentication services to client applications accessing HL7 FHIR APIs.
|
36
|
+
|
37
|
+
The test kit currently tests the following requirements:
|
38
|
+
- Standalone Launch
|
39
|
+
- EHR Launch
|
40
|
+
|
41
|
+
It also tests the ability of a Brand Bundle Publisher to publish a valid brand
|
42
|
+
bundle as described in the User-access Brands and Endpoints specification.
|
43
|
+
|
44
|
+
See the test descriptions within the test kit for detail on the specific
|
45
|
+
validations performed as part of testing these requirements.
|
46
|
+
|
47
|
+
## Repository
|
48
|
+
|
49
|
+
The SMART App Launch Test Kit GitHub repository can be [found
|
50
|
+
here](https://github.com/inferno-framework/smart-app-launch-test-kit).
|
51
|
+
|
52
|
+
## Providing Feedback and Reporting Issues
|
53
|
+
|
54
|
+
We welcome feedback on the tests, including but not limited to the following
|
55
|
+
areas:
|
56
|
+
|
57
|
+
- Validation logic, such as potential bugs, lax checks, and unexpected failures.
|
58
|
+
- Requirements coverage, such as requirements that have been missed, tests that
|
59
|
+
necessitate features that the IG does not require, or other issues with the
|
60
|
+
interpretation of the IG's requirements.
|
61
|
+
- User experience, such as confusing or missing information in the test UI.
|
62
|
+
|
63
|
+
Please report any issues with this set of tests in the [issues
|
64
|
+
section](https://github.com/inferno-framework/smart-app-launch-test-kit/issues)
|
65
|
+
of the repository.
|
66
|
+
DESCRIPTION
|
67
|
+
suite_ids [:smart, :smart_stu2, :smart_stu2_2, :smart_access_brands]
|
68
|
+
tags ['SMART App Launch', 'Endpoint Publication']
|
69
|
+
last_updated LAST_UPDATED
|
70
|
+
version VERSION
|
71
|
+
maturity 'Medium'
|
72
|
+
authors ['Stephen MacVicar']
|
73
|
+
repo 'https://github.com/inferno-framework/smart-app-launch-test-kit'
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,198 @@
|
|
1
|
+
{
|
2
|
+
"resourceType" : "Bundle",
|
3
|
+
"id" : "example3",
|
4
|
+
"type" : "collection",
|
5
|
+
"timestamp" : "2023-09-05T20:23:42.723178-07:00",
|
6
|
+
"entry" : [
|
7
|
+
{
|
8
|
+
"fullUrl" : "https://examplehospital.fhirserver.org/Organization/examplehospital",
|
9
|
+
"resource" : {
|
10
|
+
"resourceType" : "Organization",
|
11
|
+
"id" : "examplehospital",
|
12
|
+
"extension" : [
|
13
|
+
{
|
14
|
+
"extension" : [
|
15
|
+
{
|
16
|
+
"url" : "brandLogo",
|
17
|
+
"valueUrl" : "https://fhirserver.org/examplehospital-ehr1/themes/custom/logo.svg"
|
18
|
+
}
|
19
|
+
],
|
20
|
+
"url" : "http://hl7.org/fhir/StructureDefinition/organization-brand"
|
21
|
+
},
|
22
|
+
{
|
23
|
+
"extension" : [
|
24
|
+
{
|
25
|
+
"url" : "portalName",
|
26
|
+
"valueString" : "ExampleHospital Patient Gateway"
|
27
|
+
},
|
28
|
+
{
|
29
|
+
"url" : "portalUrl",
|
30
|
+
"valueUrl" : "https://patientgateway.examplehospital.ehr1.fhirserver.org"
|
31
|
+
},
|
32
|
+
{
|
33
|
+
"url" : "portalDescription",
|
34
|
+
"valueMarkdown" : "Patient Gateway is an online tool to help adult patients connect with health care providers, manage appointments, and refill prescriptions.\n"
|
35
|
+
},
|
36
|
+
{
|
37
|
+
"url" : "portalEndpoint",
|
38
|
+
"valueReference" : {
|
39
|
+
"reference" : "https://ehr1.fhirserver.com/Endpoint/examplehospital-ehr1",
|
40
|
+
"display" : "FHIR R4 Endpoint for EHR1"
|
41
|
+
}
|
42
|
+
}
|
43
|
+
],
|
44
|
+
"url" : "http://hl7.org/fhir/StructureDefinition/organization-portal"
|
45
|
+
},
|
46
|
+
{
|
47
|
+
"extension" : [
|
48
|
+
{
|
49
|
+
"url" : "portalName",
|
50
|
+
"valueString" : "ExampleHospital Pediatric Portal"
|
51
|
+
},
|
52
|
+
{
|
53
|
+
"url" : "portalUrl",
|
54
|
+
"valueUrl" : "https://pediatrics.examplehospital.ehr2.fhirserver.org"
|
55
|
+
},
|
56
|
+
{
|
57
|
+
"url" : "portalDescription",
|
58
|
+
"valueMarkdown" : "Pediatric Portal is the entrypoint for pediatric patients."
|
59
|
+
},
|
60
|
+
{
|
61
|
+
"url" : "portalEndpoint",
|
62
|
+
"valueReference" : {
|
63
|
+
"reference" : "https://ehr2.fhirserver.com/Endpoint/examplehospital-ehr2",
|
64
|
+
"display" : "FHIR R4 Endpoint for EHR2"
|
65
|
+
}
|
66
|
+
}
|
67
|
+
],
|
68
|
+
"url" : "http://hl7.org/fhir/StructureDefinition/organization-portal"
|
69
|
+
}
|
70
|
+
],
|
71
|
+
"identifier" : [
|
72
|
+
{
|
73
|
+
"system" : "urn:ietf:rfc:3986",
|
74
|
+
"value" : "https://examplehospital.fhirserver.org"
|
75
|
+
}
|
76
|
+
],
|
77
|
+
"active" : true,
|
78
|
+
"type" : [
|
79
|
+
{
|
80
|
+
"coding" : [
|
81
|
+
{
|
82
|
+
"system" : "http://terminology.hl7.org/CodeSystem/organization-type",
|
83
|
+
"code" : "prov",
|
84
|
+
"display" : "Healthcare Provider"
|
85
|
+
}
|
86
|
+
]
|
87
|
+
}
|
88
|
+
],
|
89
|
+
"name" : "ExampleHospital",
|
90
|
+
"alias" : [
|
91
|
+
"GoodHealth Healthcare"
|
92
|
+
],
|
93
|
+
"telecom" : [
|
94
|
+
{
|
95
|
+
"system" : "url",
|
96
|
+
"value" : "https://examplehospital.fhirserver.org/contact"
|
97
|
+
}
|
98
|
+
],
|
99
|
+
"address" : [
|
100
|
+
{
|
101
|
+
"city" : "Boston",
|
102
|
+
"state" : "MA"
|
103
|
+
},
|
104
|
+
{
|
105
|
+
"city" : "Newton",
|
106
|
+
"state" : "MA"
|
107
|
+
},
|
108
|
+
{
|
109
|
+
"city" : "Waltham",
|
110
|
+
"state" : "MA"
|
111
|
+
}
|
112
|
+
],
|
113
|
+
"endpoint" : [
|
114
|
+
{
|
115
|
+
"reference" : "https://ehr1.fhirserver.com/Endpoint/examplehospital-ehr1",
|
116
|
+
"display" : "FHIR R4 Endpoint for EHR1"
|
117
|
+
},
|
118
|
+
{
|
119
|
+
"reference" : "https://ehr2.fhirserver.com/Endpoint/examplehospital-ehr2",
|
120
|
+
"display" : "FHIR R4 Endpoint for EHR2"
|
121
|
+
}
|
122
|
+
]
|
123
|
+
}
|
124
|
+
},
|
125
|
+
{
|
126
|
+
"fullUrl" : "https://ehr1.fhirserver.com/Endpoint/examplehospital-ehr1",
|
127
|
+
"resource" : {
|
128
|
+
"resourceType" : "Endpoint",
|
129
|
+
"id" : "examplehospital-ehr1",
|
130
|
+
"extension" : [
|
131
|
+
{
|
132
|
+
"url" : "http://hl7.org/fhir/StructureDefinition/endpoint-fhir-version",
|
133
|
+
"valueCode" : "4.0.1"
|
134
|
+
}
|
135
|
+
],
|
136
|
+
"status" : "active",
|
137
|
+
"connectionType" : {
|
138
|
+
"system" : "http://terminology.hl7.org/CodeSystem/endpoint-connection-type",
|
139
|
+
"code" : "hl7-fhir-rest"
|
140
|
+
},
|
141
|
+
"name" : "FHIR R4 Endpoint for ExampleHospital's EHR1 Patient Gateway",
|
142
|
+
"contact" : [
|
143
|
+
{
|
144
|
+
"system" : "url",
|
145
|
+
"value" : "https://open.ehr1.fhirserver.com"
|
146
|
+
}
|
147
|
+
],
|
148
|
+
"payloadType" : [
|
149
|
+
{
|
150
|
+
"coding" : [
|
151
|
+
{
|
152
|
+
"system" : "http://terminology.hl7.org/CodeSystem/endpoint-payload-type",
|
153
|
+
"code" : "none"
|
154
|
+
}
|
155
|
+
]
|
156
|
+
}
|
157
|
+
],
|
158
|
+
"address" : "<%= Inferno::Application['base_url'] %>/custom/smart_access_brands/examples/r4_capability_statement"
|
159
|
+
}
|
160
|
+
},
|
161
|
+
{
|
162
|
+
"fullUrl" : "https://ehr2.fhirserver.com/Endpoint/examplehospital-ehr2",
|
163
|
+
"resource" : {
|
164
|
+
"resourceType" : "Endpoint",
|
165
|
+
"id" : "examplehospital-ehr2",
|
166
|
+
"extension" : [
|
167
|
+
{
|
168
|
+
"url" : "http://hl7.org/fhir/StructureDefinition/endpoint-fhir-version",
|
169
|
+
"valueCode" : "4.0.1"
|
170
|
+
}
|
171
|
+
],
|
172
|
+
"status" : "active",
|
173
|
+
"connectionType" : {
|
174
|
+
"system" : "http://terminology.hl7.org/CodeSystem/endpoint-connection-type",
|
175
|
+
"code" : "hl7-fhir-rest"
|
176
|
+
},
|
177
|
+
"name" : "FHIR R4 Endpoint for ExampleHospital's EHR2 Pediatric Portal",
|
178
|
+
"contact" : [
|
179
|
+
{
|
180
|
+
"system" : "url",
|
181
|
+
"value" : "https://open.ehr2.fhirserver.com"
|
182
|
+
}
|
183
|
+
],
|
184
|
+
"payloadType" : [
|
185
|
+
{
|
186
|
+
"coding" : [
|
187
|
+
{
|
188
|
+
"system" : "http://terminology.hl7.org/CodeSystem/endpoint-payload-type",
|
189
|
+
"code" : "none"
|
190
|
+
}
|
191
|
+
]
|
192
|
+
}
|
193
|
+
],
|
194
|
+
"address" : "<%= Inferno::Application['base_url'] %>/custom/smart_access_brands/examples/r4_capability_statement"
|
195
|
+
}
|
196
|
+
}
|
197
|
+
]
|
198
|
+
}
|
@@ -5,7 +5,6 @@ module SMARTAppLaunch
|
|
5
5
|
id 'smart_access_brands'
|
6
6
|
title 'SMART User-access Brands and Endpoints STU2.2'
|
7
7
|
short_title 'SMART User-access Brands'
|
8
|
-
version VERSION
|
9
8
|
|
10
9
|
description <<~DESCRIPTION
|
11
10
|
The SMART User-access Brands Test Suite verifies that Brand Bundle Publishers publish valid User-access
|
@@ -34,6 +33,10 @@ module SMARTAppLaunch
|
|
34
33
|
Bundle as an input and leaving the User Access Brand Publication URL input blank.
|
35
34
|
INSTRUCTIONS
|
36
35
|
|
36
|
+
source_code_url('https://github.com/inferno-framework/smart-app-launch-test-kit')
|
37
|
+
download_url('https://github.com/inferno-framework/smart-app-launch-test-kit/releases')
|
38
|
+
report_issue_url('https://github.com/inferno-framework/smart-app-launch-test-kit/issues')
|
39
|
+
|
37
40
|
VALIDATION_MESSAGE_FILTERS = [
|
38
41
|
/\A\S+: \S+: URL value '.*' does not resolve/,
|
39
42
|
%r{\A\S+: \S+: Bundled or contained reference not found within the bundle/resource} # Validator issue with Brand profile: https://chat.fhir.org/#narrow/stream/291844-FHIR-Validator/topic/SMART.20v2.2E2.20User.20Access.20Brands.3A.20Brand.20validation.20error.3F/near/466321024
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'tls_test_kit'
|
2
2
|
|
3
3
|
require_relative 'jwks'
|
4
|
-
require_relative 'version'
|
5
4
|
require_relative 'discovery_stu1_group'
|
6
5
|
require_relative 'standalone_launch_group'
|
7
6
|
require_relative 'ehr_launch_group'
|
@@ -12,7 +11,6 @@ module SMARTAppLaunch
|
|
12
11
|
class SMARTSTU1Suite < Inferno::TestSuite
|
13
12
|
id 'smart'
|
14
13
|
title 'SMART App Launch STU1'
|
15
|
-
version VERSION
|
16
14
|
|
17
15
|
resume_test_route :get, '/launch' do |request|
|
18
16
|
request.query_parameters['iss']
|
@@ -34,15 +32,18 @@ module SMARTAppLaunch
|
|
34
32
|
}
|
35
33
|
|
36
34
|
description <<~DESCRIPTION
|
37
|
-
The SMART App Launch Test Suite verifies that systems correctly implement
|
38
|
-
the [SMART App Launch IG](http://hl7.org/fhir/smart-app-launch/1.0.0/)
|
39
|
-
for providing authorization and/or authentication services to client
|
40
|
-
applications accessing HL7® FHIR® APIs. To get started, please first register
|
35
|
+
The SMART App Launch Test Suite verifies that systems correctly implement
|
36
|
+
the [SMART App Launch IG](http://hl7.org/fhir/smart-app-launch/1.0.0/)
|
37
|
+
for providing authorization and/or authentication services to client
|
38
|
+
applications accessing HL7® FHIR® APIs. To get started, please first register
|
41
39
|
the Inferno client as a SMART App with the following information:
|
42
40
|
|
43
41
|
* SMART Launch URI: `#{config.options[:launch_uri]}`
|
44
42
|
* OAuth Redirect URI: `#{config.options[:redirect_uri]}`
|
45
43
|
DESCRIPTION
|
44
|
+
source_code_url('https://github.com/inferno-framework/smart-app-launch-test-kit')
|
45
|
+
download_url('https://github.com/inferno-framework/smart-app-launch-test-kit/releases')
|
46
|
+
report_issue_url('https://github.com/inferno-framework/smart-app-launch-test-kit/issues')
|
46
47
|
|
47
48
|
group do
|
48
49
|
title 'Standalone Launch'
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'tls_test_kit'
|
2
2
|
|
3
3
|
require_relative 'jwks'
|
4
|
-
require_relative 'version'
|
5
4
|
require_relative 'discovery_stu2_2_group'
|
6
5
|
require_relative 'standalone_launch_group_stu2_2'
|
7
6
|
require_relative 'ehr_launch_group_stu2_2'
|
@@ -13,7 +12,6 @@ module SMARTAppLaunch
|
|
13
12
|
class SMARTSTU22Suite < Inferno::TestSuite
|
14
13
|
id 'smart_stu2_2'
|
15
14
|
title 'SMART App Launch STU2.2'
|
16
|
-
version VERSION
|
17
15
|
|
18
16
|
resume_test_route :get, '/launch' do |request|
|
19
17
|
request.query_parameters['iss']
|
@@ -72,6 +70,9 @@ module SMARTAppLaunch
|
|
72
70
|
If the token introspection endpoint of the system under test is NOT available at .well-known/smart-configuration,
|
73
71
|
please run the test groups individually and group 3 Token Introspection will include the introspection endpoint as a manual input.
|
74
72
|
)
|
73
|
+
source_code_url('https://github.com/inferno-framework/smart-app-launch-test-kit')
|
74
|
+
download_url('https://github.com/inferno-framework/smart-app-launch-test-kit/releases')
|
75
|
+
report_issue_url('https://github.com/inferno-framework/smart-app-launch-test-kit/issues')
|
75
76
|
|
76
77
|
group do
|
77
78
|
title 'Standalone Launch'
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'tls_test_kit'
|
2
2
|
|
3
3
|
require_relative 'jwks'
|
4
|
-
require_relative 'version'
|
5
4
|
require_relative 'discovery_stu2_group'
|
6
5
|
require_relative 'standalone_launch_group_stu2'
|
7
6
|
require_relative 'ehr_launch_group_stu2'
|
@@ -14,7 +13,6 @@ module SMARTAppLaunch
|
|
14
13
|
class SMARTSTU2Suite < Inferno::TestSuite
|
15
14
|
id 'smart_stu2'
|
16
15
|
title 'SMART App Launch STU2'
|
17
|
-
version VERSION
|
18
16
|
|
19
17
|
resume_test_route :get, '/launch' do |request|
|
20
18
|
request.query_parameters['iss']
|
@@ -42,10 +40,10 @@ module SMARTAppLaunch
|
|
42
40
|
}
|
43
41
|
|
44
42
|
description <<~DESCRIPTION
|
45
|
-
The SMART App Launch Test Suite verifies that systems correctly implement
|
46
|
-
the [SMART App Launch IG](http://hl7.org/fhir/smart-app-launch/STU2/)
|
47
|
-
for providing authorization and/or authentication services to client
|
48
|
-
applications accessing HL7® FHIR® APIs. To get started, please first register
|
43
|
+
The SMART App Launch Test Suite verifies that systems correctly implement
|
44
|
+
the [SMART App Launch IG](http://hl7.org/fhir/smart-app-launch/STU2/)
|
45
|
+
for providing authorization and/or authentication services to client
|
46
|
+
applications accessing HL7® FHIR® APIs. To get started, please first register
|
49
47
|
the Inferno client as a SMART App with the following information:
|
50
48
|
|
51
49
|
* SMART Launch URI: `#{config.options[:launch_uri]}`
|
@@ -59,17 +57,20 @@ module SMARTAppLaunch
|
|
59
57
|
|
60
58
|
input_instructions %(
|
61
59
|
When running tests at this level, the token introspection endpoint is not available as a manual input.
|
62
|
-
Instead, group 3 Token Introspection will assume the token introspection endpoint
|
60
|
+
Instead, group 3 Token Introspection will assume the token introspection endpoint
|
63
61
|
will be output from group 1 Standalone Launch tests, specifically the SMART On FHIR Discovery tests that query
|
64
62
|
the .well-known/smart-configuration endpoint. However, including the token introspection
|
65
63
|
endpoint as part of the well-known ouput is NOT required and is not formally checked in the SMART On FHIR Discovery
|
66
64
|
tests. RFC-7662 on Token Introspection says that "The means by which the protected resource discovers the location of the introspection
|
67
65
|
endpoint are outside the scope of this specification" and the Token Introspection IG does not add any further
|
68
|
-
requirements to this.
|
66
|
+
requirements to this.
|
69
67
|
|
70
|
-
If the token introspection endpoint of the system under test is NOT available at .well-known/smart-configuration,
|
71
|
-
please run the test groups individually and group 3 Token Introspection will include the introspection endpoint as a manual input.
|
68
|
+
If the token introspection endpoint of the system under test is NOT available at .well-known/smart-configuration,
|
69
|
+
please run the test groups individually and group 3 Token Introspection will include the introspection endpoint as a manual input.
|
72
70
|
)
|
71
|
+
source_code_url('https://github.com/inferno-framework/smart-app-launch-test-kit')
|
72
|
+
download_url('https://github.com/inferno-framework/smart-app-launch-test-kit/releases')
|
73
|
+
report_issue_url('https://github.com/inferno-framework/smart-app-launch-test-kit/issues')
|
73
74
|
|
74
75
|
group do
|
75
76
|
title 'Standalone Launch'
|
@@ -36,7 +36,13 @@ module SMARTAppLaunch
|
|
36
36
|
uses_request :redirect
|
37
37
|
makes_request :token
|
38
38
|
|
39
|
-
|
39
|
+
def default_redirect_uri
|
40
|
+
"#{Inferno::Application['base_url']}/custom/smart/redirect"
|
41
|
+
end
|
42
|
+
|
43
|
+
def redirect_uri
|
44
|
+
config.options[:redirect_uri].presence || default_redirect_uri
|
45
|
+
end
|
40
46
|
|
41
47
|
def add_credentials_to_request(oauth2_params, oauth2_headers)
|
42
48
|
if client_secret.present?
|
@@ -52,7 +58,7 @@ module SMARTAppLaunch
|
|
52
58
|
|
53
59
|
oauth2_params = {
|
54
60
|
code:,
|
55
|
-
redirect_uri
|
61
|
+
redirect_uri:,
|
56
62
|
grant_type: 'authorization_code'
|
57
63
|
}
|
58
64
|
oauth2_headers = { 'Content-Type' => 'application/x-www-form-urlencoded' }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: smart_app_launch_test_kit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen MacVicar
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2025-03-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: inferno_core
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.6.2
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: 0.6.2
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: json-jwt
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.
|
61
|
+
version: 0.3.0
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 0.
|
68
|
+
version: 0.3.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: database_cleaner-sequel
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -145,6 +145,14 @@ extensions: []
|
|
145
145
|
extra_rdoc_files: []
|
146
146
|
files:
|
147
147
|
- LICENSE
|
148
|
+
- config/presets/inferno_reference_server_preset.json
|
149
|
+
- config/presets/inferno_reference_server_stu2_2_preset.json
|
150
|
+
- config/presets/inferno_reference_server_stu2_preset.json
|
151
|
+
- config/presets/smart_access_brands.json.erb
|
152
|
+
- config/presets/smart_access_brands_example_1.json
|
153
|
+
- config/presets/smart_access_brands_example_2.json
|
154
|
+
- config/presets/smart_access_brands_example_3.json
|
155
|
+
- config/presets/smart_access_brands_example_4.json
|
148
156
|
- lib/smart_app_launch/app_launch_test.rb
|
149
157
|
- lib/smart_app_launch/app_redirect_test.rb
|
150
158
|
- lib/smart_app_launch/app_redirect_test_stu2.rb
|
@@ -169,6 +177,7 @@ files:
|
|
169
177
|
- lib/smart_app_launch/ehr_launch_group_stu2_2.rb
|
170
178
|
- lib/smart_app_launch/jwks.rb
|
171
179
|
- lib/smart_app_launch/launch_received_test.rb
|
180
|
+
- lib/smart_app_launch/metadata.rb
|
172
181
|
- lib/smart_app_launch/openid_connect_group.rb
|
173
182
|
- lib/smart_app_launch/openid_connect_group_stu2_2.rb
|
174
183
|
- lib/smart_app_launch/openid_decode_id_token_test.rb
|
@@ -180,6 +189,7 @@ files:
|
|
180
189
|
- lib/smart_app_launch/openid_token_payload_test.rb
|
181
190
|
- lib/smart_app_launch/post_auth.html
|
182
191
|
- lib/smart_app_launch/smart_access_brands_examples/r4_capability_statement.json
|
192
|
+
- lib/smart_app_launch/smart_access_brands_examples/smart_access_brands_example.json.erb
|
183
193
|
- lib/smart_app_launch/smart_access_brands_group.rb
|
184
194
|
- lib/smart_app_launch/smart_access_brands_retrieval_group.rb
|
185
195
|
- lib/smart_app_launch/smart_access_brands_retrieve_bundle_test.rb
|
@@ -224,6 +234,7 @@ homepage: https://github.com/inferno-framework/smart-app-launch-test-kit
|
|
224
234
|
licenses:
|
225
235
|
- Apache-2.0
|
226
236
|
metadata:
|
237
|
+
inferno_test_kit: 'true'
|
227
238
|
homepage_uri: https://github.com/inferno-framework/smart-app-launch-test-kit
|
228
239
|
source_code_uri: https://github.com/inferno-framework/smart-app-launch-test-kit
|
229
240
|
post_install_message:
|
@@ -234,14 +245,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
234
245
|
requirements:
|
235
246
|
- - ">="
|
236
247
|
- !ruby/object:Gem::Version
|
237
|
-
version: 3.
|
248
|
+
version: 3.3.6
|
238
249
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
239
250
|
requirements:
|
240
251
|
- - ">="
|
241
252
|
- !ruby/object:Gem::Version
|
242
253
|
version: '0'
|
243
254
|
requirements: []
|
244
|
-
rubygems_version: 3.5.
|
255
|
+
rubygems_version: 3.5.22
|
245
256
|
signing_key:
|
246
257
|
specification_version: 4
|
247
258
|
summary: Inferno Tests for the SMART Application Launch Framework Implementation Guide
|