omniauth-oauth2 1.0.3 → 1.1.0
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.
Potentially problematic release.
This version of omniauth-oauth2 might be problematic. Click here for more details.
@@ -3,6 +3,7 @@ require 'uri'
|
|
3
3
|
require 'oauth2'
|
4
4
|
require 'omniauth'
|
5
5
|
require 'timeout'
|
6
|
+
require 'securerandom'
|
6
7
|
|
7
8
|
module OmniAuth
|
8
9
|
module Strategies
|
@@ -47,7 +48,16 @@ module OmniAuth
|
|
47
48
|
end
|
48
49
|
|
49
50
|
def authorize_params
|
50
|
-
options.authorize_params.
|
51
|
+
if options.authorize_params[:state].to_s.empty?
|
52
|
+
options.authorize_params[:state] = SecureRandom.hex(24)
|
53
|
+
end
|
54
|
+
params = options.authorize_params.merge(options.authorize_options.inject({}){|h,k| h[k.to_sym] = options[k] if options[k]; h})
|
55
|
+
if OmniAuth.config.test_mode
|
56
|
+
@env ||= {}
|
57
|
+
@env['rack.session'] ||= {}
|
58
|
+
end
|
59
|
+
session['omniauth.state'] = params[:state]
|
60
|
+
params
|
51
61
|
end
|
52
62
|
|
53
63
|
def token_params
|
@@ -58,6 +68,9 @@ module OmniAuth
|
|
58
68
|
if request.params['error'] || request.params['error_reason']
|
59
69
|
raise CallbackError.new(request.params['error'], request.params['error_description'] || request.params['error_reason'], request.params['error_uri'])
|
60
70
|
end
|
71
|
+
if request.params['state'].to_s.empty? || request.params['state'] != session.delete('omniauth.state')
|
72
|
+
raise CallbackError.new(nil, :csrf_detected)
|
73
|
+
end
|
61
74
|
|
62
75
|
self.access_token = build_access_token
|
63
76
|
self.access_token = access_token.refresh! if access_token.expired?
|
@@ -4,6 +4,14 @@ describe OmniAuth::Strategies::OAuth2 do
|
|
4
4
|
def app; lambda{|env| [200, {}, ["Hello."]]} end
|
5
5
|
let(:fresh_strategy){ Class.new(OmniAuth::Strategies::OAuth2) }
|
6
6
|
|
7
|
+
before do
|
8
|
+
OmniAuth.config.test_mode = true
|
9
|
+
end
|
10
|
+
|
11
|
+
after do
|
12
|
+
OmniAuth.config.test_mode = false
|
13
|
+
end
|
14
|
+
|
7
15
|
describe '#client' do
|
8
16
|
subject{ fresh_strategy }
|
9
17
|
|
@@ -22,13 +30,20 @@ describe OmniAuth::Strategies::OAuth2 do
|
|
22
30
|
subject { fresh_strategy }
|
23
31
|
|
24
32
|
it 'should include any authorize params passed in the :authorize_params option' do
|
25
|
-
instance = subject.new('abc', 'def', :authorize_params => {:foo => 'bar', :baz => 'zip'})
|
26
|
-
instance.authorize_params.should == {'foo' => 'bar', 'baz' => 'zip'}
|
33
|
+
instance = subject.new('abc', 'def', :authorize_params => {:foo => 'bar', :baz => 'zip', :state => '123'})
|
34
|
+
instance.authorize_params.should == {'foo' => 'bar', 'baz' => 'zip', 'state' => '123'}
|
27
35
|
end
|
28
36
|
|
29
37
|
it 'should include top-level options that are marked as :authorize_options' do
|
30
|
-
instance = subject.new('abc', 'def', :authorize_options => [:scope, :foo], :scope => 'bar', :foo => 'baz')
|
31
|
-
instance.authorize_params.should == {'scope' => 'bar', 'foo' => 'baz'}
|
38
|
+
instance = subject.new('abc', 'def', :authorize_options => [:scope, :foo], :scope => 'bar', :foo => 'baz', :authorize_params => {:state => '123'})
|
39
|
+
instance.authorize_params.should == {'scope' => 'bar', 'foo' => 'baz', 'state' => '123'}
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'should include random state in the authorize params' do
|
43
|
+
instance = subject.new('abc', 'def')
|
44
|
+
instance.authorize_params.keys.should == ['state']
|
45
|
+
instance.session['omniauth.state'].should_not be_empty
|
46
|
+
instance.session['omniauth.state'].should == instance.authorize_params['state']
|
32
47
|
end
|
33
48
|
end
|
34
49
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: omniauth-oauth2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-07-
|
12
|
+
date: 2012-07-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: omniauth
|