rack-cerberus 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. data/README.md +11 -0
  2. data/cerberus.gemspec +1 -1
  3. data/cerberus.rb +1 -1
  4. data/spec.rb +6 -6
  5. metadata +4 -4
data/README.md CHANGED
@@ -50,6 +50,16 @@ If you want to see a concrete example, go into the Cerberus directory and run:
50
50
 
51
51
  It's gonna start the example at http://localhost:9292
52
52
 
53
+ You can also use the 3rd argument which is the request object:
54
+
55
+ use Cerberus, {:company_name => 'Nintendo'} do |login, pass, req|
56
+ pass=='secret' && req.xhr?
57
+ end
58
+
59
+ This is more if you use it as a gateway for an API or something and you want to check other values.
60
+ Like the referer or another parameter.
61
+ But bear in mind that `cerberus_login` and `cerberus_pass` are still mandatory.
62
+
53
63
  Logout
54
64
  ------
55
65
 
@@ -74,6 +84,7 @@ Changelog
74
84
  0.1.5 Fix CSS and Javascript for IE (Yes I'm too kind)
75
85
  0.1.6 Send an Array instead of a string to Rack so that it works on Ruby 1.9
76
86
  0.2.0 External CSS file + `:text_color` option + keep details after login failure
87
+ 0.3.0 Now sends request as a 3rd argument to the block
77
88
 
78
89
  Copyright
79
90
  ---------
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'rack-cerberus'
3
- s.version = "0.2.0"
3
+ s.version = "0.3.0"
4
4
  s.platform = Gem::Platform::RUBY
5
5
  s.summary = "A Rack middleware for form-based authentication"
6
6
  s.description = "A Rack middleware for form-based authentication. Aim is a compromise between fonctionality, beauty and customization."
@@ -85,7 +85,7 @@ PAGE
85
85
  login = req['cerberus_login']
86
86
  pass = req['cerberus_pass']
87
87
  err = req.post? ? "<p class='err'>Wrong login or password</p>" : ''
88
- if ((env['rack.session']['cerberus_user']!=nil && env['PATH_INFO']!='/logout') || (login && pass && @block.call(login, pass)))
88
+ if ((env['rack.session']['cerberus_user']!=nil && env['PATH_INFO']!='/logout') || (login && pass && @block.call(login, pass, req)))
89
89
  env['rack.session']['cerberus_user'] ||= login
90
90
  if env['PATH_INFO']=='/logout'
91
91
  res = Rack::Response.new(env)
data/spec.rb CHANGED
@@ -9,9 +9,9 @@ Bacon.summary_on_exit
9
9
  describe 'cerberus' do
10
10
 
11
11
  secret_app = lambda {|env| [200, {'Content-Type'=>'text/plain'}, env['rack.session'].inspect] }
12
- app = Rack::Session::Cookie.new(Cerberus.new(secret_app, {}) {|login,pass| [login,pass]==['mario','bros']})
12
+ app = Rack::Session::Cookie.new(Cerberus.new(secret_app, {}) {|login,pass| [login,pass]==['mario@nintendo.com','bros']})
13
13
  req = Rack::MockRequest.new(app)
14
- app_with_css = app = Rack::Session::Cookie.new(Cerberus.new(secret_app, {:css_location=>'/main.css'}) {|login,pass| [login,pass]==['mario','bros']})
14
+ app_with_css = Rack::Session::Cookie.new(Cerberus.new(secret_app, {:css_location=>'/main.css'}) {|login,pass| [login,pass]==['mario','bros']})
15
15
  req_with_css = Rack::MockRequest.new(app_with_css)
16
16
  cookie = ''
17
17
 
@@ -37,7 +37,7 @@ describe 'cerberus' do
37
37
  end
38
38
 
39
39
  should 'Give access with the appropriate login and pass' do
40
- res = req.get('/', :params => {'cerberus_login' => 'mario', 'cerberus_pass' => 'bros'})
40
+ res = req.get('/', :params => {'cerberus_login' => 'mario@nintendo.com', 'cerberus_pass' => 'bros'})
41
41
  cookie = res["Set-Cookie"]
42
42
  res.status.should==200
43
43
  end
@@ -45,7 +45,7 @@ describe 'cerberus' do
45
45
  should 'Use session for persistent login' do
46
46
  res = req.get('/', "HTTP_COOKIE" => cookie)
47
47
  res.status.should==200
48
- res.body.should=='{"cerberus_user"=>"mario"}'
48
+ res.body.should=='{"cerberus_user"=>"mario@nintendo.com"}'
49
49
  cookie = res["Set-Cookie"]
50
50
  req.get('/', "HTTP_COOKIE" => cookie).status.should==200
51
51
  end
@@ -59,12 +59,12 @@ describe 'cerberus' do
59
59
  end
60
60
 
61
61
  should 'Not send not_found when logging after a logout (because the path is /logout)' do
62
- res = req.get('/logout', :params => {'cerberus_login' => 'mario', 'cerberus_pass' => 'bros'})
62
+ res = req.get('/logout', :params => {'cerberus_login' => 'mario@nintendo.com', 'cerberus_pass' => 'bros'})
63
63
  res.status.should==302
64
64
  res['Location'].should=='/'
65
65
 
66
66
  req = Rack::MockRequest.new(Rack::URLMap.new({'/backend' => app}))
67
- res = req.get('/backend/logout', :params => {'cerberus_login' => 'mario', 'cerberus_pass' => 'bros'})
67
+ res = req.get('/backend/logout', :params => {'cerberus_login' => 'mario@nintendo.com', 'cerberus_pass' => 'bros'})
68
68
  res.status.should==302
69
69
  res['Location'].should=='/backend'
70
70
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-cerberus
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 2
8
+ - 3
9
9
  - 0
10
- version: 0.2.0
10
+ version: 0.3.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Mickael Riga
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-07-07 00:00:00 +01:00
18
+ date: 2011-10-07 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies: []
21
21