authstrategies 0.1.0 → 0.1.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 +8 -8
- data/README.md +85 -3
- data/authstrategies.gemspec +0 -1
- data/lib/authstrategies/middleware.rb +58 -54
- data/lib/authstrategies/models/user.rb +2 -2
- data/lib/authstrategies/version.rb +1 -1
- data/lib/authstrategies/views/login.erb +1 -1
- data/lib/authstrategies.rb +164 -11
- metadata +2 -16
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NmUzMWJmYmNhMzgwOTNkYzllMTc3ZDA1OWU1YzcxNzdkYzFhYTZmMw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NWJmMWNjMzUzMTUwNjg3NWMyZjUyNGJlMDkxYzMxMWM5NGU2ZTA1Mg==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NTlhMTlkZDM1YTI1NDZhNWEyNjg4NDY2YzA2OTM0YWVmYzc1NGQ0ZWU5ZDQz
|
10
|
+
MmM2YWU0YmU4N2ZmYTRkMzc5ZDJlMjk0MmMxZDJiNmZhNDllNGUzMWZkNmU1
|
11
|
+
OWIxM2MyZTM3MTE4NmU2MDk3MjczYWVhOWYyNzVhMjUxMGI5MGY=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZmUwYzBmOGUxMDdhOTdkMDdmMjE0NWM4ZTgwOTA4ZDZlZDY2ZjAxMGEyODk2
|
14
|
+
ZmQ1MTIzN2VjN2ZhZjk2NmNlYjE5ODEwNzg3OWY4MmJkZDEzMThmMjM4YWYw
|
15
|
+
OTFiY2Y1Njk3NDA0ODdkNzFmMWE2YTYxY2M0NGU0MWViNTU2ZmQ=
|
data/README.md
CHANGED
@@ -25,14 +25,14 @@ Authstrategies uses sinatra-activerecord as orm. There is currently no rake task
|
|
25
25
|
t.string :email, :null => false, :defautl => ""
|
26
26
|
t.string :encrypted_password, :null => false, :default => ""
|
27
27
|
|
28
|
-
t.string
|
28
|
+
t.string :remember_token
|
29
29
|
t.boolean :remember_me
|
30
30
|
|
31
31
|
t.timestamps
|
32
32
|
end
|
33
33
|
|
34
|
-
add_index :users, :email,
|
35
|
-
add_index :remember_token,
|
34
|
+
add_index :users, :email, :unique => true
|
35
|
+
add_index :users, :remember_token, :unique => true
|
36
36
|
end
|
37
37
|
|
38
38
|
|
@@ -68,6 +68,88 @@ To logout the user class logout.
|
|
68
68
|
login_path returns the login path as a string
|
69
69
|
logout_path returns the logout path as a string
|
70
70
|
signup_path returns the signup path as a string
|
71
|
+
|
72
|
+
## Callbacks
|
73
|
+
|
74
|
+
after_set_user
|
75
|
+
This is called every time the user is set. The user is set:
|
76
|
+
=> on each request when they are accessed for the first time via env['warden'].user
|
77
|
+
=> when the user is initially authenticated
|
78
|
+
=> when the user is set via the set_user method
|
79
|
+
Courtesy of Warden, for more information check the warden callbacks wiki
|
80
|
+
|
81
|
+
after_authentication
|
82
|
+
|
83
|
+
Executed every time the user is authenticated
|
84
|
+
(first time in each session).
|
85
|
+
Courtesy of Warden, for more information check the warden callbacks wiki
|
86
|
+
|
87
|
+
before_login_failure
|
88
|
+
|
89
|
+
This callback is run right before the failure application is called.
|
90
|
+
Courtesy of Warden, for more information
|
91
|
+
check the warden callbacks wiki
|
92
|
+
|
93
|
+
after_login_failure
|
94
|
+
|
95
|
+
This is called in the failure application
|
96
|
+
Useful for redirecting the user after he logs in
|
97
|
+
2 params are passed to this callback
|
98
|
+
=>request - the request data
|
99
|
+
=>response - the response data
|
100
|
+
|
101
|
+
before_logout
|
102
|
+
|
103
|
+
This callback is run before each user is logged out.
|
104
|
+
Courtesy of Warden, for more information
|
105
|
+
check the warden callbacks wiki
|
106
|
+
|
107
|
+
after_logout
|
108
|
+
|
109
|
+
This is called after the user is logged out.
|
110
|
+
Useful for redirecting the user after logging out
|
111
|
+
2 parameters are passed to this callback
|
112
|
+
=>request - the request data
|
113
|
+
=>response - the response data
|
114
|
+
|
115
|
+
after_logout_path
|
116
|
+
|
117
|
+
This defines a path to redirect the user to
|
118
|
+
after he logs out and a flash message to print
|
119
|
+
path default is root path
|
120
|
+
message default is 'Logged out successfully!'
|
121
|
+
|
122
|
+
after_login
|
123
|
+
|
124
|
+
This is called each time after the user logs in
|
125
|
+
3 parameters are passed to this callback
|
126
|
+
=>current_user - the user that hase just been set
|
127
|
+
=>request - the request data
|
128
|
+
=>response - the response data
|
129
|
+
|
130
|
+
after_login_path
|
131
|
+
|
132
|
+
This defines a path to redirect the user to
|
133
|
+
after he logs in and a flash message to print
|
134
|
+
path default is root path
|
135
|
+
message default is 'Logged in successfully!'
|
136
|
+
|
137
|
+
after_signup
|
138
|
+
|
139
|
+
This is called after the user is saved into
|
140
|
+
the database
|
141
|
+
3 parameters are passed to this callback
|
142
|
+
=>user - the user that just signed up
|
143
|
+
=>request - the request data
|
144
|
+
=>response - the response data
|
145
|
+
Also since the user is set to session via env['warden'].set_user
|
146
|
+
after_set_user is also called after the user signs up
|
147
|
+
|
148
|
+
after_signup_path
|
149
|
+
This defines a path to redirect the user to
|
150
|
+
after he signs up and a flash message to print
|
151
|
+
path default is root path
|
152
|
+
message default is 'Successfully signed up!
|
71
153
|
## Contributing
|
72
154
|
|
73
155
|
1. Fork it
|
data/authstrategies.gemspec
CHANGED
@@ -26,7 +26,6 @@ Gem::Specification.new do |spec|
|
|
26
26
|
spec.add_runtime_dependency "protected_attributes"
|
27
27
|
spec.add_runtime_dependency "warden"
|
28
28
|
spec.add_runtime_dependency "bcrypt-ruby"
|
29
|
-
spec.add_runtime_dependency "rack"
|
30
29
|
spec.add_runtime_dependency "rack-flash3", '1.0.5'
|
31
30
|
|
32
31
|
end
|
@@ -1,64 +1,68 @@
|
|
1
1
|
module Authstrategies
|
2
2
|
class Middleware < Sinatra::Base
|
3
|
-
|
4
|
-
|
3
|
+
register Base
|
4
|
+
register RememberMe
|
5
5
|
|
6
|
-
|
7
|
-
redirect '/' if authenticated?
|
8
|
-
erb :login
|
9
|
-
end
|
6
|
+
include Manager
|
10
7
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
if params["remember_me"] == "on"
|
16
|
-
current_user.remember_me!
|
17
|
-
response.set_cookie("authstrategies",
|
18
|
-
:value => current_user.remember_token,
|
19
|
-
:expires => Time.now + 7 * 24 * 3600
|
20
|
-
)
|
21
|
-
end
|
22
|
-
flash[:notice] = "Logged in successfully!"
|
23
|
-
redirect '/'
|
24
|
-
else
|
25
|
-
flash[:error] = env["warden"].message
|
26
|
-
redirect '/login'
|
27
|
-
end
|
28
|
-
end
|
8
|
+
get '/login/?' do
|
9
|
+
redirect '/' if authenticated?
|
10
|
+
erb :login
|
11
|
+
end
|
29
12
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
13
|
+
post '/login' do
|
14
|
+
redirect '/' if authenticated?
|
15
|
+
authenticate!
|
16
|
+
if authenticated?
|
17
|
+
if params["remember_me"] == "on"
|
18
|
+
current_user.remember_me!
|
19
|
+
response.set_cookie("authstrategies",
|
20
|
+
:value => current_user.remember_token,
|
21
|
+
:expires => Time.now + 7 * 24 * 3600
|
22
|
+
)
|
23
|
+
end
|
24
|
+
Manager.call :after_login, [current_user, request, response]
|
25
|
+
flash[:notice] = Manager._after_login_msg
|
26
|
+
redirect Manager._after_login_path
|
27
|
+
end
|
28
|
+
end
|
40
29
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
30
|
+
get '/signup/?' do
|
31
|
+
redirect '/' if authenticated?
|
32
|
+
erb :signup
|
33
|
+
end
|
45
34
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
35
|
+
post '/signup' do
|
36
|
+
redirect '/' if authenticated?
|
37
|
+
user = User.new(params)
|
38
|
+
if user.valid?
|
39
|
+
user.save
|
40
|
+
env['warden'].set_user(user)
|
41
|
+
Manager.call :after_signup, [user, request, response]
|
42
|
+
flash[:notice] = Manager._after_signup_msg
|
43
|
+
redirect Manager._after_signup_path
|
44
|
+
else
|
45
|
+
flash[:error] = user.errors.messages
|
46
|
+
redirect '/signup'
|
47
|
+
end
|
48
|
+
end
|
50
49
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
50
|
+
get '/logout/?' do
|
51
|
+
if authenticated?
|
52
|
+
current_user.forget_me!
|
53
|
+
response.delete_cookie("authstrategies")
|
54
|
+
logout
|
55
|
+
Manager.call :after_logout, [request, response]
|
56
|
+
flash[:notice] = Manager._after_logout_msg
|
57
|
+
redirect Manager._after_logout_path
|
58
|
+
end
|
59
|
+
redirect '/'
|
60
|
+
end
|
61
|
+
|
62
|
+
post '/unauthenticated' do
|
63
|
+
Manager.call :after_login_failure, [request, response]
|
64
|
+
flash[:error] = env["warden"].message
|
65
|
+
redirect '/login'
|
66
|
+
end
|
63
67
|
end
|
64
68
|
end
|
@@ -20,8 +20,8 @@ class User < ActiveRecord::Base
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def password= password
|
23
|
-
|
24
|
-
self.encrypted_password = @password
|
23
|
+
@password = password
|
24
|
+
self.encrypted_password = Password.create(@password)
|
25
25
|
end
|
26
26
|
|
27
27
|
def authenticate request
|
@@ -3,6 +3,6 @@
|
|
3
3
|
<form action="login" method="post">
|
4
4
|
<p>Username:<input type="text" name="email" /></p>
|
5
5
|
<p>Password:<input type="password" name="password" /></p>
|
6
|
-
<p>Remember Me: <input type="
|
6
|
+
<p>Remember Me: <input type="checkbox" name="remember_me" /></p>
|
7
7
|
<p><input type="submit" name="Submit" /></p>
|
8
8
|
</form>
|
data/lib/authstrategies.rb
CHANGED
@@ -11,26 +11,179 @@ require "authstrategies/remember_me.rb"
|
|
11
11
|
require "authstrategies/models/user.rb"
|
12
12
|
|
13
13
|
module Authstrategies
|
14
|
+
module Manager
|
15
|
+
|
16
|
+
@@callbacks = {}
|
17
|
+
|
18
|
+
@@_after_login_path = '/'
|
19
|
+
@@_after_login_msg = 'Successfully logged in!'
|
20
|
+
|
21
|
+
@@_after_logout_path = '/'
|
22
|
+
@@_after_logout_msg = 'Successfully logged out!'
|
23
|
+
|
24
|
+
@@_after_signup_path = '/'
|
25
|
+
@@_after_signup_msg = 'Successfully signed up!'
|
26
|
+
|
27
|
+
def self.registered? hook
|
28
|
+
@@callbacks.has_key? hook
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.register hook, &block
|
32
|
+
if @@callbacks[hook].class == Array
|
33
|
+
@@callbacks[hook].push block
|
34
|
+
else
|
35
|
+
@@callbacks[hook] = [block]
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.call hook, args = []
|
40
|
+
if @@callbacks.has_key? hook
|
41
|
+
@@callbacks[hook].each do |callback|
|
42
|
+
callback.call(args)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# This is called every time the user is set. The user is set:
|
48
|
+
# => on each request when they are accessed for the first time via env['warden'].user
|
49
|
+
# => when the user is initially authenticated
|
50
|
+
# => when the user is set via the set_user method
|
51
|
+
# Courtesy of Warden, for more information
|
52
|
+
# check the warden callbacks wiki
|
53
|
+
def self.after_set_user &block
|
54
|
+
Warden::Manager.after_set_user do |user, auth, opts|
|
55
|
+
yield(user, auth, opts)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
# Executed every time the user is authenticated
|
60
|
+
# (first time in each session).
|
61
|
+
# Courtesy of Warden, for more information
|
62
|
+
# check the warden callbacks wiki
|
63
|
+
def self.after_authentication &block
|
64
|
+
Warden::Manager.after_authentication do |user, auth, opts|
|
65
|
+
yield(user, auth, opts)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
# This callback is run right before the failure application is called.
|
70
|
+
# Courtesy of Warden, for more information
|
71
|
+
# check the warden callbacks wiki
|
72
|
+
def self.before_login_failure &block
|
73
|
+
Warden::Manager.before_failure do |env, opts|
|
74
|
+
yield(env, opts)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
# This is called in the failure application
|
79
|
+
# Useful for redirecting the user after he logs in
|
80
|
+
# 2 params are passed to this callback
|
81
|
+
# =>request - the request data
|
82
|
+
# =>response - the response data
|
83
|
+
def self.after_login_failure &block
|
84
|
+
self.register :after_login_failure, &block
|
85
|
+
end
|
86
|
+
|
87
|
+
#This callback is run before each user is logged out.
|
88
|
+
# Courtesy of Warden, for more information
|
89
|
+
# check the warden callbacks wiki
|
90
|
+
def self.before_logout &block
|
91
|
+
Warden::Manager.before_logout do |user, auth, opts|
|
92
|
+
yield(user, auth, opts)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
# This is called after the user is logged out.
|
97
|
+
# Useful for redirecting the user after logging out
|
98
|
+
# 2 parameters are passed to this callback
|
99
|
+
# =>request - the request data
|
100
|
+
# =>response - the response data
|
101
|
+
def self.after_logout &block
|
102
|
+
self.register :after_logout, &block
|
103
|
+
end
|
104
|
+
|
105
|
+
# This defines a path to redirect the user to
|
106
|
+
# after he logs out and a flash message to print
|
107
|
+
# path default is root path
|
108
|
+
# message default is 'Logged out successfully!'
|
109
|
+
def self.after_logout_path path, message
|
110
|
+
@@_after_logout_path, @@after_logout_msg = path, message
|
111
|
+
end
|
112
|
+
|
113
|
+
def self._after_logout_path
|
114
|
+
@@_after_logout_path
|
115
|
+
end
|
116
|
+
|
117
|
+
def self._after_logout_msg
|
118
|
+
@@_after_logout_msg
|
119
|
+
end
|
120
|
+
|
121
|
+
# This is called each time after the user logs in
|
122
|
+
# 3 parameters are passed to this callback
|
123
|
+
# =>current_user - the user that hase just been set
|
124
|
+
# =>request - the request data
|
125
|
+
# =>response - the response data
|
126
|
+
def self.after_login &block
|
127
|
+
self.register :after_login, &block
|
128
|
+
end
|
129
|
+
|
130
|
+
# This defines a path to redirect the user to
|
131
|
+
# after he logs in and a flash message to print
|
132
|
+
# path default is root path
|
133
|
+
# message default is 'Logged in successfully!'
|
134
|
+
def self.after_login_path path, message
|
135
|
+
@@_after_login_path, @@after_login_msg = path, message
|
136
|
+
end
|
137
|
+
|
138
|
+
def self._after_login_path
|
139
|
+
@@_after_login_path
|
140
|
+
end
|
141
|
+
|
142
|
+
def self._after_login_msg
|
143
|
+
@@after_login_msg
|
144
|
+
end
|
145
|
+
|
146
|
+
# This is called after the user is saved into
|
147
|
+
# the database
|
148
|
+
# 3 parameters are passed to this callback
|
149
|
+
# =>user - the user that just signed up
|
150
|
+
# =>request - the request data
|
151
|
+
# =>response - the response data
|
152
|
+
# Also since the user is set to session via env['warden'].set_user
|
153
|
+
# after_set_user is also called after the user signs up
|
154
|
+
def self.after_signup &block
|
155
|
+
self.register :after_signup, &block
|
156
|
+
end
|
157
|
+
|
158
|
+
# This defines a path to redirect the user to
|
159
|
+
# after he signs up and a flash message to print
|
160
|
+
# path default is root path
|
161
|
+
# message default is 'Successfully signed up!
|
162
|
+
def self.after_signup_path path, message
|
163
|
+
@@_after_signup_path, @@after_signup_msg = path, message
|
164
|
+
end
|
165
|
+
|
166
|
+
end
|
167
|
+
|
14
168
|
module Base
|
15
|
-
|
169
|
+
def self.registered(app)
|
16
170
|
app.helpers Helpers
|
171
|
+
app.use Warden::Manager do |manager|
|
172
|
+
manager.failure_app = app
|
173
|
+
manager.default_strategies :password
|
174
|
+
end
|
17
175
|
|
18
|
-
|
19
|
-
|
20
|
-
manager.default_strategies :password, :remember_me
|
21
|
-
end
|
22
|
-
|
23
|
-
Warden::Manager.before_failure do |env,opts|
|
24
|
-
env['REQUEST_METHOD'] = 'POST'
|
176
|
+
Manager.before_login_failure do |env,opts|
|
177
|
+
env['REQUEST_METHOD'] = 'POST'
|
25
178
|
end
|
26
179
|
Warden::Strategies.add(:password, PasswordStrategy)
|
27
|
-
|
180
|
+
end
|
28
181
|
end
|
29
182
|
|
30
183
|
module RememberMe
|
31
184
|
def self.registered(app)
|
32
185
|
Warden::Strategies.add(:remember_me, RememberMeStrategy)
|
33
|
-
|
34
|
-
|
186
|
+
end
|
187
|
+
end
|
35
188
|
end
|
36
189
|
require "authstrategies/middleware.rb"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: authstrategies
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dobromir Ivanov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-12-
|
11
|
+
date: 2013-12-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -108,20 +108,6 @@ dependencies:
|
|
108
108
|
- - ! '>='
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: rack
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - ! '>='
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '0'
|
118
|
-
type: :runtime
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - ! '>='
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: '0'
|
125
111
|
- !ruby/object:Gem::Dependency
|
126
112
|
name: rack-flash3
|
127
113
|
requirement: !ruby/object:Gem::Requirement
|