class OmniAuth::Strategies::LibLynx

Public Instance Methods

access_token() click to toggle source
# File lib/omniauth/strategies/liblynx.rb, line 92
def access_token
  @access_token ||= client.client_credentials.get_token
  @access_token = @access_token.refresh! if @access_token.expired?
  @access_token
end
callback_phase() click to toggle source
# File lib/omniauth/strategies/liblynx.rb, line 81
def callback_phase
  @auth_url = [
    id_body[:url],
    '?',
    URI.encode_www_form(request.params)
  ].join
  return fail!(:no_account_info, NoAccountInfo.new) if raw_info.blank?
  env['omniauth.auth'] = auth_hash
  call_app!
end
callback_url() click to toggle source
# File lib/omniauth/strategies/liblynx.rb, line 29
def callback_url
  options[:callback_url] || (full_host + script_name + callback_path)
end
raw_info() click to toggle source
# File lib/omniauth/strategies/liblynx.rb, line 66
def raw_info
  @raw_info ||= begin
    r = access_token
      .request(:post, options.id_url, body: id_body.merge(url: @auth_url))
      .parsed
    ref = r.dig('account', 'publisher_reference')
    {
      '_response' => r,
      'reference' => ref
    }
      .compact
      .merge(r['account_individual'] || {})
  end
end
request_phase() click to toggle source
# File lib/omniauth/strategies/liblynx.rb, line 49
def request_phase
  res = access_token
    .request(:post, options.id_url, body: id_body)
    .parsed
  email = id_body[:email] || ''
  if email.present?
    institution = res['user_institution']
    return fail!(:no_institution, NoInstitution.new) unless institution
    account_name = institution['account_name']
    log(:info, "User institution: #{institution}")
  end
  id = res['id']
  url = URI.join(callback_url, "?email=#{CGI.escape(email)}&institution=#{CGI.escape(account_name.to_s)}").to_s
  hmac = OpenSSL::HMAC.hexdigest('SHA256', client.secret, url)
  redirect("#{client.site}/wayf/#{id}?url=#{CGI.escape(url)}&hash=#{hmac}")
end

Private Instance Methods

id_body() click to toggle source
# File lib/omniauth/strategies/liblynx.rb, line 100
def id_body
  {
    ip: request.ip,
    url: request.params['url'] || callback_url,
    user_agent: request.user_agent,
    email: request.params['email'],
    forceSsoLogin: request.params['force_sso_login']
  }.compact
end