omniauth-linkedin-oauth2 0.1.5 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +4 -0
- data/lib/omniauth-linkedin-oauth2/version.rb +1 -1
- data/lib/omniauth/strategies/linkedin.rb +13 -3
- data/omniauth-linkedin-oauth2.gemspec +1 -1
- data/spec/omniauth/strategies/linkedin_spec.rb +48 -25
- metadata +22 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ab29207dc1df42074dfd2f67013de227d2c6975d
|
4
|
+
data.tar.gz: 2228ae416dc859c6de0e475e5af90f3becba4160
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 61991a55b3fd1294691f8be37afa2abca4812fb6f48b381bca66fa3e8655862cb6f0fe7e866a523f0d59467a610c5c8185252d2c37e8e2e997da56f59a38f0b6
|
7
|
+
data.tar.gz: 1cdae475837c9c89d7d41769f73799754c84b92f80686502e87b30919c9d3f380c27836804d23977d709c14c11514afcce8554a7a9235427644f07b2413830a4
|
data/README.md
CHANGED
@@ -71,6 +71,10 @@ provider :linkedin, ENV['LINKEDIN_KEY'], ENV['LINKEDIN_SECRET'], :fields => ['id
|
|
71
71
|
|
72
72
|
To see a complete list of available fields, consult the LinkedIn documentation at: https://developer.linkedin.com/documents/profile-fields
|
73
73
|
|
74
|
+
## Other Options
|
75
|
+
|
76
|
+
* `secure_image_url` - Set to `true` to use https for the profile picture url. Default is `false`.
|
77
|
+
|
74
78
|
## Contributing
|
75
79
|
|
76
80
|
1. Fork it
|
@@ -10,8 +10,8 @@ module OmniAuth
|
|
10
10
|
# initializing your consumer from the OAuth gem.
|
11
11
|
option :client_options, {
|
12
12
|
:site => 'https://api.linkedin.com',
|
13
|
-
:authorize_url => 'https://www.linkedin.com/
|
14
|
-
:token_url => 'https://www.linkedin.com/
|
13
|
+
:authorize_url => 'https://www.linkedin.com/oauth/v2/authorization?response_type=code',
|
14
|
+
:token_url => 'https://www.linkedin.com/oauth/v2/accessToken'
|
15
15
|
}
|
16
16
|
|
17
17
|
option :scope, 'r_basicprofile r_emailaddress'
|
@@ -44,6 +44,10 @@ module OmniAuth
|
|
44
44
|
{ 'raw_info' => raw_info }
|
45
45
|
end
|
46
46
|
|
47
|
+
def callback_url
|
48
|
+
full_host + script_name + callback_path
|
49
|
+
end
|
50
|
+
|
47
51
|
alias :oauth2_access_token :access_token
|
48
52
|
|
49
53
|
def access_token
|
@@ -56,11 +60,17 @@ module OmniAuth
|
|
56
60
|
end
|
57
61
|
|
58
62
|
def raw_info
|
59
|
-
@raw_info ||= access_token.get("/v1/people/~:(#{
|
63
|
+
@raw_info ||= access_token.get("/v1/people/~:(#{option_fields.join(',')})?format=json").parsed
|
60
64
|
end
|
61
65
|
|
62
66
|
private
|
63
67
|
|
68
|
+
def option_fields
|
69
|
+
fields = options.fields
|
70
|
+
fields.map! { |f| f == "picture-url" ? "picture-url;secure=true" : f } if !!options[:secure_image_url]
|
71
|
+
fields
|
72
|
+
end
|
73
|
+
|
64
74
|
def user_name
|
65
75
|
name = "#{raw_info['firstName']} #{raw_info['lastName']}".strip
|
66
76
|
name.empty? ? nil : name
|
@@ -24,6 +24,6 @@ Gem::Specification.new do |gem|
|
|
24
24
|
gem.add_development_dependency 'bundler', '~> 1.3'
|
25
25
|
gem.add_development_dependency 'rake'
|
26
26
|
|
27
|
-
gem.add_development_dependency 'rspec', '~> 2.
|
27
|
+
gem.add_development_dependency 'rspec', '~> 2.14.1'
|
28
28
|
gem.add_development_dependency 'simplecov'
|
29
29
|
end
|
@@ -5,82 +5,86 @@ describe OmniAuth::Strategies::LinkedIn do
|
|
5
5
|
subject { OmniAuth::Strategies::LinkedIn.new(nil) }
|
6
6
|
|
7
7
|
it 'should add a camelization for itself' do
|
8
|
-
OmniAuth::Utils.camelize('linkedin').
|
8
|
+
expect(OmniAuth::Utils.camelize('linkedin')).to eq('LinkedIn')
|
9
9
|
end
|
10
10
|
|
11
11
|
describe '#client' do
|
12
12
|
it 'has correct LinkedIn site' do
|
13
|
-
subject.client.site.
|
13
|
+
expect(subject.client.site).to eq('https://api.linkedin.com')
|
14
14
|
end
|
15
15
|
|
16
16
|
it 'has correct authorize url' do
|
17
|
-
subject.client.options[:authorize_url].
|
17
|
+
expect(subject.client.options[:authorize_url]).to eq('https://www.linkedin.com/oauth/v2/authorization?response_type=code')
|
18
18
|
end
|
19
19
|
|
20
20
|
it 'has correct token url' do
|
21
|
-
subject.client.options[:token_url].
|
21
|
+
expect(subject.client.options[:token_url]).to eq('https://www.linkedin.com/oauth/v2/accessToken')
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
25
|
describe '#callback_path' do
|
26
26
|
it 'has the correct callback path' do
|
27
|
-
subject.callback_path.
|
27
|
+
expect(subject.callback_path).to eq('/auth/linkedin/callback')
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
31
|
describe '#uid' do
|
32
32
|
before :each do
|
33
|
-
subject.
|
33
|
+
allow(subject).to receive(:raw_info) { { 'id' => 'uid' } }
|
34
34
|
end
|
35
35
|
|
36
36
|
it 'returns the id from raw_info' do
|
37
|
-
subject.uid.
|
37
|
+
expect(subject.uid).to eq('uid')
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
41
|
describe '#info' do
|
42
42
|
before :each do
|
43
|
-
subject.
|
43
|
+
allow(subject).to receive(:raw_info) { {} }
|
44
44
|
end
|
45
45
|
|
46
46
|
context 'and therefore has all the necessary fields' do
|
47
|
-
it { subject.info.
|
48
|
-
it { subject.info.
|
49
|
-
it { subject.info.
|
50
|
-
it { subject.info.
|
51
|
-
it { subject.info.
|
52
|
-
it { subject.info.
|
53
|
-
it { subject.info.
|
54
|
-
it { subject.info.
|
55
|
-
it { subject.info.
|
47
|
+
it { expect(subject.info).to have_key :name }
|
48
|
+
it { expect(subject.info).to have_key :email }
|
49
|
+
it { expect(subject.info).to have_key :nickname }
|
50
|
+
it { expect(subject.info).to have_key :first_name }
|
51
|
+
it { expect(subject.info).to have_key :last_name }
|
52
|
+
it { expect(subject.info).to have_key :location }
|
53
|
+
it { expect(subject.info).to have_key :description }
|
54
|
+
it { expect(subject.info).to have_key :image }
|
55
|
+
it { expect(subject.info).to have_key :urls }
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
59
|
describe '#extra' do
|
60
60
|
before :each do
|
61
|
-
subject.
|
61
|
+
allow(subject).to receive(:raw_info) { { :foo => 'bar' } }
|
62
62
|
end
|
63
63
|
|
64
|
-
it { subject.extra['raw_info'].
|
64
|
+
it { expect(subject.extra['raw_info']).to eq({ :foo => 'bar' }) }
|
65
65
|
end
|
66
66
|
|
67
67
|
describe '#access_token' do
|
68
68
|
before :each do
|
69
|
-
subject.
|
69
|
+
allow(subject).to receive(:oauth2_access_token) { double('oauth2 access token', :expires_in => 3600, :expires_at => 946688400).as_null_object }
|
70
70
|
end
|
71
71
|
|
72
|
-
it { subject.access_token.expires_in.
|
73
|
-
it { subject.access_token.expires_at.
|
72
|
+
it { expect(subject.access_token.expires_in).to eq(3600) }
|
73
|
+
it { expect(subject.access_token.expires_at).to eq(946688400) }
|
74
74
|
end
|
75
75
|
|
76
76
|
describe '#raw_info' do
|
77
77
|
before :each do
|
78
|
+
access_token = double('access token')
|
78
79
|
response = double('response', :parsed => { :foo => 'bar' })
|
79
|
-
|
80
|
+
expect(access_token).to receive(:get).with("/v1/people/~:(baz,qux)?format=json").and_return(response)
|
81
|
+
|
82
|
+
allow(subject).to receive(:option_fields) { ['baz', 'qux'] }
|
83
|
+
allow(subject).to receive(:access_token) { access_token }
|
80
84
|
end
|
81
85
|
|
82
86
|
it 'returns parsed response from access token' do
|
83
|
-
subject.raw_info.
|
87
|
+
expect(subject.raw_info).to eq({ :foo => 'bar' })
|
84
88
|
end
|
85
89
|
end
|
86
90
|
|
@@ -91,8 +95,27 @@ describe OmniAuth::Strategies::LinkedIn do
|
|
91
95
|
end
|
92
96
|
|
93
97
|
it 'sets default scope' do
|
94
|
-
subject.authorize_params['scope'].
|
98
|
+
expect(subject.authorize_params['scope']).to eq('r_basicprofile r_emailaddress')
|
95
99
|
end
|
96
100
|
end
|
97
101
|
end
|
102
|
+
|
103
|
+
describe '#option_fields' do
|
104
|
+
it 'returns options fields' do
|
105
|
+
subject.stub(:options => double('options', :fields => ['foo', 'bar']).as_null_object)
|
106
|
+
expect(subject.send(:option_fields)).to eq(['foo', 'bar'])
|
107
|
+
end
|
108
|
+
|
109
|
+
it 'http avatar image by default' do
|
110
|
+
subject.stub(:options => double('options', :fields => ['picture-url']))
|
111
|
+
allow(subject.options).to receive(:[]).with(:secure_image_url).and_return(false)
|
112
|
+
expect(subject.send(:option_fields)).to eq(['picture-url'])
|
113
|
+
end
|
114
|
+
|
115
|
+
it 'https avatar image if secure_image_url truthy' do
|
116
|
+
subject.stub(:options => double('options', :fields => ['picture-url']))
|
117
|
+
allow(subject.options).to receive(:[]).with(:secure_image_url).and_return(true)
|
118
|
+
expect(subject.send(:option_fields)).to eq(['picture-url;secure=true'])
|
119
|
+
end
|
120
|
+
end
|
98
121
|
end
|
metadata
CHANGED
@@ -1,97 +1,97 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: omniauth-linkedin-oauth2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Décio Ferreira
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-08-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: omniauth
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: omniauth-oauth2
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - ~>
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '1.3'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - ~>
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '1.3'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rspec
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - ~>
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 2.
|
75
|
+
version: 2.14.1
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - ~>
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 2.
|
82
|
+
version: 2.14.1
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: simplecov
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
description: A LinkedIn OAuth2 strategy for OmniAuth.
|
@@ -101,9 +101,9 @@ executables: []
|
|
101
101
|
extensions: []
|
102
102
|
extra_rdoc_files: []
|
103
103
|
files:
|
104
|
-
- .gitignore
|
105
|
-
- .rspec
|
106
|
-
- .travis.yml
|
104
|
+
- ".gitignore"
|
105
|
+
- ".rspec"
|
106
|
+
- ".travis.yml"
|
107
107
|
- Gemfile
|
108
108
|
- LICENSE.txt
|
109
109
|
- README.md
|
@@ -126,17 +126,17 @@ require_paths:
|
|
126
126
|
- lib
|
127
127
|
required_ruby_version: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- -
|
129
|
+
- - ">="
|
130
130
|
- !ruby/object:Gem::Version
|
131
131
|
version: '0'
|
132
132
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
133
133
|
requirements:
|
134
|
-
- -
|
134
|
+
- - ">="
|
135
135
|
- !ruby/object:Gem::Version
|
136
136
|
version: '0'
|
137
137
|
requirements: []
|
138
138
|
rubyforge_project:
|
139
|
-
rubygems_version: 2.
|
139
|
+
rubygems_version: 2.6.11
|
140
140
|
signing_key:
|
141
141
|
specification_version: 4
|
142
142
|
summary: A LinkedIn OAuth2 strategy for OmniAuth.
|