loyal_warden 0.0.5
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/Gemfile +11 -0
- data/History.rdoc +150 -0
- data/LICENSE +20 -0
- data/README.textile +9 -0
- data/Rakefile +12 -0
- data/lib/loyal_warden.rb +2 -0
- data/lib/warden.rb +45 -0
- data/lib/warden/config.rb +112 -0
- data/lib/warden/errors.rb +66 -0
- data/lib/warden/hooks.rb +211 -0
- data/lib/warden/manager.rb +136 -0
- data/lib/warden/mixins/common.rb +44 -0
- data/lib/warden/proxy.rb +371 -0
- data/lib/warden/session_serializer.rb +52 -0
- data/lib/warden/strategies.rb +47 -0
- data/lib/warden/strategies/base.rb +175 -0
- data/lib/warden/test/helpers.rb +36 -0
- data/lib/warden/test/warden_helpers.rb +43 -0
- data/lib/warden/version.rb +4 -0
- data/loyal_warden.gemspec +26 -0
- data/spec/helpers/request_helper.rb +51 -0
- data/spec/helpers/strategies/failz.rb +8 -0
- data/spec/helpers/strategies/invalid.rb +8 -0
- data/spec/helpers/strategies/pass.rb +8 -0
- data/spec/helpers/strategies/pass_with_message.rb +8 -0
- data/spec/helpers/strategies/password.rb +13 -0
- data/spec/helpers/strategies/single.rb +12 -0
- data/spec/spec_helper.rb +24 -0
- data/spec/warden/authenticated_data_store_spec.rb +114 -0
- data/spec/warden/config_spec.rb +48 -0
- data/spec/warden/errors_spec.rb +47 -0
- data/spec/warden/hooks_spec.rb +373 -0
- data/spec/warden/manager_spec.rb +316 -0
- data/spec/warden/proxy_spec.rb +1041 -0
- data/spec/warden/scoped_session_serializer.rb +123 -0
- data/spec/warden/session_serializer_spec.rb +53 -0
- data/spec/warden/strategies/base_spec.rb +313 -0
- data/spec/warden/strategies_spec.rb +93 -0
- data/spec/warden/test/helpers_spec.rb +93 -0
- data/spec/warden/test/test_mode_spec.rb +76 -0
- data/warden.gemspec +24 -0
- metadata +105 -0
@@ -0,0 +1,93 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Warden::Strategies do
|
5
|
+
it "should let me add a strategy via a block" do
|
6
|
+
Warden::Strategies.add(:strategy1) do
|
7
|
+
def authenticate!
|
8
|
+
success("foo")
|
9
|
+
end
|
10
|
+
end
|
11
|
+
Warden::Strategies[:strategy1].ancestors.should include(Warden::Strategies::Base)
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should raise an error if I add a strategy via a block, that does not have an authenticate! method" do
|
15
|
+
lambda do
|
16
|
+
Warden::Strategies.add(:strategy2) do
|
17
|
+
end
|
18
|
+
end.should raise_error
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should raise an error if I add a strategy that does not extend Warden::Strategies::Base" do
|
22
|
+
non_base = Class.new do
|
23
|
+
def authenticate!
|
24
|
+
end
|
25
|
+
end
|
26
|
+
expect do
|
27
|
+
Warden::Strategies.add(:strategy_non_base, non_base)
|
28
|
+
end.to raise_error(/is not a Warden::Strategies::Base/)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should allow me to get access to a particular strategy" do
|
32
|
+
Warden::Strategies.add(:strategy3) do
|
33
|
+
def authenticate!; end
|
34
|
+
end
|
35
|
+
strategy = Warden::Strategies[:strategy3]
|
36
|
+
strategy.should_not be_nil
|
37
|
+
strategy.ancestors.should include(Warden::Strategies::Base)
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should allow me to add a strategy with the required methods" do
|
41
|
+
class MyStrategy < Warden::Strategies::Base
|
42
|
+
def authenticate!; end
|
43
|
+
end
|
44
|
+
lambda do
|
45
|
+
Warden::Strategies.add(:strategy4, MyStrategy)
|
46
|
+
end.should_not raise_error
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should not allow a strategy that does not have an authenticate! method" do
|
50
|
+
class MyOtherStrategy
|
51
|
+
end
|
52
|
+
lambda do
|
53
|
+
Warden::Strategies.add(:strategy5, MyOtherStrategy)
|
54
|
+
end.should raise_error
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should allow me to change a class when providing a block and class" do
|
58
|
+
class MyStrategy < Warden::Strategies::Base
|
59
|
+
end
|
60
|
+
|
61
|
+
Warden::Strategies.add(:foo, MyStrategy) do
|
62
|
+
def authenticate!; end
|
63
|
+
end
|
64
|
+
|
65
|
+
Warden::Strategies[:foo].ancestors.should include(MyStrategy)
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should allow me to update a previously given strategy" do
|
69
|
+
class MyStrategy < Warden::Strategies::Base
|
70
|
+
def authenticate!; end
|
71
|
+
end
|
72
|
+
|
73
|
+
Warden::Strategies.add(:strategy6, MyStrategy)
|
74
|
+
|
75
|
+
new_module = Module.new
|
76
|
+
Warden::Strategies.update(:strategy6) do
|
77
|
+
include new_module
|
78
|
+
end
|
79
|
+
|
80
|
+
Warden::Strategies[:strategy6].ancestors.should include(new_module)
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should allow me to clear the strategies" do
|
84
|
+
Warden::Strategies.add(:foobar) do
|
85
|
+
def authenticate!
|
86
|
+
:foo
|
87
|
+
end
|
88
|
+
end
|
89
|
+
Warden::Strategies[:foobar].should_not be_nil
|
90
|
+
Warden::Strategies.clear!
|
91
|
+
Warden::Strategies[:foobar].should be_nil
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Warden::Test::Helpers do
|
5
|
+
before{ $captures = [] }
|
6
|
+
after{ Warden.test_reset! }
|
7
|
+
|
8
|
+
it "should log me in as a user" do
|
9
|
+
user = "A User"
|
10
|
+
login_as user
|
11
|
+
app = lambda{|e|
|
12
|
+
$captures << :run
|
13
|
+
e['warden'].should be_authenticated
|
14
|
+
e['warden'].user.should == "A User"
|
15
|
+
valid_response
|
16
|
+
}
|
17
|
+
setup_rack(app).call(env_with_params)
|
18
|
+
$captures.should == [:run]
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should log me in as a user of a given scope" do
|
22
|
+
user = {:some => "user"}
|
23
|
+
login_as user, :scope => :foo_scope
|
24
|
+
app = lambda{|e|
|
25
|
+
$captures << :run
|
26
|
+
w = e['warden']
|
27
|
+
w.should be_authenticated(:foo_scope)
|
28
|
+
w.user(:foo_scope).should == {:some => "user"}
|
29
|
+
}
|
30
|
+
setup_rack(app).call(env_with_params)
|
31
|
+
$captures.should == [:run]
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should login multiple users with different scopes" do
|
35
|
+
user = "A user"
|
36
|
+
foo_user = "A foo user"
|
37
|
+
login_as user
|
38
|
+
login_as foo_user, :scope => :foo
|
39
|
+
app = lambda{|e|
|
40
|
+
$captures << :run
|
41
|
+
w = e['warden']
|
42
|
+
w.user.should == "A user"
|
43
|
+
w.user(:foo).should == "A foo user"
|
44
|
+
w.should be_authenticated
|
45
|
+
w.should be_authenticated(:foo)
|
46
|
+
}
|
47
|
+
setup_rack(app).call(env_with_params)
|
48
|
+
$captures.should == [:run]
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should log out all users" do
|
52
|
+
user = "A user"
|
53
|
+
foo = "Foo"
|
54
|
+
login_as user
|
55
|
+
login_as foo, :scope => :foo
|
56
|
+
app = lambda{|e|
|
57
|
+
$captures << :run
|
58
|
+
w = e['warden']
|
59
|
+
w.user.should == "A user"
|
60
|
+
w.user(:foo).should == "Foo"
|
61
|
+
w.logout
|
62
|
+
w.user.should be_nil
|
63
|
+
w.user(:foo).should be_nil
|
64
|
+
w.should_not be_authenticated
|
65
|
+
w.should_not be_authenticated(:foo)
|
66
|
+
}
|
67
|
+
setup_rack(app).call(env_with_params)
|
68
|
+
$captures.should == [:run]
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should logout a specific user" do
|
72
|
+
user = "A User"
|
73
|
+
foo = "Foo"
|
74
|
+
login_as user
|
75
|
+
login_as foo, :scope => :foo
|
76
|
+
app = lambda{|e|
|
77
|
+
$captures << :run
|
78
|
+
w = e['warden']
|
79
|
+
w.logout :foo
|
80
|
+
w.user.should == "A User"
|
81
|
+
w.user(:foo).should be_nil
|
82
|
+
w.should_not be_authenticated(:foo)
|
83
|
+
}
|
84
|
+
setup_rack(app).call(env_with_params)
|
85
|
+
$captures.should == [:run]
|
86
|
+
end
|
87
|
+
|
88
|
+
describe "#asset_paths" do
|
89
|
+
it "should default asset_paths to anything asset path regex" do
|
90
|
+
Warden.asset_paths.should == [/^\/assets\//]
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Warden::Test::WardenHelpers do
|
5
|
+
before :all do
|
6
|
+
Warden.test_mode!
|
7
|
+
end
|
8
|
+
|
9
|
+
before do
|
10
|
+
$captures = []
|
11
|
+
@app = lambda{|e| valid_response }
|
12
|
+
end
|
13
|
+
|
14
|
+
after do
|
15
|
+
Warden.test_reset!
|
16
|
+
end
|
17
|
+
|
18
|
+
it{ Warden.should respond_to(:test_mode!) }
|
19
|
+
it{ Warden.should respond_to(:on_next_request) }
|
20
|
+
it{ Warden.should respond_to(:test_reset!) }
|
21
|
+
|
22
|
+
it "should execute the on_next_request block on the next request" do
|
23
|
+
Warden.on_next_request do |warden|
|
24
|
+
$captures << warden
|
25
|
+
end
|
26
|
+
|
27
|
+
setup_rack(@app).call(env_with_params)
|
28
|
+
$captures.should have(1).item
|
29
|
+
$captures.first.should be_an_instance_of(Warden::Proxy)
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should execute many on_next_request blocks on the next request" do
|
33
|
+
Warden.on_next_request{|w| $captures << :first }
|
34
|
+
Warden.on_next_request{|w| $captures << :second }
|
35
|
+
setup_rack(@app).call(env_with_params)
|
36
|
+
$captures.should have(2).items
|
37
|
+
$captures.should == [:first, :second]
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should not execute on_next_request blocks on subsequent requests" do
|
41
|
+
app = setup_rack(@app)
|
42
|
+
Warden.on_next_request{|w| $captures << :first }
|
43
|
+
app.call(env_with_params)
|
44
|
+
$captures.should == [:first]
|
45
|
+
$captures.clear
|
46
|
+
app.call(env_with_params)
|
47
|
+
$captures.should be_empty
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should allow me to set new_on_next_request items to execute in the same test" do
|
51
|
+
app = setup_rack(@app)
|
52
|
+
Warden.on_next_request{|w| $captures << :first }
|
53
|
+
app.call(env_with_params)
|
54
|
+
$captures.should == [:first]
|
55
|
+
Warden.on_next_request{|w| $captures << :second }
|
56
|
+
app.call(env_with_params)
|
57
|
+
$captures.should == [:first, :second]
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should remove the on_next_request items when test is reset" do
|
61
|
+
app = setup_rack(@app)
|
62
|
+
Warden.on_next_request{|w| $captures << :first }
|
63
|
+
Warden.test_reset!
|
64
|
+
app.call(env_with_params)
|
65
|
+
$captures.should == []
|
66
|
+
end
|
67
|
+
|
68
|
+
context "asset requests" do
|
69
|
+
it "should not execute on_next_request blocks if this is an asset request" do
|
70
|
+
app = setup_rack(@app)
|
71
|
+
Warden.on_next_request{|w| $captures << :first }
|
72
|
+
app.call(env_with_params("/assets/fun.gif"))
|
73
|
+
$captures.should == []
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
data/warden.gemspec
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require './lib/warden/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = %q{warden}
|
7
|
+
s.version = Warden::VERSION.dup
|
8
|
+
s.authors = ["Daniel Neighman"]
|
9
|
+
s.email = %q{has.sox@gmail.com}
|
10
|
+
s.license = "MIT"
|
11
|
+
s.extra_rdoc_files = [
|
12
|
+
"LICENSE",
|
13
|
+
"README.textile"
|
14
|
+
]
|
15
|
+
s.files = Dir["**/*"] - Dir["*.gem"] - ["Gemfile.lock"]
|
16
|
+
s.homepage = %q{http://github.com/hassox/warden}
|
17
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
18
|
+
s.require_paths = ["lib"]
|
19
|
+
s.rubyforge_project = %q{warden}
|
20
|
+
s.rubygems_version = %q{1.3.7}
|
21
|
+
s.summary = %q{Rack middleware that provides authentication for rack applications}
|
22
|
+
s.add_dependency "rack", ">= 1.0"
|
23
|
+
end
|
24
|
+
|
metadata
ADDED
@@ -0,0 +1,105 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: loyal_warden
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.5
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Daniel Neighman
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-08-01 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rack
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ">="
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '1.0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.0'
|
30
|
+
description:
|
31
|
+
email: has.sox@gmail.com
|
32
|
+
executables: []
|
33
|
+
extensions: []
|
34
|
+
extra_rdoc_files:
|
35
|
+
- LICENSE
|
36
|
+
- README.textile
|
37
|
+
files:
|
38
|
+
- loyal_warden.gemspec
|
39
|
+
- lib/warden/strategies/base.rb
|
40
|
+
- lib/warden/proxy.rb
|
41
|
+
- lib/warden/mixins/common.rb
|
42
|
+
- lib/warden/test/helpers.rb
|
43
|
+
- lib/warden/test/warden_helpers.rb
|
44
|
+
- lib/warden/config.rb
|
45
|
+
- lib/warden/hooks.rb
|
46
|
+
- lib/warden/version.rb
|
47
|
+
- lib/warden/strategies.rb
|
48
|
+
- lib/warden/manager.rb
|
49
|
+
- lib/warden/errors.rb
|
50
|
+
- lib/warden/session_serializer.rb
|
51
|
+
- lib/warden.rb
|
52
|
+
- lib/loyal_warden.rb
|
53
|
+
- warden.gemspec
|
54
|
+
- History.rdoc
|
55
|
+
- spec/warden/hooks_spec.rb
|
56
|
+
- spec/warden/manager_spec.rb
|
57
|
+
- spec/warden/strategies/base_spec.rb
|
58
|
+
- spec/warden/config_spec.rb
|
59
|
+
- spec/warden/test/test_mode_spec.rb
|
60
|
+
- spec/warden/test/helpers_spec.rb
|
61
|
+
- spec/warden/proxy_spec.rb
|
62
|
+
- spec/warden/session_serializer_spec.rb
|
63
|
+
- spec/warden/scoped_session_serializer.rb
|
64
|
+
- spec/warden/strategies_spec.rb
|
65
|
+
- spec/warden/errors_spec.rb
|
66
|
+
- spec/warden/authenticated_data_store_spec.rb
|
67
|
+
- spec/helpers/strategies/password.rb
|
68
|
+
- spec/helpers/strategies/failz.rb
|
69
|
+
- spec/helpers/strategies/single.rb
|
70
|
+
- spec/helpers/strategies/invalid.rb
|
71
|
+
- spec/helpers/strategies/pass.rb
|
72
|
+
- spec/helpers/strategies/pass_with_message.rb
|
73
|
+
- spec/helpers/request_helper.rb
|
74
|
+
- spec/spec_helper.rb
|
75
|
+
- LICENSE
|
76
|
+
- Gemfile
|
77
|
+
- Rakefile
|
78
|
+
- README.textile
|
79
|
+
homepage: http://github.com/hassox/warden
|
80
|
+
licenses:
|
81
|
+
- MIT
|
82
|
+
post_install_message:
|
83
|
+
rdoc_options:
|
84
|
+
- "--charset=UTF-8"
|
85
|
+
require_paths:
|
86
|
+
- lib
|
87
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
88
|
+
none: false
|
89
|
+
requirements:
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '0'
|
93
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ">="
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
requirements: []
|
100
|
+
rubyforge_project: warden
|
101
|
+
rubygems_version: 1.8.25
|
102
|
+
signing_key:
|
103
|
+
specification_version: 3
|
104
|
+
summary: Rack middleware that provides authentication for rack applications
|
105
|
+
test_files: []
|