omniauth 0.2.4 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of omniauth might be problematic. Click here for more details.

Files changed (197) hide show
  1. data/.autotest +9 -0
  2. data/.document +5 -0
  3. data/.gitignore +36 -0
  4. data/.rspec +2 -0
  5. data/.travis.yml +7 -0
  6. data/.yardopts +4 -0
  7. data/Gemfile +6 -1
  8. data/README.markdown +121 -0
  9. data/Rakefile +50 -2
  10. data/lib/omniauth/version.rb +18 -4
  11. data/oa-basic/.gemtest +0 -0
  12. data/oa-basic/.rspec +3 -0
  13. data/oa-basic/.yardopts +4 -0
  14. data/oa-basic/LICENSE +19 -0
  15. data/oa-basic/README.rdoc +34 -0
  16. data/oa-basic/Rakefile +6 -0
  17. data/oa-basic/lib/oa-basic.rb +1 -0
  18. data/oa-basic/lib/omniauth/basic.rb +8 -0
  19. data/oa-basic/lib/omniauth/strategies/http_basic.rb +56 -0
  20. data/oa-basic/lib/omniauth/version.rb +19 -0
  21. data/oa-basic/oa-basic.gemspec +28 -0
  22. data/oa-basic/spec/omniauth/strategies/basic_spec.rb +7 -0
  23. data/oa-basic/spec/spec_helper.rb +11 -0
  24. data/oa-core/.gemtest +0 -0
  25. data/oa-core/.rspec +3 -0
  26. data/oa-core/.yardopts +4 -0
  27. data/oa-core/LICENSE +19 -0
  28. data/oa-core/Rakefile +6 -0
  29. data/oa-core/autotest/discover.rb +1 -0
  30. data/oa-core/lib/oa-core.rb +1 -0
  31. data/oa-core/lib/omniauth/builder.rb +33 -0
  32. data/oa-core/lib/omniauth/core.rb +135 -0
  33. data/oa-core/lib/omniauth/form.rb +184 -0
  34. data/oa-core/lib/omniauth/strategy.rb +227 -0
  35. data/oa-core/lib/omniauth/test.rb +12 -0
  36. data/oa-core/lib/omniauth/test/phony_session.rb +8 -0
  37. data/oa-core/lib/omniauth/test/strategy_macros.rb +34 -0
  38. data/oa-core/lib/omniauth/test/strategy_test_case.rb +49 -0
  39. data/oa-core/lib/omniauth/version.rb +19 -0
  40. data/oa-core/oa-core.gemspec +24 -0
  41. data/oa-core/spec/omniauth/builder_spec.rb +20 -0
  42. data/oa-core/spec/omniauth/core_spec.rb +79 -0
  43. data/oa-core/spec/omniauth/strategy_spec.rb +358 -0
  44. data/oa-core/spec/spec_helper.rb +12 -0
  45. data/oa-enterprise/.gemtest +0 -0
  46. data/oa-enterprise/.rspec +3 -0
  47. data/oa-enterprise/.yardopts +4 -0
  48. data/oa-enterprise/LICENSE +19 -0
  49. data/oa-enterprise/README.rdoc +82 -0
  50. data/oa-enterprise/Rakefile +6 -0
  51. data/oa-enterprise/lib/oa-enterprise.rb +1 -0
  52. data/oa-enterprise/lib/omniauth/enterprise.rb +8 -0
  53. data/oa-enterprise/lib/omniauth/strategies/cas.rb +47 -0
  54. data/oa-enterprise/lib/omniauth/strategies/cas/configuration.rb +98 -0
  55. data/oa-enterprise/lib/omniauth/strategies/cas/service_ticket_validator.rb +84 -0
  56. data/oa-enterprise/lib/omniauth/strategies/ldap.rb +111 -0
  57. data/oa-enterprise/lib/omniauth/strategies/ldap/adaptor.rb +279 -0
  58. data/oa-enterprise/lib/omniauth/version.rb +19 -0
  59. data/oa-enterprise/oa-enterprise.gemspec +32 -0
  60. data/oa-enterprise/spec/fixtures/cas_failure.xml +4 -0
  61. data/oa-enterprise/spec/fixtures/cas_success.xml +8 -0
  62. data/oa-enterprise/spec/omniauth/strategies/cas_spec.rb +94 -0
  63. data/oa-enterprise/spec/spec_helper.rb +14 -0
  64. data/oa-more/.gemtest +0 -0
  65. data/oa-more/.rspec +3 -0
  66. data/oa-more/.yardopts +4 -0
  67. data/oa-more/LICENSE +19 -0
  68. data/oa-more/README.rdoc +22 -0
  69. data/oa-more/Rakefile +6 -0
  70. data/oa-more/lib/oa-more.rb +1 -0
  71. data/oa-more/lib/omniauth/more.rb +9 -0
  72. data/oa-more/lib/omniauth/strategies/flickr.rb +86 -0
  73. data/oa-more/lib/omniauth/strategies/windows_live.rb +39 -0
  74. data/oa-more/lib/omniauth/strategies/windows_live/windowslivelogin.rb +1143 -0
  75. data/oa-more/lib/omniauth/strategies/yupoo.rb +67 -0
  76. data/oa-more/lib/omniauth/version.rb +19 -0
  77. data/oa-more/oa-more.gemspec +30 -0
  78. data/oa-more/spec/omniauth/strategies/flickr_spec.rb +7 -0
  79. data/oa-more/spec/spec_helper.rb +11 -0
  80. data/oa-oauth/.gemtest +0 -0
  81. data/oa-oauth/.rspec +3 -0
  82. data/oa-oauth/.yardopts +4 -0
  83. data/oa-oauth/LICENSE +19 -0
  84. data/oa-oauth/README.rdoc +35 -0
  85. data/oa-oauth/Rakefile +6 -0
  86. data/oa-oauth/autotest/discover.rb +1 -0
  87. data/oa-oauth/lib/oa-oauth.rb +1 -0
  88. data/oa-oauth/lib/omniauth/oauth.rb +53 -0
  89. data/oa-oauth/lib/omniauth/strategies/bitly.rb +46 -0
  90. data/oa-oauth/lib/omniauth/strategies/dailymile.rb +64 -0
  91. data/oa-oauth/lib/omniauth/strategies/doit.rb +60 -0
  92. data/oa-oauth/lib/omniauth/strategies/dopplr.rb +53 -0
  93. data/oa-oauth/lib/omniauth/strategies/douban.rb +60 -0
  94. data/oa-oauth/lib/omniauth/strategies/evernote.rb +54 -0
  95. data/oa-oauth/lib/omniauth/strategies/facebook.rb +70 -0
  96. data/oa-oauth/lib/omniauth/strategies/foursquare.rb +62 -0
  97. data/oa-oauth/lib/omniauth/strategies/github.rb +50 -0
  98. data/oa-oauth/lib/omniauth/strategies/goodreads.rb +44 -0
  99. data/oa-oauth/lib/omniauth/strategies/google.rb +80 -0
  100. data/oa-oauth/lib/omniauth/strategies/gowalla.rb +64 -0
  101. data/oa-oauth/lib/omniauth/strategies/hyves.rb +67 -0
  102. data/oa-oauth/lib/omniauth/strategies/identica.rb +49 -0
  103. data/oa-oauth/lib/omniauth/strategies/instagram.rb +56 -0
  104. data/oa-oauth/lib/omniauth/strategies/instapaper.rb +40 -0
  105. data/oa-oauth/lib/omniauth/strategies/linked_in.rb +55 -0
  106. data/oa-oauth/lib/omniauth/strategies/meetup.rb +56 -0
  107. data/oa-oauth/lib/omniauth/strategies/miso.rb +41 -0
  108. data/oa-oauth/lib/omniauth/strategies/mixi.rb +59 -0
  109. data/oa-oauth/lib/omniauth/strategies/netflix.rb +65 -0
  110. data/oa-oauth/lib/omniauth/strategies/oauth.rb +85 -0
  111. data/oa-oauth/lib/omniauth/strategies/oauth2.rb +98 -0
  112. data/oa-oauth/lib/omniauth/strategies/qzone.rb +69 -0
  113. data/oa-oauth/lib/omniauth/strategies/rdio.rb +45 -0
  114. data/oa-oauth/lib/omniauth/strategies/renren.rb +87 -0
  115. data/oa-oauth/lib/omniauth/strategies/salesforce.rb +44 -0
  116. data/oa-oauth/lib/omniauth/strategies/smug_mug.rb +42 -0
  117. data/oa-oauth/lib/omniauth/strategies/sound_cloud.rb +46 -0
  118. data/oa-oauth/lib/omniauth/strategies/t163.rb +57 -0
  119. data/oa-oauth/lib/omniauth/strategies/teambox.rb +49 -0
  120. data/oa-oauth/lib/omniauth/strategies/thirty_seven_signals.rb +41 -0
  121. data/oa-oauth/lib/omniauth/strategies/tqq.rb +64 -0
  122. data/oa-oauth/lib/omniauth/strategies/trade_me.rb +45 -0
  123. data/oa-oauth/lib/omniauth/strategies/trip_it.rb +22 -0
  124. data/oa-oauth/lib/omniauth/strategies/tsina.rb +79 -0
  125. data/oa-oauth/lib/omniauth/strategies/tsohu.rb +57 -0
  126. data/oa-oauth/lib/omniauth/strategies/tumblr.rb +60 -0
  127. data/oa-oauth/lib/omniauth/strategies/twitter.rb +57 -0
  128. data/oa-oauth/lib/omniauth/strategies/type_pad.rb +76 -0
  129. data/oa-oauth/lib/omniauth/strategies/vimeo.rb +54 -0
  130. data/oa-oauth/lib/omniauth/strategies/vkontakte.rb +84 -0
  131. data/oa-oauth/lib/omniauth/strategies/xauth.rb +67 -0
  132. data/oa-oauth/lib/omniauth/strategies/yahoo.rb +55 -0
  133. data/oa-oauth/lib/omniauth/strategies/yammer.rb +43 -0
  134. data/oa-oauth/lib/omniauth/strategies/you_tube.rb +73 -0
  135. data/oa-oauth/lib/omniauth/version.rb +19 -0
  136. data/oa-oauth/oa-oauth.gemspec +33 -0
  137. data/oa-oauth/spec/fixtures/basecamp_200.xml +24 -0
  138. data/oa-oauth/spec/fixtures/campfire_200.json +10 -0
  139. data/oa-oauth/spec/omniauth/strategies/bitly_spec.rb +5 -0
  140. data/oa-oauth/spec/omniauth/strategies/dailymile_spec.rb +5 -0
  141. data/oa-oauth/spec/omniauth/strategies/doit_spec.rb +5 -0
  142. data/oa-oauth/spec/omniauth/strategies/dopplr_spec.rb +5 -0
  143. data/oa-oauth/spec/omniauth/strategies/douban_spec.rb +5 -0
  144. data/oa-oauth/spec/omniauth/strategies/evernote_spec.rb +5 -0
  145. data/oa-oauth/spec/omniauth/strategies/facebook_spec.rb +5 -0
  146. data/oa-oauth/spec/omniauth/strategies/foursquare_spec.rb +18 -0
  147. data/oa-oauth/spec/omniauth/strategies/github_spec.rb +5 -0
  148. data/oa-oauth/spec/omniauth/strategies/goodreads_spec.rb +6 -0
  149. data/oa-oauth/spec/omniauth/strategies/google_spec.rb +5 -0
  150. data/oa-oauth/spec/omniauth/strategies/gowalla_spec.rb +5 -0
  151. data/oa-oauth/spec/omniauth/strategies/hyves_spec.rb +5 -0
  152. data/oa-oauth/spec/omniauth/strategies/identica_spec.rb +5 -0
  153. data/oa-oauth/spec/omniauth/strategies/linked_in_spec.rb +5 -0
  154. data/oa-oauth/spec/omniauth/strategies/meetup_spec.rb +14 -0
  155. data/oa-oauth/spec/omniauth/strategies/miso_spec.rb +5 -0
  156. data/oa-oauth/spec/omniauth/strategies/netflix_spec.rb +5 -0
  157. data/oa-oauth/spec/omniauth/strategies/oauth2_spec.rb +0 -0
  158. data/oa-oauth/spec/omniauth/strategies/oauth_spec.rb +77 -0
  159. data/oa-oauth/spec/omniauth/strategies/rdio_spec.rb +5 -0
  160. data/oa-oauth/spec/omniauth/strategies/salesforce_spec.rb +5 -0
  161. data/oa-oauth/spec/omniauth/strategies/smug_mug_spec.rb +5 -0
  162. data/oa-oauth/spec/omniauth/strategies/sound_cloud_spec.rb +5 -0
  163. data/oa-oauth/spec/omniauth/strategies/t163_spec.rb +5 -0
  164. data/oa-oauth/spec/omniauth/strategies/teambox_spec.rb +5 -0
  165. data/oa-oauth/spec/omniauth/strategies/thirty_seven_signals_spec.rb +5 -0
  166. data/oa-oauth/spec/omniauth/strategies/trade_me_spec.rb +5 -0
  167. data/oa-oauth/spec/omniauth/strategies/trip_it_spec.rb +5 -0
  168. data/oa-oauth/spec/omniauth/strategies/tsina_spec.rb +5 -0
  169. data/oa-oauth/spec/omniauth/strategies/tumblr_spec.rb +5 -0
  170. data/oa-oauth/spec/omniauth/strategies/twitter_spec.rb +20 -0
  171. data/oa-oauth/spec/omniauth/strategies/type_pad_spec.rb +5 -0
  172. data/oa-oauth/spec/omniauth/strategies/vimeo_spec.rb +5 -0
  173. data/oa-oauth/spec/omniauth/strategies/vkontakte_spec.rb +5 -0
  174. data/oa-oauth/spec/omniauth/strategies/yahoo_spec.rb +5 -0
  175. data/oa-oauth/spec/omniauth/strategies/yammer_spec.rb +5 -0
  176. data/oa-oauth/spec/omniauth/strategies/you_tube_spec.rb +5 -0
  177. data/oa-oauth/spec/spec_helper.rb +27 -0
  178. data/oa-oauth/spec/support/shared_examples.rb +29 -0
  179. data/oa-openid/.gemtest +0 -0
  180. data/oa-openid/.rspec +3 -0
  181. data/oa-openid/.yardopts +4 -0
  182. data/oa-openid/LICENSE +19 -0
  183. data/oa-openid/README.rdoc +51 -0
  184. data/oa-openid/Rakefile +6 -0
  185. data/oa-openid/lib/oa-openid.rb +1 -0
  186. data/oa-openid/lib/omniauth/openid.rb +59 -0
  187. data/oa-openid/lib/omniauth/openid/gapps.rb +32 -0
  188. data/oa-openid/lib/omniauth/strategies/google_apps.rb +23 -0
  189. data/oa-openid/lib/omniauth/strategies/open_id.rb +132 -0
  190. data/oa-openid/lib/omniauth/version.rb +19 -0
  191. data/oa-openid/oa-openid.gemspec +29 -0
  192. data/oa-openid/spec/omniauth/strategies/open_id_spec.rb +71 -0
  193. data/oa-openid/spec/spec_helper.rb +14 -0
  194. data/omniauth.gemspec +3 -3
  195. data/tasks/all.rb +134 -0
  196. metadata +199 -9
  197. data/README.rdoc +0 -17
@@ -0,0 +1,64 @@
1
+ require 'omniauth/oauth'
2
+ require 'multi_json'
3
+
4
+ module OmniAuth
5
+ module Strategies
6
+ #
7
+ # Authenticate to Gowalla utilizing OAuth 2.0 and retrieve
8
+ # basic user information.
9
+ #
10
+ # @example Basic Usage
11
+ # use OmniAuth::Strategies::Gowalla, 'API Key', 'Secret Key'
12
+ class Gowalla < OAuth2
13
+ # @param [Rack Application] app standard middleware application parameter
14
+ # @param [String] api_key the application id as [registered on Gowalla](http://gowalla.com/api/keys)
15
+ # @param [String] secret_key the application secret as [registered on Gowalla](http://gowalla.com/api/keys)
16
+ # @option options ['read','read-write'] :scope ('read') the scope of your authorization request; must be `read` or `read-write`
17
+ def initialize(app, api_key = nil, secret_key = nil, options = {}, &block)
18
+ client_options = {
19
+ :site => 'https://api.gowalla.com/api/oauth',
20
+ :authorize_url => 'https://gowalla.com/api/oauth/new',
21
+ :access_token_url => 'https://api.gowalla.com/api/oauth/token'
22
+ }
23
+
24
+ super(app, :gowalla, api_key, secret_key, client_options, options, &block)
25
+ end
26
+
27
+ protected
28
+
29
+ def user_data
30
+ @data ||= MultiJson.decode(@access_token.get("/users/me.json"))
31
+ end
32
+
33
+ def request_phase
34
+ options[:scope] ||= "read"
35
+ super
36
+ end
37
+
38
+ def user_info
39
+ {
40
+ 'name' => "#{user_data['first_name']} #{user_data['last_name']}",
41
+ 'nickname' => user_data["username"],
42
+ 'first_name' => user_data["first_name"],
43
+ 'last_name' => user_data["last_name"],
44
+ 'location' => user_data["hometown"],
45
+ 'description' => user_data["bio"],
46
+ 'image' => user_data["image_url"],
47
+ 'phone' => nil,
48
+ 'urls' => {
49
+ 'Gowalla' => "http://www.gowalla.com#{user_data['url']}",
50
+ 'Website' => user_data["website"]
51
+ }
52
+ }
53
+ end
54
+
55
+ def auth_hash
56
+ OmniAuth::Utils.deep_merge(super, {
57
+ 'uid' => user_data["url"].split('/').last,
58
+ 'user_info' => user_info,
59
+ 'extra' => {'user_hash' => user_data}
60
+ })
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,67 @@
1
+ require 'omniauth/oauth'
2
+ require 'multi_json'
3
+
4
+
5
+ module OmniAuth
6
+ module Strategies
7
+ class Hyves < OmniAuth::Strategies::OAuth
8
+ def initialize(app, consumer_key = nil, consumer_secret = nil, options = {}, &block)
9
+ client_options = {
10
+ :request_token_path => request_token_path,
11
+ :authorize_path => "http://www.hyves.nl/api/authorize",
12
+ :access_token_path => access_token_path,
13
+ :http_method => :get,
14
+ :scheme => :header
15
+ }
16
+ super(app, :hyves, consumer_key, consumer_secret, client_options, options, &block)
17
+ end
18
+
19
+ def auth_hash
20
+ hash = user_hash(@access_token)
21
+
22
+ {
23
+ "provider" => "hyves",
24
+ "uid" => hash["userid"],
25
+ "user_info" => {
26
+ "name" => hash["firstname"] + " " + hash["lastname"],
27
+ "first_name" => hash["firstname"],
28
+ "last_name" => hash["lastname"]
29
+ },
30
+ "credentials" => {
31
+ "token" => @access_token.token,
32
+ "secret" => @access_token.secret
33
+ }
34
+ }
35
+ end
36
+
37
+ def user_hash(access_token)
38
+ rsp = MultiJson.decode( access_token.get("http://data.hyves-api.nl/?userid=#{access_token.params[:userid]}&ha_method=users.get&#{default_options}").body )
39
+ rsp["user"].first
40
+ end
41
+
42
+ def request_token_path
43
+ "http://data.hyves-api.nl/?#{request_token_options}&#{default_options}"
44
+ end
45
+
46
+ def access_token_path
47
+ "http://data.hyves-api.nl/?#{access_token_options}&#{default_options}"
48
+ end
49
+
50
+ def default_options
51
+ to_params( { :ha_version => "2.0", :ha_format => "json", :ha_fancylayout => false } )
52
+ end
53
+
54
+ def request_token_options
55
+ to_params( { :methods => "users.get,friends.get,wwws.create", :ha_method => "auth.requesttoken", :strict_oauth_spec_response => true } )
56
+ end
57
+
58
+ def access_token_options
59
+ to_params( { :ha_method => "auth.accesstoken", :strict_oauth_spec_response => true } )
60
+ end
61
+
62
+ def to_params(options)
63
+ options.collect { |key, value| "#{key}=#{value}"}.join('&')
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,49 @@
1
+ require 'omniauth/oauth'
2
+ require 'multi_json'
3
+
4
+ module OmniAuth
5
+ module Strategies
6
+ #
7
+ # Authenticate to Identica via OAuth and retrieve basic
8
+ # user information.
9
+ #
10
+ # Usage:
11
+ #
12
+ # use OmniAuth::Strategies::Identica, 'consumerkey', 'consumersecret'
13
+ #
14
+ class Identica < OmniAuth::Strategies::OAuth
15
+ def initialize(app, consumer_key = nil, consumer_secret = nil, options = {}, &block)
16
+ super(app, :identica, consumer_key, consumer_secret,
17
+ {:site => 'http://identi.ca',
18
+ :request_token_path => "/api/oauth/request_token",
19
+ :access_token_path => "/api/oauth/access_token",
20
+ :authorize_path => "/api/oauth/authorize"}, options, &block)
21
+ end
22
+
23
+ def auth_hash
24
+ OmniAuth::Utils.deep_merge(super, {
25
+ 'uid' => user_hash['id'],
26
+ 'user_info' => user_info,
27
+ 'extra' => {'user_hash' => user_hash}
28
+ })
29
+ end
30
+
31
+ def user_info
32
+ user_hash = self.user_hash
33
+
34
+ {
35
+ 'nickname' => user_hash['screen_name'],
36
+ 'name' => user_hash['name'],
37
+ 'location' => user_hash['location'],
38
+ 'image' => user_hash['profile_image_url'],
39
+ 'description' => user_hash['description'],
40
+ 'urls' => {'Website' => user_hash['url']}
41
+ }
42
+ end
43
+
44
+ def user_hash
45
+ @user_hash ||= MultiJson.decode(@access_token.get('/api/account/verify_credentials.json').body)
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,56 @@
1
+ require 'omniauth/oauth'
2
+ require 'multi_json'
3
+
4
+ module OmniAuth
5
+ module Strategies
6
+ # Authenticate to Facebook utilizing OAuth 2.0 and retrieve
7
+ # basic user information.
8
+ #
9
+ # @example Basic Usage
10
+ # use OmniAuth::Strategies::Instagram, 'client_id', 'client_secret'
11
+ class Instagram < OAuth2
12
+ # @option options [String] :scope separate the scopes by a space
13
+ def initialize(app, client_id = nil, client_secret = nil, options = {}, &block)
14
+ client_options = {
15
+ :site => "https://api.instagram.com/",
16
+ :authorize_url => "/oauth/authorize",
17
+ :access_token_url => "/oauth/access_token"
18
+ }
19
+
20
+ super(app, :instagram, client_id, client_secret, client_options, options, &block)
21
+ end
22
+
23
+ def request_phase
24
+ options[:scope] ||= "basic"
25
+ options[:response_type] ||= 'code'
26
+ super
27
+ end
28
+
29
+ def callback_phase
30
+ options[:grant_type] ||= 'authorization_code'
31
+ super
32
+ end
33
+
34
+ def user_data
35
+ @data ||= MultiJson.decode(@access_token.get("/v1/users/self"))
36
+ end
37
+
38
+ def user_info
39
+ {
40
+ 'nickname' => user_data['data']['username'],
41
+ 'name' => user_data['data']['full_name'],
42
+ 'image' => user_data['data']['profile_picture'],
43
+ 'urls' => {}
44
+ }
45
+ end
46
+
47
+ def auth_hash
48
+ OmniAuth::Utils.deep_merge(super, {
49
+ 'uid' => user_data['data']['id'],
50
+ 'user_info' => user_info,
51
+ 'extra' => {'user_hash' => user_data['data']}
52
+ })
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,40 @@
1
+ require 'omniauth/oauth'
2
+ require 'multi_json'
3
+
4
+ module OmniAuth
5
+ module Strategies
6
+ class Instapaper < OmniAuth::Strategies::XAuth
7
+
8
+ def initialize(app, consumer_key = nil, consumer_secret = nil, options = {}, &block)
9
+ client_options = {
10
+ :title => 'Instapaper',
11
+ :site => 'https://www.instapaper.com',
12
+ :access_token_path => '/api/1/oauth/access_token'
13
+ }
14
+ super(app, :instapaper, consumer_key, consumer_secret, client_options, options, &block)
15
+ end
16
+
17
+ protected
18
+
19
+ def user_data
20
+ @data ||= MultiJson.decode(@access_token.get('/api/1/account/verify_credentials').body)[0]
21
+ end
22
+
23
+ def user_info
24
+ {
25
+ 'nickname' => user_data['username'],
26
+ 'name' => user_data['username']
27
+ }
28
+ end
29
+
30
+ def auth_hash
31
+ OmniAuth::Utils.deep_merge(super, {
32
+ 'uid' => user_data['user_id'],
33
+ 'user_info' => user_info
34
+ })
35
+ end
36
+
37
+ end
38
+ end
39
+ end
40
+
@@ -0,0 +1,55 @@
1
+ require 'multi_xml'
2
+ require 'omniauth/oauth'
3
+
4
+ module OmniAuth
5
+ module Strategies
6
+ class LinkedIn < OmniAuth::Strategies::OAuth
7
+ def initialize(app, consumer_key = nil, consumer_secret = nil, options = {}, &block)
8
+ client_options = {
9
+ :site => 'https://api.linkedin.com',
10
+ :request_token_path => '/uas/oauth/requestToken',
11
+ :access_token_path => '/uas/oauth/accessToken',
12
+ :authorize_path => '/uas/oauth/authorize',
13
+ :scheme => :header
14
+ }
15
+
16
+ client_options[:authorize_path] = '/uas/oauth/authenticate' unless options[:sign_in] == false
17
+
18
+ super(app, :linked_in, consumer_key, consumer_secret, client_options, options, &block)
19
+ end
20
+
21
+ def auth_hash
22
+ hash = user_hash(@access_token)
23
+
24
+ OmniAuth::Utils.deep_merge(super, {
25
+ 'uid' => hash.delete('id'),
26
+ 'user_info' => hash
27
+ })
28
+ end
29
+
30
+ def user_hash(access_token)
31
+ person = MulitXml.parse(@access_token.get('/v1/people/~:(id,first-name,last-name,headline,member-url-resources,picture-url,location,public-profile-url)').body).xpath('person')
32
+
33
+ hash = {
34
+ 'id' => person.xpath('id').text,
35
+ 'first_name' => person.xpath('first-name').text,
36
+ 'last_name' => person.xpath('last-name').text,
37
+ 'nickname' => person.xpath('public-profile-url').text.split('/').last,
38
+ 'location' => person.xpath('location/name').text,
39
+ 'image' => person.xpath('picture-url').text,
40
+ 'description' => person.xpath('headline').text,
41
+ 'public_profile_url' => person.xpath('public-profile-url').text,
42
+ 'urls' => person.css('member-url-resources member-url').inject({}) do |h,element|
43
+ h[element.xpath('name').text] = element.xpath('url').text
44
+ h
45
+ end
46
+ }
47
+
48
+ hash['urls']['LinkedIn'] = person.xpath('public-profile-url').text
49
+ hash['name'] = "#{hash['first_name']} #{hash['last_name']}"
50
+
51
+ hash
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,56 @@
1
+ require 'omniauth/oauth'
2
+ require 'multi_json'
3
+
4
+ module OmniAuth
5
+ module Strategies
6
+ #
7
+ # Authenticate with Meetup via OAuth and retrieve an access token for API usage
8
+ #
9
+ # Usage:
10
+ #
11
+ # use OmniAuth::Strategies::Meetup, 'consumerkey', 'consumersecret'
12
+ #
13
+ class Meetup < OmniAuth::Strategies::OAuth
14
+ # Initialize meetup middleware
15
+ # @param [Rack Application] app standard middleware application parameter
16
+ # @param [String] consumer_key the application consumer id
17
+ # @param [String] consumer_secret the application consumer secret
18
+ # @option options [Boolean, true] :sign_in When true, use a sign-in flow instead of the authorization flow.
19
+ def initialize(app, consumer_key = nil, consumer_secret = nil, options = {}, &block)
20
+ auth_path = (options[:sign_in] == false) ? 'http://www.meetup.com/authorize' : 'http://www.meetup.com/authenticate'
21
+
22
+ super(app, :meetup, consumer_key, consumer_secret,
23
+ { :request_token_path => "https://api.meetup.com/oauth/request",
24
+ :access_token_path => "https://api.meetup.com/oauth/access",
25
+ :authorize_path => auth_path }, options)
26
+ end
27
+
28
+ def auth_hash
29
+ OmniAuth::Utils.deep_merge(super, {
30
+ 'uid' => member['id'],
31
+ 'user_info' => user_info,
32
+ 'extra' => { 'user_hash' => member }
33
+ })
34
+ end
35
+
36
+ def user_info
37
+ {
38
+ 'name' => member['name'],
39
+ 'image' => member['photo_url'],
40
+ 'location' => member['city'],
41
+ 'urls' => {
42
+ 'profile' => member['link']
43
+ }
44
+ }
45
+ end
46
+
47
+ def member
48
+ @member ||= parse(@access_token.get('https://api.meetup.com/members.json?relation=self').body)['results'][0]
49
+ end
50
+
51
+ def parse(response)
52
+ MultiJson.decode(response)
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,41 @@
1
+ require 'omniauth/oauth'
2
+ require 'multi_json'
3
+
4
+ module OmniAuth
5
+ module Strategies
6
+ #
7
+ # Authenticate to Miso via OAuth and retrieve basic
8
+ # user information.
9
+ #
10
+ # Usage:
11
+ #
12
+ # use OmniAuth::Strategies::Miso, 'consumerkey', 'consumersecret'
13
+ #
14
+ class Miso < OmniAuth::Strategies::OAuth
15
+ def initialize(app, consumer_key = nil, consumer_secret = nil, options = {}, &block)
16
+ super(app, :miso, consumer_key, consumer_secret, {:site => 'https://gomiso.com'}, options)
17
+ end
18
+
19
+ def auth_hash
20
+ OmniAuth::Utils.deep_merge(super, {
21
+ 'uid' => user_hash['id'],
22
+ 'user_info' => user_info,
23
+ 'extra' => {'user_hash' => user_hash}
24
+ })
25
+ end
26
+
27
+ def user_info
28
+ {
29
+ 'nickname' => user_hash['username'],
30
+ 'name' => user_hash['full_name'],
31
+ 'image' => user_hash['profile_image_url'],
32
+ 'description' => user_hash['tagline'],
33
+ }
34
+ end
35
+
36
+ def user_hash
37
+ @user_hash ||= MultiJson.decode(@access_token.get('/api/oauth/v1/users/show.json').body)['user']
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,59 @@
1
+ require 'omniauth/oauth'
2
+ require 'multi_json'
3
+
4
+ module OmniAuth
5
+ module Strategies
6
+ # Authenticate to Facebook utilizing OAuth 2.0 and retrieve
7
+ # basic user information.
8
+ #
9
+ # @example Basic Usage
10
+ # use OmniAuth::Strategies::Mixi, 'client_id', 'client_secret'
11
+ class Mixi < OAuth2
12
+ # @option options [String] :scope separate the scopes by a space
13
+ def initialize(app, client_id = nil, client_secret = nil, options = {}, &block)
14
+ client_options = {
15
+ :site => "https://mixi.jp/",
16
+ :authorize_url => "/connect_authorize.pl",
17
+ :access_token_url => "https://secure.mixi-platform.com/2/token"
18
+ }
19
+
20
+ super(app, :mixi, client_id, client_secret, client_options, options, &block)
21
+ end
22
+
23
+ def user_data
24
+ @data ||= MultiJson.decode(@access_token.get(
25
+ "http://api.mixi-platform.com/2/people/@me/@self",
26
+ {'oauth_token' => @access_token.token}
27
+ ))
28
+ end
29
+
30
+ def request_phase
31
+ options[:scope] ||= "r_profile"
32
+ options[:display] ||= "pc"
33
+ options[:response_type] ||= 'code'
34
+ super
35
+ end
36
+
37
+ def callback_phase
38
+ options[:grant_type] ||= 'authorization_code'
39
+ super
40
+ end
41
+
42
+ def user_info
43
+ {
44
+ 'nickname' => user_data['entry']['displayName'],
45
+ 'image' => user_data['entry']['thumbnailUrl'],
46
+ 'urls' => {:profile => user_data['entry']['profileUrl']}
47
+ }
48
+ end
49
+
50
+ def auth_hash
51
+ OmniAuth::Utils.deep_merge(super, {
52
+ 'uid' => user_data['entry']['id'],
53
+ 'user_info' => user_info,
54
+ 'extra' => {'user_hash' => user_data['entry']}
55
+ })
56
+ end
57
+ end
58
+ end
59
+ end