songkick-oauth2-provider 0.10.2 → 0.10.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/History.txt +7 -0
- data/README.rdoc +18 -11
- data/example/README.rdoc +1 -1
- data/example/application.rb +9 -9
- data/example/schema.rb +1 -1
- data/example/views/authorize.erb +2 -2
- data/example/views/layout.erb +4 -4
- data/example/views/login.erb +2 -2
- data/example/views/new_client.erb +1 -1
- data/example/views/new_user.erb +1 -1
- data/lib/songkick/oauth2/model.rb +8 -6
- data/lib/songkick/oauth2/model/authorization.rb +31 -31
- data/lib/songkick/oauth2/model/client.rb +15 -15
- data/lib/songkick/oauth2/model/client_owner.rb +2 -2
- data/lib/songkick/oauth2/model/hashing.rb +3 -3
- data/lib/songkick/oauth2/model/helpers.rb +16 -0
- data/lib/songkick/oauth2/model/resource_owner.rb +4 -4
- data/lib/songkick/oauth2/provider.rb +16 -16
- data/lib/songkick/oauth2/provider/access_token.rb +20 -15
- data/lib/songkick/oauth2/provider/authorization.rb +43 -42
- data/lib/songkick/oauth2/provider/error.rb +4 -4
- data/lib/songkick/oauth2/provider/exchange.rb +46 -46
- data/lib/songkick/oauth2/router.rb +13 -13
- data/lib/songkick/oauth2/schema.rb +11 -3
- data/lib/songkick/oauth2/schema/20120828112156_songkick_oauth2_schema_original_schema.rb +2 -2
- data/lib/songkick/oauth2/schema/20121024180930_songkick_oauth2_schema_add_authorization_index.rb +3 -3
- data/lib/songkick/oauth2/schema/20121025180447_songkick_oauth2_schema_add_unique_indexes.rb +7 -7
- data/spec/request_helpers.rb +25 -21
- data/spec/songkick/oauth2/model/authorization_spec.rb +56 -56
- data/spec/songkick/oauth2/model/client_spec.rb +9 -9
- data/spec/songkick/oauth2/model/helpers_spec.rb +26 -0
- data/spec/songkick/oauth2/model/resource_owner_spec.rb +13 -13
- data/spec/songkick/oauth2/provider/access_token_spec.rb +32 -20
- data/spec/songkick/oauth2/provider/authorization_spec.rb +73 -62
- data/spec/songkick/oauth2/provider/exchange_spec.rb +72 -72
- data/spec/songkick/oauth2/provider_spec.rb +101 -101
- data/spec/spec_helper.rb +5 -3
- data/spec/test_app/helper.rb +11 -7
- data/spec/test_app/provider/application.rb +12 -12
- data/spec/test_app/provider/views/authorize.erb +2 -2
- metadata +71 -93
@@ -4,26 +4,26 @@ describe Songkick::OAuth2::Provider::AccessToken do
|
|
4
4
|
before do
|
5
5
|
@alice = TestApp::User['Alice']
|
6
6
|
@bob = TestApp::User['Bob']
|
7
|
-
|
7
|
+
|
8
8
|
create_authorization(
|
9
9
|
:owner => @alice,
|
10
10
|
:client => Factory(:client),
|
11
11
|
:scope => 'profile',
|
12
12
|
:access_token => 'sesame')
|
13
|
-
|
13
|
+
|
14
14
|
@authorization = create_authorization(
|
15
15
|
:owner => @bob,
|
16
16
|
:client => Factory(:client),
|
17
17
|
:scope => 'profile',
|
18
18
|
:access_token => 'magic-key')
|
19
|
-
|
19
|
+
|
20
20
|
Songkick::OAuth2::Provider.realm = 'Demo App'
|
21
21
|
end
|
22
|
-
|
22
|
+
|
23
23
|
let :token do
|
24
24
|
Songkick::OAuth2::Provider::AccessToken.new(@bob, ['profile'], 'magic-key')
|
25
25
|
end
|
26
|
-
|
26
|
+
|
27
27
|
shared_examples_for "valid token" do
|
28
28
|
it "is valid" do
|
29
29
|
token.should be_valid
|
@@ -38,7 +38,7 @@ describe Songkick::OAuth2::Provider::AccessToken do
|
|
38
38
|
token.owner.should == @bob
|
39
39
|
end
|
40
40
|
end
|
41
|
-
|
41
|
+
|
42
42
|
shared_examples_for "invalid token" do
|
43
43
|
it "is not valid" do
|
44
44
|
token.should_not be_valid
|
@@ -47,77 +47,89 @@ describe Songkick::OAuth2::Provider::AccessToken do
|
|
47
47
|
token.owner.should be_nil
|
48
48
|
end
|
49
49
|
end
|
50
|
-
|
50
|
+
|
51
51
|
describe "with the right user, scope and token" do
|
52
52
|
it_should_behave_like "valid token"
|
53
53
|
end
|
54
|
-
|
54
|
+
|
55
|
+
describe "with an implicit user" do
|
56
|
+
let :token do
|
57
|
+
Songkick::OAuth2::Provider::AccessToken.new(:implicit, ['profile'], 'magic-key')
|
58
|
+
end
|
59
|
+
it_should_behave_like "valid token"
|
60
|
+
end
|
61
|
+
|
55
62
|
describe "with no user" do
|
56
63
|
let :token do
|
57
64
|
Songkick::OAuth2::Provider::AccessToken.new(nil, ['profile'], 'magic-key')
|
58
65
|
end
|
59
|
-
it_should_behave_like "
|
66
|
+
it_should_behave_like "invalid token"
|
67
|
+
|
68
|
+
it "returns an error response" do
|
69
|
+
token.response_headers['WWW-Authenticate'].should == "OAuth realm='Demo App', error='invalid_token'"
|
70
|
+
token.response_status.should == 401
|
71
|
+
end
|
60
72
|
end
|
61
|
-
|
73
|
+
|
62
74
|
describe "with less scope than was granted" do
|
63
75
|
let :token do
|
64
76
|
Songkick::OAuth2::Provider::AccessToken.new(@bob, [], 'magic-key')
|
65
77
|
end
|
66
78
|
it_should_behave_like "valid token"
|
67
79
|
end
|
68
|
-
|
80
|
+
|
69
81
|
describe "when the authorization has expired" do
|
70
82
|
before { @authorization.update_attribute(:expires_at, 1.hour.ago) }
|
71
83
|
it_should_behave_like "invalid token"
|
72
|
-
|
84
|
+
|
73
85
|
it "returns an error response" do
|
74
86
|
token.response_headers['WWW-Authenticate'].should == "OAuth realm='Demo App', error='expired_token'"
|
75
87
|
token.response_status.should == 401
|
76
88
|
end
|
77
89
|
end
|
78
|
-
|
90
|
+
|
79
91
|
describe "with a non-existent token" do
|
80
92
|
let :token do
|
81
93
|
Songkick::OAuth2::Provider::AccessToken.new(@bob, ['profile'], 'is-the-password-books')
|
82
94
|
end
|
83
95
|
it_should_behave_like "invalid token"
|
84
|
-
|
96
|
+
|
85
97
|
it "returns an error response" do
|
86
98
|
token.response_headers['WWW-Authenticate'].should == "OAuth realm='Demo App', error='invalid_token'"
|
87
99
|
token.response_status.should == 401
|
88
100
|
end
|
89
101
|
end
|
90
|
-
|
102
|
+
|
91
103
|
describe "with a token for the wrong user" do
|
92
104
|
let :token do
|
93
105
|
Songkick::OAuth2::Provider::AccessToken.new(@bob, ['profile'], 'sesame')
|
94
106
|
end
|
95
107
|
it_should_behave_like "invalid token"
|
96
|
-
|
108
|
+
|
97
109
|
it "returns an error response" do
|
98
110
|
token.response_headers['WWW-Authenticate'].should == "OAuth realm='Demo App', error='insufficient_scope'"
|
99
111
|
token.response_status.should == 403
|
100
112
|
end
|
101
113
|
end
|
102
|
-
|
114
|
+
|
103
115
|
describe "with a token for an ungranted scope" do
|
104
116
|
let :token do
|
105
117
|
Songkick::OAuth2::Provider::AccessToken.new(@bob, ['offline_access'], 'magic-key')
|
106
118
|
end
|
107
119
|
it_should_behave_like "invalid token"
|
108
|
-
|
120
|
+
|
109
121
|
it "returns an error response" do
|
110
122
|
token.response_headers['WWW-Authenticate'].should == "OAuth realm='Demo App', error='insufficient_scope'"
|
111
123
|
token.response_status.should == 403
|
112
124
|
end
|
113
125
|
end
|
114
|
-
|
126
|
+
|
115
127
|
describe "with no token string" do
|
116
128
|
let :token do
|
117
129
|
Songkick::OAuth2::Provider::AccessToken.new(@bob, ['profile'], nil)
|
118
130
|
end
|
119
131
|
it_should_behave_like "invalid token"
|
120
|
-
|
132
|
+
|
121
133
|
it "returns an error response" do
|
122
134
|
token.response_headers['WWW-Authenticate'].should == "OAuth realm='Demo App'"
|
123
135
|
token.response_status.should == 401
|
@@ -2,157 +2,168 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Songkick::OAuth2::Provider::Authorization do
|
4
4
|
let(:resource_owner) { TestApp::User['Bob'] }
|
5
|
-
|
5
|
+
|
6
6
|
let(:authorization) { Songkick::OAuth2::Provider::Authorization.new(resource_owner, params) }
|
7
|
-
|
7
|
+
|
8
8
|
let(:params) { { 'response_type' => 'code',
|
9
9
|
'client_id' => @client.client_id,
|
10
10
|
'redirect_uri' => @client.redirect_uri }
|
11
11
|
}
|
12
|
-
|
12
|
+
|
13
13
|
before do
|
14
14
|
@client = Factory(:client)
|
15
15
|
Songkick::OAuth2.stub(:random_string).and_return('s1', 's2', 's3')
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
describe "with valid parameters" do
|
19
19
|
it "is valid" do
|
20
20
|
authorization.error.should be_nil
|
21
21
|
end
|
22
22
|
end
|
23
|
-
|
23
|
+
|
24
24
|
describe "with the scope parameter" do
|
25
25
|
before { params['scope'] = 'foo bar qux' }
|
26
|
-
|
26
|
+
|
27
27
|
it "exposes the scope as a list of strings" do
|
28
28
|
authorization.scopes.should == Set.new(%w[foo bar qux])
|
29
29
|
end
|
30
|
-
|
30
|
+
|
31
31
|
it "exposes the scopes the client has not yet granted" do
|
32
32
|
authorization.unauthorized_scopes.should == Set.new(%w[foo bar qux])
|
33
33
|
end
|
34
|
-
|
34
|
+
|
35
35
|
describe "when the owner has already authorized the client" do
|
36
36
|
before do
|
37
37
|
create_authorization(:owner => resource_owner, :client => @client, :scope => 'foo bar')
|
38
38
|
end
|
39
|
-
|
39
|
+
|
40
40
|
it "exposes the scope as a list of strings" do
|
41
41
|
authorization.scopes.should == Set.new(%w[foo bar qux])
|
42
42
|
end
|
43
|
-
|
43
|
+
|
44
44
|
it "exposes the scopes the client has not yet granted" do
|
45
45
|
authorization.unauthorized_scopes.should == %w[qux]
|
46
46
|
end
|
47
47
|
end
|
48
48
|
end
|
49
|
-
|
49
|
+
|
50
50
|
describe "missing response_type" do
|
51
51
|
before { params.delete('response_type') }
|
52
|
-
|
52
|
+
|
53
53
|
it "is invalid" do
|
54
54
|
authorization.error.should == "invalid_request"
|
55
55
|
authorization.error_description.should == "Missing required parameter response_type"
|
56
56
|
end
|
57
57
|
end
|
58
|
-
|
58
|
+
|
59
59
|
describe "with a bad response_type" do
|
60
60
|
before { params['response_type'] = "no_such_type" }
|
61
|
-
|
61
|
+
|
62
62
|
it "is invalid" do
|
63
63
|
authorization.error.should == "unsupported_response_type"
|
64
64
|
authorization.error_description.should == "Response type no_such_type is not supported"
|
65
65
|
end
|
66
|
-
|
66
|
+
|
67
67
|
it "causes a redirect" do
|
68
68
|
authorization.should be_redirect
|
69
69
|
authorization.redirect_uri.should == "https://client.example.com/cb?error=unsupported_response_type&error_description=Response+type+no_such_type+is+not+supported"
|
70
70
|
end
|
71
71
|
end
|
72
|
-
|
72
|
+
|
73
73
|
describe "missing client_id" do
|
74
74
|
before { params.delete('client_id') }
|
75
|
-
|
75
|
+
|
76
76
|
it "is invalid" do
|
77
77
|
authorization.error.should == "invalid_request"
|
78
78
|
authorization.error_description.should == "Missing required parameter client_id"
|
79
79
|
end
|
80
|
-
|
80
|
+
|
81
81
|
it "does not cause a redirect" do
|
82
82
|
authorization.should_not be_redirect
|
83
83
|
end
|
84
84
|
end
|
85
|
-
|
85
|
+
|
86
86
|
describe "with an unknown client_id" do
|
87
87
|
before { params['client_id'] = "unknown" }
|
88
|
-
|
88
|
+
|
89
89
|
it "is invalid" do
|
90
90
|
authorization.error.should == "invalid_client"
|
91
91
|
authorization.error_description.should == "Unknown client ID unknown"
|
92
92
|
end
|
93
|
-
|
93
|
+
|
94
94
|
it "does not cause a redirect" do
|
95
95
|
authorization.should_not be_redirect
|
96
96
|
end
|
97
97
|
end
|
98
|
-
|
98
|
+
|
99
99
|
describe "missing redirect_uri" do
|
100
100
|
before { params.delete('redirect_uri') }
|
101
|
-
|
101
|
+
|
102
102
|
it "is invalid" do
|
103
103
|
authorization.error.should == "invalid_request"
|
104
104
|
authorization.error_description.should == "Missing required parameter redirect_uri"
|
105
105
|
end
|
106
|
-
|
106
|
+
|
107
107
|
it "causes a redirect to the client's registered redirect_uri" do
|
108
108
|
authorization.should be_redirect
|
109
109
|
authorization.redirect_uri.should == "https://client.example.com/cb?error=invalid_request&error_description=Missing+required+parameter+redirect_uri"
|
110
110
|
end
|
111
111
|
end
|
112
|
-
|
112
|
+
|
113
113
|
describe "with a mismatched redirect_uri" do
|
114
114
|
before { params['redirect_uri'] = "http://songkick.com" }
|
115
|
-
|
115
|
+
|
116
116
|
it "is invalid" do
|
117
117
|
authorization.error.should == "redirect_uri_mismatch"
|
118
118
|
authorization.error_description.should == "Parameter redirect_uri does not match registered URI"
|
119
119
|
end
|
120
|
-
|
120
|
+
|
121
121
|
it "causes a redirect to the client's registered redirect_uri" do
|
122
122
|
authorization.should be_redirect
|
123
123
|
authorization.redirect_uri.should == "https://client.example.com/cb?error=redirect_uri_mismatch&error_description=Parameter+redirect_uri+does+not+match+registered+URI"
|
124
124
|
end
|
125
|
-
|
125
|
+
|
126
126
|
describe "when the client has not registered a redirect_uri" do
|
127
127
|
before { @client.update_attribute(:redirect_uri, nil) }
|
128
|
-
|
128
|
+
|
129
129
|
it "is valid" do
|
130
130
|
authorization.error.should be_nil
|
131
131
|
end
|
132
132
|
end
|
133
133
|
end
|
134
|
-
|
134
|
+
|
135
|
+
describe "with a redirect_uri with parameters" do
|
136
|
+
before do
|
137
|
+
authorization.client.redirect_uri = "http://songkick.com?some_parameter"
|
138
|
+
params['redirect_uri'] = "http://songkick.com?some_parameter"
|
139
|
+
end
|
140
|
+
|
141
|
+
it "adds the extra parameters with & instead of ?" do
|
142
|
+
authorization.redirect_uri.should == "http://songkick.com?some_parameter&"
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
135
146
|
# http://en.wikipedia.org/wiki/HTTP_response_splitting
|
136
147
|
# scope and state values are passed back in the redirect
|
137
|
-
|
148
|
+
|
138
149
|
describe "with an illegal scope" do
|
139
150
|
before { params['scope'] = "http\r\nsplitter" }
|
140
|
-
|
151
|
+
|
141
152
|
it "is invalid" do
|
142
153
|
authorization.error.should == "invalid_request"
|
143
154
|
authorization.error_description.should == "Illegal value for scope parameter"
|
144
155
|
end
|
145
156
|
end
|
146
|
-
|
157
|
+
|
147
158
|
describe "with an illegal state" do
|
148
159
|
before { params['state'] = "http\r\nsplitter" }
|
149
|
-
|
160
|
+
|
150
161
|
it "is invalid" do
|
151
162
|
authorization.error.should == "invalid_request"
|
152
163
|
authorization.error_description.should == "Illegal value for state parameter"
|
153
164
|
end
|
154
165
|
end
|
155
|
-
|
166
|
+
|
156
167
|
describe "#grant_access!" do
|
157
168
|
describe "when there is an existing authorization with no code" do
|
158
169
|
before do
|
@@ -161,7 +172,7 @@ describe Songkick::OAuth2::Provider::Authorization do
|
|
161
172
|
:client => @client,
|
162
173
|
:code => nil)
|
163
174
|
end
|
164
|
-
|
175
|
+
|
165
176
|
it "generates and returns a code to the client" do
|
166
177
|
authorization.grant_access!
|
167
178
|
@model.reload
|
@@ -169,7 +180,7 @@ describe Songkick::OAuth2::Provider::Authorization do
|
|
169
180
|
authorization.code.should == "s1"
|
170
181
|
end
|
171
182
|
end
|
172
|
-
|
183
|
+
|
173
184
|
describe "when there is an existing authorization with scopes" do
|
174
185
|
before do
|
175
186
|
@model = create_authorization(
|
@@ -177,17 +188,17 @@ describe Songkick::OAuth2::Provider::Authorization do
|
|
177
188
|
:client => @client,
|
178
189
|
:code => nil,
|
179
190
|
:scope => 'foo bar')
|
180
|
-
|
191
|
+
|
181
192
|
params['scope'] = 'qux'
|
182
193
|
end
|
183
|
-
|
194
|
+
|
184
195
|
it "merges the new scopes with the existing ones" do
|
185
196
|
authorization.grant_access!
|
186
197
|
@model.reload
|
187
198
|
@model.scopes.should == Set.new(%w[foo bar qux])
|
188
199
|
end
|
189
200
|
end
|
190
|
-
|
201
|
+
|
191
202
|
describe "when there is an existing expired authorization" do
|
192
203
|
before do
|
193
204
|
@model = create_authorization(
|
@@ -197,26 +208,26 @@ describe Songkick::OAuth2::Provider::Authorization do
|
|
197
208
|
:code => 'existing_code',
|
198
209
|
:scope => 'foo bar')
|
199
210
|
end
|
200
|
-
|
211
|
+
|
201
212
|
it "renews the authorization" do
|
202
213
|
authorization.grant_access!
|
203
214
|
@model.reload
|
204
215
|
@model.expires_at.should be_nil
|
205
216
|
end
|
206
|
-
|
217
|
+
|
207
218
|
it "returns a code to the client" do
|
208
219
|
authorization.grant_access!
|
209
220
|
authorization.code.should == "existing_code"
|
210
221
|
authorization.access_token.should be_nil
|
211
222
|
end
|
212
|
-
|
223
|
+
|
213
224
|
it "sets the expiry time if a duration is given" do
|
214
225
|
authorization.grant_access!(:duration => 1.hour)
|
215
226
|
@model.reload
|
216
227
|
@model.expires_in.should == 3600
|
217
228
|
authorization.expires_in.should == 3600
|
218
229
|
end
|
219
|
-
|
230
|
+
|
220
231
|
it "augments the scope" do
|
221
232
|
params['scope'] = 'qux'
|
222
233
|
authorization.grant_access!
|
@@ -224,29 +235,29 @@ describe Songkick::OAuth2::Provider::Authorization do
|
|
224
235
|
@model.scopes.should == Set.new(%w[foo bar qux])
|
225
236
|
end
|
226
237
|
end
|
227
|
-
|
238
|
+
|
228
239
|
describe "for code requests" do
|
229
240
|
before do
|
230
241
|
params['response_type'] = 'code'
|
231
242
|
params['scope'] = 'foo bar'
|
232
243
|
end
|
233
|
-
|
244
|
+
|
234
245
|
it "makes the authorization redirect" do
|
235
246
|
authorization.grant_access!
|
236
247
|
authorization.client.should_not be_nil
|
237
248
|
authorization.should be_redirect
|
238
249
|
end
|
239
|
-
|
250
|
+
|
240
251
|
it "creates a code for the authorization" do
|
241
252
|
authorization.grant_access!
|
242
253
|
authorization.code.should == "s1"
|
243
254
|
authorization.access_token.should be_nil
|
244
255
|
authorization.expires_in.should be_nil
|
245
256
|
end
|
246
|
-
|
257
|
+
|
247
258
|
it "creates an Authorization in the database" do
|
248
259
|
authorization.grant_access!
|
249
|
-
|
260
|
+
|
250
261
|
authorization = Songkick::OAuth2::Model::Authorization.first
|
251
262
|
authorization.owner.should == resource_owner
|
252
263
|
authorization.client.should == @client
|
@@ -254,10 +265,10 @@ describe Songkick::OAuth2::Provider::Authorization do
|
|
254
265
|
authorization.scopes.should == Set.new(%w[foo bar])
|
255
266
|
end
|
256
267
|
end
|
257
|
-
|
268
|
+
|
258
269
|
describe "for token requests" do
|
259
270
|
before { params['response_type'] = 'token' }
|
260
|
-
|
271
|
+
|
261
272
|
it "creates a token for the authorization" do
|
262
273
|
authorization.grant_access!
|
263
274
|
authorization.code.should be_nil
|
@@ -265,10 +276,10 @@ describe Songkick::OAuth2::Provider::Authorization do
|
|
265
276
|
authorization.refresh_token.should == "s2"
|
266
277
|
authorization.expires_in.should be_nil
|
267
278
|
end
|
268
|
-
|
279
|
+
|
269
280
|
it "creates an Authorization in the database" do
|
270
281
|
authorization.grant_access!
|
271
|
-
|
282
|
+
|
272
283
|
authorization = Songkick::OAuth2::Model::Authorization.first
|
273
284
|
authorization.owner.should == resource_owner
|
274
285
|
authorization.client.should == @client
|
@@ -277,10 +288,10 @@ describe Songkick::OAuth2::Provider::Authorization do
|
|
277
288
|
authorization.refresh_token_hash.should == Songkick::OAuth2.hashify("s2")
|
278
289
|
end
|
279
290
|
end
|
280
|
-
|
291
|
+
|
281
292
|
describe "for code_and_token requests" do
|
282
293
|
before { params['response_type'] = 'code_and_token' }
|
283
|
-
|
294
|
+
|
284
295
|
it "creates a code and token for the authorization" do
|
285
296
|
authorization.grant_access!
|
286
297
|
authorization.code.should == "s1"
|
@@ -288,10 +299,10 @@ describe Songkick::OAuth2::Provider::Authorization do
|
|
288
299
|
authorization.refresh_token.should == "s3"
|
289
300
|
authorization.expires_in.should be_nil
|
290
301
|
end
|
291
|
-
|
302
|
+
|
292
303
|
it "creates an Authorization in the database" do
|
293
304
|
authorization.grant_access!
|
294
|
-
|
305
|
+
|
295
306
|
authorization = Songkick::OAuth2::Model::Authorization.first
|
296
307
|
authorization.owner.should == resource_owner
|
297
308
|
authorization.client.should == @client
|
@@ -301,27 +312,27 @@ describe Songkick::OAuth2::Provider::Authorization do
|
|
301
312
|
end
|
302
313
|
end
|
303
314
|
end
|
304
|
-
|
315
|
+
|
305
316
|
describe "#deny_access!" do
|
306
317
|
it "puts the authorization in an error state" do
|
307
318
|
authorization.deny_access!
|
308
319
|
authorization.error.should == "access_denied"
|
309
320
|
authorization.error_description.should == "The user denied you access"
|
310
321
|
end
|
311
|
-
|
322
|
+
|
312
323
|
it "does not create an Authorization" do
|
313
324
|
Songkick::OAuth2::Model::Authorization.should_not_receive(:create)
|
314
325
|
Songkick::OAuth2::Model::Authorization.should_not_receive(:new)
|
315
326
|
authorization.deny_access!
|
316
327
|
end
|
317
328
|
end
|
318
|
-
|
329
|
+
|
319
330
|
describe "#params" do
|
320
331
|
before do
|
321
332
|
params['scope'] = params['state'] = 'valid'
|
322
333
|
params['controller'] = 'invalid'
|
323
334
|
end
|
324
|
-
|
335
|
+
|
325
336
|
it "only exposes OAuth-related parameters" do
|
326
337
|
authorization.params.should == {
|
327
338
|
'response_type' => 'code',
|
@@ -331,7 +342,7 @@ describe Songkick::OAuth2::Provider::Authorization do
|
|
331
342
|
'scope' => 'valid'
|
332
343
|
}
|
333
344
|
end
|
334
|
-
|
345
|
+
|
335
346
|
it "does not expose parameters with no value" do
|
336
347
|
params.delete('scope')
|
337
348
|
authorization.params.should == {
|