From 86c4a648abf0e8acd833653eb6984f5aed7ceb71 Mon Sep 17 00:00:00 2001 From: Charles Barbier Date: Fri, 27 May 2011 10:22:58 +0200 Subject: [PATCH 1/3] Google default scope should include http --- oa-oauth/lib/omniauth/strategies/google.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oa-oauth/lib/omniauth/strategies/google.rb b/oa-oauth/lib/omniauth/strategies/google.rb index 043272f..8b9fc05 100644 --- a/oa-oauth/lib/omniauth/strategies/google.rb +++ b/oa-oauth/lib/omniauth/strategies/google.rb @@ -21,7 +21,7 @@ module OmniAuth } google_contacts_auth = "www.google.com/m8/feeds" - options[:scope] ||= google_contacts_auth + options[:scope] ||= "http://#{google_contacts_auth}" options[:scope] << " http://#{google_contacts_auth}" unless options[:scope] =~ %r[http[s]?:\/\/#{google_contacts_auth}] super(app, :google, consumer_key, consumer_secret, client_options, options) From 0356c4638fcf21abe0a0f59fbd23956111556f71 Mon Sep 17 00:00:00 2001 From: Ryan Wood Date: Fri, 27 May 2011 17:19:25 -0400 Subject: [PATCH 2/3] Add WePay strategy --- README.md | 1 + oa-oauth/lib/omniauth/oauth.rb | 1 + oa-oauth/lib/omniauth/strategies/we_pay.rb | 48 +++++++++++++++++++ .../spec/omniauth/strategies/we_pay_spec.rb | 5 ++ 4 files changed, 55 insertions(+) create mode 100644 oa-oauth/lib/omniauth/strategies/we_pay.rb create mode 100644 oa-oauth/spec/omniauth/strategies/we_pay_spec.rb diff --git a/README.md b/README.md index 23b32a0..8fd1c66 100644 --- a/README.md +++ b/README.md @@ -71,6 +71,7 @@ OmniAuth currently supports the following external providers: * Twitter (credit: [mbleigh](https://github.com/mbleigh)) * Vimeo (credit: [jamiew](https://github.com/jamiew)) * Vkontakte (credit: [german](https://github.com/german)) + * WePay (credit: [ryanwood](https://github.com/ryanwood)) * Yammer (credit: [kltcalamay](https://github.com/kltcalamay)) * YouTube (credit: [jamiew](https://github.com/jamiew)) * CAS (Central Authentication Service) (credit: [jamesarosen](https://github.com/jamesarosen)) diff --git a/oa-oauth/lib/omniauth/oauth.rb b/oa-oauth/lib/omniauth/oauth.rb index 3e4d6ef..f44c106 100644 --- a/oa-oauth/lib/omniauth/oauth.rb +++ b/oa-oauth/lib/omniauth/oauth.rb @@ -52,6 +52,7 @@ module OmniAuth autoload :TypePad, 'omniauth/strategies/type_pad' autoload :Vimeo, 'omniauth/strategies/vimeo' autoload :Vkontakte, 'omniauth/strategies/vkontakte' + autoload :WePay, 'omniauth/strategies/we_pay' autoload :Yahoo, 'omniauth/strategies/yahoo' autoload :Yammer, 'omniauth/strategies/yammer' autoload :YouTube, 'omniauth/strategies/you_tube' diff --git a/oa-oauth/lib/omniauth/strategies/we_pay.rb b/oa-oauth/lib/omniauth/strategies/we_pay.rb new file mode 100644 index 0000000..899898b --- /dev/null +++ b/oa-oauth/lib/omniauth/strategies/we_pay.rb @@ -0,0 +1,48 @@ +require 'omniauth/oauth' +require 'multi_json' + +module OmniAuth + module Strategies + # OAuth 2.0 based authentication with WePay. In order to + # sign up for an application, you need to [register an application](https://wepay.com/developer/register) + # and provide the proper credentials to this middleware. + class WePay < OAuth2 + # @param [Rack Application] app standard middleware application argument + # @param [String] client_id the application ID for your client + # @param [String] client_secret the application secret + def initialize(app, client_id = nil, client_secret = nil, options = {}, &block) + client_options = { + :site => "https://wepayapi.com", + :authorize_url => 'https://www.wepay.com/session/authorize', + :access_token_path => '/v1/oauth2/token' + } + + super(app, :we_pay, client_id, client_secret, client_options, options, &block) + end + + protected + + def user_data + @data ||= MultiJson.decode(@access_token.get('/v1/user'))['result'] + end + + def user_info + { + 'email' => user_data['email'], + 'name' => "#{user_data['firstName']} #{user_data['lastName']}", + 'first_name' => user_data['firstName'], + 'last_name' => user_data['lastName'], + 'image' => user_data['picture'] + } + end + + def auth_hash + OmniAuth::Utils.deep_merge(super, { + 'uid' => user_data['user_id'], + 'user_info' => user_info, + 'extra' => {'user_hash' => user_data} + }) + end + end + end +end diff --git a/oa-oauth/spec/omniauth/strategies/we_pay_spec.rb b/oa-oauth/spec/omniauth/strategies/we_pay_spec.rb new file mode 100644 index 0000000..4dba7fd --- /dev/null +++ b/oa-oauth/spec/omniauth/strategies/we_pay_spec.rb @@ -0,0 +1,5 @@ +require File.expand_path('../../../spec_helper', __FILE__) + +describe OmniAuth::Strategies::WePay do + it_should_behave_like "an oauth2 strategy" +end From d7891fd35ca3f0f3f37212b374df3699d1e1ce90 Mon Sep 17 00:00:00 2001 From: Nick Stamas Date: Wed, 1 Jun 2011 01:02:38 -0400 Subject: [PATCH 3/3] added dropbox strategy --- oa-oauth/lib/omniauth/oauth.rb | 1 + oa-oauth/lib/omniauth/strategies/dropbox.rb | 36 +++++++++++++++++++ .../spec/omniauth/strategies/dropbox_spec.rb | 5 +++ 3 files changed, 42 insertions(+) create mode 100644 oa-oauth/lib/omniauth/strategies/dropbox.rb create mode 100644 oa-oauth/spec/omniauth/strategies/dropbox_spec.rb diff --git a/oa-oauth/lib/omniauth/oauth.rb b/oa-oauth/lib/omniauth/oauth.rb index f44c106..208d417 100644 --- a/oa-oauth/lib/omniauth/oauth.rb +++ b/oa-oauth/lib/omniauth/oauth.rb @@ -12,6 +12,7 @@ module OmniAuth autoload :Doit, 'omniauth/strategies/doit' autoload :Dopplr, 'omniauth/strategies/dopplr' autoload :Douban, 'omniauth/strategies/douban' + autoload :Dropbox, 'omniauth/strategies/dropbox' autoload :Evernote, 'omniauth/strategies/evernote' autoload :Facebook, 'omniauth/strategies/facebook' autoload :Foursquare, 'omniauth/strategies/foursquare' diff --git a/oa-oauth/lib/omniauth/strategies/dropbox.rb b/oa-oauth/lib/omniauth/strategies/dropbox.rb new file mode 100644 index 0000000..1ab1057 --- /dev/null +++ b/oa-oauth/lib/omniauth/strategies/dropbox.rb @@ -0,0 +1,36 @@ +require 'omniauth/oauth' +require 'multi_json' + +module OmniAuth + module Strategies + class Dropbox < OmniAuth::Strategies::OAuth + def initialize(app, client_id = nil, client_secret = nil, options = {}, &block) + client_options = { + :site => "https://api.dropbox.com", + :proxy => ENV["HTTP_PROXY"] || ENV["http_proxy"], + :request_token_url => "https://api.dropbox.com/0/oauth/request_token", + :authorize_url => "https://www.dropbox.com/0/oauth/authorize", + :access_token_url => "https://api.dropbox.com/0/oauth/access_token" + } + super(app, :dropbox, client_id, client_secret, client_options, options, &block) + end + + def user_data + @data ||= MultiJson.decode(@access_token.get('/0/account/info').body) + end + + def user_info + { + 'name' => "#{user_data['display_name']}" + } + end + + def auth_hash + OmniAuth::Utils.deep_merge(super, { + 'uid' => user_data['uid'], + 'user_info' => user_info + }) + end + end + end +end diff --git a/oa-oauth/spec/omniauth/strategies/dropbox_spec.rb b/oa-oauth/spec/omniauth/strategies/dropbox_spec.rb new file mode 100644 index 0000000..cfb2813 --- /dev/null +++ b/oa-oauth/spec/omniauth/strategies/dropbox_spec.rb @@ -0,0 +1,5 @@ +require File.expand_path('../../../spec_helper', __FILE__) + +describe OmniAuth::Strategies::Dropbox do + it_should_behave_like "an oauth strategy" +end