sinatra_warden 0.3.0 → 0.3.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.
- data/.gitignore +1 -0
- data/Gemfile +1 -1
- data/VERSION +1 -1
- data/lib/sinatra_warden/sinatra.rb +11 -2
- data/spec/fixtures/testing_login.rb +17 -0
- data/spec/sinatra_warden_spec.rb +59 -0
- data/spec/spec_helper.rb +15 -2
- metadata +3 -3
data/.gitignore
CHANGED
data/Gemfile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.1
|
@@ -56,7 +56,10 @@ module Sinatra
|
|
56
56
|
#
|
57
57
|
# @param [String] path to redirect to if user is unauthenticated
|
58
58
|
def authorize!(failure_path=nil)
|
59
|
-
|
59
|
+
unless authenticated?
|
60
|
+
session[:return_to] = request.path if options.auth_use_referrer
|
61
|
+
redirect(failure_path ? failure_path : options.auth_failure_path)
|
62
|
+
end
|
60
63
|
end
|
61
64
|
|
62
65
|
end
|
@@ -69,6 +72,10 @@ module Sinatra
|
|
69
72
|
|
70
73
|
app.set :auth_failure_path, '/'
|
71
74
|
app.set :auth_success_path, '/'
|
75
|
+
# Setting this to true will store last request URL
|
76
|
+
# into a user's session so that to redirect back to it
|
77
|
+
# upon successful authentication
|
78
|
+
app.set :auth_use_referrer, false
|
72
79
|
|
73
80
|
app.set :auth_error_message, "Could not log you in."
|
74
81
|
app.set :auth_success_message, "You have logged in successfully."
|
@@ -80,6 +87,7 @@ module Sinatra
|
|
80
87
|
|
81
88
|
app.post '/unauthenticated/?' do
|
82
89
|
status 401
|
90
|
+
warden.custom_failure! if warden.config.failure_app == self.class
|
83
91
|
env['x-rack.flash'][:error] = options.auth_error_message if defined?(Rack::Flash)
|
84
92
|
options.auth_use_erb ? erb(options.auth_login_template) : haml(options.auth_login_template)
|
85
93
|
end
|
@@ -107,7 +115,8 @@ module Sinatra
|
|
107
115
|
app.post '/login/?' do
|
108
116
|
authenticate
|
109
117
|
env['x-rack.flash'][:success] = options.auth_success_message if defined?(Rack::Flash)
|
110
|
-
redirect options.
|
118
|
+
redirect options.auth_use_referrer && session[:return_to] ? session.delete(:return_to) :
|
119
|
+
options.auth_success_path
|
111
120
|
end
|
112
121
|
|
113
122
|
app.get '/logout/?' do
|
@@ -49,3 +49,20 @@ class TestingLogin < Sinatra::Base
|
|
49
49
|
end
|
50
50
|
|
51
51
|
end
|
52
|
+
|
53
|
+
class TestingLoginWithReferrer < TestingLogin
|
54
|
+
set :auth_use_referrer, true
|
55
|
+
end
|
56
|
+
|
57
|
+
class TestingLoginAsRackApp < TestingLogin
|
58
|
+
use Rack::Session::Cookie
|
59
|
+
use Warden::Manager do |manager|
|
60
|
+
manager.default_strategies :password
|
61
|
+
manager.failure_app = TestingLoginAsRackApp
|
62
|
+
manager.serialize_into_session { |user| user.id }
|
63
|
+
manager.serialize_from_session { |id| User.get(id) }
|
64
|
+
end
|
65
|
+
use Rack::Flash
|
66
|
+
|
67
|
+
set :auth_failure_path, '/login'
|
68
|
+
end
|
data/spec/sinatra_warden_spec.rb
CHANGED
@@ -27,6 +27,65 @@ describe "Sinatra::Warden" do
|
|
27
27
|
get '/logout'
|
28
28
|
last_request.env['warden'].authenticated?.should == false
|
29
29
|
end
|
30
|
+
|
31
|
+
context "auth_use_referrer is disabled" do
|
32
|
+
it "should not store :return_to" do
|
33
|
+
get '/dashboard'
|
34
|
+
follow_redirect!
|
35
|
+
last_request.session[:return_to].should be_nil
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should redirect to a default success URL" do
|
39
|
+
get '/dashboard'
|
40
|
+
follow_redirect!
|
41
|
+
post '/login', 'email' => 'justin.smestad@gmail.com', 'password' => 'thedude'
|
42
|
+
follow_redirect!
|
43
|
+
last_request.path.should == '/welcome'
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
context "when auth_use_referrer is set to true" do
|
48
|
+
def app; app_with_referrer; end
|
49
|
+
|
50
|
+
it "should store referrer in user's session" do
|
51
|
+
get '/dashboard'
|
52
|
+
follow_redirect!
|
53
|
+
last_request.session[:return_to].should == "/dashboard"
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should redirect to stored return_to URL" do
|
57
|
+
get '/dashboard'
|
58
|
+
follow_redirect!
|
59
|
+
post '/login', 'email' => 'justin.smestad@gmail.com', 'password' => 'thedude'
|
60
|
+
follow_redirect!
|
61
|
+
last_request.path.should == '/dashboard'
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should remove :return_to from session" do
|
65
|
+
get '/dashboard'
|
66
|
+
follow_redirect!
|
67
|
+
post '/login', 'email' => 'justin.smestad@gmail.com', 'password' => 'thedude'
|
68
|
+
follow_redirect!
|
69
|
+
last_request.session[:return_to].should be_nil
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should default to :auth_success_path if there wasn't a return_to" do
|
73
|
+
post '/login', 'email' => 'justin.smestad@gmail.com', 'password' => 'thedude'
|
74
|
+
follow_redirect!
|
75
|
+
last_request.path.should == '/welcome'
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
context "TestingLoginAsRackApp" do
|
80
|
+
def app; @app ||= TestingLoginAsRackApp; end
|
81
|
+
|
82
|
+
# what happens here is you'll eventually get
|
83
|
+
# "stack too deep" error if the following test fails
|
84
|
+
it "should not get in a loop" do
|
85
|
+
post '/login', :email => 'bad', :password => 'password'
|
86
|
+
last_request.path.should == '/unauthenticated'
|
87
|
+
end
|
88
|
+
end
|
30
89
|
end
|
31
90
|
|
32
91
|
context "the helpers" do
|
data/spec/spec_helper.rb
CHANGED
@@ -23,8 +23,21 @@ Spec::Runner.configure do |config|
|
|
23
23
|
DataMapper.auto_migrate!
|
24
24
|
end
|
25
25
|
|
26
|
+
# default app
|
26
27
|
def app
|
27
|
-
@app ||=
|
28
|
+
@app ||= define_app TestingLogin
|
29
|
+
end
|
30
|
+
|
31
|
+
# app with auth_use_referrer enabled
|
32
|
+
def app_with_referrer
|
33
|
+
@app ||= define_app TestingLoginWithReferrer
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
# :which should be a sinatra app
|
39
|
+
def define_app(which)
|
40
|
+
Rack::Builder.app do
|
28
41
|
use Rack::Session::Cookie
|
29
42
|
use Warden::Manager do |manager|
|
30
43
|
manager.default_strategies :password
|
@@ -33,7 +46,7 @@ Spec::Runner.configure do |config|
|
|
33
46
|
manager.serialize_from_session { |id| User.get(id) }
|
34
47
|
end
|
35
48
|
use Rack::Flash
|
36
|
-
run
|
49
|
+
run which
|
37
50
|
end
|
38
51
|
end
|
39
52
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 3
|
8
|
-
-
|
9
|
-
version: 0.3.
|
8
|
+
- 1
|
9
|
+
version: 0.3.1
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Justin Smestad
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-04-
|
18
|
+
date: 2010-04-25 00:00:00 -06:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|