uber_login 1.0.3 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/lib/uber_login/version.rb +1 -1
- data/lib/uber_login.rb +40 -20
- data/spec/spec_helper.rb +3 -0
- data/spec/uber_login_spec.rb +61 -0
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MmY5ZDRiZGZiNmViZTAyNzQwNDRjYWFlMjQyNjA4MzkxZjYyYjc0YQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
Y2Y0ZWEyMzhmZWQwMzQ2ZGIxY2MzZWFlMWY5YTgzZTIyMDc2YzNkMA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YzQ3ZWFlMmNhNGIzZmY0N2M4ZmI2NzY2Yzk3NDg5ZmUyNGI0MzY1YjUyZjI4
|
10
|
+
NThhMjM3ZDI0ZTkyY2Q0ZDEzZmZhYjA0MzY3NTg4OGU2YzM3NDc4ZjMxNTJi
|
11
|
+
YjgwZTI3YWQ0Y2UzMDc4ZTNiMDYwM2Y2ZjBmNDYzNjA5NDYxNzQ=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MzBlM2Y3ZTMzYjcwYmQ5YjgwZjExOGVjODA4NjFlYjU3MWE4MDcyNDNiOTU3
|
14
|
+
ZTNmYTI2YWY4MjIyNTdhYWNlYThiZTk4MjI1MjYwNTU1YmIzNDZlMWVkYzli
|
15
|
+
OWJjODFjMDUxZWFmM2EyYjIxMDJiZDA1ZDkwNmJiNjNhMzc3ZTM=
|
data/lib/uber_login/version.rb
CHANGED
data/lib/uber_login.rb
CHANGED
@@ -5,8 +5,16 @@ require 'uber_login/session_manager'
|
|
5
5
|
require 'securerandom'
|
6
6
|
require 'bcrypt'
|
7
7
|
require 'user_agent'
|
8
|
+
require 'active_support'
|
8
9
|
|
9
10
|
module UberLogin
|
11
|
+
include ActiveSupport::Callbacks
|
12
|
+
extend ActiveSupport::Concern
|
13
|
+
|
14
|
+
included do
|
15
|
+
define_callbacks :login, :logout
|
16
|
+
end
|
17
|
+
|
10
18
|
##
|
11
19
|
# Returns the logged in user.
|
12
20
|
# If session[+:uid+] is set:
|
@@ -34,14 +42,17 @@ module UberLogin
|
|
34
42
|
def login(user, remember = false)
|
35
43
|
logout_all unless UberLogin.configuration.allow_multiple_login
|
36
44
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
45
|
+
run_callbacks :login do
|
46
|
+
if strong_sessions or remember
|
47
|
+
composite = generate_and_save_token(user.id)
|
48
|
+
cookie_manager.persistent_login(user.id, composite) if remember
|
49
|
+
else
|
50
|
+
composite = nil
|
51
|
+
end
|
43
52
|
|
44
|
-
|
53
|
+
reset_session
|
54
|
+
session_manager.login(user.id, composite)
|
55
|
+
end
|
45
56
|
end
|
46
57
|
|
47
58
|
##
|
@@ -49,12 +60,14 @@ module UberLogin
|
|
49
60
|
# and corresponding token removed from the database.
|
50
61
|
# If sequence is not nil it only removes the sequence and token from the database.
|
51
62
|
def logout(sequence = nil)
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
63
|
+
run_callbacks :logout do
|
64
|
+
if sequence.nil? or sequence == current_sequence
|
65
|
+
delete_from_database if cookies[:uid] or strong_sessions
|
66
|
+
session_manager.clear
|
67
|
+
cookie_manager.clear
|
68
|
+
else
|
69
|
+
delete_from_database(sequence)
|
70
|
+
end
|
58
71
|
end
|
59
72
|
end
|
60
73
|
|
@@ -67,6 +80,10 @@ module UberLogin
|
|
67
80
|
cookie_manager.clear
|
68
81
|
end
|
69
82
|
|
83
|
+
def persistent_login?
|
84
|
+
cookie_manager.valid?
|
85
|
+
end
|
86
|
+
|
70
87
|
private
|
71
88
|
def cookie_manager
|
72
89
|
@cookie_manager ||= CookieManager.new(cookies, request)
|
@@ -78,8 +95,8 @@ module UberLogin
|
|
78
95
|
|
79
96
|
# See +current_user+
|
80
97
|
def current_user_uncached
|
81
|
-
if session[:uid]
|
82
|
-
logout
|
98
|
+
if session[:uid] and strong_sessions
|
99
|
+
logout unless session_manager.valid?
|
83
100
|
else
|
84
101
|
login_from_cookies if cookie_manager.login_cookies?
|
85
102
|
end
|
@@ -90,11 +107,14 @@ module UberLogin
|
|
90
107
|
##
|
91
108
|
# Attempts a login from the +:uid+ and +:ulogin+ cookies.
|
92
109
|
def login_from_cookies
|
93
|
-
if
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
110
|
+
if persistent_login?
|
111
|
+
run_callbacks :login do
|
112
|
+
reset_session
|
113
|
+
session[:uid] = cookies[:uid]
|
114
|
+
generate_new_token
|
115
|
+
session[:ulogin] = cookies[:ulogin]
|
116
|
+
session[:uid]
|
117
|
+
end
|
98
118
|
else
|
99
119
|
cookie_manager.clear
|
100
120
|
nil
|
data/spec/spec_helper.rb
CHANGED
data/spec/uber_login_spec.rb
CHANGED
@@ -40,6 +40,16 @@ describe UberLogin do
|
|
40
40
|
expect(session[:ulogin]).to be_nil
|
41
41
|
end
|
42
42
|
end
|
43
|
+
|
44
|
+
it 'resets the session' do
|
45
|
+
expect(controller).to receive :reset_session
|
46
|
+
controller.login(user)
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'runs the :login callbacks' do
|
50
|
+
expect(controller).to receive(:run_callbacks).with(:login)
|
51
|
+
controller.login(user)
|
52
|
+
end
|
43
53
|
end
|
44
54
|
|
45
55
|
context 'remember is true' do
|
@@ -62,6 +72,11 @@ describe UberLogin do
|
|
62
72
|
expect(cookies).to receive(:permanent).twice.and_return cookies
|
63
73
|
controller.login(user, true)
|
64
74
|
end
|
75
|
+
|
76
|
+
it 'resets the session' do
|
77
|
+
expect(controller).to receive :reset_session
|
78
|
+
controller.login(user, true)
|
79
|
+
end
|
65
80
|
end
|
66
81
|
|
67
82
|
context 'only one session is allowed per user' do
|
@@ -105,6 +120,11 @@ describe UberLogin do
|
|
105
120
|
}.to change{ LoginToken.count }.by -1
|
106
121
|
end
|
107
122
|
end
|
123
|
+
|
124
|
+
it 'runs the :logout callbacks' do
|
125
|
+
expect(controller).to receive(:run_callbacks).with(:logout)
|
126
|
+
controller.logout
|
127
|
+
end
|
108
128
|
end
|
109
129
|
|
110
130
|
context 'sequence is equal to current user sequence' do
|
@@ -213,6 +233,16 @@ describe UberLogin do
|
|
213
233
|
context 'the cookies are valid' do
|
214
234
|
before { UberLogin::CookieManager.any_instance.stub(:valid?).and_return true }
|
215
235
|
|
236
|
+
it 'resets the session' do
|
237
|
+
expect(controller).to receive :reset_session
|
238
|
+
controller.login(user, true)
|
239
|
+
end
|
240
|
+
|
241
|
+
it 'runs the :login callbacks' do
|
242
|
+
expect(controller).to receive(:run_callbacks)
|
243
|
+
controller.login(user, true)
|
244
|
+
end
|
245
|
+
|
216
246
|
it 'returns an user object with that uid' do
|
217
247
|
expect(controller.current_user.id).to eq "100"
|
218
248
|
end
|
@@ -256,4 +286,35 @@ describe UberLogin do
|
|
256
286
|
end
|
257
287
|
end
|
258
288
|
end
|
289
|
+
|
290
|
+
describe '#persistent_login?' do
|
291
|
+
context 'cookies[:uid] and cookies[:ulogin] are set' do
|
292
|
+
before {
|
293
|
+
cookies[:uid] = "100"
|
294
|
+
cookies[:ulogin] = "whatever:beef"
|
295
|
+
}
|
296
|
+
|
297
|
+
context 'the cookies are valid' do
|
298
|
+
before { UberLogin::CookieManager.any_instance.stub(:valid?).and_return true }
|
299
|
+
|
300
|
+
it 'is true' do
|
301
|
+
expect(controller.persistent_login?).to be_true
|
302
|
+
end
|
303
|
+
end
|
304
|
+
|
305
|
+
context 'the cookies are not valid' do
|
306
|
+
before { UberLogin::CookieManager.any_instance.stub(:valid?).and_return false }
|
307
|
+
|
308
|
+
it 'is false' do
|
309
|
+
expect(controller.persistent_login?).to be_false
|
310
|
+
end
|
311
|
+
end
|
312
|
+
end
|
313
|
+
|
314
|
+
context 'cookies are not set' do
|
315
|
+
it 'is false' do
|
316
|
+
expect(controller.persistent_login?).to be_false
|
317
|
+
end
|
318
|
+
end
|
319
|
+
end
|
259
320
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: uber_login
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Francesco Boffa
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-02-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: useragent
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - ! '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 0.10.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activesupport
|
29
|
+
type: :runtime
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ! '>='
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0'
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ! '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
description: Login and logout management with secure "remember me" capabilities and
|
28
42
|
complete session control. You can even force a user to logout!
|
29
43
|
email: fra.boffa@gmail.com
|