Module: SMARTAppLaunch::MockSMARTServer::SMARTIntrospectionResponseCreation

Included in:
IntrospectionEndpoint
Defined in:
lib/smart_app_launch/endpoints/mock_smart_server/smart_introspection_response_creation.rb

Instance Method Summary collapse

Instance Method Details

#make_smart_introspection_responseObject



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, _header = 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