Merge pull request #432 from GuillauG/master

Viadeo added as a provider
This commit is contained in:
Erik Michaels-Ober 2011-08-18 09:22:27 -07:00
commit 753eb5fc63
4 changed files with 79 additions and 0 deletions

View File

@ -74,6 +74,7 @@ OmniAuth currently supports the following external providers:
* Tsohu (credit: [quake](https://github.com/quake))
* Tumblr (credit: [jamiew](https://github.com/jamiew))
* Twitter (credit: [mbleigh](https://github.com/mbleigh))
* Viadeo (credit: [guillaug](https://github.com/guillaug))
* Vimeo (credit: [jamiew](https://github.com/jamiew))
* Vkontakte (credit: [german](https://github.com/german))
* WePay (credit: [ryanwood](https://github.com/ryanwood))

View File

@ -60,6 +60,7 @@ module OmniAuth
autoload :TaoBao, 'omniauth/strategies/oauth2/taobao'
autoload :Teambox, 'omniauth/strategies/oauth2/teambox'
autoload :ThirtySevenSignals, 'omniauth/strategies/oauth2/thirty_seven_signals'
autoload :Viadeo, 'omniauth/strategies/oauth2/viadeo'
autoload :Vkontakte, 'omniauth/strategies/oauth2/vkontakte'
autoload :WePay, 'omniauth/strategies/oauth2/we_pay'

View File

@ -0,0 +1,72 @@
require 'omniauth/oauth'
require 'multi_json'
module OmniAuth
module Strategies
# Authenticate to Viadeo utilizing OAuth 2.0 and retrieve
# basic user information.
#
# @example Basic Usage
# use OmniAuth::Strategies::Viadeo, 'client_id', 'client_secret'
class Viadeo < OmniAuth::Strategies::OAuth2
# @param [Rack Application] app standard middleware application parameter
# @param [String] client_id the application id as [registered on Viadeo](http://dev.viadeo.com/)
# @param [String] client_secret the application secret as registered on Facebook
def initialize(app, client_id=nil, client_secret=nil, options = {}, &block)
client_options = {
:site => 'https://api.viadeo.com/',
:authorize_url => 'https://secure.viadeo.com/oauth-provider/authorize2',
:token_url => 'https://secure.viadeo.com/oauth-provider/access_token2'
}
super(app, :viadeo, client_id, client_secret, client_options, options, &block)
end
def auth_hash
OmniAuth::Utils.deep_merge(
super, {
'uid' => user_data['id'],
'user_info' => user_info,
'extra' => {
'user_hash' => user_data,
},
}
)
end
def user_data
@data ||= MultiJson.decode(@access_token.get('/me').body)
end
def request_phase
options[:response_type] ||= 'code'
super
end
def callback_phase
options[:grant_type] ||= 'authorization_code'
super
end
def user_info
{
'name' => user_data['name'],
'link' => user_data['link'],
'first_name' => user_data['first_name'],
'last_name' => user_data['last_name'],
'gender' => user_data['gender'],
'nickname' => user_data['nickname'],
'has_picture' => user_data['has_picture'] ,
'picture_small' => user_data['picture_small'],
'picture_large' => user_data['picture_large'],
'headline' => user_data['headline'],
'introduction' => user_data['introduction'],
'interests' => user_data['interests'],
'location' => user_data['location'],
'is_premium' => user_data['is_premium'],
'premium_since' => user_data['premium_since']
}
end
end
end
end

View File

@ -0,0 +1,5 @@
require 'spec_helper'
describe OmniAuth::Strategies::Viadeo do
it_should_behave_like "an oauth2 strategy"
end