authie 3.1.3 → 3.1.4
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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/authie/config.rb +15 -0
- data/lib/authie/controller_delegate.rb +2 -0
- data/lib/authie/event_manager.rb +28 -0
- data/lib/authie/session.rb +30 -1
- data/lib/authie/version.rb +1 -1
- metadata +3 -2
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 06d55be51805149b69d8bd60a06a87df1400898a80bb2aa2ae53e3805efa268f
|
4
|
+
data.tar.gz: 573abda148ce414df7745cf836c768d4fb7369cf41454c8b5b1443f56bfc71e8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cbfd2c8e200bc82442a2ff4334b1e5f9b8739a7d99828ceef65b68b0304703cd39845f72469a52546bbf9dbd3bfc68337ff3c907140b362918dbc57ee15568d4
|
7
|
+
data.tar.gz: 8c1ae0e5e37a4f3f9b4e7e17ea475904735fe929b26f56fe16eb773609ca3126727b1d6980f28186c077f70d88075d9c1e3f3f269b095574c562b462e72f2745
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/lib/authie/config.rb
CHANGED
@@ -1,6 +1,12 @@
|
|
1
|
+
require 'authie/event_manager'
|
2
|
+
|
1
3
|
module Authie
|
2
4
|
class Config
|
3
5
|
|
6
|
+
def initialize
|
7
|
+
@callbacks = {}
|
8
|
+
end
|
9
|
+
|
4
10
|
def session_inactivity_timeout
|
5
11
|
@session_inactivity_timeout || 12.hours
|
6
12
|
end
|
@@ -25,9 +31,18 @@ module Authie
|
|
25
31
|
end
|
26
32
|
attr_writer :browser_id_cookie_name
|
27
33
|
|
34
|
+
def events
|
35
|
+
@event_manager ||= EventManager.new
|
36
|
+
end
|
28
37
|
end
|
29
38
|
|
30
39
|
def self.config
|
31
40
|
@config ||= Config.new
|
32
41
|
end
|
42
|
+
|
43
|
+
def self.configure(&block)
|
44
|
+
block.call(config)
|
45
|
+
config
|
46
|
+
end
|
47
|
+
|
33
48
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Authie
|
2
|
+
class EventManager
|
3
|
+
|
4
|
+
def initialize
|
5
|
+
@callbacks = {}
|
6
|
+
end
|
7
|
+
|
8
|
+
def dispatch(event, *args)
|
9
|
+
if callbacks = @callbacks[event.to_sym]
|
10
|
+
callbacks.each do |cb|
|
11
|
+
cb.call(*args)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def on(event, &block)
|
17
|
+
@callbacks[event.to_sym] ||= []
|
18
|
+
@callbacks[event.to_sym] << block
|
19
|
+
end
|
20
|
+
|
21
|
+
def remove(event, block)
|
22
|
+
if cb = @callbacks[event.to_sym]
|
23
|
+
cb.delete(block)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
data/lib/authie/session.rb
CHANGED
@@ -60,6 +60,8 @@ module Authie
|
|
60
60
|
self.last_activity_path = controller.request.path
|
61
61
|
self.requests += 1
|
62
62
|
self.save!
|
63
|
+
Authie.config.events.dispatch(:session_touched, self)
|
64
|
+
true
|
63
65
|
end
|
64
66
|
|
65
67
|
# Sets the cookie on the associated controller.
|
@@ -70,6 +72,8 @@ module Authie
|
|
70
72
|
:httponly => true,
|
71
73
|
:expires => self.expires_at
|
72
74
|
}
|
75
|
+
Authie.config.events.dispatch(:session_cookie_updated, self)
|
76
|
+
true
|
73
77
|
end
|
74
78
|
|
75
79
|
# Check the security of the session to ensure it can be used.
|
@@ -77,26 +81,31 @@ module Authie
|
|
77
81
|
if controller
|
78
82
|
if cookies[:browser_id] != self.browser_id
|
79
83
|
invalidate!
|
84
|
+
Authie.config.events.dispatch(:browser_id_mismatch_error, self)
|
80
85
|
raise BrowserMismatch, "Browser ID mismatch"
|
81
86
|
end
|
82
87
|
|
83
88
|
unless self.active?
|
84
89
|
invalidate!
|
90
|
+
Authie.config.events.dispatch(:invalid_session_error, self)
|
85
91
|
raise InactiveSession, "Session is no longer active"
|
86
92
|
end
|
87
93
|
|
88
94
|
if self.expired?
|
89
95
|
invalidate!
|
96
|
+
Authie.config.events.dispatch(:expired_session_error, self)
|
90
97
|
raise ExpiredSession, "Persistent session has expired"
|
91
98
|
end
|
92
99
|
|
93
100
|
if self.inactive?
|
94
101
|
invalidate!
|
102
|
+
Authie.config.events.dispatch(:inactive_session_error, self)
|
95
103
|
raise InactiveSession, "Non-persistent session has expired"
|
96
104
|
end
|
97
105
|
|
98
106
|
if self.host && self.host != controller.request.host
|
99
107
|
invalidate!
|
108
|
+
Authie.config.events.dispatch(:host_mismatch_error, self)
|
100
109
|
raise HostMismatch, "Session was created on #{self.host} but accessed using #{controller.request.host}"
|
101
110
|
end
|
102
111
|
end
|
@@ -141,6 +150,8 @@ module Authie
|
|
141
150
|
if controller
|
142
151
|
cookies.delete(:user_session)
|
143
152
|
end
|
153
|
+
Authie.config.events.dispatch(:session_invalidated, self)
|
154
|
+
true
|
144
155
|
end
|
145
156
|
|
146
157
|
# Set some additional data in this session
|
@@ -166,6 +177,8 @@ module Authie
|
|
166
177
|
def see_password!
|
167
178
|
self.password_seen_at = Time.now
|
168
179
|
self.save!
|
180
|
+
Authie.config.events.dispatch(:seen_password, self)
|
181
|
+
true
|
169
182
|
end
|
170
183
|
|
171
184
|
# Have we seen the user's password recently in this sesion?
|
@@ -183,6 +196,8 @@ module Authie
|
|
183
196
|
self.two_factored_at = Time.now
|
184
197
|
self.two_factored_ip = controller.request.ip
|
185
198
|
self.save!
|
199
|
+
Authie.config.events.dispatch(:marked_as_two_factored, self)
|
200
|
+
true
|
186
201
|
end
|
187
202
|
|
188
203
|
# Create a new session for impersonating for the given user
|
@@ -203,6 +218,16 @@ module Authie
|
|
203
218
|
end
|
204
219
|
end
|
205
220
|
|
221
|
+
# Is this the first session for this session's browser?
|
222
|
+
def first_session_for_browser?
|
223
|
+
self.class.where("id < ?", self.id).where(:user => self.user, :browser_id => self.browser_id).empty?
|
224
|
+
end
|
225
|
+
|
226
|
+
# Is this the first session for the IP?
|
227
|
+
def first_session_for_ip?
|
228
|
+
self.class.where("id < ?", self.id).where(:user => self.user, :login_ip => self.login_ip).empty?
|
229
|
+
end
|
230
|
+
|
206
231
|
# Find a session from the database for the given controller instance.
|
207
232
|
# Returns a session object or :none if no session is found.
|
208
233
|
def self.get_session(controller)
|
@@ -226,7 +251,7 @@ module Authie
|
|
226
251
|
# Any other sessions for the browser will be invalidated.
|
227
252
|
def self.start(controller, params = {})
|
228
253
|
cookies = controller.send(:cookies)
|
229
|
-
self.where(:browser_id => cookies[:browser_id]).each(&:invalidate!)
|
254
|
+
self.active.where(:browser_id => cookies[:browser_id]).each(&:invalidate!)
|
230
255
|
session = self.new(params)
|
231
256
|
session.controller = controller
|
232
257
|
session.browser_id = cookies[:browser_id]
|
@@ -234,15 +259,19 @@ module Authie
|
|
234
259
|
session.login_ip = controller.request.ip
|
235
260
|
session.host = controller.request.host
|
236
261
|
session.save!
|
262
|
+
Authie.config.events.dispatch(:start_session, session)
|
237
263
|
session
|
238
264
|
end
|
239
265
|
|
240
266
|
# Cleanup any old sessions.
|
241
267
|
def self.cleanup
|
268
|
+
Authie.config.events.dispatch(:before_cleanup)
|
242
269
|
# Invalidate transient sessions that haven't been used
|
243
270
|
self.active.where("expires_at IS NULL AND last_activity_at < ?", Authie.config.session_inactivity_timeout.ago).each(&:invalidate!)
|
244
271
|
# Invalidate persistent sessions that have expired
|
245
272
|
self.active.where("expires_at IS NOT NULL AND expires_at < ?", Time.now).each(&:invalidate!)
|
273
|
+
Authie.config.events.dispatch(:after_cleanup)
|
274
|
+
true
|
246
275
|
end
|
247
276
|
|
248
277
|
# Return a hash of a given token
|
data/lib/authie/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: authie
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1.
|
4
|
+
version: 3.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Cooke
|
@@ -35,7 +35,7 @@ cert_chain:
|
|
35
35
|
iyQrH6PJ0xgVJNYx+DLq3eFmo2hYJkw/lVhYAK+MdajtYJbD5VvCIEHO0d5RRgV+
|
36
36
|
qnCNZoPPy0UtRmGKZTMZvVJEZiw4g0fY
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date: 2018-03-
|
38
|
+
date: 2018-03-12 00:00:00.000000000 Z
|
39
39
|
dependencies: []
|
40
40
|
description: A Rails library for storing user sessions in a backend database
|
41
41
|
email:
|
@@ -57,6 +57,7 @@ files:
|
|
57
57
|
- lib/authie/controller_extension.rb
|
58
58
|
- lib/authie/engine.rb
|
59
59
|
- lib/authie/error.rb
|
60
|
+
- lib/authie/event_manager.rb
|
60
61
|
- lib/authie/rack_controller.rb
|
61
62
|
- lib/authie/session.rb
|
62
63
|
- lib/authie/version.rb
|
metadata.gz.sig
CHANGED
Binary file
|