omniauth-redbooth 1.0.0 → 1.0.1.rc.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 129ae77da55b0755c411b7662d2c83b23cfbc820
4
- data.tar.gz: dea926ed3e864db82b76d1cd0ab14cd6eb93d7a0
3
+ metadata.gz: cf62604b882c484c140a9251fe42e6d757e2c1ee
4
+ data.tar.gz: a02d5e72917911eac03a8adc6298247b625dcad8
5
5
  SHA512:
6
- metadata.gz: a07416b6e73b8c7922725a2c228ce689818649e095a646eb0c2b9b88c555e5b0f88b1665e00435d1873513341bb491dbb1b58cd5d82783443c31d0a636219665
7
- data.tar.gz: 2135f8801275cc1b94938676f6fa1193ac56908f6a80184979ba26b9829595e8632483ad52ef9b9bec0ea42adc7831a64a910d664682af3a596c72d58fbaf0aa
6
+ metadata.gz: 7cd0585183d94ed193857eb67f9c7b565399a4e1c95292cb4b32d3cace5bc9f0b94bc1036edef93690c5dea25a743fe45a167353d00bbb94b80400bcb7781b22
7
+ data.tar.gz: 2c8a2086570a5ec790a089bb80a36c8d429de9f3a894026f8eaea1c071e199e3be46378481db9add55f19f049604e5be0bf0fc89e9d28e2eeb9132c8293af797
data/.gitignore CHANGED
@@ -15,3 +15,4 @@ test/tmp
15
15
  test/version_tmp
16
16
  tmp
17
17
  Gemfile.lock
18
+ .byebug_history
data/.travis.yml CHANGED
@@ -2,3 +2,5 @@ language: ruby
2
2
  rvm:
3
3
  - 1.9.3
4
4
  - 2.0.0
5
+ - 2.1.7
6
+ - 2.2.3
data/CHANGELOG.md ADDED
@@ -0,0 +1,38 @@
1
+ # Change Log
2
+
3
+ ## [Unreleased]
4
+
5
+ ### Added
6
+
7
+ - Test on ruby 2.1 and 2.2 too.
8
+
9
+ ### Changed
10
+
11
+ - cleaned up the code a bit.
12
+ - cleaned up specs a bit and updated to RSpec 3.
13
+ - Use debugger gem on ruby 1.9.x or less and byebug on 2.x
14
+
15
+ ### Deprecated
16
+ ### Removed
17
+
18
+ ### Fixed
19
+
20
+ - changed omniauth-oauth2 dependency to 1.x up to 1.3.1 since [this change][1]
21
+ in omniauth-oauth2 1.4 breaks the strategy.
22
+ - Stop dealing with SCRIPT_NAME since it was breaking stuff
23
+
24
+ ### Security
25
+
26
+ ## [1.0.0] - 2015-11-18
27
+
28
+ ### Changed
29
+ - omniauth-oauth2 dependency to ~> 1.2
30
+
31
+ ## Previous changes
32
+
33
+ Undocumented. Please review git commits history.
34
+
35
+ [Unreleased]: https://github.com/redbooth/omniauth-redbooth/compare/v1.0.1...HEAD
36
+ [1.0.0]: https://github.com/redbooth/omniauth-redbooth/compare/v0.3.2...v1.0.0
37
+
38
+ [1]: https://github.com/intridea/omniauth-oauth2/issues/81
@@ -2,62 +2,34 @@ require 'omniauth-oauth2'
2
2
 
3
3
  module OmniAuth
4
4
  module Strategies
5
+ # @see https://redbooth.com/api/api-docs/
5
6
  class Redbooth < OmniAuth::Strategies::OAuth2
6
- # Give your strategy a name.
7
- option :name, 'redbooth'
7
+ REDBOOTH_URL = 'https://redbooth.com'.freeze
8
8
 
9
+ option :name, 'redbooth'
9
10
  option :provider_ignores_state, true
11
+ option :client_options,
12
+ site: "#{REDBOOTH_URL}/api/3",
13
+ authorize_url: "#{REDBOOTH_URL}/oauth2/authorize",
14
+ token_url: "#{REDBOOTH_URL}/oauth2/token"
15
+ option :authorize_params, response_type: 'code'
10
16
 
11
- # This is where you pass the options you would pass when
12
- # initializing your consumer from the OAuth gem.
13
- option :client_options, {
14
- site: 'https://redbooth.com/api/3',
15
- authorize_url: 'https://redbooth.com/oauth2/authorize',
16
- token_url: 'https://redbooth.com/oauth2/token'
17
- }
18
-
19
- option :authorize_params, {
20
- response_type: 'code'
21
- }
22
-
23
- # These are called after authentication has succeeded. If
24
- # possible, you should try to set the UID without making
25
- # additional calls (if the user id is returned with the token
26
- # or as a URI parameter). This may not be possible with all
27
- # providers.
28
- uid{ raw_info['id'] }
17
+ uid { raw_info['id'] }
29
18
 
30
19
  info do
31
20
  {
32
- :name => [ raw_info['first_name'], raw_info['last_name'] ].join(' '),
33
- :email => raw_info['email']
21
+ name: "#{raw_info['first_name']} #{raw_info['last_name']}",
22
+ email: raw_info['email']
34
23
  }
35
24
  end
36
25
 
37
26
  extra do
38
- {
39
- 'raw_info' => raw_info
40
- }
27
+ { 'raw_info' => raw_info }
41
28
  end
42
29
 
43
30
  def raw_info
44
- @raw_info ||= access_token.get("#{options[:client_options][:site]}/me").parsed
45
- end
46
-
47
- # Override OmniAuth's `request` method and make sure that
48
- # `request.url` is properly defined when `PATH_INFO` doesn't
49
- # start with a slash.
50
- #
51
- # This is needed because when mounting an engine on the root,
52
- # the `path_prefix` cannot start with a slash. Because of that
53
- # `request.url` becomes host:portpath (notice the lack of a slash).
54
- #
55
- # This code sets the `SCRIPT_NAME` environment variable to a slash
56
- # if it's empty (meaning that it's the root) and then calls
57
- # the parent code which instantiates a request.
58
- def request
59
- @env['SCRIPT_NAME'] = '/' if @env['SCRIPT_NAME'] == ''
60
- super
31
+ @raw_info ||=
32
+ access_token.get("#{options[:client_options][:site]}/me").parsed
61
33
  end
62
34
  end
63
35
  end
@@ -1,5 +1,5 @@
1
1
  module OmniAuth
2
2
  module Redbooth
3
- VERSION = '1.0.0'
3
+ VERSION = '1.0.1.rc.1'
4
4
  end
5
5
  end
@@ -13,8 +13,15 @@ Gem::Specification.new do |gem|
13
13
  gem.require_paths = ['lib']
14
14
  gem.version = OmniAuth::Redbooth::VERSION
15
15
 
16
- gem.add_dependency 'omniauth-oauth2', '~> 1.2'
17
- gem.add_development_dependency 'rspec', '~> 2.7'
16
+ # Using 1.3.x branch since 1.4 added a non backward compatible change which
17
+ # prevents this gem from working.
18
+ #
19
+ # The issue is documented here:
20
+ # https://github.com/intridea/omniauth-oauth2/issues/81
21
+ gem.add_dependency 'omniauth-oauth2', '>= 1.0', '<= 1.3.1'
22
+
23
+ gem.add_development_dependency 'rspec', '~> 3.0'
24
+ gem.add_development_dependency 'rspec-its', '~> 1.2'
18
25
  gem.add_development_dependency 'rack-test', '~> 0.6'
19
26
  gem.add_development_dependency 'simplecov', '~> 0.10'
20
27
  gem.add_development_dependency 'webmock', '~> 1.22'
@@ -25,4 +32,10 @@ Gem::Specification.new do |gem|
25
32
  gem.add_development_dependency 'growl', '~> 1.0'
26
33
  gem.add_development_dependency 'sinatra', '~> 1.4'
27
34
  gem.add_development_dependency 'rake', '~> 10.4'
35
+
36
+ if Gem.ruby_version < Gem::Version.new('2.0.0')
37
+ gem.add_development_dependency 'debugger'
38
+ else
39
+ gem.add_development_dependency 'byebug'
40
+ end
28
41
  end
@@ -1,102 +1,118 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe OmniAuth::Strategies::Redbooth do
3
+ RSpec.describe OmniAuth::Strategies::Redbooth do
4
4
  let(:app) do
5
- lambda do |env|
6
- [200, {}, ["Hello."]]
7
- end
5
+ ->(_env) { [200, {}, ['Hello.']] }
8
6
  end
9
- let(:request) { double('Request', :params => {}, :cookies => {}, :env => {}) }
10
- let(:fresh_strategy){ Class.new(OmniAuth::Strategies::Redbooth) }
11
7
 
12
- let(:redbooth_strategy) do
13
- fresh_strategy.new(app, '_your_app_id_', '_your_app_secret_', @options || {}).tap do |strategy|
14
- strategy.stub(:request) {
15
- request
16
- }
17
- end
18
- end
8
+ let(:app_id) { '_app_id_' }
9
+ let(:app_secret) { '_app_secret_' }
10
+ let(:request) { double(params: {}, cookies: {}, env: {}) }
11
+ let(:options) { Hash.new }
19
12
 
20
- subject { redbooth_strategy }
13
+ let(:strategy) { described_class.new(app, app_id, app_secret, options) }
21
14
 
22
- before do
23
- OmniAuth.config.test_mode = true
24
- end
15
+ before { allow(strategy).to receive(:request) { request } }
25
16
 
26
- after do
17
+ around do |example|
18
+ OmniAuth.config.test_mode = true
19
+ example.run
27
20
  OmniAuth.config.test_mode = false
28
21
  end
29
22
 
30
- describe '#client_options' do
23
+ describe '#client' do
24
+ let(:example_site) { 'https://example.com' }
25
+ subject { strategy.client }
31
26
 
32
- it 'should be initialized with correct authorize url' do
33
- expect(subject.client.options[:authorize_url]).to eql 'https://redbooth.com/oauth2/authorize'
34
- end
27
+ context 'with the default config' do
28
+ its(:site) { is_expected.to eq('https://redbooth.com/api/3') }
35
29
 
36
- it 'should be initialized with correct token url' do
37
- expect(subject.client.options[:token_url]).to eql 'https://redbooth.com/oauth2/token'
38
- end
30
+ describe 'the client options' do
31
+ subject { strategy.client.options }
39
32
 
40
- describe "overrides" do
41
- it 'should allow overriding the site' do
42
- @options = {:client_options => {'site' => 'https://example.com'}}
43
- subject.client.site.should == 'https://example.com'
33
+ its([:authorize_url]) do
34
+ is_expected.to eq('https://redbooth.com/oauth2/authorize')
35
+ end
36
+ its([:token_url]) do
37
+ is_expected.to eq('https://redbooth.com/oauth2/token')
38
+ end
44
39
  end
40
+ end
45
41
 
46
- it 'should allow overriding the authorize_url' do
47
- @options = {:client_options => {'authorize_url' => 'https://example.com'}}
48
- subject.client.options[:authorize_url].should == 'https://example.com'
49
- end
42
+ context 'changing default :site' do
43
+ let(:options) { { client_options: { site: example_site } } }
50
44
 
51
- it 'should allow overriding the token_url' do
52
- @options = {:client_options => {'token_url' => 'https://example.com'}}
53
- subject.client.options[:token_url].should == 'https://example.com'
54
- end
45
+ its(:site) { is_expected.to eq(example_site) }
55
46
  end
56
- end
57
47
 
58
- describe '#authorize_params' do
48
+ context 'changing default :authorize_url' do
49
+ subject { strategy.client.options }
50
+ let(:options) { { client_options: { authorize_url: example_site } } }
59
51
 
60
- it 'should include any authorize params passed in the :authorize_params option' do
61
- @options = {:authorize_params => {:request_visible_actions => 'something', :foo => 'bar', :baz => 'zip'}, :bad => 'not_included'}
62
- subject.authorize_params['request_visible_actions'].should eq('something')
63
- subject.authorize_params['foo'].should eq('bar')
64
- subject.authorize_params['baz'].should eq('zip')
65
- subject.authorize_params['bad'].should eq(nil)
52
+ its([:authorize_url]) { is_expected.to eq(example_site) }
66
53
  end
67
54
 
68
- it 'should include :response_type option' do
69
- expect(subject.authorize_params).to include('response_type')
70
- expect(subject.authorize_params['response_type']).to eql('code')
71
- end
55
+ context 'changing default :token_url' do
56
+ subject { strategy.client.options }
57
+ let(:options) { { client_options: { token_url: example_site } } }
72
58
 
73
- it 'should include random state in the authorize params' do
74
- expect(subject.authorize_params).to include('state')
75
- subject.session['omniauth.state'].should_not be_empty
59
+ its([:token_url]) { is_expected.to eq(example_site) }
76
60
  end
77
61
  end
78
62
 
79
- describe '#token_params' do
80
- it 'should include any token params passed in the :token_params option' do
81
- @options = {:token_params => {:foo => 'bar', :baz => 'zip'}}
82
- subject.token_params['foo'].should eq('bar')
83
- subject.token_params['baz'].should eq('zip')
63
+ describe ':authorize_params' do
64
+ let(:options) do
65
+ {
66
+ authorize_params: {
67
+ request_visible_actions: 'something',
68
+ foo: 'bar',
69
+ baz: 'zip'
70
+ },
71
+ bad: 'not_included'
72
+ }
84
73
  end
74
+
75
+ subject { strategy.authorize_params }
76
+
77
+ its([:request_visible_actions]) { is_expected.to eq('something') }
78
+ its([:foo]) { is_expected.to eq('bar') }
79
+ its([:baz]) { is_expected.to eq('zip') }
80
+ its([:bad]) { is_expected.to be_nil }
81
+ its([:response_type]) { is_expected.to eq('code') }
82
+ it { is_expected.to include(:state) }
85
83
  end
86
84
 
87
- describe "#token_options" do
88
- it 'should include top-level options that are marked as :token_options' do
89
- @options = {:token_options => [:scope, :foo], :scope => 'bar', :foo => 'baz', :bad => 'not_included'}
90
- subject.token_params['scope'].should eq('bar')
91
- subject.token_params['foo'].should eq('baz')
92
- subject.token_params['bad'].should eq(nil)
85
+ describe ':token_params' do
86
+ let(:options) do
87
+ { token_params: { foo: 'bar', baz: 'zip' } }
93
88
  end
89
+
90
+ subject { strategy.token_params }
91
+
92
+ its([:foo]) { is_expected.to eq('bar') }
93
+ its([:baz]) { is_expected.to eq('zip') }
94
94
  end
95
95
 
96
- describe '#callback_path' do
97
- it 'has the correct callback path' do
98
- subject.callback_path.should eq('/auth/redbooth/callback')
96
+ describe ':token_options' do
97
+ let(:options) do
98
+ {
99
+ token_options: [:scope, :foo],
100
+ scope: 'bar',
101
+ foo: 'baz',
102
+ bad: 'not_included'
103
+ }
99
104
  end
105
+
106
+ subject { strategy.token_params }
107
+
108
+ its([:scope]) { is_expected.to eq('bar') }
109
+ its([:foo]) { is_expected.to eq('baz') }
110
+ its([:bad]) { is_expected.to be_nil }
100
111
  end
101
112
 
113
+ describe '#callback_path' do
114
+ subject { strategy.callback_path }
115
+
116
+ it { is_expected.to eq('/auth/redbooth/callback') }
117
+ end
102
118
  end
data/spec/spec_helper.rb CHANGED
@@ -8,6 +8,7 @@ require 'rack/test'
8
8
  require 'webmock/rspec'
9
9
  require 'omniauth'
10
10
  require 'omniauth-redbooth'
11
+ require 'rspec/its'
11
12
 
12
13
  RSpec.configure do |config|
13
14
  config.include WebMock::API
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omniauth-redbooth
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1.rc.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andres Bravo
@@ -10,36 +10,56 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2015-11-17 00:00:00.000000000 Z
13
+ date: 2015-11-24 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: omniauth-oauth2
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
- - - "~>"
19
+ - - ">="
20
20
  - !ruby/object:Gem::Version
21
- version: '1.2'
21
+ version: '1.0'
22
+ - - "<="
23
+ - !ruby/object:Gem::Version
24
+ version: 1.3.1
22
25
  type: :runtime
23
26
  prerelease: false
24
27
  version_requirements: !ruby/object:Gem::Requirement
25
28
  requirements:
26
- - - "~>"
29
+ - - ">="
27
30
  - !ruby/object:Gem::Version
28
- version: '1.2'
31
+ version: '1.0'
32
+ - - "<="
33
+ - !ruby/object:Gem::Version
34
+ version: 1.3.1
29
35
  - !ruby/object:Gem::Dependency
30
36
  name: rspec
31
37
  requirement: !ruby/object:Gem::Requirement
32
38
  requirements:
33
39
  - - "~>"
34
40
  - !ruby/object:Gem::Version
35
- version: '2.7'
41
+ version: '3.0'
42
+ type: :development
43
+ prerelease: false
44
+ version_requirements: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '3.0'
49
+ - !ruby/object:Gem::Dependency
50
+ name: rspec-its
51
+ requirement: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '1.2'
36
56
  type: :development
37
57
  prerelease: false
38
58
  version_requirements: !ruby/object:Gem::Requirement
39
59
  requirements:
40
60
  - - "~>"
41
61
  - !ruby/object:Gem::Version
42
- version: '2.7'
62
+ version: '1.2'
43
63
  - !ruby/object:Gem::Dependency
44
64
  name: rack-test
45
65
  requirement: !ruby/object:Gem::Requirement
@@ -180,6 +200,20 @@ dependencies:
180
200
  - - "~>"
181
201
  - !ruby/object:Gem::Version
182
202
  version: '10.4'
203
+ - !ruby/object:Gem::Dependency
204
+ name: byebug
205
+ requirement: !ruby/object:Gem::Requirement
206
+ requirements:
207
+ - - ">="
208
+ - !ruby/object:Gem::Version
209
+ version: '0'
210
+ type: :development
211
+ prerelease: false
212
+ version_requirements: !ruby/object:Gem::Requirement
213
+ requirements:
214
+ - - ">="
215
+ - !ruby/object:Gem::Version
216
+ version: '0'
183
217
  description: Official OmniAuth strategy for Redbooth.com.
184
218
  email:
185
219
  - support@redbooth.com
@@ -190,6 +224,7 @@ files:
190
224
  - ".gitignore"
191
225
  - ".rspec"
192
226
  - ".travis.yml"
227
+ - CHANGELOG.md
193
228
  - Gemfile
194
229
  - Guardfile
195
230
  - LICENSE
@@ -216,9 +251,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
216
251
  version: '0'
217
252
  required_rubygems_version: !ruby/object:Gem::Requirement
218
253
  requirements:
219
- - - ">="
254
+ - - ">"
220
255
  - !ruby/object:Gem::Version
221
- version: '0'
256
+ version: 1.3.1
222
257
  requirements: []
223
258
  rubyforge_project:
224
259
  rubygems_version: 2.4.5.1