authie 4.0.0.rc3 → 4.0.0.rc6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 88107b7b60c50bacd33b7c704ab0e7c4f44efe86b1fbe371aa9ab7eca95ca657
4
- data.tar.gz: 76146beeb6b2a8143f7a40fb0df0412c84d9521a1e4431768d14d6e5b56fa702
3
+ metadata.gz: 3f0ed5ff2724edcadbe4c3da00f495f61c49fb8527a9a3ea990d6cbb0d1b3481
4
+ data.tar.gz: f3c621bd0cd8561123e39b508647d1bc5b356038928682d1b541635d9913c9cd
5
5
  SHA512:
6
- metadata.gz: 65606471280d99e160c1e487be855ccbaca21cea958e872f9177c64b821b0cfd1c6e73b1c6b5f3d8cda582c8c20bd1beef1331c60e7ea20b1ba815a4fff2f222
7
- data.tar.gz: 6b1626f7618bc12a8e2f0358ce8ec59ac74f763c30e15c4f92769c656c2300dc5743a6cd2eec8195bfbe96c16b869f7595aa73dce51d5649e4db98b8dc76a8b0
6
+ metadata.gz: f326f7e0aee77baccff01544c98730902fd77c722c803b49257bad520eb6f5340ab00bf585050b6a5d447409f86954147ec9e701d9af404948cb8f7977008c78
7
+ data.tar.gz: 55da617f47e858b869fb4e3f1afb14a45dd3ff2a661656db89906bdf66fd2c2a785ac70163de3e60e342f3e91601fcb058ff7a77663f840502268e77a224d7d5
@@ -9,10 +9,13 @@ module Authie
9
9
  # The controller delegate implements methods that can be used by a controller. These are then
10
10
  # extended into controllers as needed (see ControllerExtension).
11
11
  class ControllerDelegate
12
+ attr_accessor :touch_auth_session_enabled
13
+
12
14
  # @param controller [ActionController::Base]
13
15
  # @return [Authie::ControllerDelegate]
14
16
  def initialize(controller)
15
17
  @controller = controller
18
+ @touch_auth_session_enabled = true
16
19
  end
17
20
 
18
21
  # Sets a browser ID. This must be performed on any page request where AUthie will be used.
@@ -36,18 +39,25 @@ module Authie
36
39
  proposed_browser_id
37
40
  end
38
41
 
39
- # Touch the session on each request to ensure that it is validated and all last activity
40
- # information is updated. This will return the session if one has been touched otherwise
41
- # it will reteurn false if there is no session/not logged in. It is safe to run this on
42
- # all requests even if there is no session.
42
+ # Validate the auth session to ensure that it is current validate and raise an error if it
43
+ # is not suitable for use.
43
44
  #
44
45
  # @return [Authie::Session, false]
45
- def touch_auth_session
46
- return auth_session.touch if logged_in?
46
+ def validate_auth_session
47
+ return auth_session.validate if logged_in?
47
48
 
48
49
  false
49
50
  end
50
51
 
52
+ # Touch the session to update details on the latest activity.
53
+ #
54
+ # @return [Authie::Session, false]
55
+ def touch_auth_session
56
+ yield if block_given?
57
+ ensure
58
+ auth_session.touch if @touch_auth_session_enabled && logged_in?
59
+ end
60
+
51
61
  # Return the user for the currently logged in user or nil if no user is logged in
52
62
  #
53
63
  # @return [ActiveRecord::Base, nil]
@@ -61,9 +71,9 @@ module Authie
61
71
  # will be invalidated.
62
72
  #
63
73
  # @return [Authie::Session, nil]
64
- def create_auth_session(user)
74
+ def create_auth_session(user, **kwargs)
65
75
  if user
66
- @auth_session = Authie::Session.start(@controller, user: user)
76
+ @auth_session = Authie::Session.start(@controller, user: user, **kwargs)
67
77
  return @auth_session
68
78
  end
69
79
 
@@ -7,9 +7,11 @@ module Authie
7
7
  class << self
8
8
  def included(base)
9
9
  base.helper_method :logged_in?, :current_user, :auth_session
10
- base.before_action :set_browser_id, :touch_auth_session
10
+ base.before_action :set_browser_id, :validate_auth_session
11
+ base.around_action :touch_auth_session
11
12
 
12
13
  base.delegate :set_browser_id, to: :auth_session_delegate
14
+ base.delegate :validate_auth_session, to: :auth_session_delegate
13
15
  base.delegate :touch_auth_session, to: :auth_session_delegate
14
16
  base.delegate :current_user, to: :auth_session_delegate
15
17
  base.delegate :create_auth_session, to: :auth_session_delegate
@@ -24,5 +26,9 @@ module Authie
24
26
  def auth_session_delegate
25
27
  @auth_session_delegate ||= Authie::ControllerDelegate.new(self)
26
28
  end
29
+
30
+ def skip_touch_auth_session!
31
+ auth_session_delegate.touch_auth_session_enabled = false
32
+ end
27
33
  end
28
34
  end
@@ -88,7 +88,6 @@ module Authie
88
88
  # @raises [ActiveRecord::RecordInvalid]
89
89
  # @return [Authie::Session]
90
90
  def touch
91
- validate
92
91
  @session.last_activity_at = Time.now
93
92
  @session.last_activity_ip = @controller.request.ip
94
93
  @session.last_activity_path = @controller.request.path
@@ -206,20 +205,22 @@ module Authie
206
205
  # Create a new session within the given controller for the
207
206
  #
208
207
  # @param controller [ActionController::Base]
209
- # @option params [ActiveRecord::Base] user
208
+ # @param user [ActiveRecord::Base] user
209
+ # @param persistent [Boolean] create a persistent session
210
210
  # @return [Authie::Session]
211
- def start(controller, params = {})
211
+ def start(controller, user:, persistent: false, see_password: false, **params)
212
212
  cookies = controller.send(:cookies)
213
213
  SessionModel.active.where(browser_id: cookies[:browser_id]).each(&:invalidate!)
214
- user_object = params.delete(:user)
215
214
 
216
215
  session = SessionModel.new(params)
217
- session.user = user_object
216
+ session.user = user
218
217
  session.browser_id = cookies[:browser_id]
219
218
  session.login_at = Time.now
220
219
  session.login_ip = controller.request.ip
221
220
  session.host = controller.request.host
222
221
  session.user_agent = controller.request.user_agent
222
+ session.expires_at = Time.now + Authie.config.persistent_session_length if persistent
223
+ session.password_seen_at = Time.now if see_password
223
224
  session.save!
224
225
 
225
226
  new(controller, session).start
@@ -261,6 +262,7 @@ module Authie
261
262
  delegate :active?, to: :session
262
263
  delegate :browser_id, to: :session
263
264
  delegate :expired?, to: :session
265
+ delegate :expires_at, to: :session
264
266
  delegate :first_session_for_browser?, to: :session
265
267
  delegate :first_session_for_ip?, to: :session
266
268
  delegate :get, to: :session
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: authie
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0.rc3
4
+ version: 4.0.0.rc6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Cooke
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-04-29 00:00:00.000000000 Z
11
+ date: 2022-05-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord