uber_login 1.0.3 → 2.1.0
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/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
|