oa-oauth 0.2.6 → 0.3.0.rc3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (143) hide show
  1. data/Gemfile +4 -0
  2. data/lib/omniauth/oauth.rb +65 -47
  3. data/lib/omniauth/strategies/google_oauth2.rb +59 -0
  4. data/lib/omniauth/strategies/oauth.rb +8 -2
  5. data/lib/omniauth/strategies/oauth/blogger.rb +58 -0
  6. data/lib/omniauth/strategies/{dopplr.rb → oauth/dopplr.rb} +19 -21
  7. data/lib/omniauth/strategies/{douban.rb → oauth/douban.rb} +18 -18
  8. data/lib/omniauth/strategies/oauth/dropbox.rb +40 -0
  9. data/lib/omniauth/strategies/{evernote.rb → oauth/evernote.rb} +11 -13
  10. data/lib/omniauth/strategies/oauth/flattr.rb +47 -0
  11. data/lib/omniauth/strategies/oauth/flickr.rb +39 -0
  12. data/lib/omniauth/strategies/{goodreads.rb → oauth/goodreads.rb} +9 -9
  13. data/lib/omniauth/strategies/{google.rb → oauth/google.rb} +19 -20
  14. data/lib/omniauth/strategies/oauth/google_health.rb +71 -0
  15. data/lib/omniauth/strategies/oauth/google_health_sandbox.rb +74 -0
  16. data/lib/omniauth/strategies/oauth/hyves.rb +69 -0
  17. data/lib/omniauth/strategies/{identica.rb → oauth/identica.rb} +20 -16
  18. data/lib/omniauth/strategies/{linked_in.rb → oauth/linked_in.rb} +14 -14
  19. data/lib/omniauth/strategies/{meetup.rb → oauth/meetup.rb} +18 -16
  20. data/lib/omniauth/strategies/{miso.rb → oauth/miso.rb} +14 -7
  21. data/lib/omniauth/strategies/{netflix.rb → oauth/netflix.rb} +16 -14
  22. data/lib/omniauth/strategies/oauth/orkut.rb +63 -0
  23. data/lib/omniauth/strategies/oauth/plurk.rb +57 -0
  24. data/lib/omniauth/strategies/{qzone.rb → oauth/qzone.rb} +15 -12
  25. data/lib/omniauth/strategies/oauth/rdio.rb +48 -0
  26. data/lib/omniauth/strategies/oauth/smug_mug.rb +47 -0
  27. data/lib/omniauth/strategies/{t163.rb → oauth/t163.rb} +17 -17
  28. data/lib/omniauth/strategies/oauth/tqq.rb +63 -0
  29. data/lib/omniauth/strategies/oauth/trade_me.rb +50 -0
  30. data/lib/omniauth/strategies/oauth/trip_it.rb +24 -0
  31. data/lib/omniauth/strategies/{tsina.rb → oauth/tsina.rb} +21 -15
  32. data/lib/omniauth/strategies/{tsohu.rb → oauth/tsohu.rb} +15 -17
  33. data/lib/omniauth/strategies/{tumblr.rb → oauth/tumblr.rb} +13 -15
  34. data/lib/omniauth/strategies/{twitter.rb → oauth/twitter.rb} +17 -16
  35. data/lib/omniauth/strategies/{type_pad.rb → oauth/type_pad.rb} +18 -27
  36. data/lib/omniauth/strategies/{vimeo.rb → oauth/vimeo.rb} +18 -14
  37. data/lib/omniauth/strategies/{yahoo.rb → oauth/yahoo.rb} +17 -12
  38. data/lib/omniauth/strategies/{yammer.rb → oauth/yammer.rb} +17 -12
  39. data/lib/omniauth/strategies/{you_tube.rb → oauth/you_tube.rb} +16 -14
  40. data/lib/omniauth/strategies/oauth2.rb +7 -5
  41. data/lib/omniauth/strategies/oauth2/angellist.rb +57 -0
  42. data/lib/omniauth/strategies/oauth2/bitly.rb +43 -0
  43. data/lib/omniauth/strategies/oauth2/cobot.rb +54 -0
  44. data/lib/omniauth/strategies/{dailymile.rb → oauth2/dailymile.rb} +19 -20
  45. data/lib/omniauth/strategies/{doit.rb → oauth2/doit.rb} +18 -18
  46. data/lib/omniauth/strategies/{facebook.rb → oauth2/facebook.rb} +38 -21
  47. data/lib/omniauth/strategies/{foursquare.rb → oauth2/foursquare.rb} +20 -19
  48. data/lib/omniauth/strategies/{github.rb → oauth2/github.rb} +21 -19
  49. data/lib/omniauth/strategies/oauth2/glitch.rb +45 -0
  50. data/lib/omniauth/strategies/oauth2/gowalla.rb +72 -0
  51. data/lib/omniauth/strategies/{instagram.rb → oauth2/instagram.rb} +19 -17
  52. data/lib/omniauth/strategies/oauth2/liveid.rb +67 -0
  53. data/lib/omniauth/strategies/oauth2/mailchimp.rb +39 -0
  54. data/lib/omniauth/strategies/oauth2/mailru.rb +75 -0
  55. data/lib/omniauth/strategies/{mixi.rb → oauth2/mixi.rb} +23 -18
  56. data/lib/omniauth/strategies/{renren.rb → oauth2/renren.rb} +25 -23
  57. data/lib/omniauth/strategies/oauth2/salesforce.rb +48 -0
  58. data/lib/omniauth/strategies/oauth2/sound_cloud.rb +60 -0
  59. data/lib/omniauth/strategies/{taobao.rb → oauth2/taobao.rb} +24 -22
  60. data/lib/omniauth/strategies/{teambox.rb → oauth2/teambox.rb} +19 -17
  61. data/lib/omniauth/strategies/{thirty_seven_signals.rb → oauth2/thirty_seven_signals.rb} +17 -17
  62. data/lib/omniauth/strategies/oauth2/viadeo.rb +72 -0
  63. data/lib/omniauth/strategies/oauth2/vkontakte.rb +104 -0
  64. data/lib/omniauth/strategies/oauth2/we_pay.rb +48 -0
  65. data/lib/omniauth/strategies/xauth.rb +3 -3
  66. data/lib/omniauth/strategies/{instapaper.rb → xauth/instapaper.rb} +9 -12
  67. data/lib/omniauth/version.rb +3 -3
  68. data/oa-oauth.gemspec +17 -18
  69. data/spec/omniauth/strategies/{bitly_spec.rb → google_oauth2_spec.rb} +1 -1
  70. data/spec/omniauth/strategies/{dopplr_spec.rb → oauth/dopplr_spec.rb} +1 -1
  71. data/spec/omniauth/strategies/{douban_spec.rb → oauth/douban_spec.rb} +1 -1
  72. data/spec/omniauth/strategies/oauth/dropbox_spec.rb +5 -0
  73. data/spec/omniauth/strategies/{evernote_spec.rb → oauth/evernote_spec.rb} +1 -1
  74. data/spec/omniauth/strategies/oauth/flattr_spec.rb +5 -0
  75. data/spec/omniauth/strategies/oauth/flickr_spec.rb +6 -0
  76. data/spec/omniauth/strategies/{goodreads_spec.rb → oauth/goodreads_spec.rb} +1 -1
  77. data/spec/omniauth/strategies/oauth/google_health_sandbox_spec.rb +5 -0
  78. data/spec/omniauth/strategies/oauth/google_health_spec.rb +5 -0
  79. data/spec/omniauth/strategies/{google_spec.rb → oauth/google_spec.rb} +1 -1
  80. data/spec/omniauth/strategies/{hyves_spec.rb → oauth/hyves_spec.rb} +1 -1
  81. data/spec/omniauth/strategies/{identica_spec.rb → oauth/identica_spec.rb} +1 -1
  82. data/spec/omniauth/strategies/{linked_in_spec.rb → oauth/linked_in_spec.rb} +1 -1
  83. data/spec/omniauth/strategies/{meetup_spec.rb → oauth/meetup_spec.rb} +3 -3
  84. data/spec/omniauth/strategies/{miso_spec.rb → oauth/miso_spec.rb} +1 -1
  85. data/spec/omniauth/strategies/{netflix_spec.rb → oauth/netflix_spec.rb} +1 -1
  86. data/spec/omniauth/strategies/oauth/oauth_spec.rb +131 -0
  87. data/spec/omniauth/strategies/oauth/orkut_spec.rb +5 -0
  88. data/spec/omniauth/strategies/{plurk_spec.rb → oauth/plurk_spec.rb} +1 -1
  89. data/spec/omniauth/strategies/{rdio_spec.rb → oauth/rdio_spec.rb} +1 -1
  90. data/spec/omniauth/strategies/{smug_mug_spec.rb → oauth/smug_mug_spec.rb} +1 -1
  91. data/spec/omniauth/strategies/{t163_spec.rb → oauth/t163_spec.rb} +1 -1
  92. data/spec/omniauth/strategies/{trade_me_spec.rb → oauth/trade_me_spec.rb} +1 -1
  93. data/spec/omniauth/strategies/{trip_it_spec.rb → oauth/trip_it_spec.rb} +1 -1
  94. data/spec/omniauth/strategies/{tsina_spec.rb → oauth/tsina_spec.rb} +1 -1
  95. data/spec/omniauth/strategies/{tumblr_spec.rb → oauth/tumblr_spec.rb} +1 -1
  96. data/spec/omniauth/strategies/oauth/twitter_spec.rb +43 -0
  97. data/spec/omniauth/strategies/{type_pad_spec.rb → oauth/type_pad_spec.rb} +1 -1
  98. data/spec/omniauth/strategies/{vimeo_spec.rb → oauth/vimeo_spec.rb} +1 -1
  99. data/spec/omniauth/strategies/{yahoo_spec.rb → oauth/yahoo_spec.rb} +1 -1
  100. data/spec/omniauth/strategies/{yammer_spec.rb → oauth/yammer_spec.rb} +1 -1
  101. data/spec/omniauth/strategies/{you_tube_spec.rb → oauth/you_tube_spec.rb} +1 -1
  102. data/spec/omniauth/strategies/oauth2/angellist_spec.rb +5 -0
  103. data/spec/omniauth/strategies/oauth2/bitly_spec.rb +5 -0
  104. data/spec/omniauth/strategies/oauth2/cobot_spec.rb +5 -0
  105. data/spec/omniauth/strategies/{dailymile_spec.rb → oauth2/dailymile_spec.rb} +1 -1
  106. data/spec/omniauth/strategies/{doit_spec.rb → oauth2/doit_spec.rb} +1 -1
  107. data/spec/omniauth/strategies/{facebook_spec.rb → oauth2/facebook_spec.rb} +1 -1
  108. data/spec/omniauth/strategies/{foursquare_spec.rb → oauth2/foursquare_spec.rb} +1 -1
  109. data/spec/omniauth/strategies/{github_spec.rb → oauth2/github_spec.rb} +1 -1
  110. data/spec/omniauth/strategies/oauth2/glitch_spec.rb +5 -0
  111. data/spec/omniauth/strategies/{gowalla_spec.rb → oauth2/gowalla_spec.rb} +1 -1
  112. data/spec/omniauth/strategies/oauth2/instagram_spec.rb +5 -0
  113. data/spec/omniauth/strategies/oauth2/liveid_spec.rb +5 -0
  114. data/spec/omniauth/strategies/oauth2/mailchimp_spec.rb +6 -0
  115. data/spec/omniauth/strategies/{mailru_spec.rb → oauth2/mailru_spec.rb} +1 -1
  116. data/spec/omniauth/strategies/{salesforce_spec.rb → oauth2/salesforce_spec.rb} +1 -1
  117. data/spec/omniauth/strategies/oauth2/sound_cloud_spec.rb +5 -0
  118. data/spec/omniauth/strategies/oauth2/taobao_spec.rb +5 -0
  119. data/spec/omniauth/strategies/{teambox_spec.rb → oauth2/teambox_spec.rb} +1 -1
  120. data/spec/omniauth/strategies/{thirty_seven_signals_spec.rb → oauth2/thirty_seven_signals_spec.rb} +1 -1
  121. data/spec/omniauth/strategies/oauth2/viadeo_spec.rb +5 -0
  122. data/spec/omniauth/strategies/{vkontakte_spec.rb → oauth2/vkontakte_spec.rb} +1 -1
  123. data/spec/omniauth/strategies/oauth2/we_pay_spec.rb +5 -0
  124. data/spec/spec_helper.rb +4 -0
  125. metadata +277 -151
  126. data/lib/omniauth/strategies/bitly.rb +0 -46
  127. data/lib/omniauth/strategies/gowalla.rb +0 -72
  128. data/lib/omniauth/strategies/hyves.rb +0 -67
  129. data/lib/omniauth/strategies/mailru.rb +0 -107
  130. data/lib/omniauth/strategies/plurk.rb +0 -58
  131. data/lib/omniauth/strategies/rdio.rb +0 -45
  132. data/lib/omniauth/strategies/salesforce.rb +0 -44
  133. data/lib/omniauth/strategies/smug_mug.rb +0 -42
  134. data/lib/omniauth/strategies/sound_cloud.rb +0 -46
  135. data/lib/omniauth/strategies/tqq.rb +0 -64
  136. data/lib/omniauth/strategies/trade_me.rb +0 -45
  137. data/lib/omniauth/strategies/trip_it.rb +0 -22
  138. data/lib/omniauth/strategies/vkontakte.rb +0 -87
  139. data/spec/omniauth/strategies/oauth2_spec.rb +0 -0
  140. data/spec/omniauth/strategies/oauth_spec.rb +0 -77
  141. data/spec/omniauth/strategies/sound_cloud_spec.rb +0 -5
  142. data/spec/omniauth/strategies/taobao_spec.rb +0 -5
  143. data/spec/omniauth/strategies/twitter_spec.rb +0 -20
@@ -4,35 +4,33 @@ require 'evernote'
4
4
 
5
5
  module OmniAuth
6
6
  module Strategies
7
- #
8
7
  # Authenticate to Evernote via OAuth and retrieve an access token for API usage
9
8
  #
10
9
  # Usage:
11
- #
12
10
  # use OmniAuth::Strategies::Evernote, 'consumerkey', 'consumersecret'
13
- #
14
11
  class Evernote < OmniAuth::Strategies::OAuth
15
12
  # Initialize the Evernote strategy.
16
13
  #
17
14
  # @option options [Hash, {}] :client_options Options to be passed directly to the OAuth Consumer
18
- def initialize(app, consumer_key = nil, consumer_secret = nil, options = {}, &block)
15
+ def initialize(app, consumer_key=nil, consumer_secret=nil, options={}, &block)
19
16
  client_options = {
20
- :site => 'https://www.evernote.com',
21
- :request_token_path => '/oauth',
22
17
  :access_token_path => '/oauth',
23
18
  :authorize_path => '/OAuth.action',
24
- :oauth_signature_method => 'PLAINTEXT'
19
+ :oauth_signature_method => 'PLAINTEXT',
20
+ :request_token_path => '/oauth',
21
+ :site => 'https://www.evernote.com',
25
22
  }
26
-
27
23
  super(app, :evernote, consumer_key, consumer_secret, client_options, options, &block)
28
24
  end
29
25
 
30
26
  def auth_hash
31
- OmniAuth::Utils.deep_merge(super, {
32
- 'uid' => user_data.id,
33
- 'user_info' => user_info,
34
- 'extra' => user_data
35
- })
27
+ OmniAuth::Utils.deep_merge(
28
+ super, {
29
+ 'uid' => user_data.id,
30
+ 'user_info' => user_info,
31
+ 'extra' => user_data,
32
+ }
33
+ )
36
34
  end
37
35
 
38
36
  def user_info
@@ -0,0 +1,47 @@
1
+ require 'omniauth/oauth'
2
+ require 'multi_xml'
3
+
4
+ module OmniAuth
5
+ module Strategies
6
+ # Authenticate to Flattr via OAuth and retrieve basic user information.
7
+ # Usage:
8
+ # use OmniAuth::Strategies::Flattr, 'consumerkey', 'consumersecret'
9
+ class Flattr < OmniAuth::Strategies::OAuth
10
+ def initialize(app, consumer_key=nil, consumer_secret=nil, options={}, &block)
11
+ client_options = {
12
+ :site => 'https://api.flattr.com'
13
+ }
14
+ options[:authorize_params] = {:access_scope => "read,publish,click,extendedread"}
15
+ super(app, :flattr, consumer_key, consumer_secret, client_options, options, &block)
16
+ end
17
+
18
+ def auth_hash
19
+ ui = user_info
20
+ OmniAuth::Utils.deep_merge(super, {
21
+ 'uid' => user_hash['id'],
22
+ 'user_info' => ui,
23
+ 'extra' => {'user_hash' => user_hash}
24
+ })
25
+ end
26
+
27
+ # user info according to schema
28
+ def user_info
29
+ {
30
+ 'uid' => user_hash['id'],
31
+ 'nickname' => user_hash['username'],
32
+ 'first_name' => user_hash['firstname'],
33
+ 'last_name' => user_hash['lastname'],
34
+ 'name' => [user_hash['firstname'],user_hash['lastname']].reject{ |n| n.nil? || n.empty? }.join(' '),
35
+ 'email' => user_hash['email'],
36
+ 'language' => user_hash['language']
37
+ }
38
+ end
39
+
40
+ # info as supplied by Flattr user summary
41
+ # response: {"flattr"=>{"version"=>"0.5", "user"=>{"id"=>"82597", "username"=>"foo", "firstname"=>"Foo", "lastname"=>"Bar", "email"=>"foo@bar.com", "city"=>"", "country"=>"", "gravatar"=>"", "url"=>"", "description"=>"", "thingcount"=>"1", "language"=>"en_GB"}}}
42
+ def user_hash
43
+ @user_hash ||= MultiXml.parse(@access_token.get('/rest/0.5/user/me').body)["flattr"]["user"]
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,39 @@
1
+ require 'omniauth/oauth'
2
+ require 'multi_json'
3
+
4
+ module OmniAuth
5
+ module Strategies
6
+
7
+ class Flickr < OmniAuth::Strategies::OAuth
8
+ def initialize(app, consumer_key=nil, consumer_secret=nil, options={}, &block)
9
+ scope = options.delete(:scope) || 'read'
10
+ options[:authorize_params] ||= {}
11
+ options[:authorize_params][:perms] = scope
12
+
13
+ client_options = {
14
+ :access_token_path => "/services/oauth/access_token",
15
+ :authorize_path => "/services/oauth/authorize",
16
+ :request_token_path => "/services/oauth/request_token",
17
+ :site => "http://www.flickr.com"
18
+ }
19
+ super(app, :flickr, consumer_key, consumer_secret, client_options, options, &block)
20
+ end
21
+
22
+ def auth_hash
23
+ OmniAuth::Utils.deep_merge(
24
+ super, {
25
+ 'uid' => @access_token.params["user_nsid"],
26
+ 'user_info' => user_info
27
+ }
28
+ )
29
+ end
30
+
31
+ def user_info
32
+ {
33
+ 'username' => @access_token.params["username"],
34
+ 'full_name' => @access_token.params["fullname"]
35
+ }
36
+ end
37
+ end
38
+ end
39
+ end
@@ -4,8 +4,7 @@ require 'omniauth/oauth'
4
4
  module OmniAuth
5
5
  module Strategies
6
6
  class Goodreads < OmniAuth::Strategies::OAuth
7
-
8
- def initialize(app, consumer_key = nil, consumer_secret = nil, options = {}, &block)
7
+ def initialize(app, consumer_key=nil, consumer_secret=nil, options={}, &block)
9
8
  client_options = {
10
9
  :site => 'http://www.goodreads.com',
11
10
  }
@@ -14,15 +13,17 @@ module OmniAuth
14
13
  end
15
14
 
16
15
  def auth_hash
17
- hash = user_hash(@access_token)
16
+ hash = user_info(@access_token)
18
17
 
19
- OmniAuth::Utils.deep_merge(super, {
20
- 'uid' => hash.delete('id'),
21
- 'user_info' => hash
22
- })
18
+ OmniAuth::Utils.deep_merge(
19
+ super, {
20
+ 'uid' => hash.delete('id'),
21
+ 'user_info' => hash,
22
+ }
23
+ )
23
24
  end
24
25
 
25
- def user_hash(access_token)
26
+ def user_info(access_token)
26
27
  authenticated_user = MultiXml.parse(@access_token.get('/api/auth_user').body)
27
28
  id = authenticated_user.xpath('GoodreadsResponse/user').attribute('id').value.to_i
28
29
  response_doc = MultiXml.parse(open("http://www.goodreads.com/user/show/#{id}.xml?key=#{@consumer_key}").read)
@@ -41,4 +42,3 @@ module OmniAuth
41
42
  end
42
43
  end
43
44
  end
44
-
@@ -3,37 +3,36 @@ require 'multi_json'
3
3
 
4
4
  module OmniAuth
5
5
  module Strategies
6
- #
7
6
  # Authenticate to Google via OAuth and retrieve basic
8
7
  # user information.
9
8
  #
10
9
  # Usage:
11
- #
12
10
  # use OmniAuth::Strategies::Google, 'consumerkey', 'consumersecret'
13
- #
14
11
  class Google < OmniAuth::Strategies::OAuth
15
- def initialize(app, consumer_key = nil, consumer_secret = nil, options = {}, &block)
12
+ def initialize(app, consumer_key=nil, consumer_secret=nil, options={}, &block)
16
13
  client_options = {
17
- :site => 'https://www.google.com',
18
- :request_token_path => '/accounts/OAuthGetRequestToken',
19
14
  :access_token_path => '/accounts/OAuthGetAccessToken',
20
- :authorize_path => '/accounts/OAuthAuthorizeToken'
15
+ :authorize_path => '/accounts/OAuthAuthorizeToken',
16
+ :request_token_path => '/accounts/OAuthGetRequestToken',
17
+ :site => 'https://www.google.com',
21
18
  }
22
-
23
- google_contacts_auth = "www.google.com/m8/feeds"
24
- options[:scope] ||= google_contacts_auth
25
- options[:scope] << " http://#{google_contacts_auth}" unless options[:scope] =~ %r[http[s]?:\/\/#{google_contacts_auth}]
26
-
27
- super(app, :google, consumer_key, consumer_secret, client_options, options)
19
+ google_contacts_auth = 'www.google.com/m8/feeds'
20
+ options[:scope] ||= "https://#{google_contacts_auth}"
21
+ options[:scope] << " https://#{google_contacts_auth}" unless options[:scope] =~ %r[http[s]?:\/\/#{google_contacts_auth}]
22
+ super(app, :google, consumer_key, consumer_secret, client_options, options, &block)
28
23
  end
29
24
 
30
25
  def auth_hash
31
26
  ui = user_info
32
- OmniAuth::Utils.deep_merge(super, {
33
- 'uid' => ui['uid'],
34
- 'user_info' => ui,
35
- 'extra' => {'user_hash' => user_hash}
36
- })
27
+ OmniAuth::Utils.deep_merge(
28
+ super, {
29
+ 'uid' => ui['uid'],
30
+ 'user_info' => ui,
31
+ 'extra' => {
32
+ 'user_hash' => user_hash,
33
+ },
34
+ }
35
+ )
37
36
  end
38
37
 
39
38
  def user_info
@@ -45,7 +44,7 @@ module OmniAuth
45
44
  {
46
45
  'email' => email,
47
46
  'uid' => email,
48
- 'name' => name
47
+ 'name' => name,
49
48
  }
50
49
  end
51
50
 
@@ -57,7 +56,7 @@ module OmniAuth
57
56
  # however. It will fail in the extremely rare case of a user who has
58
57
  # a Google Account but has never even signed up for Gmail. This has
59
58
  # not been seen in the field.
60
- @user_hash ||= MultiJson.decode(@access_token.get("http://www.google.com/m8/feeds/contacts/default/full?max-results=1&alt=json").body)
59
+ @user_hash ||= MultiJson.decode(@access_token.get('https://www.google.com/m8/feeds/contacts/default/full?max-results=1&alt=json').body)
61
60
  end
62
61
 
63
62
  # Monkeypatch OmniAuth to pass the scope in the consumer.get_request_token call
@@ -0,0 +1,71 @@
1
+ require 'omniauth/oauth'
2
+ require 'multi_json'
3
+
4
+ module OmniAuth
5
+ module Strategies
6
+ # Authenticate to Google via OAuth and retrieve basic
7
+ # user information.
8
+ #
9
+ # Usage:
10
+ # use OmniAuth::Strategies::Google, 'consumerkey', 'consumersecret'
11
+ class GoogleHealth < OmniAuth::Strategies::OAuth
12
+ def initialize(app, consumer_key=nil, consumer_secret=nil, options={}, &block)
13
+ client_options = {
14
+ :access_token_path => '/accounts/OAuthGetAccessToken',
15
+ :authorize_path => '/accounts/OAuthAuthorizeToken',
16
+ :request_token_path => '/accounts/OAuthGetRequestToken',
17
+ :site => 'https://www.google.com',
18
+ }
19
+ super(app, :google_health, consumer_key, consumer_secret, client_options, options, &block)
20
+ end
21
+
22
+ def auth_hash
23
+ ui = user_info
24
+ OmniAuth::Utils.deep_merge(
25
+ super, {
26
+ 'uid' => ui['uid'],
27
+ 'user_info' => ui,
28
+ 'extra' => {
29
+ 'user_hash' => user_hash,
30
+ },
31
+ }
32
+ )
33
+ end
34
+
35
+ def user_info
36
+ email = user_hash['feed']['id']['$t']
37
+ name = user_hash['feed']['author'].first['name']['$t']
38
+ name = email if name.strip == '(unknown)'
39
+ {
40
+ 'email' => email,
41
+ 'uid' => email,
42
+ 'name' => name,
43
+ }
44
+ end
45
+
46
+ def user_hash
47
+ # Google is very strict about keeping authorization and
48
+ # authentication separated.
49
+ # They give no endpoint to get a user's profile directly that I can
50
+ # find. We *can* get their name and email out of the contacts feed,
51
+ # however. It will fail in the extremely rare case of a user who has
52
+ # a Google Account but has never even signed up for Gmail. This has
53
+ # not been seen in the field.
54
+ @user_hash ||= MultiJson.decode(@access_token.get('http://www.google.com/health/feeds/profile/default/default?digest=true&alt=json').body)
55
+ end
56
+
57
+ # Monkeypatch OmniAuth to pass the scope in the consumer.get_request_token call
58
+ def request_phase
59
+ request_token = consumer.get_request_token({:oauth_callback => callback_url}, {:scope => 'http://www.google.com/health/feeds'})
60
+ (session['oauth']||={})[name.to_s] = {'callback_confirmed' => request_token.callback_confirmed?, 'request_token' => request_token.token, 'request_secret' => request_token.secret}
61
+ r = Rack::Response.new
62
+ if request_token.callback_confirmed?
63
+ r.redirect(request_token.authorize_url)
64
+ else
65
+ r.redirect(request_token.authorize_url(:oauth_callback => callback_url))
66
+ end
67
+ r.finish
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,74 @@
1
+ require 'omniauth/oauth'
2
+ require 'multi_json'
3
+
4
+ module OmniAuth
5
+ module Strategies
6
+ #
7
+ # Authenticate to Google via OAuth and retrieve basic
8
+ # user information.
9
+ #
10
+ # Usage:
11
+ #
12
+ # use OmniAuth::Strategies::Google, 'consumerkey', 'consumersecret'
13
+ #
14
+ class GoogleHealthSandbox < OmniAuth::Strategies::OAuth
15
+ def initialize(app, consumer_key=nil, consumer_secret=nil, options={}, &block)
16
+ client_options = {
17
+ :access_token_path => '/accounts/OAuthGetAccessToken',
18
+ :authorize_path => '/accounts/OAuthAuthorizeToken',
19
+ :request_token_path => '/accounts/OAuthGetRequestToken',
20
+ :site => 'https://www.google.com',
21
+ }
22
+ super(app, :google_health_sandbox, consumer_key, consumer_secret, client_options, options, &block)
23
+ end
24
+
25
+ def auth_hash
26
+ ui = user_info
27
+ OmniAuth::Utils.deep_merge(
28
+ super, {
29
+ 'uid' => ui['uid'],
30
+ 'user_info' => ui,
31
+ 'extra' => {
32
+ 'user_hash' => user_hash,
33
+ },
34
+ }
35
+ )
36
+ end
37
+
38
+ def user_info
39
+ email = user_hash['feed']['id']['$t']
40
+ name = user_hash['feed']['author'].first['name']['$t']
41
+ name = email if name.strip == '(unknown)'
42
+ {
43
+ 'email' => email,
44
+ 'uid' => email,
45
+ 'name' => name,
46
+ }
47
+ end
48
+
49
+ def user_hash
50
+ # Google is very strict about keeping authorization and
51
+ # authentication separated.
52
+ # They give no endpoint to get a user's profile directly that I can
53
+ # find. We *can* get their name and email out of the contacts feed,
54
+ # however. It will fail in the extremely rare case of a user who has
55
+ # a Google Account but has never even signed up for Gmail. This has
56
+ # not been seen in the field.
57
+ @user_hash ||= MultiJson.decode(@access_token.get('http://www.google.com/h9/feeds/profile/default/default?digest=true&oauth_signature_method=RSA-SHA1&oauth_version=1.0').body)
58
+ end
59
+
60
+ # Monkeypatch OmniAuth to pass the scope in the consumer.get_request_token call
61
+ def request_phase
62
+ request_token = consumer.get_request_token({:oauth_callback => callback_url}, {:scope => 'http://www.google.com/h9/feeds'})
63
+ (session['oauth']||={})[name.to_s] = {'callback_confirmed' => request_token.callback_confirmed?, 'request_token' => request_token.token, 'request_secret' => request_token.secret}
64
+ r = Rack::Response.new
65
+ if request_token.callback_confirmed?
66
+ r.redirect(request_token.authorize_url)
67
+ else
68
+ r.redirect(request_token.authorize_url(:oauth_callback => callback_url))
69
+ end
70
+ r.finish
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,69 @@
1
+ require 'omniauth/oauth'
2
+ require 'multi_json'
3
+
4
+ module OmniAuth
5
+ module Strategies
6
+ class Hyves < OmniAuth::Strategies::OAuth
7
+ def initialize(app, consumer_key=nil, consumer_secret=nil, options={}, &block)
8
+ options = {
9
+ :methods => 'users.get,friends.get,wwws.create',
10
+ :expirationtype => 'default'
11
+ }.merge(options)
12
+
13
+ client_options = {
14
+ :authorize_path => 'http://www.hyves.nl/api/authorize',
15
+ :access_token_path => access_token_path,
16
+ :http_method => :get,
17
+ :request_token_path => request_token_path(options),
18
+ :scheme => :header,
19
+ }
20
+
21
+ super(app, :hyves, consumer_key, consumer_secret, client_options, options, &block)
22
+ end
23
+
24
+ def auth_hash
25
+ hash = user_hash(@access_token)
26
+ {
27
+ 'provider' => 'hyves',
28
+ 'uid' => hash['userid'],
29
+ 'user_info' => {
30
+ 'name' => "#{hash['firstname']} #{hash['lastname']}",
31
+ 'first_name' => hash['firstname'],
32
+ 'last_name' => hash['lastname'],
33
+ },
34
+ 'credentials' => {
35
+ 'token' => @access_token.token,
36
+ 'secret' => @access_token.secret,
37
+ },
38
+ }
39
+ end
40
+
41
+ def user_hash(access_token)
42
+ rsp = MultiJson.decode(access_token.get("http://data.hyves-api.nl/?userid=#{access_token.params[:userid]}&ha_method=users.get&#{default_options}").body)
43
+ rsp['user'].first
44
+ end
45
+
46
+ def request_token_path(options)
47
+ options['ha_method'] = 'auth.requesttoken'
48
+ options['strict_oauth_spec_response'] = true
49
+ "http://data.hyves-api.nl/?#{to_params(options)}&#{default_options}"
50
+ end
51
+
52
+ def access_token_path
53
+ "http://data.hyves-api.nl/?#{access_token_options}&#{default_options}"
54
+ end
55
+
56
+ def default_options
57
+ to_params({:ha_version => '2.0', :ha_format => 'json', :ha_fancylayout => false})
58
+ end
59
+
60
+ def access_token_options
61
+ to_params({:ha_method => 'auth.accesstoken', :strict_oauth_spec_response => true})
62
+ end
63
+
64
+ def to_params(options)
65
+ options.collect{|key, value| "#{key}=#{value}"}.join('&')
66
+ end
67
+ end
68
+ end
69
+ end