class OmniAuth::Strategies::OpenID

OmniAuth strategy for connecting via OpenID. This allows for connection to a wide variety of sites, some of which are listed [on the OpenID website](openid.net/get-an-openid/).

Constants

AX

Public Instance Methods

ax_user_info() click to toggle source
# File lib/omniauth/strategies/open_id.rb, line 104
def ax_user_info
  ax = ::OpenID::AX::FetchResponse.from_success_response(openid_response)
  return {} unless ax
  {
    'email' => ax.get_single(AX[:email]),
    'first_name' => ax.get_single(AX[:first_name]),
    'last_name' => ax.get_single(AX[:last_name]),
    'name' => (ax.get_single(AX[:name]) || [ax.get_single(AX[:first_name]), ax.get_single(AX[:last_name])].join(' ')).strip,
    'location' => ("#{ax.get_single(AX[:city])}, #{ax.get_single(AX[:state])}" if Array(ax.get_single(AX[:city])).any? && Array(ax.get_single(AX[:state])).any?),
    'nickname' => ax.get_single(AX[:nickname]),
    'urls' => ({'Website' => Array(ax.get_single(AX[:website])).first} if Array(ax.get_single(AX[:website])).any?)
  }.inject({}){|h,(k,v)| h[k] = Array(v).first; h}.reject{|k,v| v.nil? || v == ''}
end
callback_phase() click to toggle source
Calls superclass method
# File lib/omniauth/strategies/open_id.rb, line 79
def callback_phase
  return fail!(:invalid_credentials) unless openid_response && openid_response.status == :success
  super
end
dummy_app() click to toggle source
# File lib/omniauth/strategies/open_id.rb, line 31
def dummy_app
  lambda{|env| [401, {"WWW-Authenticate" => Rack::OpenID.build_header(
    :identifier => identifier,
    :return_to => callback_url,
    :required => options.required,
    :optional => options.optional,
    :method => 'post'
  )}, []]}
end
get_identifier() click to toggle source
# File lib/omniauth/strategies/open_id.rb, line 62
def get_identifier
  f = OmniAuth::Form.new(:title => 'OpenID Authentication')
  f.label_field('OpenID Identifier', options.identifier_param)
  f.input_field('url', options.identifier_param)
  f.to_response
end
identifier() click to toggle source
# File lib/omniauth/strategies/open_id.rb, line 41
def identifier
  i = options.identifier || request.params[options.identifier_param.to_s]
  i = nil if i == ''
  i
end
openid_response() click to toggle source
# File lib/omniauth/strategies/open_id.rb, line 84
def openid_response
  unless @openid_response
    openid = Rack::OpenID.new(lambda{|env| [200,{},[]]}, options[:store])
    openid.call(env)
    @openid_response = env.delete('rack.openid.response')
  end
  @openid_response
end
request_phase() click to toggle source
# File lib/omniauth/strategies/open_id.rb, line 47
def request_phase
  identifier ? start : get_identifier
end
sreg_user_info() click to toggle source
# File lib/omniauth/strategies/open_id.rb, line 93
def sreg_user_info
  sreg = ::OpenID::SReg::Response.from_success_response(openid_response)
  return {} unless sreg
  {
    'email' => sreg['email'],
    'name' => sreg['fullname'],
    'location' => sreg['postcode'],
    'nickname' => sreg['nickname']
  }.reject{|k,v| v.nil? || v == ''}
end
start() click to toggle source
# File lib/omniauth/strategies/open_id.rb, line 51
def start
  openid = Rack::OpenID.new(dummy_app, options[:store])
  response = openid.call(env)
  case env['rack.openid.response']
  when Rack::OpenID::MissingResponse, Rack::OpenID::TimeoutResponse
    fail!(:connection_failed)
  else
    response
  end
end