oa-oauth 0.1.6 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (101) hide show
  1. data/.gemtest +0 -0
  2. data/.rspec +3 -0
  3. data/.yardopts +4 -0
  4. data/{LICENSE.rdoc → LICENSE} +2 -2
  5. data/README.rdoc +1 -1
  6. data/Rakefile +6 -0
  7. data/autotest/discover.rb +1 -0
  8. data/lib/oa-oauth.rb +1 -0
  9. data/lib/omniauth/oauth.rb +39 -7
  10. data/lib/omniauth/strategies/bitly.rb +46 -0
  11. data/lib/omniauth/strategies/dailymile.rb +64 -0
  12. data/lib/omniauth/strategies/doit.rb +60 -0
  13. data/lib/omniauth/strategies/dopplr.rb +38 -7
  14. data/lib/omniauth/strategies/douban.rb +60 -0
  15. data/lib/omniauth/strategies/evernote.rb +54 -0
  16. data/lib/omniauth/strategies/facebook.rb +29 -11
  17. data/lib/omniauth/strategies/foursquare.rb +50 -27
  18. data/lib/omniauth/strategies/github.rb +15 -12
  19. data/lib/omniauth/strategies/goodreads.rb +44 -0
  20. data/lib/omniauth/strategies/google.rb +80 -0
  21. data/lib/omniauth/strategies/gowalla.rb +13 -10
  22. data/lib/omniauth/strategies/hyves.rb +67 -0
  23. data/lib/omniauth/strategies/identica.rb +4 -4
  24. data/lib/omniauth/strategies/instagram.rb +56 -0
  25. data/lib/omniauth/strategies/instapaper.rb +40 -0
  26. data/lib/omniauth/strategies/linked_in.rb +24 -15
  27. data/lib/omniauth/strategies/meetup.rb +40 -7
  28. data/lib/omniauth/strategies/miso.rb +41 -0
  29. data/lib/omniauth/strategies/mixi.rb +59 -0
  30. data/lib/omniauth/strategies/netflix.rb +65 -0
  31. data/lib/omniauth/strategies/oauth.rb +51 -13
  32. data/lib/omniauth/strategies/oauth2.rb +48 -23
  33. data/lib/omniauth/strategies/qzone.rb +69 -0
  34. data/lib/omniauth/strategies/rdio.rb +45 -0
  35. data/lib/omniauth/strategies/renren.rb +87 -0
  36. data/lib/omniauth/strategies/salesforce.rb +44 -0
  37. data/lib/omniauth/strategies/smug_mug.rb +42 -0
  38. data/lib/omniauth/strategies/sound_cloud.rb +9 -9
  39. data/lib/omniauth/strategies/t163.rb +57 -0
  40. data/lib/omniauth/strategies/teambox.rb +49 -0
  41. data/lib/omniauth/strategies/thirty_seven_signals.rb +11 -8
  42. data/lib/omniauth/strategies/tqq.rb +64 -0
  43. data/lib/omniauth/strategies/trade_me.rb +45 -0
  44. data/lib/omniauth/strategies/trip_it.rb +3 -16
  45. data/lib/omniauth/strategies/tsina.rb +79 -0
  46. data/lib/omniauth/strategies/tsohu.rb +57 -0
  47. data/lib/omniauth/strategies/tumblr.rb +60 -0
  48. data/lib/omniauth/strategies/twitter.rb +21 -11
  49. data/lib/omniauth/strategies/type_pad.rb +76 -0
  50. data/lib/omniauth/strategies/vimeo.rb +54 -0
  51. data/lib/omniauth/strategies/vkontakte.rb +84 -0
  52. data/lib/omniauth/strategies/xauth.rb +67 -0
  53. data/lib/omniauth/strategies/yahoo.rb +55 -0
  54. data/lib/omniauth/strategies/yammer.rb +43 -0
  55. data/lib/omniauth/strategies/you_tube.rb +73 -0
  56. data/lib/omniauth/version.rb +19 -0
  57. data/oa-oauth.gemspec +33 -0
  58. data/spec/fixtures/basecamp_200.xml +24 -0
  59. data/spec/fixtures/campfire_200.json +10 -0
  60. data/spec/omniauth/strategies/bitly_spec.rb +5 -0
  61. data/spec/omniauth/strategies/dailymile_spec.rb +5 -0
  62. data/spec/omniauth/strategies/doit_spec.rb +5 -0
  63. data/spec/omniauth/strategies/dopplr_spec.rb +5 -0
  64. data/spec/omniauth/strategies/douban_spec.rb +5 -0
  65. data/spec/omniauth/strategies/evernote_spec.rb +5 -0
  66. data/spec/omniauth/strategies/facebook_spec.rb +5 -0
  67. data/spec/omniauth/strategies/foursquare_spec.rb +18 -0
  68. data/spec/omniauth/strategies/github_spec.rb +5 -0
  69. data/spec/omniauth/strategies/goodreads_spec.rb +6 -0
  70. data/spec/omniauth/strategies/google_spec.rb +5 -0
  71. data/spec/omniauth/strategies/gowalla_spec.rb +5 -0
  72. data/spec/omniauth/strategies/hyves_spec.rb +5 -0
  73. data/spec/omniauth/strategies/identica_spec.rb +5 -0
  74. data/spec/omniauth/strategies/linked_in_spec.rb +5 -0
  75. data/spec/omniauth/strategies/meetup_spec.rb +14 -0
  76. data/spec/omniauth/strategies/miso_spec.rb +5 -0
  77. data/spec/omniauth/strategies/netflix_spec.rb +5 -0
  78. data/spec/omniauth/strategies/oauth2_spec.rb +0 -0
  79. data/spec/omniauth/strategies/oauth_spec.rb +77 -0
  80. data/spec/omniauth/strategies/rdio_spec.rb +5 -0
  81. data/spec/omniauth/strategies/salesforce_spec.rb +5 -0
  82. data/spec/omniauth/strategies/smug_mug_spec.rb +5 -0
  83. data/spec/omniauth/strategies/sound_cloud_spec.rb +5 -0
  84. data/spec/omniauth/strategies/t163_spec.rb +5 -0
  85. data/spec/omniauth/strategies/teambox_spec.rb +5 -0
  86. data/spec/omniauth/strategies/thirty_seven_signals_spec.rb +5 -0
  87. data/spec/omniauth/strategies/trade_me_spec.rb +5 -0
  88. data/spec/omniauth/strategies/trip_it_spec.rb +5 -0
  89. data/spec/omniauth/strategies/tsina_spec.rb +5 -0
  90. data/spec/omniauth/strategies/tumblr_spec.rb +5 -0
  91. data/spec/omniauth/strategies/twitter_spec.rb +20 -0
  92. data/spec/omniauth/strategies/type_pad_spec.rb +5 -0
  93. data/spec/omniauth/strategies/vimeo_spec.rb +5 -0
  94. data/spec/omniauth/strategies/vkontakte_spec.rb +5 -0
  95. data/spec/omniauth/strategies/yahoo_spec.rb +5 -0
  96. data/spec/omniauth/strategies/yammer_spec.rb +5 -0
  97. data/spec/omniauth/strategies/you_tube_spec.rb +5 -0
  98. data/spec/spec_helper.rb +27 -0
  99. data/spec/support/shared_examples.rb +29 -0
  100. metadata +231 -127
  101. data/CHANGELOG.rdoc +0 -5
data/.gemtest ADDED
File without changes
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --color
2
+ --format=nested
3
+ --backtrace
data/.yardopts ADDED
@@ -0,0 +1,4 @@
1
+ --markup markdown
2
+ --markup-provider maruku
3
+ -
4
+ LICENSE
@@ -1,4 +1,4 @@
1
- Copyright (c) 2010 Michael Bleigh, Intridea Inc.
1
+ Copyright (c) 2010-2011 Michael Bleigh and Intridea, Inc.
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  of this software and associated documentation files (the "Software"), to deal
@@ -16,4 +16,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
16
  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
17
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
18
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
- THE SOFTWARE.
19
+ THE SOFTWARE.
data/README.rdoc CHANGED
@@ -30,6 +30,6 @@ If you want to allow multiple providers, use the OmniAuth Builder:
30
30
 
31
31
  use OmniAuth::Builder do
32
32
  provider :twitter, 'consumer_key', 'consumer_secret'
33
- provider :facebook, 'app_id', 'app_secret'
33
+ provider :facebook, 'client_id', 'client_secret'
34
34
  end
35
35
 
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+ require 'rspec/core/rake_task'
4
+ RSpec::Core::RakeTask.new(:spec)
5
+ task :default => :spec
6
+ task :test => :spec
@@ -0,0 +1 @@
1
+ Autotest.add_discovery { "rspec2" }
data/lib/oa-oauth.rb ADDED
@@ -0,0 +1 @@
1
+ require 'omniauth/oauth'
@@ -4,18 +4,50 @@ module OmniAuth
4
4
  module Strategies
5
5
  autoload :OAuth, 'omniauth/strategies/oauth'
6
6
  autoload :OAuth2, 'omniauth/strategies/oauth2'
7
-
8
- autoload :Twitter, 'omniauth/strategies/twitter'
9
- autoload :LinkedIn, 'omniauth/strategies/linked_in'
7
+ autoload :XAuth, 'omniauth/strategies/xauth'
8
+
9
+ autoload :Bitly, 'omniauth/strategies/bitly'
10
+ autoload :Dailymile, 'omniauth/strategies/dailymile'
11
+ autoload :Doit, 'omniauth/strategies/doit'
12
+ autoload :Dopplr, 'omniauth/strategies/dopplr'
13
+ autoload :Douban, 'omniauth/strategies/douban'
14
+ autoload :Evernote, 'omniauth/strategies/evernote'
10
15
  autoload :Facebook, 'omniauth/strategies/facebook'
11
- autoload :GitHub, 'omniauth/strategies/github'
12
- autoload :ThirtySevenSignals, 'omniauth/strategies/thirty_seven_signals'
13
16
  autoload :Foursquare, 'omniauth/strategies/foursquare'
17
+ autoload :GitHub, 'omniauth/strategies/github'
18
+ autoload :Goodreads, 'omniauth/strategies/goodreads'
19
+ autoload :Google, 'omniauth/strategies/google'
14
20
  autoload :Gowalla, 'omniauth/strategies/gowalla'
21
+ autoload :Hyves, 'omniauth/strategies/hyves'
15
22
  autoload :Identica, 'omniauth/strategies/identica'
16
- autoload :TripIt, 'omniauth/strategies/trip_it'
17
- autoload :Dopplr, 'omniauth/strategies/dopplr'
23
+ autoload :Instagram, 'omniauth/strategies/instagram'
24
+ autoload :Instapaper, 'omniauth/strategies/instapaper'
25
+ autoload :LinkedIn, 'omniauth/strategies/linked_in'
18
26
  autoload :Meetup, 'omniauth/strategies/meetup'
27
+ autoload :Miso, 'omniauth/strategies/miso'
28
+ autoload :Mixi, 'omniauth/strategies/mixi'
29
+ autoload :Netflix, 'omniauth/strategies/netflix'
30
+ autoload :Qzone, 'omniauth/strategies/qzone'
31
+ autoload :Rdio, 'omniauth/strategies/rdio'
32
+ autoload :Renren, 'omniauth/strategies/renren'
33
+ autoload :Salesforce, 'omniauth/strategies/salesforce'
34
+ autoload :SmugMug, 'omniauth/strategies/smug_mug'
19
35
  autoload :SoundCloud, 'omniauth/strategies/sound_cloud'
36
+ autoload :T163, 'omniauth/strategies/t163'
37
+ autoload :Teambox, 'omniauth/strategies/teambox'
38
+ autoload :ThirtySevenSignals, 'omniauth/strategies/thirty_seven_signals'
39
+ autoload :Tqq, 'omniauth/strategies/tqq'
40
+ autoload :TradeMe, 'omniauth/strategies/trade_me'
41
+ autoload :TripIt, 'omniauth/strategies/trip_it'
42
+ autoload :Tsina, 'omniauth/strategies/tsina'
43
+ autoload :Tsohu, 'omniauth/strategies/tsohu'
44
+ autoload :Tumblr, 'omniauth/strategies/tumblr'
45
+ autoload :Twitter, 'omniauth/strategies/twitter'
46
+ autoload :TypePad, 'omniauth/strategies/type_pad'
47
+ autoload :Vimeo, 'omniauth/strategies/vimeo'
48
+ autoload :Vkontakte, 'omniauth/strategies/vkontakte'
49
+ autoload :Yahoo, 'omniauth/strategies/yahoo'
50
+ autoload :Yammer, 'omniauth/strategies/yammer'
51
+ autoload :YouTube, 'omniauth/strategies/you_tube'
20
52
  end
21
53
  end
@@ -0,0 +1,46 @@
1
+ require 'omniauth/oauth'
2
+ require 'multi_json'
3
+
4
+ module OmniAuth
5
+ module Strategies
6
+ #
7
+ # Authenticate to Bitly utilizing OAuth 2.0 and retrieve
8
+ # basic user information.
9
+ #
10
+ # @example Basic Usage
11
+ # use OmniAuth::Strategies::Bitly, 'API Key', 'Secret Key'
12
+ class Bitly < OAuth2
13
+ # @param [Rack Application] app standard middleware application parameter
14
+ # @param [String] api_key the application id as [registered on Bitly](http://bit.ly/a/account)
15
+ # @param [String] secret_key the application secret as [registered on Bitly](http://bit.ly/a/account)
16
+ def initialize(app, api_key = nil, secret_key = nil, options = {}, &block)
17
+ client_options = {
18
+ :site => 'https://bit.ly',
19
+ :authorize_url => 'https://bit.ly/oauth/authorize',
20
+ :access_token_url => 'https://api-ssl.bit.ly/oauth/access_token'
21
+ }
22
+
23
+ super(app, :bitly, api_key, secret_key, client_options, options, &block)
24
+ end
25
+
26
+ protected
27
+
28
+ def user_data
29
+ {
30
+ 'login' => @access_token['login'],
31
+ 'api_key' => @access_token['apiKey']
32
+ }
33
+ end
34
+
35
+ def auth_hash
36
+ OmniAuth::Utils.deep_merge(super, {
37
+ 'uid' => @access_token['login'],
38
+ 'user_info' => user_data,
39
+ 'extra' => {'user_hash' => user_data}
40
+ })
41
+ end
42
+ end
43
+
44
+ end
45
+
46
+ end
@@ -0,0 +1,64 @@
1
+ require 'omniauth/oauth'
2
+ require 'multi_json'
3
+
4
+ module OmniAuth
5
+ module Strategies
6
+ #
7
+ # Authenticate to DailyMile utilizing OAuth 2.0 and retrieve
8
+ # basic user information.
9
+ #
10
+ # @example Basic Usage
11
+ # use OmniAuth::Strategies::DailyMile, 'CLIENT_ID', 'CLIENT_SECRET'
12
+ class Dailymile < OAuth2
13
+ # @param [Rack Application] app standard middleware application parameter
14
+ # @param [String] client_id the application id as [registered on Dailymile](http://www.dailymile.com/api/consumers/new)
15
+ # @param [String] cliend_secret the application secret as [registered on Dailymile](http://www.dailymile.com/api/consumers/new)
16
+ def initialize(app, client_id = nil, client_secret = nil, options = {}, &block)
17
+ client_options = {
18
+ :site => 'https://api.dailymile.com/oauth',
19
+ :authorize_path => '/oauth/authorize',
20
+ :access_token_path => '/oauth/token'
21
+ }
22
+
23
+ super(app, :dailymile, client_id, client_secret, client_options, options, &block)
24
+ end
25
+
26
+ protected
27
+
28
+ def user_data
29
+ @data ||= MultiJson.decode(@access_token.get("/people/me.json"))
30
+ end
31
+
32
+ def request_phase
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
+ 'name' => user_data['display_name'],
45
+ 'nickname' => user_data['username'],
46
+ 'location' => user_data['location'],
47
+ 'image' => user_data['photo_url'],
48
+ 'description' => user_data['goal'],
49
+ 'urls' => {
50
+ 'dailymile' => user_data['url']
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,60 @@
1
+ require 'omniauth/oauth'
2
+ require 'multi_json'
3
+
4
+ module OmniAuth
5
+ module Strategies
6
+ class Doit < OAuth2
7
+ def initialize(app, consumer_key = nil, consumer_secret = nil, options = {}, &block)
8
+ client_options = {
9
+ :site => 'https://openapi.doit.im',
10
+ :authorize_url => 'https://openapi.doit.im/oauth/authorize',
11
+ :access_token_url => 'https://openapi.doit.im/oauth/access_token'
12
+ }
13
+
14
+ super(app, :doit, 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(client.site+"/v1/settings"),{'Authorization'=> 'OAuth'+@access_token.token})
21
+ end
22
+
23
+ def request_phase
24
+ options[:response_type] ||= "code"
25
+ super
26
+ end
27
+
28
+ def callback_phase
29
+ options[:grant_type] ||= 'authorization_code'
30
+ super
31
+ end
32
+
33
+ def user_info
34
+ {
35
+ 'account' => user_data['account'],
36
+ 'username'=> user_data['username'],
37
+ 'nickname'=> user_data['nickname'],
38
+ 'gender'=> user_data['gender'],
39
+ 'week_start'=> user_data['week_start'],
40
+ 'birthday_day'=> user_data['birthday_day'],
41
+ 'birthday_month'=> user_data['birthday_month'],
42
+ 'birthday_year'=> user_data['birthday_year'],
43
+ 'language'=> user_data['language'],
44
+ 'user_timezone'=> user_data['user_timezone'],
45
+ 'remind_email'=> user_data['remind_email'],
46
+ 'created'=> user_data['created'],
47
+ 'updated'=> user_data['updated']
48
+ }
49
+ end
50
+
51
+ def auth_hash
52
+ OmniAuth::Utils.deep_merge(super, {
53
+ 'uid' => user_data['id'],
54
+ 'user_info' => user_info,
55
+ 'extra' => {'user_hash' => user_data}
56
+ })
57
+ end
58
+ end
59
+ end
60
+ end
@@ -1,4 +1,5 @@
1
1
  require 'omniauth/oauth'
2
+ require 'multi_json'
2
3
 
3
4
  module OmniAuth
4
5
  module Strategies
@@ -10,13 +11,43 @@ module OmniAuth
10
11
  # use OmniAuth::Strategies::Dopplr, 'consumerkey', 'consumersecret'
11
12
  #
12
13
  class Dopplr < OmniAuth::Strategies::OAuth
13
- def initialize(app, consumer_key, consumer_secret)
14
- super(app, :dopplr, consumer_key, consumer_secret,
15
- :site => 'https://www.dopplr.com',
16
- :request_token_path => "/oauth/request_token",
17
- :access_token_path => "/oauth/access_token",
18
- :authorize_path => "/oauth/authorize")
19
- end
14
+ # Initialize the Dopplr strategy.
15
+ #
16
+ # @option options [Hash, {}] :client_options Options to be passed directly to the OAuth Consumer
17
+ def initialize(app, consumer_key = nil, consumer_secret = nil, options = {}, &block)
18
+ client_options = {
19
+ :site => 'https://www.dopplr.com',
20
+ :request_token_path => "/oauth/request_token",
21
+ :access_token_path => "/oauth/access_token",
22
+ :authorize_path => "/oauth/authorize"
23
+ }
24
+
25
+ super(app, :dopplr, consumer_key, consumer_secret, client_options, options, &block)
26
+ end
27
+
28
+ def user_data
29
+ @data ||= MultiJson.decode(@access_token.get('/oauthapi/whoami').body)['whoami']
30
+ end
31
+
32
+ def user_info
33
+ {
34
+ 'nickname' => user_data["nick"],
35
+ 'first_name' => user_data["forename"],
36
+ 'last_name' => user_data["surname"],
37
+ 'name' => "#{user_data['forename']} #{user_data['surname']}",
38
+ 'urls' => {
39
+ 'Dopplr' => user_data["dopplr_url"],
40
+ 'DopplrMobile' => user_data["mobile_url"],
41
+ }
42
+ }
43
+ end
44
+
45
+ def auth_hash
46
+ OmniAuth::Utils.deep_merge(super, {
47
+ 'uid' => user_data['nick'],
48
+ 'user_info' => user_info
49
+ })
50
+ end
20
51
  end
21
52
  end
22
53
  end
@@ -0,0 +1,60 @@
1
+ require 'omniauth/oauth'
2
+ require 'multi_json'
3
+
4
+ module OmniAuth
5
+ module Strategies
6
+ #
7
+ # Authenticate to Douban via OAuth and retrieve basic
8
+ # user information.
9
+ #
10
+ # Usage:
11
+ #
12
+ # use OmniAuth::Strategies::Douban, 'APIKey', 'APIKeySecret'
13
+ #
14
+ class Douban < OmniAuth::Strategies::OAuth
15
+ def initialize(app, consumer_key = nil, consumer_secret = nil, options = {}, &block)
16
+ # Although in OAuth spec the :realm parameter is optional,
17
+ # it is required for Douban.
18
+ client_options = {
19
+ :site => 'http://www.douban.com',
20
+ :request_token_path => '/service/auth/request_token',
21
+ :access_token_path => '/service/auth/access_token',
22
+ :authorize_path => '/service/auth/authorize',
23
+ :realm => 'OmniAuth'
24
+ }
25
+
26
+ super(app, :douban, consumer_key, consumer_secret, client_options, options, &block)
27
+ end
28
+
29
+ def auth_hash
30
+ OmniAuth::Utils.deep_merge(super, {
31
+ 'uid' => @access_token.params[:douban_user_id],
32
+ 'user_info' => user_info,
33
+ 'extra' => {'user_hash' => user_hash}
34
+ })
35
+ end
36
+
37
+ def user_info
38
+ user_hash = self.user_hash
39
+
40
+ location = user_hash['location'] ? user_hash['location']['$t'] : nil
41
+ image = user_hash['link'].find {|l| l['@rel'] == 'icon' }['@href']
42
+ douban_url = user_hash['link'].find {|l| l['@rel'] == 'alternate' }['@href']
43
+ {
44
+ 'username' => user_hash['db:uid']['$t'],
45
+ 'name' => user_hash['title']['$t'],
46
+ 'location' => location,
47
+ 'image' => image,
48
+ 'description' => user_hash['content']['$t'],
49
+ 'urls' => {
50
+ 'Douban' => douban_url
51
+ }
52
+ }
53
+ end
54
+
55
+ def user_hash
56
+ @user_hash ||= MultiJson.decode(@access_token.get('http://api.douban.com/people/%40me?alt=json').body)
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,54 @@
1
+ require 'omniauth/oauth'
2
+ require 'multi_json'
3
+ require 'evernote'
4
+
5
+ module OmniAuth
6
+ module Strategies
7
+ #
8
+ # Authenticate to Evernote via OAuth and retrieve an access token for API usage
9
+ #
10
+ # Usage:
11
+ #
12
+ # use OmniAuth::Strategies::Evernote, 'consumerkey', 'consumersecret'
13
+ #
14
+ class Evernote < OmniAuth::Strategies::OAuth
15
+ # Initialize the Evernote strategy.
16
+ #
17
+ # @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)
19
+ client_options = {
20
+ :site => 'https://www.evernote.com',
21
+ :request_token_path => '/oauth',
22
+ :access_token_path => '/oauth',
23
+ :authorize_path => '/OAuth.action',
24
+ :oauth_signature_method => 'PLAINTEXT'
25
+ }
26
+
27
+ super(app, :evernote, consumer_key, consumer_secret, client_options, options, &block)
28
+ end
29
+
30
+ def auth_hash
31
+ OmniAuth::Utils.deep_merge(super, {
32
+ 'uid' => user_data.id,
33
+ 'user_info' => user_info,
34
+ 'extra' => user_data
35
+ })
36
+ end
37
+
38
+ def user_info
39
+ {
40
+ 'name' => user_data.name,
41
+ 'nickname' => user_data.username,
42
+ }
43
+ end
44
+
45
+ def user_data
46
+ @user_data ||= begin
47
+ user_store_url = consumer.site + '/edam/user'
48
+ client = ::Evernote::Client.new(::Evernote::EDAM::UserStore::UserStore::Client, user_store_url, {})
49
+ client.getUser(@access_token.token)
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end