warden 1.2.6 → 1.2.9

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.
Files changed (48) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/ruby.yml +27 -0
  3. data/.gitignore +6 -0
  4. data/.rspec +3 -0
  5. data/{History.rdoc → CHANGELOG.md} +76 -38
  6. data/Gemfile +3 -2
  7. data/LICENSE +2 -1
  8. data/README.md +18 -0
  9. data/Rakefile +4 -8
  10. data/lib/warden.rb +1 -0
  11. data/lib/warden/config.rb +1 -0
  12. data/lib/warden/errors.rb +2 -1
  13. data/lib/warden/hooks.rb +1 -0
  14. data/lib/warden/manager.rb +2 -1
  15. data/lib/warden/mixins/common.rb +1 -0
  16. data/lib/warden/proxy.rb +24 -4
  17. data/lib/warden/session_serializer.rb +1 -0
  18. data/lib/warden/strategies.rb +1 -0
  19. data/lib/warden/strategies/base.rb +3 -1
  20. data/lib/warden/test/helpers.rb +2 -1
  21. data/lib/warden/test/mock.rb +5 -4
  22. data/lib/warden/test/warden_helpers.rb +1 -0
  23. data/lib/warden/version.rb +2 -1
  24. data/warden.gemspec +19 -18
  25. metadata +18 -37
  26. data/README.textile +0 -9
  27. data/spec/helpers/request_helper.rb +0 -51
  28. data/spec/helpers/strategies/fail_with_user.rb +0 -10
  29. data/spec/helpers/strategies/failz.rb +0 -8
  30. data/spec/helpers/strategies/invalid.rb +0 -8
  31. data/spec/helpers/strategies/pass.rb +0 -8
  32. data/spec/helpers/strategies/pass_with_message.rb +0 -8
  33. data/spec/helpers/strategies/password.rb +0 -13
  34. data/spec/helpers/strategies/single.rb +0 -12
  35. data/spec/spec_helper.rb +0 -25
  36. data/spec/warden/authenticated_data_store_spec.rb +0 -114
  37. data/spec/warden/config_spec.rb +0 -48
  38. data/spec/warden/errors_spec.rb +0 -47
  39. data/spec/warden/hooks_spec.rb +0 -373
  40. data/spec/warden/manager_spec.rb +0 -340
  41. data/spec/warden/proxy_spec.rb +0 -1050
  42. data/spec/warden/scoped_session_serializer.rb +0 -123
  43. data/spec/warden/session_serializer_spec.rb +0 -53
  44. data/spec/warden/strategies/base_spec.rb +0 -313
  45. data/spec/warden/strategies_spec.rb +0 -94
  46. data/spec/warden/test/helpers_spec.rb +0 -93
  47. data/spec/warden/test/mock_spec.rb +0 -15
  48. data/spec/warden/test/test_mode_spec.rb +0 -75
@@ -1,4 +1,5 @@
1
1
  # encoding: utf-8
2
+ # frozen_string_literal: true
2
3
  module Warden
3
4
  class SessionSerializer
4
5
  attr_reader :env
@@ -1,4 +1,5 @@
1
1
  # encoding: utf-8
2
+ # frozen_string_literal: true
2
3
  module Warden
3
4
  module Strategies
4
5
  class << self
@@ -1,4 +1,5 @@
1
1
  # encoding: utf-8
2
+ # frozen_string_literal: true
2
3
  module Warden
3
4
  module Strategies
4
5
  # A strategy is a place where you can put logic related to authentication. Any strategy inherits
@@ -44,6 +45,7 @@ module Warden
44
45
  @env, @scope = env, scope
45
46
  @status, @headers = nil, {}
46
47
  @halted, @performed = false, false
48
+ @result = nil
47
49
  end
48
50
 
49
51
  # The method that is called from above. This method calls the underlying authenticate! method
@@ -157,7 +159,7 @@ module Warden
157
159
  def redirect!(url, params = {}, opts = {})
158
160
  halt!
159
161
  @status = opts[:permanent] ? 301 : 302
160
- headers["Location"] = url
162
+ headers["Location"] = url.dup
161
163
  headers["Location"] << "?" << Rack::Utils.build_query(params) unless params.empty?
162
164
  headers["Content-Type"] = opts[:content_type] || 'text/plain'
163
165
 
@@ -1,4 +1,5 @@
1
1
  # encoding: utf-8
2
+ # frozen_string_literal: true
2
3
 
3
4
  module Warden
4
5
  module Test
@@ -6,7 +7,7 @@ module Warden
6
7
  # These provide the ability to login and logout on any given request
7
8
  # Note: During the teardown phase of your specs you should include: Warden.test_reset!
8
9
  module Helpers
9
- def self.included(base)
10
+ def self.included(_base)
10
11
  ::Warden.test_mode!
11
12
  end
12
13
 
@@ -1,4 +1,5 @@
1
1
  # encoding: utf-8
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'rack'
4
5
 
@@ -7,7 +8,7 @@ module Warden
7
8
  # A mock of an application to get a Warden object to test on
8
9
  # Note: During the teardown phase of your specs you should include: Warden.test_reset!
9
10
  module Mock
10
- def self.included(base)
11
+ def self.included(_base)
11
12
  ::Warden.test_mode!
12
13
  end
13
14
 
@@ -36,7 +37,7 @@ module Warden
36
37
  def app
37
38
  @app ||= begin
38
39
  opts = {
39
- failure_app: lambda {
40
+ failure_app: lambda { |_e|
40
41
  [401, { 'Content-Type' => 'text/plain' }, ['You Fail!']]
41
42
  },
42
43
  default_strategies: :password,
@@ -45,7 +46,7 @@ module Warden
45
46
  Rack::Builder.new do
46
47
  use Warden::Test::Mock::Session
47
48
  use Warden::Manager, opts, &proc {}
48
- run lambda { |e|
49
+ run lambda { |_e|
49
50
  [200, { 'Content-Type' => 'text/plain' }, ['You Win']]
50
51
  }
51
52
  end
@@ -54,7 +55,7 @@ module Warden
54
55
 
55
56
  class Session
56
57
  attr_accessor :app
57
- def initialize(app,configs = {})
58
+ def initialize(app, _configs={})
58
59
  @app = app
59
60
  end
60
61
 
@@ -1,4 +1,5 @@
1
1
  # encoding: utf-8
2
+ # frozen_string_literal: true
2
3
 
3
4
  module Warden
4
5
 
@@ -1,4 +1,5 @@
1
1
  # encoding: utf-8
2
+ # frozen_string_literal: true
2
3
  module Warden
3
- VERSION = "1.2.6".freeze
4
+ VERSION = "1.2.9"
4
5
  end
@@ -1,24 +1,25 @@
1
1
  # -*- encoding: utf-8 -*-
2
+ # frozen_string_literal: true
2
3
 
3
- require './lib/warden/version'
4
+ lib = File.expand_path("../lib", __FILE__)
5
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
6
+ require 'warden/version'
4
7
 
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 = [
8
+ Gem::Specification.new do |spec|
9
+ spec.name = "warden"
10
+ spec.version = Warden::VERSION
11
+ spec.authors = ["Daniel Neighman", "Justin Smestad", "Whitney Smestad", "José Valim"]
12
+ spec.email = %q{hasox.sox@gmail.com justin.smestad@gmail.com whitcolorado@gmail.com}
13
+ spec.homepage = "https://github.com/hassox/warden"
14
+ spec.summary = "An authentication library compatible with all Rack-based frameworks"
15
+ spec.license = "MIT"
16
+ spec.extra_rdoc_files = [
12
17
  "LICENSE",
13
- "README.textile"
18
+ "README.md"
14
19
  ]
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"
20
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
21
+ f.match(%r{^(test|spec|features)/})
22
+ end
23
+ spec.require_paths = ["lib"]
24
+ spec.add_dependency "rack", ">= 2.0.9"
23
25
  end
24
-
metadata CHANGED
@@ -1,14 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: warden
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.6
4
+ version: 1.2.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Neighman
8
+ - Justin Smestad
9
+ - Whitney Smestad
10
+ - José Valim
8
11
  autorequire:
9
12
  bindir: bin
10
13
  cert_chain: []
11
- date: 2016-01-31 00:00:00.000000000 Z
14
+ date: 2020-08-31 00:00:00.000000000 Z
12
15
  dependencies:
13
16
  - !ruby/object:Gem::Dependency
14
17
  name: rack
@@ -16,26 +19,29 @@ dependencies:
16
19
  requirements:
17
20
  - - ">="
18
21
  - !ruby/object:Gem::Version
19
- version: '1.0'
22
+ version: 2.0.9
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - ">="
25
28
  - !ruby/object:Gem::Version
26
- version: '1.0'
29
+ version: 2.0.9
27
30
  description:
28
- email: has.sox@gmail.com
31
+ email: hasox.sox@gmail.com justin.smestad@gmail.com whitcolorado@gmail.com
29
32
  executables: []
30
33
  extensions: []
31
34
  extra_rdoc_files:
32
35
  - LICENSE
33
- - README.textile
36
+ - README.md
34
37
  files:
38
+ - ".github/workflows/ruby.yml"
39
+ - ".gitignore"
40
+ - ".rspec"
41
+ - CHANGELOG.md
35
42
  - Gemfile
36
- - History.rdoc
37
43
  - LICENSE
38
- - README.textile
44
+ - README.md
39
45
  - Rakefile
40
46
  - lib/warden.rb
41
47
  - lib/warden/config.rb
@@ -51,36 +57,13 @@ files:
51
57
  - lib/warden/test/mock.rb
52
58
  - lib/warden/test/warden_helpers.rb
53
59
  - lib/warden/version.rb
54
- - spec/helpers/request_helper.rb
55
- - spec/helpers/strategies/fail_with_user.rb
56
- - spec/helpers/strategies/failz.rb
57
- - spec/helpers/strategies/invalid.rb
58
- - spec/helpers/strategies/pass.rb
59
- - spec/helpers/strategies/pass_with_message.rb
60
- - spec/helpers/strategies/password.rb
61
- - spec/helpers/strategies/single.rb
62
- - spec/spec_helper.rb
63
- - spec/warden/authenticated_data_store_spec.rb
64
- - spec/warden/config_spec.rb
65
- - spec/warden/errors_spec.rb
66
- - spec/warden/hooks_spec.rb
67
- - spec/warden/manager_spec.rb
68
- - spec/warden/proxy_spec.rb
69
- - spec/warden/scoped_session_serializer.rb
70
- - spec/warden/session_serializer_spec.rb
71
- - spec/warden/strategies/base_spec.rb
72
- - spec/warden/strategies_spec.rb
73
- - spec/warden/test/helpers_spec.rb
74
- - spec/warden/test/mock_spec.rb
75
- - spec/warden/test/test_mode_spec.rb
76
60
  - warden.gemspec
77
- homepage: http://github.com/hassox/warden
61
+ homepage: https://github.com/hassox/warden
78
62
  licenses:
79
63
  - MIT
80
64
  metadata: {}
81
65
  post_install_message:
82
- rdoc_options:
83
- - "--charset=UTF-8"
66
+ rdoc_options: []
84
67
  require_paths:
85
68
  - lib
86
69
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -94,10 +77,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
94
77
  - !ruby/object:Gem::Version
95
78
  version: '0'
96
79
  requirements: []
97
- rubyforge_project: warden
98
- rubygems_version: 2.4.5.1
80
+ rubygems_version: 3.1.2
99
81
  signing_key:
100
82
  specification_version: 4
101
- summary: Rack middleware that provides authentication for rack applications
83
+ summary: An authentication library compatible with all Rack-based frameworks
102
84
  test_files: []
103
- has_rdoc:
@@ -1,9 +0,0 @@
1
- Please see the "Warden Wiki":http://wiki.github.com/hassox/warden for overview documentation.
2
-
3
- h2. Maintainers
4
-
5
- * Daniel Neighman (hassox)
6
- * José Valim (josevalim)
7
- * Justin Smestad (jsmestad)
8
-
9
- "A list of all contributors is available on Github.":https://github.com/hassox/warden/contributors
@@ -1,51 +0,0 @@
1
- # encoding: utf-8
2
- module Warden::Spec
3
- module Helpers
4
- FAILURE_APP = lambda{|e|[401, {"Content-Type" => "text/plain"}, ["You Fail!"]] }
5
-
6
- def env_with_params(path = "/", params = {}, env = {})
7
- method = params.delete(:method) || "GET"
8
- env = { 'HTTP_VERSION' => '1.1', 'REQUEST_METHOD' => "#{method}" }.merge(env)
9
- Rack::MockRequest.env_for("#{path}?#{Rack::Utils.build_query(params)}", env)
10
- end
11
-
12
- def setup_rack(app = nil, opts = {}, &block)
13
- app ||= block if block_given?
14
-
15
- opts[:failure_app] ||= failure_app
16
- opts[:default_strategies] ||= [:password]
17
- opts[:default_serializers] ||= [:session]
18
- blk = opts[:configurator] || proc{}
19
-
20
- Rack::Builder.new do
21
- use opts[:session] || Warden::Spec::Helpers::Session unless opts[:nil_session]
22
- use Warden::Manager, opts, &blk
23
- run app
24
- end
25
- end
26
-
27
- def valid_response
28
- Rack::Response.new("OK").finish
29
- end
30
-
31
- def failure_app
32
- Warden::Spec::Helpers::FAILURE_APP
33
- end
34
-
35
- def success_app
36
- lambda{|e| [200, {"Content-Type" => "text/plain"}, ["You Win"]]}
37
- end
38
-
39
- class Session
40
- attr_accessor :app
41
- def initialize(app,configs = {})
42
- @app = app
43
- end
44
-
45
- def call(e)
46
- e['rack.session'] ||= {}
47
- @app.call(e)
48
- end
49
- end # session
50
- end
51
- end
@@ -1,10 +0,0 @@
1
- # encoding: utf-8
2
- Warden::Strategies.add(:fail_with_user) do
3
- def authenticate!
4
- request.env['warden.spec.strategies'] ||= []
5
- request.env['warden.spec.strategies'] << :fail_with_user
6
- self.user = 'Valid User'
7
- fail!
8
- end
9
- end
10
-
@@ -1,8 +0,0 @@
1
- # encoding: utf-8
2
- Warden::Strategies.add(:failz) do
3
- def authenticate!
4
- request.env['warden.spec.strategies'] ||= []
5
- request.env['warden.spec.strategies'] << :failz
6
- fail!("The Fails Strategy Has Failed You")
7
- end
8
- end
@@ -1,8 +0,0 @@
1
- # encoding: utf-8
2
- Warden::Strategies.add(:invalid) do
3
- def valid?
4
- false
5
- end
6
-
7
- def authenticate!; end
8
- end
@@ -1,8 +0,0 @@
1
- # encoding: utf-8
2
- Warden::Strategies.add(:pass) do
3
- def authenticate!
4
- request.env['warden.spec.strategies'] ||= []
5
- request.env['warden.spec.strategies'] << :pass
6
- success!("Valid User") unless scope == :failz
7
- end
8
- end
@@ -1,8 +0,0 @@
1
- # encoding: utf-8
2
- Warden::Strategies.add(:pass_with_message) do
3
- def authenticate!
4
- request.env['warden.spec.strategies'] ||= []
5
- request.env['warden.spec.strategies'] << :pass_with_message
6
- success!("Valid User", "The Success Strategy Has Accepted You") unless scope == :failz
7
- end
8
- end
@@ -1,13 +0,0 @@
1
- # encoding: utf-8
2
- Warden::Strategies.add(:password) do
3
- def authenticate!
4
- request.env['warden.spec.strategies'] ||= []
5
- request.env['warden.spec.strategies'] << :password
6
- if params["password"] || params["username"]
7
- params["password"] == "sekrit" && params["username"] == "fred" ?
8
- success!("Authenticated User") : fail!("Username or password is incorrect")
9
- else
10
- pass
11
- end
12
- end
13
- end
@@ -1,12 +0,0 @@
1
- # encoding: utf-8
2
- Warden::Strategies.add(:single) do
3
- def authenticate!
4
- request.env['warden.spec.strategies'] ||= []
5
- request.env['warden.spec.strategies'] << :single
6
- success!("Valid User")
7
- end
8
-
9
- def store?
10
- false
11
- end
12
- end
@@ -1,25 +0,0 @@
1
- # encoding: utf-8
2
- $TESTING=true
3
-
4
- $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
5
- $:.unshift File.expand_path(File.join(File.dirname(__FILE__)))
6
- require 'warden'
7
-
8
- require 'rubygems'
9
- require 'rack'
10
-
11
- Dir[File.join(File.dirname(__FILE__), "helpers", "**/*.rb")].each do |f|
12
- require f
13
- end
14
-
15
- RSpec.configure do |config|
16
- config.include(Warden::Spec::Helpers)
17
- config.include(Warden::Test::Helpers)
18
- config.include(Warden::Test::Mock)
19
-
20
- def load_strategies
21
- Dir[File.join(File.dirname(__FILE__), "helpers", "strategies", "**/*.rb")].each do |f|
22
- load f
23
- end
24
- end
25
- end
@@ -1,114 +0,0 @@
1
- # encoding: utf-8
2
- require 'spec_helper'
3
-
4
- describe "authenticated data store" do
5
-
6
- before(:each) do
7
- @env = env_with_params
8
- @env['rack.session'] = {
9
- "warden.user.foo.key" => "foo user",
10
- "warden.user.default.key" => "default user",
11
- :foo => "bar"
12
- }
13
- end
14
-
15
- it "should store data for the default scope" do
16
- app = lambda do |e|
17
- e['warden'].authenticate(:pass)
18
- e['warden'].authenticate(:pass, :scope => :foo)
19
- expect(e['warden']).to be_authenticated
20
- expect(e['warden']).to be_authenticated(:foo)
21
-
22
- # Store the data for :default
23
- e['warden'].session[:key] = "value"
24
- valid_response
25
- end
26
- setup_rack(app).call(@env)
27
- expect(@env['rack.session']['warden.user.default.session']).to eq(key: "value")
28
- expect(@env['rack.session']['warden.user.foo.session']).to be_nil
29
- end
30
-
31
- it "should store data for the foo user" do
32
- app = lambda do |e|
33
- e['warden'].session(:foo)[:key] = "value"
34
- valid_response
35
- end
36
- setup_rack(app).call(@env)
37
- expect(@env['rack.session']['warden.user.foo.session']).to eq(key: "value")
38
- end
39
-
40
- it "should store the data separately" do
41
- app = lambda do |e|
42
- e['warden'].session[:key] = "value"
43
- e['warden'].session(:foo)[:key] = "another value"
44
- valid_response
45
- end
46
- setup_rack(app).call(@env)
47
- expect(@env['rack.session']['warden.user.default.session']).to eq(key: "value")
48
- expect(@env['rack.session']['warden.user.foo.session' ]).to eq(key: "another value")
49
- end
50
-
51
- it "should clear the foo scoped data when foo logs out" do
52
- app = lambda do |e|
53
- e['warden'].session[:key] = "value"
54
- e['warden'].session(:foo)[:key] = "another value"
55
- e['warden'].logout(:foo)
56
- valid_response
57
- end
58
- setup_rack(app).call(@env)
59
- expect(@env['rack.session']['warden.user.default.session']).to eq(key: "value")
60
- expect(@env['rack.session']['warden.user.foo.session' ]).to be_nil
61
- end
62
-
63
- it "should clear out the default data when :default logs out" do
64
- app = lambda do |e|
65
- e['warden'].session[:key] = "value"
66
- e['warden'].session(:foo)[:key] = "another value"
67
- e['warden'].logout(:default)
68
- valid_response
69
- end
70
- setup_rack(app).call(@env)
71
- expect(@env['rack.session']['warden.user.default.session']).to be_nil
72
- expect(@env['rack.session']['warden.user.foo.session' ]).to eq(key: "another value")
73
- end
74
-
75
- it "should clear out all data when a general logout is performed" do
76
- app = lambda do |e|
77
- e['warden'].session[:key] = "value"
78
- e['warden'].session(:foo)[:key] = "another value"
79
- e['warden'].logout
80
- valid_response
81
- end
82
- setup_rack(app).call(@env)
83
- expect(@env['rack.session']['warden.user.default.session']).to be_nil
84
- expect(@env['rack.session']['warden.user.foo.session' ]).to be_nil
85
- end
86
-
87
- it "should logout multiple persons at once" do
88
- @env['rack.session']['warden.user.bar.key'] = "bar user"
89
-
90
- app = lambda do |e|
91
- e['warden'].session[:key] = "value"
92
- e['warden'].session(:foo)[:key] = "another value"
93
- e['warden'].session(:bar)[:key] = "yet another"
94
- e['warden'].logout(:bar, :default)
95
- valid_response
96
- end
97
- setup_rack(app).call(@env)
98
- expect(@env['rack.session']['warden.user.default.session']).to be_nil
99
- expect(@env['rack.session']['warden.user.foo.session' ]).to eq(key: "another value")
100
- expect(@env['rack.session']['warden.user.bar.session' ]).to be_nil
101
- end
102
-
103
- it "should not store data for a user who is not logged in" do
104
- @env['rack.session']
105
- app = lambda do |e|
106
- e['warden'].session(:not_here)[:key] = "value"
107
- valid_response
108
- end
109
-
110
- expect {
111
- setup_rack(app).call(@env)
112
- }.to raise_error(Warden::NotAuthenticated)
113
- end
114
- end