class OmniAuth::Strategies::Vatsim

Public Instance Methods

parse_callback() click to toggle source

Parse the callback for user information

# File lib/omniauth/strategies/vatsim.rb, line 39
def parse_callback
  MultiJson.decode(self.extra['access_token'].params.keys[1])['user']
end
request_phase() click to toggle source

Customize the OAuth request phase to handle VATSIM SSO

# File lib/omniauth/strategies/vatsim.rb, line 44
def request_phase
  request_token = consumer.get_request_token({oauth_callback: callback_url}, options.request_params) do |response_body|
    # Debug the response body
    # log :debug, response_body.inspect

    # Log errors
    if MultiJson.decode(response_body)['request']['result'] == 'fail'
      log :error, MultiJson.decode(response_body)['request']['message']
    end

    # symbolize string keys returned by VATSIM SSO
    MultiJson.decode(response_body)['token'].symbolize_keys
  end

  session['oauth'] ||= {}
  session['oauth'][name.to_s] = {
    'callback_confirmed': request_token.callback_confirmed?,
    'request_token':      request_token.token,
    'request_secret':     request_token.secret
  }

  if request_token.callback_confirmed?
    redirect request_token.authorize_url(options[:authorize_params])
  else
    redirect request_token.authorize_url(options[:authorize_params].merge(oauth_callback: callback_url))
  end

rescue ::Timeout::Error => e
  fail!(:timeout, e)
rescue ::Net::HTTPFatalError, ::OpenSSL::SSL::SSLError => e
  fail!(:service_unavailable, e)
end