-
-
Notifications
You must be signed in to change notification settings - Fork 975
/
evernote.rb
59 lines (53 loc) · 1.68 KB
/
evernote.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
require 'omniauth/oauth'
require 'multi_json'
begin
require 'evernote'
rescue LoadError => e
raise "Omniauth Evernote strategy requires 'evernote' gem. Add it to your Gemfile: gem 'evernote'"
end
module OmniAuth
module Strategies
#
# Authenticate to Evernote via OAuth and retrieve an access token for API usage
#
# Usage:
#
# use OmniAuth::Strategies::Evernote, 'consumerkey', 'consumersecret'
#
class Evernote < OmniAuth::Strategies::OAuth
# Initialize the Evernote strategy.
#
# @option options [Hash, {}] :client_options Options to be passed directly to the OAuth Consumer
def initialize(app, consumer_key = nil, consumer_secret = nil, options = {}, &block)
client_options = {
:site => 'https://www.evernote.com',
:request_token_path => '/oauth',
:access_token_path => '/oauth',
:authorize_path => '/OAuth.action',
:oauth_signature_method => 'PLAINTEXT'
}
super(app, :evernote, consumer_key, consumer_secret, client_options, options, &block)
end
def auth_hash
OmniAuth::Utils.deep_merge(super, {
'uid' => user_data.id,
'user_info' => user_info,
'extra' => user_data
})
end
def user_info
{
'name' => user_data.name,
'nickname' => user_data.username,
}
end
def user_data
@user_data ||= begin
user_store_url = consumer.site + '/edam/user'
client = ::Evernote::Client.new(::Evernote::EDAM::UserStore::UserStore::Client, user_store_url, {})
client.getUser(@access_token.token)
end
end
end
end
end