omniauth-linkedin-oauth2 0.2.5 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: ab29207dc1df42074dfd2f67013de227d2c6975d
4
- data.tar.gz: 2228ae416dc859c6de0e475e5af90f3becba4160
2
+ SHA256:
3
+ metadata.gz: 151e59afd7380045ce96e463e9e1a2c1b859446bd3f4388e73a40755f9f0a07c
4
+ data.tar.gz: 3c43667e50b9ab164dfff8e00259331ec2f201c33385d41043c4f2f25da1e3cf
5
5
  SHA512:
6
- metadata.gz: 61991a55b3fd1294691f8be37afa2abca4812fb6f48b381bca66fa3e8655862cb6f0fe7e866a523f0d59467a610c5c8185252d2c37e8e2e997da56f59a38f0b6
7
- data.tar.gz: 1cdae475837c9c89d7d41769f73799754c84b92f80686502e87b30919c9d3f380c27836804d23977d709c14c11514afcce8554a7a9235427644f07b2413830a4
6
+ metadata.gz: da37ff1ca12ada1946a7138b21fac9decf6421fc947563d4a2a0918582472cde222dd4c03edb8ad8426c762088b7f3fef5d08ce35c199497d134c5d3a8d9c4a4
7
+ data.tar.gz: a76483fc87800753f8d39b281e38822ab04535530fb60e3c83aa2110c6f7926e33984b49d1b83871af9306676c2ee2ba509100f21657c9750f4a8dc3e39c3e09
data/.travis.yml CHANGED
@@ -1,3 +1,6 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.0.0
3
+ - 2.2
4
+ - 2.3
5
+ - 2.4
6
+ - 2.5
data/README.md CHANGED
@@ -4,17 +4,13 @@
4
4
 
5
5
  A LinkedIn OAuth2 strategy for OmniAuth.
6
6
 
7
- For more details, read the LinkedIn documentation: https://developer.linkedin.com/documents/authentication
7
+ For more details, read the LinkedIn documentation: https://developer.linkedin.com/docs/oauth2
8
8
 
9
9
  ## Installation
10
10
 
11
- Add this line to your application's Gemfile:
11
+ Add this gem to your application's Gemfile:
12
12
 
13
- gem 'omniauth-linkedin-oauth2'
14
-
15
- And then execute:
16
-
17
- $ bundle
13
+ bundle add omniauth-linkedin-oauth2
18
14
 
19
15
  Or install it yourself as:
20
16
 
@@ -22,6 +18,8 @@ Or install it yourself as:
22
18
 
23
19
  ## Upgrading
24
20
 
21
+ This version is a major upgrade to the LinkedIn API version 2. As such, it switches from the soon to be no longer available `r_basicprofile` to `r_liteprofile`. This results in a much limited set of data that we can get from LinkedIn.
22
+
25
23
  Previous versions of this gem used the provider name `:linkedin_oauth2`. In order to provide a cleaner upgrade path for users who were previously using the OAuth 1.0 omniauth adapter for LinkedIn [https://github.com/skorks/omniauth-linkedin], this has been renamed to just `:linkedin`.
26
24
 
27
25
  Users who are upgrading from previous versions of this gem may need to update their Omniauth and/or Devise configurations to use the shorter provider name.
@@ -43,16 +41,16 @@ You can now access the OmniAuth LinkedIn OAuth2 URL: `/auth/linkedin`.
43
41
  ## Granting Member Permissions to Your Application
44
42
 
45
43
  With the LinkedIn API, you have the ability to specify which permissions you want users to grant your application.
46
- For more details, read the LinkedIn documentation: https://developer.linkedin.com/documents/authentication
44
+ For more details, read the LinkedIn documentation: https://developer.linkedin.com/docs/oauth2
47
45
 
48
46
  By default, omniauth-linkedin-oauth2 requests the following permissions:
49
47
 
50
- 'r_basicprofile r_emailaddress'
48
+ 'r_liteprofile r_emailaddress'
51
49
 
52
50
  You can configure the scope option:
53
51
 
54
52
  ```ruby
55
- provider :linkedin, ENV['LINKEDIN_KEY'], ENV['LINKEDIN_SECRET'], :scope => 'r_fullprofile r_emailaddress r_network'
53
+ provider :linkedin, ENV['LINKEDIN_KEY'], ENV['LINKEDIN_SECRET'], :scope => 'r_liteprofile'
56
54
  ```
57
55
 
58
56
  ## Profile Fields
@@ -60,25 +58,21 @@ provider :linkedin, ENV['LINKEDIN_KEY'], ENV['LINKEDIN_SECRET'], :scope => 'r_fu
60
58
  When specifying which permissions you want to users to grant to your application, you will probably want to specify the array of fields that you want returned in the omniauth hash. The list of default fields is as follows:
61
59
 
62
60
  ```ruby
63
- ['id', 'email-address', 'first-name', 'last-name', 'headline', 'location', 'industry', 'picture-url', 'public-profile-url']
61
+ ['id', 'first-name', 'last-name', 'picture-url', 'email-address']
64
62
  ```
65
63
 
66
- Here's an example of a possible configuration where the fields returned from the API are: id, email-address, first-name and last-name.
64
+ Here's an example of a possible configuration where the fields returned from the API are: id, first-name and last-name.
67
65
 
68
66
  ```ruby
69
- provider :linkedin, ENV['LINKEDIN_KEY'], ENV['LINKEDIN_SECRET'], :fields => ['id', 'email-address', 'first-name', 'last-name']
67
+ provider :linkedin, ENV['LINKEDIN_KEY'], ENV['LINKEDIN_SECRET'], :fields => ['id', 'first-name', 'last-name']
70
68
  ```
71
69
 
72
- To see a complete list of available fields, consult the LinkedIn documentation at: https://developer.linkedin.com/documents/profile-fields
73
-
74
- ## Other Options
75
-
76
- * `secure_image_url` - Set to `true` to use https for the profile picture url. Default is `false`.
70
+ To see a complete list of available fields, consult the LinkedIn documentation at: https://developer.linkedin.com/docs/fields
77
71
 
78
72
  ## Contributing
79
73
 
80
- 1. Fork it
81
- 2. Create your feature branch (`git checkout -b my-new-feature`)
82
- 3. Commit your changes (`git commit -am 'Add some feature'`)
83
- 4. Push to the branch (`git push origin my-new-feature`)
84
- 5. Create new Pull Request
74
+ 1. Fork it
75
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
76
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
77
+ 4. Push to the branch (`git push origin my-new-feature`)
78
+ 5. Create new Pull Request
@@ -3,45 +3,34 @@ require 'omniauth-oauth2'
3
3
  module OmniAuth
4
4
  module Strategies
5
5
  class LinkedIn < OmniAuth::Strategies::OAuth2
6
- # Give your strategy a name.
7
6
  option :name, 'linkedin'
8
7
 
9
- # This is where you pass the options you would pass when
10
- # initializing your consumer from the OAuth gem.
11
8
  option :client_options, {
12
9
  :site => 'https://api.linkedin.com',
13
10
  :authorize_url => 'https://www.linkedin.com/oauth/v2/authorization?response_type=code',
14
11
  :token_url => 'https://www.linkedin.com/oauth/v2/accessToken'
15
12
  }
16
13
 
17
- option :scope, 'r_basicprofile r_emailaddress'
18
- option :fields, ['id', 'email-address', 'first-name', 'last-name', 'headline', 'location', 'industry', 'picture-url', 'public-profile-url']
14
+ option :scope, 'r_liteprofile r_emailaddress'
15
+ option :fields, ['id', 'first-name', 'last-name', 'picture-url', 'email-address']
19
16
 
20
- # These are called after authentication has succeeded. If
21
- # possible, you should try to set the UID without making
22
- # additional calls (if the user id is returned with the token
23
- # or as a URI parameter). This may not be possible with all
24
- # providers.
25
- uid { raw_info['id'] }
17
+ uid do
18
+ raw_info['id']
19
+ end
26
20
 
27
21
  info do
28
22
  {
29
- :name => user_name,
30
- :email => raw_info['emailAddress'],
31
- :nickname => user_name,
32
- :first_name => raw_info['firstName'],
33
- :last_name => raw_info['lastName'],
34
- :location => raw_info['location'],
35
- :description => raw_info['headline'],
36
- :image => raw_info['pictureUrl'],
37
- :urls => {
38
- 'public_profile' => raw_info['publicProfileUrl']
39
- }
23
+ :email => email_address,
24
+ :first_name => localized_field('firstName'),
25
+ :last_name => localized_field('lastName'),
26
+ :picture_url => picture_url
40
27
  }
41
28
  end
42
29
 
43
30
  extra do
44
- { 'raw_info' => raw_info }
31
+ {
32
+ 'raw_info' => raw_info
33
+ }
45
34
  end
46
35
 
47
36
  def callback_url
@@ -52,28 +41,94 @@ module OmniAuth
52
41
 
53
42
  def access_token
54
43
  ::OAuth2::AccessToken.new(client, oauth2_access_token.token, {
55
- :mode => :query,
56
- :param_name => 'oauth2_access_token',
57
44
  :expires_in => oauth2_access_token.expires_in,
58
- :expires_at => oauth2_access_token.expires_at
45
+ :expires_at => oauth2_access_token.expires_at,
46
+ :refresh_token => oauth2_access_token.refresh_token
59
47
  })
60
48
  end
61
49
 
62
50
  def raw_info
63
- @raw_info ||= access_token.get("/v1/people/~:(#{option_fields.join(',')})?format=json").parsed
51
+ @raw_info ||= access_token.get(profile_endpoint).parsed
64
52
  end
65
53
 
66
54
  private
67
55
 
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
56
+ def email_address
57
+ if options.fields.include? 'email-address'
58
+ fetch_email_address
59
+ parse_email_address
60
+ end
61
+ end
62
+
63
+ def fetch_email_address
64
+ @email_address_response ||= access_token.get(email_address_endpoint).parsed
65
+ end
66
+
67
+ def parse_email_address
68
+ return unless email_address_available?
69
+
70
+ @email_address_response['elements'].first['handle~']['emailAddress']
71
+ end
72
+
73
+ def email_address_available?
74
+ @email_address_response['elements'] &&
75
+ @email_address_response['elements'].is_a?(Array) &&
76
+ @email_address_response['elements'].first &&
77
+ @email_address_response['elements'].first['handle~']
78
+ end
79
+
80
+ def fields_mapping
81
+ {
82
+ 'id' => 'id',
83
+ 'first-name' => 'firstName',
84
+ 'last-name' => 'lastName',
85
+ 'picture-url' => 'profilePicture(displayImage~:playableStreams)'
86
+ }
87
+ end
88
+
89
+ def fields
90
+ options.fields.each.with_object([]) do |field, result|
91
+ result << fields_mapping[field] if fields_mapping.has_key? field
92
+ end
93
+ end
94
+
95
+ def localized_field field_name
96
+ raw_info.dig(*[field_name, 'localized', field_locale(field_name)])
97
+ end
98
+
99
+ def field_locale field_name
100
+ "#{ raw_info[field_name]['preferredLocale']['language'] }_" \
101
+ "#{ raw_info[field_name]['preferredLocale']['country'] }"
102
+ end
103
+
104
+ def picture_url
105
+ return unless picture_available?
106
+
107
+ picture_references.last['identifiers'].first['identifier']
72
108
  end
73
109
 
74
- def user_name
75
- name = "#{raw_info['firstName']} #{raw_info['lastName']}".strip
76
- name.empty? ? nil : name
110
+ def picture_available?
111
+ raw_info['profilePicture'] &&
112
+ raw_info['profilePicture']['displayImage~'] &&
113
+ picture_references
114
+ end
115
+
116
+ def picture_references
117
+ raw_info['profilePicture']['displayImage~']['elements']
118
+ end
119
+
120
+ def email_address_endpoint
121
+ '/v2/emailAddress?q=members&projection=(elements*(handle~))'
122
+ end
123
+
124
+ def profile_endpoint
125
+ "/v2/me?projection=(#{ fields.join(',') })"
126
+ end
127
+
128
+ def token_params
129
+ super.tap do |params|
130
+ params.client_secret = options.client_secret
131
+ end
77
132
  end
78
133
  end
79
134
  end
@@ -1,5 +1,5 @@
1
1
  module OmniAuth
2
2
  module LinkedInOAuth2
3
- VERSION = "0.2.5"
3
+ VERSION = '1.0.1'
4
4
  end
5
5
  end
@@ -18,12 +18,11 @@ Gem::Specification.new do |gem|
18
18
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
19
19
  gem.require_paths = ["lib"]
20
20
 
21
- gem.add_runtime_dependency 'omniauth', '~> 1.0'
22
21
  gem.add_runtime_dependency 'omniauth-oauth2'
23
22
 
24
- gem.add_development_dependency 'bundler', '~> 1.3'
23
+ gem.add_development_dependency 'bundler'
25
24
  gem.add_development_dependency 'rake'
26
25
 
27
- gem.add_development_dependency 'rspec', '~> 2.14.1'
26
+ gem.add_development_dependency 'rspec'
28
27
  gem.add_development_dependency 'simplecov'
29
28
  end
@@ -4,7 +4,7 @@ require 'omniauth-linkedin-oauth2'
4
4
  describe OmniAuth::Strategies::LinkedIn do
5
5
  subject { OmniAuth::Strategies::LinkedIn.new(nil) }
6
6
 
7
- it 'should add a camelization for itself' do
7
+ it 'adds camelization for itself' do
8
8
  expect(OmniAuth::Utils.camelize('linkedin')).to eq('LinkedIn')
9
9
  end
10
10
 
@@ -13,11 +13,11 @@ describe OmniAuth::Strategies::LinkedIn do
13
13
  expect(subject.client.site).to eq('https://api.linkedin.com')
14
14
  end
15
15
 
16
- it 'has correct authorize url' do
16
+ it 'has correct `authorize_url`' do
17
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
- it 'has correct token url' do
20
+ it 'has correct `token_url`' do
21
21
  expect(subject.client.options[:token_url]).to eq('https://www.linkedin.com/oauth/v2/accessToken')
22
22
  end
23
23
  end
@@ -30,7 +30,7 @@ describe OmniAuth::Strategies::LinkedIn do
30
30
 
31
31
  describe '#uid' do
32
32
  before :each do
33
- allow(subject).to receive(:raw_info) { { 'id' => 'uid' } }
33
+ allow(subject).to receive(:raw_info) { Hash['id' => 'uid'] }
34
34
  end
35
35
 
36
36
  it 'returns the id from raw_info' do
@@ -38,84 +38,95 @@ describe OmniAuth::Strategies::LinkedIn do
38
38
  end
39
39
  end
40
40
 
41
- describe '#info' do
41
+ describe '#info / #raw_info' do
42
+ let(:access_token) { instance_double OAuth2::AccessToken }
43
+
44
+ let(:parsed_response) { Hash[:foo => 'bar'] }
45
+
46
+ let(:profile_endpoint) { '/v2/me?projection=(id,firstName,lastName,profilePicture(displayImage~:playableStreams))' }
47
+ let(:email_address_endpoint) { '/v2/emailAddress?q=members&projection=(elements*(handle~))' }
48
+
49
+ let(:email_address_response) { instance_double OAuth2::Response, parsed: parsed_response }
50
+ let(:profile_response) { instance_double OAuth2::Response, parsed: parsed_response }
51
+
42
52
  before :each do
43
- allow(subject).to receive(:raw_info) { {} }
53
+ allow(subject).to receive(:access_token).and_return access_token
54
+
55
+ allow(access_token).to receive(:get)
56
+ .with(email_address_endpoint)
57
+ .and_return(email_address_response)
58
+
59
+ allow(access_token).to receive(:get)
60
+ .with(profile_endpoint)
61
+ .and_return(profile_response)
44
62
  end
45
63
 
46
- context 'and therefore has all the necessary fields' do
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 }
64
+ it 'returns parsed responses using access token' do
65
+ expect(subject.info).to have_key :email
66
+ expect(subject.info).to have_key :first_name
67
+ expect(subject.info).to have_key :last_name
68
+ expect(subject.info).to have_key :picture_url
69
+
70
+ expect(subject.raw_info).to eq({ :foo => 'bar' })
56
71
  end
57
72
  end
58
73
 
59
74
  describe '#extra' do
75
+ let(:raw_info) { Hash[:foo => 'bar'] }
76
+
60
77
  before :each do
61
- allow(subject).to receive(:raw_info) { { :foo => 'bar' } }
78
+ allow(subject).to receive(:raw_info).and_return raw_info
62
79
  end
63
80
 
64
- it { expect(subject.extra['raw_info']).to eq({ :foo => 'bar' }) }
81
+ specify { expect(subject.extra['raw_info']).to eq raw_info }
65
82
  end
66
83
 
67
84
  describe '#access_token' do
68
- before :each do
69
- allow(subject).to receive(:oauth2_access_token) { double('oauth2 access token', :expires_in => 3600, :expires_at => 946688400).as_null_object }
85
+ let(:expires_in) { 3600 }
86
+ let(:expires_at) { 946688400 }
87
+ let(:token) { 'token' }
88
+ let(:refresh_token) { 'refresh_token' }
89
+ let(:access_token) do
90
+ instance_double OAuth2::AccessToken, :expires_in => expires_in,
91
+ :expires_at => expires_at, :token => token, :refresh_token => refresh_token
70
92
  end
71
93
 
72
- it { expect(subject.access_token.expires_in).to eq(3600) }
73
- it { expect(subject.access_token.expires_at).to eq(946688400) }
74
- end
75
-
76
- describe '#raw_info' do
77
94
  before :each do
78
- access_token = double('access token')
79
- response = double('response', :parsed => { :foo => 'bar' })
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 }
95
+ allow(subject).to receive(:oauth2_access_token).and_return access_token
84
96
  end
85
97
 
86
- it 'returns parsed response from access token' do
87
- expect(subject.raw_info).to eq({ :foo => 'bar' })
88
- end
98
+ specify { expect(subject.access_token.expires_in).to eq expires_in }
99
+ specify { expect(subject.access_token.expires_at).to eq expires_at }
89
100
  end
90
101
 
91
102
  describe '#authorize_params' do
92
103
  describe 'scope' do
93
104
  before :each do
94
- subject.stub(:session => {})
105
+ allow(subject).to receive(:session).and_return({})
95
106
  end
96
107
 
97
108
  it 'sets default scope' do
98
- expect(subject.authorize_params['scope']).to eq('r_basicprofile r_emailaddress')
109
+ expect(subject.authorize_params['scope']).to eq('r_liteprofile r_emailaddress')
99
110
  end
100
111
  end
101
112
  end
102
113
 
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'])
114
+ describe '#localized_field' do
115
+ let(:raw_info) do
116
+ {
117
+ 'foo' => {
118
+ 'preferredLocale' => {
119
+ 'language' => 'bar',
120
+ 'country' => 'BAZ'
121
+ }
122
+ }
123
+ }
107
124
  end
108
125
 
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'])
126
+ before :each do
127
+ allow(subject).to receive(:raw_info).and_return raw_info
113
128
  end
114
129
 
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
130
+ specify { expect(subject.send(:field_locale,'foo')).to eq 'bar_BAZ' }
120
131
  end
121
132
  end
data/spec/spec_helper.rb CHANGED
@@ -8,7 +8,6 @@ SimpleCov.start
8
8
  #
9
9
  # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
10
10
  RSpec.configure do |config|
11
- config.treat_symbols_as_metadata_keys_with_true_values = true
12
11
  config.run_all_when_everything_filtered = true
13
12
  config.filter_run :focus
14
13
 
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omniauth-linkedin-oauth2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Décio Ferreira
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-11 00:00:00.000000000 Z
11
+ date: 2023-08-22 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: omniauth
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '1.0'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '1.0'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: omniauth-oauth2
29
15
  requirement: !ruby/object:Gem::Requirement
@@ -42,16 +28,16 @@ dependencies:
42
28
  name: bundler
43
29
  requirement: !ruby/object:Gem::Requirement
44
30
  requirements:
45
- - - "~>"
31
+ - - ">="
46
32
  - !ruby/object:Gem::Version
47
- version: '1.3'
33
+ version: '0'
48
34
  type: :development
49
35
  prerelease: false
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
37
  requirements:
52
- - - "~>"
38
+ - - ">="
53
39
  - !ruby/object:Gem::Version
54
- version: '1.3'
40
+ version: '0'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: rake
57
43
  requirement: !ruby/object:Gem::Requirement
@@ -70,16 +56,16 @@ dependencies:
70
56
  name: rspec
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
- - - "~>"
59
+ - - ">="
74
60
  - !ruby/object:Gem::Version
75
- version: 2.14.1
61
+ version: '0'
76
62
  type: :development
77
63
  prerelease: false
78
64
  version_requirements: !ruby/object:Gem::Requirement
79
65
  requirements:
80
- - - "~>"
66
+ - - ">="
81
67
  - !ruby/object:Gem::Version
82
- version: 2.14.1
68
+ version: '0'
83
69
  - !ruby/object:Gem::Dependency
84
70
  name: simplecov
85
71
  requirement: !ruby/object:Gem::Requirement
@@ -120,7 +106,7 @@ homepage: https://github.com/decioferreira/omniauth-linkedin-oauth2
120
106
  licenses:
121
107
  - MIT
122
108
  metadata: {}
123
- post_install_message:
109
+ post_install_message:
124
110
  rdoc_options: []
125
111
  require_paths:
126
112
  - lib
@@ -135,9 +121,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
135
121
  - !ruby/object:Gem::Version
136
122
  version: '0'
137
123
  requirements: []
138
- rubyforge_project:
139
- rubygems_version: 2.6.11
140
- signing_key:
124
+ rubygems_version: 3.2.22
125
+ signing_key:
141
126
  specification_version: 4
142
127
  summary: A LinkedIn OAuth2 strategy for OmniAuth.
143
128
  test_files: