Skip to content

Commit b7deeb0

Browse files
author
Michael Bleigh
committed
Updating OAuth2 authorization mode a bit, first round.
1 parent 41dfcb2 commit b7deeb0

File tree

5 files changed

+40
-24
lines changed

5 files changed

+40
-24
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,6 @@ coverage
1919
pkg
2020
.rvmrc
2121
.bundle
22+
dist
2223

2324
## PROJECT::SPECIFIC

Gemfile.lock

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
PATH
22
remote: .
33
specs:
4-
grape (0.1.3)
4+
grape (0.1.4)
55
multi_json
66
multi_xml
77
rack
@@ -11,12 +11,11 @@ PATH
1111
GEM
1212
remote: http://rubygems.org/
1313
specs:
14+
ZenTest (4.5.0)
1415
diff-lcs (1.1.2)
1516
json_pure (1.4.3)
1617
maruku (0.6.0)
1718
syntax (>= 1.0.0)
18-
mg (0.0.8)
19-
rake
2019
multi_json (0.0.5)
2120
multi_xml (0.2.2)
2221
rack (1.2.1)
@@ -26,26 +25,26 @@ GEM
2625
rack (>= 1.0.0)
2726
rack-test (0.5.4)
2827
rack (>= 1.0)
29-
rake (0.8.7)
30-
rspec (2.5.0)
31-
rspec-core (~> 2.5.0)
32-
rspec-expectations (~> 2.5.0)
33-
rspec-mocks (~> 2.5.0)
34-
rspec-core (2.5.1)
35-
rspec-expectations (2.5.0)
28+
rspec (2.6.0)
29+
rspec-core (~> 2.6.0)
30+
rspec-expectations (~> 2.6.0)
31+
rspec-mocks (~> 2.6.0)
32+
rspec-core (2.6.0)
33+
rspec-expectations (2.6.0)
3634
diff-lcs (~> 1.1.2)
37-
rspec-mocks (2.5.0)
35+
rspec-mocks (2.6.0)
3836
syntax (1.0.0)
3937
yard (0.6.1)
4038

4139
PLATFORMS
4240
ruby
4341

4442
DEPENDENCIES
43+
ZenTest
44+
bundler
4545
grape!
4646
json_pure
4747
maruku
48-
mg
4948
rack-test
50-
rspec (~> 2.5.0)
49+
rspec (~> 2.6.0)
5150
yard

grape.gemspec

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,13 @@ Gem::Specification.new do |s|
1919
s.add_runtime_dependency 'multi_json'
2020
s.add_runtime_dependency 'multi_xml'
2121

22-
s.add_development_dependency 'mg'
2322
s.add_development_dependency 'maruku'
2423
s.add_development_dependency 'yard'
2524
s.add_development_dependency 'rack-test'
26-
s.add_development_dependency 'rspec', '~> 2.5.0'
25+
s.add_development_dependency 'rspec', '~> 2.6.0'
2726
s.add_development_dependency 'json_pure'
27+
s.add_development_dependency 'ZenTest'
28+
s.add_development_dependency 'bundler'
2829

2930
s.files = `git ls-files`.split("\n")
3031
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")

lib/grape/middleware/auth/oauth2.rb

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,31 @@ class OAuth2 < Grape::Middleware::Base
33
def default_options
44
{
55
:token_class => 'AccessToken',
6-
:realm => 'OAuth API'
6+
:realm => 'OAuth API',
7+
:parameter => %w(bearer_token oauth_token),
8+
:header => [/Bearer (.*)/i, /OAuth (.*)/i]
79
}
810
end
911

1012
def before
11-
if request['oauth_token']
12-
verify_token(request['oauth_token'])
13-
elsif env['Authorization'] && t = parse_authorization_header
14-
verify_token(t)
13+
verify_token(token_parameter || token_header)
14+
end
15+
16+
def token_parameter
17+
Array(options[:parameter]).each do |p|
18+
return request[p] if request[p]
1519
end
20+
nil
21+
end
22+
23+
def token_header
24+
return false unless env['Authorization']
25+
Array(options[:header]).each do |regexp|
26+
if env['Authorization'] =~ regexp
27+
return $1
28+
end
29+
end
30+
nil
1631
end
1732

1833
def token_class
@@ -21,7 +36,7 @@ def token_class
2136

2237
def verify_token(token)
2338
if token = token_class.verify(token)
24-
if token.expired?
39+
if token.respond_to?(:expired?) && token.expired?
2540
error_out(401, 'expired_token')
2641
else
2742
if token.permission_for?(env)
@@ -43,7 +58,7 @@ def parse_authorization_header
4358

4459
def error_out(status, error)
4560
throw :error, {
46-
:message => 'The token provided has expired.',
61+
:message => error,
4762
:status => status,
4863
:headers => {
4964
'WWW-Authenticate' => "OAuth realm='#{options[:realm]}', error='#{error}'"
@@ -52,4 +67,4 @@ def error_out(status, error)
5267
end
5368
end
5469
end
55-
70+

spec/grape/middleware/auth/oauth2_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,4 +85,4 @@ def app
8585
it { @err[:headers]['WWW-Authenticate'].should == "OAuth realm='OAuth API', error='insufficient_scope'" }
8686
it { @err[:status].should == 403 }
8787
end
88-
end
88+
end

0 commit comments

Comments
 (0)