auth 0.0.5 → 0.0.6

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.
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ *0.0.6*
2
+
3
+ * Added a Rack middleware
4
+
1
5
  *0.0.4*
2
6
 
3
7
  * Fixed some problems related to exception handling
@@ -0,0 +1,49 @@
1
+ require 'rubygems'
2
+ require 'rack'
3
+ require 'rack/auth/abstract/handler'
4
+ require 'rack/auth/abstract/request'
5
+ require 'auth'
6
+
7
+ module Auth
8
+ class Middleware < Rack::Auth::AbstractHandler
9
+
10
+ def call(env)
11
+ auth = Request.new(env)
12
+
13
+ return unauthorized unless auth.provided?
14
+ return bad_request unless auth.bearer?
15
+
16
+ if valid?(auth)
17
+ env['REMOTE_USER'] = auth.account_id
18
+ return @app.call(env)
19
+ end
20
+
21
+ unauthorized
22
+ end
23
+
24
+ private
25
+
26
+ def challenge
27
+ 'Bearer realm="%s"' % realm
28
+ end
29
+
30
+ def valid?(auth)
31
+ auth.account_id ? true : false
32
+ end
33
+
34
+ class Request < Rack::Auth::AbstractRequest
35
+ def bearer?
36
+ :bearer == scheme
37
+ end
38
+
39
+ def access_token
40
+ @access_token ||= params.unpack("m*").first
41
+ end
42
+
43
+ def account_id
44
+ @account_id ||= Auth.validate_token(access_token)
45
+ end
46
+ end
47
+
48
+ end
49
+ end
@@ -1,3 +1,3 @@
1
1
  module Auth
2
- Version = VERSION = '0.0.5'
2
+ Version = VERSION = '0.0.6'
3
3
  end
@@ -0,0 +1,52 @@
1
+ require File.expand_path('test/test_helper')
2
+ require 'auth/middleware'
3
+
4
+ class MiddlewareTest < Test::Unit::TestCase
5
+ include Rack::Test::Methods
6
+
7
+ def app
8
+ inner_app = lambda { |env| [200, {'Content-Type' => 'text/plain'}, [env['REMOTE_USER']]] }
9
+ Auth::Middleware.new(inner_app, 'Test realm')
10
+ end
11
+
12
+ def setup
13
+ Auth.redis.flushall
14
+ end
15
+
16
+ def test_unauthenticated_request
17
+ env = Rack::MockRequest.env_for('/test')
18
+ res = app.call(env)
19
+ assert_equal 401, res[0]
20
+ assert_equal 'Bearer realm="Test realm"', res[1]['WWW-Authenticate']
21
+ assert_empty res[2]
22
+ end
23
+
24
+ def test_authenticated_request
25
+ token = Auth.issue_token('test-user')
26
+ env = Rack::MockRequest.env_for('/test',
27
+ 'HTTP_AUTHORIZATION' => "Bearer #{Base64.encode64(token)}")
28
+ res = app.call(env)
29
+ assert_equal 200, res[0]
30
+ assert_equal nil, res[1]['WWW-Authenticate']
31
+ assert_equal ['test-user'], res[2]
32
+ end
33
+
34
+ def test_authenticated_non_bearer_request
35
+ env = Rack::MockRequest.env_for('/test',
36
+ 'HTTP_AUTHORIZATION' => "Basic #{Base64.encode64('test')}")
37
+ res = app.call(env)
38
+ assert_equal 400, res[0]
39
+ assert_equal nil, res[1]['WWW-Authenticate']
40
+ assert_empty res[2]
41
+ end
42
+
43
+ def test_authenticated_invalid_request
44
+ env = Rack::MockRequest.env_for('/test',
45
+ 'HTTP_AUTHORIZATION' => "Bearer #{Base64.encode64('wrong')}")
46
+ res = app.call(env)
47
+ assert_equal 401, res[0]
48
+ assert_equal 'Bearer realm="Test realm"', res[1]['WWW-Authenticate']
49
+ assert_empty res[2]
50
+ end
51
+
52
+ end
metadata CHANGED
@@ -1,12 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: auth
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 0
8
- - 5
9
- version: 0.0.5
4
+ prerelease:
5
+ version: 0.0.6
10
6
  platform: ruby
11
7
  authors:
12
8
  - Niklas Holmgren
@@ -14,8 +10,7 @@ autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
12
 
17
- date: 2011-10-16 00:00:00 +02:00
18
- default_executable:
13
+ date: 2011-12-19 00:00:00 Z
19
14
  dependencies:
20
15
  - !ruby/object:Gem::Dependency
21
16
  name: json
@@ -25,10 +20,6 @@ dependencies:
25
20
  requirements:
26
21
  - - ">"
27
22
  - !ruby/object:Gem::Version
28
- segments:
29
- - 1
30
- - 0
31
- - 0
32
23
  version: 1.0.0
33
24
  type: :runtime
34
25
  version_requirements: *id001
@@ -40,10 +31,6 @@ dependencies:
40
31
  requirements:
41
32
  - - ">"
42
33
  - !ruby/object:Gem::Version
43
- segments:
44
- - 1
45
- - 0
46
- - 0
47
34
  version: 1.0.0
48
35
  type: :runtime
49
36
  version_requirements: *id002
@@ -55,10 +42,6 @@ dependencies:
55
42
  requirements:
56
43
  - - ">"
57
44
  - !ruby/object:Gem::Version
58
- segments:
59
- - 1
60
- - 0
61
- - 0
62
45
  version: 1.0.0
63
46
  type: :runtime
64
47
  version_requirements: *id003
@@ -70,10 +53,6 @@ dependencies:
70
53
  requirements:
71
54
  - - ">"
72
55
  - !ruby/object:Gem::Version
73
- segments:
74
- - 2
75
- - 0
76
- - 0
77
56
  version: 2.0.0
78
57
  type: :runtime
79
58
  version_requirements: *id004
@@ -85,10 +64,6 @@ dependencies:
85
64
  requirements:
86
65
  - - ">"
87
66
  - !ruby/object:Gem::Version
88
- segments:
89
- - 0
90
- - 8
91
- - 0
92
67
  version: 0.8.0
93
68
  type: :runtime
94
69
  version_requirements: *id005
@@ -100,10 +75,6 @@ dependencies:
100
75
  requirements:
101
76
  - - ">"
102
77
  - !ruby/object:Gem::Version
103
- segments:
104
- - 0
105
- - 5
106
- - 6
107
78
  version: 0.5.6
108
79
  type: :development
109
80
  version_requirements: *id006
@@ -124,16 +95,17 @@ files:
124
95
  - lib/auth/client.rb
125
96
  - lib/auth/exceptions.rb
126
97
  - lib/auth/helpers.rb
98
+ - lib/auth/middleware.rb
127
99
  - lib/auth/sentry.rb
128
100
  - lib/auth/server/views/authorize.erb
129
101
  - lib/auth/server.rb
130
102
  - lib/auth/version.rb
131
103
  - lib/auth.rb
132
104
  - test/auth_test.rb
105
+ - test/middleware_test.rb
133
106
  - test/redis-test.conf
134
107
  - test/server_test.rb
135
108
  - test/test_helper.rb
136
- has_rdoc: true
137
109
  homepage: http://github.com/sutajio/auth/
138
110
  licenses: []
139
111
 
@@ -147,21 +119,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
147
119
  requirements:
148
120
  - - ">="
149
121
  - !ruby/object:Gem::Version
150
- segments:
151
- - 0
152
122
  version: "0"
153
123
  required_rubygems_version: !ruby/object:Gem::Requirement
154
124
  none: false
155
125
  requirements:
156
126
  - - ">="
157
127
  - !ruby/object:Gem::Version
158
- segments:
159
- - 0
160
128
  version: "0"
161
129
  requirements: []
162
130
 
163
131
  rubyforge_project:
164
- rubygems_version: 1.3.7
132
+ rubygems_version: 1.8.11
165
133
  signing_key:
166
134
  specification_version: 3
167
135
  summary: Auth is a Redis-backed high performance OAuth2 authorization server.