rack-oauth2 1.4.0 → 1.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8a2df927b2cd7727df348e6e2c2d2822382bb207
4
- data.tar.gz: 0cbd438ae8f7be634556bdf320721142e6ff497d
3
+ metadata.gz: 8d200fef958c8cebe3584388068110e9faed12eb
4
+ data.tar.gz: 1cab3b4d8fc6de54a0488dbe0159791c31b5feb3
5
5
  SHA512:
6
- metadata.gz: 6498b5c59d3bc2ccdbe0b651956872185c3e89023c59fb1f609c8d1cc2012d0a1df926146d5d3579431d6fd5ed95498214b34fa67d8bacf7911f5d327ddb26b4
7
- data.tar.gz: 57fafb111c251219dc32f95abb3523448e8852868873eea00e72c7bd7ba63f90750ebb69abffca6676f1eaf978101e6a883c179a55c4ebda2ad4db86a4f23b85
6
+ metadata.gz: 9f95eaa8709c9cccb94cff056dae182fe21e502a7a49ae05de49d348814c546e5708c4499dcbbee4a5208fe9c49f1270cf202363b1cc2811ceed1ba41a18322c
7
+ data.tar.gz: 7d3ffe4b2be092ae751c36e11f459bd691fc534045ad306d37637ee4e21757e4ff6579ae114acfc06624290fbe1fd5ab74cf8dbe216adc7161940b7a5b2a4c14
@@ -3,5 +3,6 @@ before_install:
3
3
 
4
4
  rvm:
5
5
  - 2.2.2
6
- - 2.2.5
7
- - 2.3.1
6
+ - 2.2.6
7
+ - 2.3.3
8
+ - 2.4.0
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.4.0
1
+ 1.5.0
@@ -76,16 +76,18 @@ module Rack
76
76
  params[:scope] = Array(options.delete(:scope)).join(' ') if options[:scope].present?
77
77
  params.merge! options
78
78
 
79
- if secret && client_auth_method == :basic
80
- cred = ["#{identifier}:#{secret}"].pack('m').tr("\n", '')
81
- headers.merge!(
82
- 'Authorization' => "Basic #{cred}"
83
- )
84
- else
85
- params.merge!(
86
- client_id: identifier,
87
- client_secret: secret
88
- )
79
+ if secret
80
+ if client_auth_method == :basic
81
+ cred = ["#{identifier}:#{secret}"].pack('m').tr("\n", '')
82
+ headers.merge!(
83
+ 'Authorization' => "Basic #{cred}"
84
+ )
85
+ else
86
+ params.merge!(
87
+ client_id: identifier,
88
+ client_secret: secret
89
+ )
90
+ end
89
91
  end
90
92
  handle_response do
91
93
  Rack::OAuth2.http_client.post(
@@ -0,0 +1,162 @@
1
+ require 'spec_helper.rb'
2
+
3
+ describe Rack::OAuth2::Server::Authorize::Code do
4
+ let(:request) { Rack::MockRequest.new app }
5
+ let(:redirect_uri) { 'http://client.example.com/callback' }
6
+ let(:code_verifier) { SecureRandom.hex(16) }
7
+ let(:code_challenge) { Base64.urlsafe_encode64(OpenSSL::Digest::SHA256.digest(code_verifier)).delete('=') }
8
+ let(:code_challenge_method) { :S256 }
9
+ subject { @request }
10
+
11
+ describe 'authorization request' do
12
+ let :app do
13
+ Rack::OAuth2::Server::Authorize.new do |request, response|
14
+ @request = request
15
+ end
16
+ end
17
+
18
+ context 'when code_challenge is given' do
19
+ context 'when code_challenge_method is given' do
20
+ before do
21
+ request.get "/?response_type=code&client_id=client&redirect_uri=#{redirect_uri}&state=state&code_challenge=#{code_challenge}&code_challenge_method=#{code_challenge_method}"
22
+ end
23
+ its(:code_challenge) { should == code_challenge }
24
+ its(:code_challenge_method) { should == code_challenge_method.to_s }
25
+ end
26
+
27
+ context 'when code_challenge_method is omitted' do
28
+ before do
29
+ request.get "/?response_type=code&client_id=client&redirect_uri=#{redirect_uri}&state=state&code_challenge=#{code_challenge}"
30
+ end
31
+ its(:code_challenge) { should == code_challenge }
32
+ its(:code_challenge_method) { should == nil }
33
+ end
34
+ end
35
+
36
+ context 'otherwise' do
37
+ before do
38
+ request.get "/?response_type=code&client_id=client&redirect_uri=#{redirect_uri}&state=state"
39
+ end
40
+ its(:code_challenge) { should == nil }
41
+ its(:code_challenge_method) { should == nil }
42
+ end
43
+ end
44
+
45
+ describe 'token request' do
46
+ let(:app) do
47
+ Rack::OAuth2::Server::Token.new do |request, response|
48
+ @request = request
49
+ response.access_token = Rack::OAuth2::AccessToken::Bearer.new(access_token: 'access_token')
50
+ end
51
+ end
52
+ let(:default_params) do
53
+ {
54
+ grant_type: 'authorization_code',
55
+ client_id: 'client_id',
56
+ client_secret: 'client_secret',
57
+ code: 'authorization_code',
58
+ redirect_uri: 'http://client.example.com/callback'
59
+ }
60
+ end
61
+
62
+ context 'when code_verifier is given' do
63
+ before do
64
+ request.post '/', params: default_params.merge(
65
+ code_verifier: code_verifier
66
+ )
67
+ end
68
+ its(:code_verifier) { should == code_verifier }
69
+
70
+ describe '#verify_code_verifier!' do
71
+ context 'when code_verifier is given with code_challenge_method=plain' do
72
+ it do
73
+ expect do
74
+ subject.verify_code_verifier! code_verifier, :plain
75
+ end.not_to raise_error
76
+ end
77
+ end
78
+
79
+ context 'when collect code_challenge is given' do
80
+ it do
81
+ expect do
82
+ subject.verify_code_verifier! code_challenge
83
+ end.not_to raise_error
84
+ end
85
+ end
86
+
87
+ context 'when wrong code_challenge is blank' do
88
+ it do
89
+ expect do
90
+ subject.verify_code_verifier! 'wrong'
91
+ end.to raise_error Rack::OAuth2::Server::Token::BadRequest, /invalid_grant/
92
+ end
93
+ end
94
+
95
+ context 'when code_challenge is nil' do
96
+ it do
97
+ expect do
98
+ subject.verify_code_verifier! nil
99
+ end.to raise_error Rack::OAuth2::Server::Token::BadRequest, /invalid_grant/
100
+ end
101
+ end
102
+
103
+ context 'when unknown code_challenge_method is given' do
104
+ it do
105
+ expect do
106
+ subject.verify_code_verifier! code_challenge, :unknown
107
+ end.to raise_error Rack::OAuth2::Server::Token::BadRequest, /invalid_grant/
108
+ end
109
+ end
110
+ end
111
+ end
112
+
113
+ context 'otherwise' do
114
+ before do
115
+ request.post '/', params: default_params
116
+ end
117
+ its(:code_verifier) { should == nil }
118
+
119
+ describe '#verify_code_verifier!' do
120
+ context 'when code_verifier is given with code_challenge_method=plain' do
121
+ it do
122
+ expect do
123
+ subject.verify_code_verifier! code_verifier, :plain
124
+ end.to raise_error Rack::OAuth2::Server::Token::BadRequest, /invalid_grant/
125
+ end
126
+ end
127
+
128
+ context 'when collect code_challenge is given' do
129
+ it do
130
+ expect do
131
+ subject.verify_code_verifier! code_challenge
132
+ end.to raise_error Rack::OAuth2::Server::Token::BadRequest, /invalid_grant/
133
+ end
134
+ end
135
+
136
+ context 'when wrong code_challenge is blank' do
137
+ it do
138
+ expect do
139
+ subject.verify_code_verifier! 'wrong'
140
+ end.to raise_error Rack::OAuth2::Server::Token::BadRequest, /invalid_grant/
141
+ end
142
+ end
143
+
144
+ context 'when code_challenge is nil' do
145
+ it do
146
+ expect do
147
+ subject.verify_code_verifier! nil
148
+ end.not_to raise_error
149
+ end
150
+ end
151
+
152
+ context 'when unknown code_challenge_method is given' do
153
+ it do
154
+ expect do
155
+ subject.verify_code_verifier! code_challenge, :unknown
156
+ end.to raise_error Rack::OAuth2::Server::Token::BadRequest, /invalid_grant/
157
+ end
158
+ end
159
+ end
160
+ end
161
+ end
162
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-oauth2
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - nov matake
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-14 00:00:00.000000000 Z
11
+ date: 2017-01-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -261,6 +261,7 @@ files:
261
261
  - spec/rack/oauth2/server/authorize/extensions/code_and_token_spec.rb
262
262
  - spec/rack/oauth2/server/authorize/token_spec.rb
263
263
  - spec/rack/oauth2/server/authorize_spec.rb
264
+ - spec/rack/oauth2/server/extension/pkce_spec.rb
264
265
  - spec/rack/oauth2/server/resource/bearer/error_spec.rb
265
266
  - spec/rack/oauth2/server/resource/bearer_spec.rb
266
267
  - spec/rack/oauth2/server/resource/error_spec.rb
@@ -339,6 +340,7 @@ test_files:
339
340
  - spec/rack/oauth2/server/authorize/extensions/code_and_token_spec.rb
340
341
  - spec/rack/oauth2/server/authorize/token_spec.rb
341
342
  - spec/rack/oauth2/server/authorize_spec.rb
343
+ - spec/rack/oauth2/server/extension/pkce_spec.rb
342
344
  - spec/rack/oauth2/server/resource/bearer/error_spec.rb
343
345
  - spec/rack/oauth2/server/resource/bearer_spec.rb
344
346
  - spec/rack/oauth2/server/resource/error_spec.rb