1
0
Fork 0
mirror of https://github.com/omniauth/omniauth.git synced 2022-11-09 12:31:49 -05:00

added Gowalla support

This commit is contained in:
Kevin Smith 2010-10-07 11:48:13 -04:00
parent 712f4b600d
commit 67ede42fbe
3 changed files with 74 additions and 0 deletions

View file

@ -11,5 +11,6 @@ module OmniAuth
autoload :GitHub, 'omniauth/strategies/github' autoload :GitHub, 'omniauth/strategies/github'
autoload :ThirtySevenSignals, 'omniauth/strategies/thirty_seven_signals' autoload :ThirtySevenSignals, 'omniauth/strategies/thirty_seven_signals'
autoload :Foursquare, 'omniauth/strategies/foursquare' autoload :Foursquare, 'omniauth/strategies/foursquare'
autoload :Gowalla, 'omniauth/strategies/gowalla'
end end
end end

View file

@ -0,0 +1,60 @@
require 'omniauth/oauth'
require 'multi_json'
module OmniAuth
module Strategies
#
# Authenticate to Gowalla utilizing OAuth 2.0 and retrieve
# basic user information.
#
# Usage:
#
# use OmniAuth::Strategies::Gowalla, 'API Key', 'Secret Key'
#
# Options:
#
# <tt>:scope</tt> :: Extended permissions such as <tt>email</tt> and <tt>offline_access</tt> (which are the defaults).
class Gowalla < OAuth2
def initialize(app, api_key, secret_key, options = {})
options[:site] = 'https://api.gowalla.com/api/oauth'
options[:authorize_url] = 'https://gowalla.com/api/oauth/new'
options[:access_token_url] = 'https://api.gowalla.com/api/oauth/token'
super(app, :gowalla, api_key, secret_key, options)
end
def user_data
@data ||= MultiJson.decode(@access_token.get("/users/me.json"))
end
def request_phase(options = {})
options[:scope] ||= "email,offline_access"
super(options)
end
def user_info
{
'name' => "#{user_data['first_name']} #{user_data['last_name']}",
'nickname' => user_data["username"],
'first_name' => user_data["first_name"],
'last_name' => user_data["last_name"],
'location' => user_data["hometown"],
'description' => user_data["bio"],
'image' => user_data["image_url"],
'phone' => nil,
'urls' => {
'Gowalla' => "http://www.gowalla.com/#{user_data['url']}",
'Website' => user_data["website"]
}
}
end
def auth_hash
OmniAuth::Utils.deep_merge(super, {
'uid' => user_data["url"].split('/').last,
'user_info' => user_info,
'extra' => {'user_hash' => user_data}
})
end
end
end
end

View file

@ -0,0 +1,13 @@
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
describe OmniAuth::Strategies::Gowalla do
it 'should subclass OAuth2' do
OmniAuth::Strategies::Gowalla.should < OmniAuth::Strategies::OAuth2
end
it 'should initialize with just api key and secret key' do
lambda{OmniAuth::Strategies::Gowalla.new({},'api_key','secret_key')}.should_not raise_error
end
end