class SMARTAppLaunch::AppRedirectTest

def self.calculate_s256_challenge(verifier)

def self.calculate_s256_challenge(verifier)
  Base64.urlsafe_encode64(Digest::SHA256.digest(verifier), padding: false)
end

def aud

def aud
  url
end

def authorization_url_builder(url, params)

def authorization_url_builder(url, params)
  uri = URI(url)
  # because the URL might have parameters on it
  original_parameters = Hash[URI.decode_www_form(uri.query || '')]
  new_params = original_parameters.merge(params)
  uri.query = URI.encode_www_form(new_params)
  uri.to_s
end

def default_redirect_uri

def default_redirect_uri
  "#{Inferno::Application['base_url']}/custom/smart/redirect"
end

def redirect_uri

def redirect_uri
  config.options[:redirect_uri].presence || default_redirect_uri
end

def wait_message(auth_url)

def wait_message(auth_url)
  if config.options[:redirect_message_proc].present?
    return instance_exec(auth_url, &config.options[:redirect_message_proc])
  end
  %(
    ### #{self.class.parent&.parent&.title}
    [Follow this link to authorize with the SMART server](#{auth_url}).
    Tests will resume once Inferno receives a request at
    `#{redirect_uri}` with a state of `#{state}`.
  )
end