7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
# File 'lib/smart_app_launch/endpoints/mock_smart_server/smart_introspection_response_creation.rb', line 7
def make_smart_introspection_response
target_token = request.params[:token]
introspection_inactive_response_body = { active: false }
return introspection_inactive_response_body if MockSMARTServer.token_expired?(target_token)
token_requests = Inferno::Repositories::Requests.new.tagged_requests(test_run.test_session_id, [TOKEN_TAG])
original_response_body = nil
original_token_request = token_requests.find do |request|
next unless request.status == 200
original_response_body = JSON.parse(request.response_body)
[original_response_body['access_token'], original_response_body['refresh_token']].include?(target_token)
end
return introspection_inactive_response_body unless original_token_request.present?
decoded_token = MockSMARTServer.decode_token(target_token)
introspection_active_response_body = {
active: true,
client_id: decoded_token['client_id'],
exp: decoded_token['expiration']
}
original_response_body.each do |element, value|
next if ['access_token', 'refresh_token', 'token_type', 'expires_in'].include?(element)
next if introspection_active_response_body.key?(element)
introspection_active_response_body[element] = value
end
if original_response_body.key?('id_token')
user_claims, = JWT.decode(original_response_body['id_token'], nil, false)
introspection_active_response_body['iss'] = user_claims['iss']
introspection_active_response_body['sub'] = user_claims['sub']
introspection_active_response_body['fhirUser'] = user_claims['fhirUser'] if user_claims['fhirUser'].present?
end
introspection_active_response_body
end
|