class OmniAuth::Strategies::Globus

Public Instance Methods

authorize_params() click to toggle source
Calls superclass method
# File lib/omniauth/strategies/globus.rb, line 25
def authorize_params
  super.tap do |params|
    options[:authorize_options].each do |k|
      params[k] = request.params[k.to_s] unless [nil, ""].include?(request.params[k.to_s])
    end

    params[:scope] = get_scope(params)
    params[:access_type] = "offline" if params[:access_type].nil?
    params["openid.realm"] = params.delete(:openid_realm) unless params[:openid_realm].nil?

    session["omniauth.state"] = params[:state] if params[:state]
  end
end
build_access_token()
custom_build_access_token() click to toggle source
# File lib/omniauth/strategies/globus.rb, line 73
def custom_build_access_token
  get_access_token(request)
end
Also aliased as: build_access_token
raw_info() click to toggle source
# File lib/omniauth/strategies/globus.rb, line 69
def raw_info
  @raw_info ||= access_token.get(options.client_options.userinfo_endpoint).parsed
end

Private Instance Methods

callback_url() click to toggle source
# File lib/omniauth/strategies/globus.rb, line 81
def callback_url
  options[:redirect_uri] || (full_host + script_name + callback_path)
end
client_get_token(verifier, redirect_uri) click to toggle source
# File lib/omniauth/strategies/globus.rb, line 106
def client_get_token(verifier, redirect_uri)
  client.auth_code.get_token(verifier, get_token_options(redirect_uri), get_token_params)
end
get_access_token(request) click to toggle source
# File lib/omniauth/strategies/globus.rb, line 85
def get_access_token(request)
  verifier = request.params["code"]
  redirect_uri = request.params["redirect_uri"]
  if verifier && request.xhr?
    client_get_token(verifier, redirect_uri || "postmessage")
  elsif verifier
    client_get_token(verifier, redirect_uri || callback_url)
  elsif verify_token(request.params["access_token"])
    ::OAuth2::AccessToken.from_hash(client, request.params.dup)
  elsif request.content_type =~ /json/i
    begin
      body = JSON.parse(request.body.read)
      request.body.rewind # rewind request body for downstream middlewares
      verifier = body && body["code"]
      client_get_token(verifier, "postmessage") if verifier
    rescue JSON::ParserError => e
      warn "[omniauth globus] JSON parse error=#{e}"
    end
  end
end
get_scope(params) click to toggle source
# File lib/omniauth/strategies/globus.rb, line 114
def get_scope(params)
  raw_scope = params[:scope] || options.scope
  scope_list = raw_scope.split(" ").map { |item| item.split(",") }.flatten
  scope_list.join(" ")
end
get_token_options(redirect_uri = "") click to toggle source
# File lib/omniauth/strategies/globus.rb, line 120
def get_token_options(redirect_uri = "")
  { redirect_uri: redirect_uri }.merge(token_params.to_hash(symbolize_keys: true))
end
get_token_params() click to toggle source
# File lib/omniauth/strategies/globus.rb, line 110
def get_token_params
  deep_symbolize(options.auth_token_params || {})
end
prune!(hash) click to toggle source
# File lib/omniauth/strategies/globus.rb, line 124
def prune!(hash)
  hash.delete_if do |_, v|
    prune!(v) if v.is_a?(Hash)
    v.nil? || (v.respond_to?(:empty?) && v.empty?)
  end
end
strip_unnecessary_query_parameters(query_parameters) click to toggle source
# File lib/omniauth/strategies/globus.rb, line 131
def strip_unnecessary_query_parameters(query_parameters)
  # strip `sz` parameter (defaults to sz=50) which overrides `image_size` options
  return nil if query_parameters.nil?

  params = CGI.parse(query_parameters)
  stripped_params = params.delete_if { |key| key == "sz" }

  # don't return an empty Hash since that would result
  # in URLs with a trailing ? character: http://image.url?
  return nil if stripped_params.empty?

  URI.encode_www_form(stripped_params)
end
verify_token(access_token) click to toggle source
# File lib/omniauth/strategies/globus.rb, line 145
def verify_token(access_token)
  return false unless access_token

  raw_response = client.request(:get, options.client_options.userinfo_endpoint,
                                params: { access_token: access_token }).parsed
  raw_response["aud"] == options.client_id
end