rampart 0.0.1

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f7f671c521eb37138ab8ae7d6e8bca7cdbfbae36
4
+ data.tar.gz: 745af300f91eedec10fa175c2e8ac4e4b73e2290
5
+ SHA512:
6
+ metadata.gz: 153d9ceb7ff8f6ff8365e0b70b716f4fa269b2481f4495ee1f3cdb0c17acc783d4f18753697a98780ec1adac864fe1c4021e82debab63e2a8fa64788d7db9884
7
+ data.tar.gz: 6817403ff5c859720a291b728b7260780be92534442acb1571897a89ce16605ef69d0f414fc8544c4168a9ef5e92611570c9925a043d624a8cc5f8b8e4e2f9eb
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ Guardfile
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in rampart.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Erik Lott
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,29 @@
1
+ # Rampart
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'rampart'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install rampart
18
+
19
+ ## Usage
20
+
21
+ TODO: Write usage instructions here
22
+
23
+ ## Contributing
24
+
25
+ 1. Fork it ( http://github.com/<my-github-username>/rampart/fork )
26
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
27
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
28
+ 4. Push to the branch (`git push origin my-new-feature`)
29
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,28 @@
1
+ require "rampart/strategy_manager"
2
+ require "rampart/proxy"
3
+ require "rampart/user_store"
4
+ require "rampart/session"
5
+
6
+ module Rampart
7
+ class Auth
8
+ def initialize(app, strategies: {}, serializer: Proc.new{|u| u.id}, session_key: "rampart_session_id")
9
+ @app = app
10
+ @strategies = strategies
11
+ @serializer = serializer
12
+ @session_key = session_key
13
+ end
14
+
15
+ def call(env)
16
+ strategy_manager = StrategyManager.new(env)
17
+ @strategies.each { |k,v| strategy_manager.register(k,v) }
18
+ proxy = Proxy.new(strategy_manager, UserStore.new(Session.new(env), @serializer))
19
+
20
+ env["rampart.session.key"] = @session_key
21
+ env["rampart"] = proxy
22
+
23
+ catch(:rampart) do
24
+ app.call(env)
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,24 @@
1
+ require "rampart/response"
2
+
3
+ module Rampart
4
+ class FailEvent
5
+ def initialize(message="Not Authorized")
6
+ @message = message
7
+ end
8
+
9
+ def halt?
10
+ true
11
+ end
12
+
13
+ def success?
14
+ false
15
+ end
16
+
17
+ def to_truple
18
+ response = Response.new
19
+ response.write(@message)
20
+ response.status = 401
21
+ response.finish
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,11 @@
1
+ module Rampart
2
+ class PassEvent
3
+ def halt?
4
+ false
5
+ end
6
+
7
+ def success?
8
+ false
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,25 @@
1
+ require "rampart/response"
2
+
3
+ module Rampart
4
+ class RedirectEvent
5
+ def initialize(url, status=302)
6
+ @url = url
7
+ @status = status
8
+ end
9
+
10
+ def halt?
11
+ true
12
+ end
13
+
14
+ def success?
15
+ false
16
+ end
17
+
18
+ def to_truple
19
+ response = Response.new
20
+ response.write("Redirecting to: #{@url}")
21
+ response.redirect(@url, @status)
22
+ response.finish
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,17 @@
1
+ module Rampart
2
+ class SuccessEvent
3
+ attr_reader :user
4
+
5
+ def initialize(user)
6
+ @user = user
7
+ end
8
+
9
+ def halt?
10
+ true
11
+ end
12
+
13
+ def success?
14
+ true
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,32 @@
1
+ module Rampart
2
+ class Proxy
3
+ def initialize(strategy_manager, user_store)
4
+ @strategy_manager = strategy_manager
5
+ @user_store = user_store
6
+ end
7
+
8
+ def authenticate!(names)
9
+ event = @strategy_manager.authenticate!(names)
10
+ if event.success?
11
+ set_user(event.user)
12
+ event.user
13
+ else
14
+ throw(:rampart, event.to_truple)
15
+ end
16
+ end
17
+
18
+ def authenticate(names)
19
+ event = @strategy_manager.authenticate!(names)
20
+ if event.success?
21
+ set_user(event.user)
22
+ event.user
23
+ else
24
+ nil
25
+ end
26
+ end
27
+
28
+ def set_user(user)
29
+ @user_store.store(user)
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,10 @@
1
+ require "rack/request"
2
+ require "rampart/session"
3
+
4
+ module Rampart
5
+ class Request < ::Rack::Request
6
+ def cred_session
7
+ Session.new(@env)
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,6 @@
1
+ require "rack/response"
2
+ require "rack/body_proxy"
3
+
4
+ module Rampart
5
+ class Response < ::Rack::Response; end
6
+ end
@@ -0,0 +1,29 @@
1
+ module Rampart
2
+ class Session
3
+ def initialize(env)
4
+ @env = env
5
+ end
6
+
7
+ def store(user_id)
8
+ session[session_key] = user_id
9
+ end
10
+
11
+ def fetch
12
+ session[session_key]
13
+ end
14
+
15
+ def delete
16
+ session[session_key] = nil
17
+ end
18
+
19
+ private
20
+
21
+ def session
22
+ @env["rack.session"]
23
+ end
24
+
25
+ def session_key
26
+ @env["rampart.session.key"]
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,34 @@
1
+ require "rampart/events/success_event"
2
+ require "rampart/events/fail_event"
3
+ require "rampart/events/redirect_event"
4
+ require "rampart/events/pass_event"
5
+
6
+ module Rampart
7
+ module Strategy
8
+ def authenticate!(req)
9
+ fail!
10
+ end
11
+
12
+ def valid?(req)
13
+ true
14
+ end
15
+
16
+ private
17
+
18
+ def success!(*args)
19
+ SuccessEvent.new(*args)
20
+ end
21
+
22
+ def fail!(*args)
23
+ FailEvent.new(*args)
24
+ end
25
+
26
+ def redirect!(*args)
27
+ RedirectEvent.new(*args)
28
+ end
29
+
30
+ def pass(*args)
31
+ PassEvent.new(*args)
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,38 @@
1
+ require "rampart/request"
2
+ require "rampart/events/fail_event"
3
+
4
+ module Rampart
5
+ class StrategyManager
6
+ def initialize(env)
7
+ @env = env
8
+ @strategies = {}
9
+ end
10
+
11
+ def register(name, strategy)
12
+ raise(ArgumentError, "strategy name already registered: '#{name}'") if @strategies.key?(name)
13
+ @strategies[name] = strategy
14
+ end
15
+
16
+ def authenticate!(*names)
17
+ winning_event = FailEvent.new
18
+ request = Request.new(@env)
19
+ names.each do |name|
20
+ strategy = fetch(name)
21
+ next unless strategy.valid?(request)
22
+ event = strategy.authenticate!(request)
23
+ if event.halt?
24
+ winning_event = event
25
+ break
26
+ end
27
+ end
28
+ winning_event
29
+ end
30
+
31
+ private
32
+
33
+ def fetch(name)
34
+ raise(ArgumentError, "Strategy not registered: '#{name}'") unless @strategies.key?(name)
35
+ @strategies[name]
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,12 @@
1
+ module Rampart
2
+ module UserStore
3
+ def initialize(session, user_serializer)
4
+ @session = session
5
+ @user_serializer = user_serializer
6
+ end
7
+
8
+ def store(user)
9
+ @session.store(@serializer.call(user))
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,3 @@
1
+ module Rampart
2
+ VERSION = "0.0.1"
3
+ end
data/lib/rampart.rb ADDED
@@ -0,0 +1,4 @@
1
+ require "rampart/version"
2
+
3
+ module Rampart
4
+ end
data/rampart.gemspec ADDED
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'rampart/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "rampart"
8
+ spec.version = Rampart::VERSION
9
+ spec.authors = ["Erik Lott"]
10
+ spec.email = ["erik.lott@kodio.io"]
11
+ spec.summary = %q{Rack authentication middleware}
12
+ spec.homepage = ""
13
+ spec.license = "MIT"
14
+
15
+ spec.files = `git ls-files -z`.split("\x0")
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_dependency "rack", "~> 1.5.2"
21
+
22
+ spec.add_development_dependency "bundler", "~> 1.5"
23
+ spec.add_development_dependency "rake"
24
+ end
@@ -0,0 +1,37 @@
1
+ require "spec_helper"
2
+ require "rampart/events/fail_event"
3
+
4
+ describe Rampart::FailEvent do
5
+ describe "::new" do
6
+ it "has default message" do
7
+ event = Rampart::FailEvent.new()
8
+ status, headers, body = event.to_truple
9
+ body.body.must_equal(["Not Authorized"])
10
+ end
11
+
12
+ it "receives message param" do
13
+ event = Rampart::FailEvent.new("Hello World")
14
+ status, headers, body = event.to_truple
15
+ body.body.must_equal(["Hello World"])
16
+ end
17
+ end
18
+
19
+ it "halts" do
20
+ event = Rampart::FailEvent.new
21
+ event.halt?.must_equal(true)
22
+ end
23
+
24
+ it "isn't successful" do
25
+ event = Rampart::FailEvent.new
26
+ event.success?.must_equal(false)
27
+ end
28
+
29
+ it "can return rack truple" do
30
+ event = Rampart::FailEvent.new
31
+ status, headers, body = event.to_truple
32
+
33
+ status.must_equal(401)
34
+ headers.must_equal({"Content-Length"=>"14"})
35
+ body.body.must_equal(["Not Authorized"])
36
+ end
37
+ end
@@ -0,0 +1,14 @@
1
+ require "spec_helper"
2
+ require "rampart/events/pass_event"
3
+
4
+ describe Rampart::PassEvent do
5
+ it "doesn't halt" do
6
+ event = Rampart::PassEvent.new
7
+ event.halt?.must_equal(false)
8
+ end
9
+
10
+ it "isn't successful" do
11
+ event = Rampart::PassEvent.new
12
+ event.success?.must_equal(false)
13
+ end
14
+ end
@@ -0,0 +1,43 @@
1
+ require "spec_helper"
2
+ require "rampart/events/redirect_event"
3
+
4
+ describe Rampart::RedirectEvent do
5
+ describe "::new" do
6
+ it "receives url parameter" do
7
+ event = Rampart::RedirectEvent.new("http://www.kodio.io")
8
+ status, headers, body = event.to_truple
9
+ headers["Location"].must_equal("http://www.kodio.io")
10
+ end
11
+
12
+ it "receives optional status parameter" do
13
+ event = Rampart::RedirectEvent.new("http://www.kodio.io", 302)
14
+ status, headers, body = event.to_truple
15
+ status.must_equal(302)
16
+ end
17
+
18
+ it "defaults status to 302" do
19
+ event = Rampart::RedirectEvent.new("http://www.kodio.io")
20
+ status, headers, body = event.to_truple
21
+ status.must_equal(302)
22
+ end
23
+ end
24
+
25
+ it "halts" do
26
+ event = Rampart::RedirectEvent.new("http://www.kodio.io")
27
+ event.halt?.must_equal(true)
28
+ end
29
+
30
+ it "isn't successful" do
31
+ event = Rampart::RedirectEvent.new("http://www.kodio.io")
32
+ event.success?.must_equal(false)
33
+ end
34
+
35
+ it "can return rack truple" do
36
+ event = Rampart::RedirectEvent.new("http://www.kodio.io", 301)
37
+ status, headers, body = event.to_truple
38
+
39
+ status.must_equal(301)
40
+ headers.must_equal({"Content-Length"=>"35", "Location"=>"http://www.kodio.io"})
41
+ body.body.must_equal(["Redirecting to: http://www.kodio.io"])
42
+ end
43
+ end
@@ -0,0 +1,25 @@
1
+ require "spec_helper"
2
+ require "rampart/events/success_event"
3
+
4
+ describe Rampart::SuccessEvent do
5
+ it "receives user" do
6
+ user = Object.new
7
+ event = Rampart::SuccessEvent.new(user)
8
+ event.user.must_equal(user)
9
+ end
10
+
11
+ it "halts" do
12
+ event = define_success_event
13
+ event.halt?.must_equal(true)
14
+ end
15
+
16
+ it "is successful" do
17
+ event = define_success_event
18
+ event.success?.must_equal(true)
19
+ end
20
+
21
+ def define_success_event(user=nil)
22
+ user ||= Object.new
23
+ Rampart::SuccessEvent.new(user)
24
+ end
25
+ end
@@ -0,0 +1,61 @@
1
+ require "spec_helper"
2
+ require "rampart/proxy"
3
+
4
+ describe Rampart::Proxy do
5
+ describe "#authenticate!" do
6
+ it "returns user when successful" do
7
+ user = Object.new
8
+
9
+ strategy_manager = define_strategy_manager
10
+ strategy_manager.register(:basic, define_succeeding_strategy(user))
11
+
12
+ user_store = MiniTest::Mock.new
13
+ user_store.expect(:store, true, [Object])
14
+
15
+ proxy = Rampart::Proxy.new(strategy_manager, user_store)
16
+ proxy.authenticate!(:basic).must_equal(user)
17
+ end
18
+
19
+ it "throws rack truple when not successful" do
20
+ user = Object.new
21
+
22
+ strategy_manager = define_strategy_manager
23
+ strategy_manager.register(:basic, define_failing_strategy)
24
+
25
+ user_store = MiniTest::Mock.new
26
+ user_store.expect(:store, true, [Object])
27
+
28
+ proxy = Rampart::Proxy.new(strategy_manager, user_store)
29
+ response = catch(:rampart){ proxy.authenticate!(:basic) }
30
+ response.must_be_instance_of(Array)
31
+ end
32
+ end
33
+
34
+ describe "#authenticate" do
35
+ it "returns user when successful" do
36
+ user = Object.new
37
+
38
+ strategy_manager = define_strategy_manager
39
+ strategy_manager.register(:basic, define_succeeding_strategy(user))
40
+
41
+ user_store = MiniTest::Mock.new
42
+ user_store.expect(:store, true, [Object])
43
+
44
+ proxy = Rampart::Proxy.new(strategy_manager, user_store)
45
+ proxy.authenticate(:basic).must_equal(user)
46
+ end
47
+
48
+ it "returns nil when not successful" do
49
+ user = Object.new
50
+
51
+ strategy_manager = define_strategy_manager
52
+ strategy_manager.register(:basic, define_failing_strategy)
53
+
54
+ user_store = MiniTest::Mock.new
55
+ user_store.expect(:store, true, [Object])
56
+
57
+ proxy = Rampart::Proxy.new(strategy_manager, user_store)
58
+ proxy.authenticate(:basic).must_be_nil
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,34 @@
1
+ require "spec_helper"
2
+ require "rampart/session"
3
+
4
+ describe Rampart::Session do
5
+ it "can store session" do
6
+ env = {
7
+ "rampart.session.key" => :user_id,
8
+ "rack.session" => {}
9
+ }
10
+ session = Rampart::Session.new(env)
11
+ user_id = 123
12
+ session.store(user_id)
13
+ env["rack.session"].must_equal(:user_id => 123)
14
+ end
15
+
16
+ it "can fetch session" do
17
+ env = {
18
+ "rampart.session.key" => :user_id,
19
+ "rack.session" => {:user_id => 123}
20
+ }
21
+ session = Rampart::Session.new(env)
22
+ session.fetch.must_equal(123)
23
+ end
24
+
25
+ it "can delete session" do
26
+ env = {
27
+ "rampart.session.key" => :user_id,
28
+ "rack.session" => {:user_id => 123}
29
+ }
30
+ session = Rampart::Session.new(env)
31
+ session.delete
32
+ session.fetch.must_be_nil
33
+ end
34
+ end
@@ -0,0 +1,93 @@
1
+ require "spec_helper"
2
+ require "rampart/strategy_manager"
3
+
4
+ describe Rampart::StrategyManager do
5
+ describe "register" do
6
+ it "can register a strategy" do
7
+ strategy = Object.new
8
+ manager = define_strategy_manager
9
+ manager.register(:basic, strategy)
10
+ end
11
+
12
+ it "complains if strategy name registered more than once" do
13
+ strategy = Object.new
14
+ manager = define_strategy_manager
15
+ manager.register(:basic, strategy)
16
+ proc {
17
+ manager.register(:basic, strategy)
18
+ }.must_raise(ArgumentError)
19
+ end
20
+ end
21
+
22
+ describe "authenticate!" do
23
+
24
+ it "complains when strategy name has not been registered" do
25
+ manager = define_strategy_manager
26
+ proc {
27
+ manager.authenticate!(:my_strategy_name)
28
+ }.must_raise(ArgumentError)
29
+ end
30
+
31
+ it "returns fail event when no strategy names given" do
32
+ manager = define_strategy_manager
33
+ manager.authenticate!.must_be_instance_of(Rampart::FailEvent)
34
+ end
35
+
36
+ describe "single strategy" do
37
+
38
+ it "returns fail event when strategy passes" do
39
+ strategy = define_passing_strategy
40
+ manager = define_strategy_manager
41
+ manager.register(:strategy1, strategy)
42
+ manager.authenticate!(:strategy1).must_be_instance_of(Rampart::FailEvent)
43
+ end
44
+
45
+ it "returns fail event when strategy fails" do
46
+ strategy = define_failing_strategy
47
+ manager = define_strategy_manager
48
+ manager.register(:strategy1, strategy)
49
+ manager.authenticate!(:strategy1).must_be_instance_of(Rampart::FailEvent)
50
+ end
51
+
52
+ it "returns redirect event when strategy redirects" do
53
+ strategy = define_redirecting_strategy
54
+ manager = define_strategy_manager
55
+ manager.register(:strategy1, strategy)
56
+ manager.authenticate!(:strategy1).must_be_instance_of(Rampart::RedirectEvent)
57
+ end
58
+
59
+ it "returns success event when strategy succeeds" do
60
+ strategy = define_succeeding_strategy
61
+ manager = define_strategy_manager
62
+ manager.register(:strategy1, strategy)
63
+ manager.authenticate!(:strategy1).must_be_instance_of(Rampart::SuccessEvent)
64
+ end
65
+
66
+ it "returns fail event when strategy not valid" do
67
+ strategy = define_invalid_strategy
68
+ manager = define_strategy_manager
69
+ manager.register(:strategy1, strategy)
70
+ manager.authenticate!(:strategy1).must_be_instance_of(Rampart::FailEvent)
71
+ end
72
+
73
+ end # single strategy
74
+
75
+ describe "multple strategies" do
76
+ it "returns first halting strategy" do
77
+ manager = define_strategy_manager
78
+ manager.register(:strategy1, define_passing_strategy)
79
+ manager.register(:strategy2, define_invalid_strategy)
80
+ manager.register(:strategy3, define_redirecting_strategy)
81
+ manager.register(:strategy4, define_succeeding_strategy)
82
+ manager.authenticate!(:strategy1, :strategy2, :strategy3, :strategy4).must_be_instance_of(Rampart::RedirectEvent)
83
+ end
84
+
85
+ it "returns fail when no valid halting strategies found" do
86
+ manager = define_strategy_manager
87
+ manager.register(:strategy1, define_passing_strategy)
88
+ manager.register(:strategy2, define_invalid_strategy)
89
+ manager.authenticate!(:strategy1, :strategy2).must_be_instance_of(Rampart::FailEvent)
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,81 @@
1
+ require 'minitest/autorun'
2
+ require "rampart/strategy"
3
+ require "rampart/strategy_manager"
4
+
5
+ def define_strategy_manager(env={})
6
+ Rampart::StrategyManager.new(env)
7
+ end
8
+
9
+ def define_passing_strategy
10
+ klass = Class.new do
11
+ include Rampart::Strategy
12
+ def valid?(req)
13
+ true
14
+ end
15
+
16
+ def authenticate!(req)
17
+ pass
18
+ end
19
+ end
20
+ klass.new
21
+ end
22
+
23
+ def define_failing_strategy
24
+ klass = Class.new do
25
+ include Rampart::Strategy
26
+ def valid?(req)
27
+ true
28
+ end
29
+
30
+ def authenticate!(req)
31
+ fail!
32
+ end
33
+ end
34
+ klass.new
35
+ end
36
+
37
+ def define_redirecting_strategy
38
+ klass = Class.new do
39
+ include Rampart::Strategy
40
+ def valid?(req)
41
+ true
42
+ end
43
+
44
+ def authenticate!(req)
45
+ redirect!("http://www.kodio.io")
46
+ end
47
+ end
48
+ klass.new
49
+ end
50
+
51
+ def define_succeeding_strategy(user=Object.new)
52
+ klass = Class.new do
53
+ include Rampart::Strategy
54
+
55
+ def initialize(user)
56
+ @user = user
57
+ end
58
+
59
+ def valid?(req)
60
+ true
61
+ end
62
+
63
+ def authenticate!(req)
64
+ success!(@user)
65
+ end
66
+ end
67
+ klass.new(user)
68
+ end
69
+
70
+ def define_invalid_strategy
71
+ klass = Class.new do
72
+ include Rampart::Strategy
73
+ def valid?(req)
74
+ false
75
+ end
76
+
77
+ def authenticate!(req)
78
+ end
79
+ end
80
+ klass.new
81
+ end
metadata ADDED
@@ -0,0 +1,122 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rampart
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Erik Lott
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-12-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rack
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 1.5.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 1.5.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.5'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.5'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description:
56
+ email:
57
+ - erik.lott@kodio.io
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".gitignore"
63
+ - Gemfile
64
+ - LICENSE.txt
65
+ - README.md
66
+ - Rakefile
67
+ - lib/rampart.rb
68
+ - lib/rampart/auth.rb
69
+ - lib/rampart/events/fail_event.rb
70
+ - lib/rampart/events/pass_event.rb
71
+ - lib/rampart/events/redirect_event.rb
72
+ - lib/rampart/events/success_event.rb
73
+ - lib/rampart/proxy.rb
74
+ - lib/rampart/request.rb
75
+ - lib/rampart/response.rb
76
+ - lib/rampart/session.rb
77
+ - lib/rampart/strategy.rb
78
+ - lib/rampart/strategy_manager.rb
79
+ - lib/rampart/user_store.rb
80
+ - lib/rampart/version.rb
81
+ - rampart.gemspec
82
+ - spec/rampart/events/fail_event_spec.rb
83
+ - spec/rampart/events/pass_event_spec.rb
84
+ - spec/rampart/events/redirect_event_spec.rb
85
+ - spec/rampart/events/success_event_spec.rb
86
+ - spec/rampart/proxy_spec.rb
87
+ - spec/rampart/session_spec.rb
88
+ - spec/rampart/strategy_manager_spec.rb
89
+ - spec/spec_helper.rb
90
+ homepage: ''
91
+ licenses:
92
+ - MIT
93
+ metadata: {}
94
+ post_install_message:
95
+ rdoc_options: []
96
+ require_paths:
97
+ - lib
98
+ required_ruby_version: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ required_rubygems_version: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - ">="
106
+ - !ruby/object:Gem::Version
107
+ version: '0'
108
+ requirements: []
109
+ rubyforge_project:
110
+ rubygems_version: 2.2.2
111
+ signing_key:
112
+ specification_version: 4
113
+ summary: Rack authentication middleware
114
+ test_files:
115
+ - spec/rampart/events/fail_event_spec.rb
116
+ - spec/rampart/events/pass_event_spec.rb
117
+ - spec/rampart/events/redirect_event_spec.rb
118
+ - spec/rampart/events/success_event_spec.rb
119
+ - spec/rampart/proxy_spec.rb
120
+ - spec/rampart/session_spec.rb
121
+ - spec/rampart/strategy_manager_spec.rb
122
+ - spec/spec_helper.rb