katalyst-koi 5.5.0 → 5.6.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 +4 -4
- data/app/controllers/admin/admin_users_controller.rb +1 -0
- data/app/controllers/admin/sessions_controller.rb +8 -7
- data/app/controllers/admin/tokens_controller.rb +1 -3
- data/app/controllers/concerns/koi/controller/records_authentication.rb +22 -9
- data/db/migrate/20260501000000_add_last_sign_out_at_to_admin_users.rb +7 -0
- data/lib/koi/middleware/admin_authentication.rb +18 -2
- metadata +2 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: beb8b89b9542bb29583d8908cbc41746eaa2eaac7540ebd0c1ba0f7818e2a524
|
|
4
|
+
data.tar.gz: 0f80f33a3561c9913540115cff337c5df17ca50789435973ad1b1df11438cbf8
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: dbcc40de9887a60357c6e03280c51e1172bebdbd72f34ef549a57b9ea31566cf7b79353e802a4678bf7d7580dc7a10e9a3095aabc6c44b08983b88027e1d59f4
|
|
7
|
+
data.tar.gz: 35debfa95facb9a6419d462352a42e08d8dfe6810ff0432b6b41d653ce1decf5373e27e25fc4c0ff17457c9949258228abe022c4b5e89e2ac5c642a8012ba4f5
|
|
@@ -94,6 +94,7 @@ module Admin
|
|
|
94
94
|
attribute :name, :string
|
|
95
95
|
attribute :email, :string
|
|
96
96
|
attribute :last_sign_in_at, :date
|
|
97
|
+
attribute :last_sign_out_at, :date
|
|
97
98
|
attribute :sign_in_count, :integer
|
|
98
99
|
attribute :password_login, :enum, scope: :has_password_login, multiple: false
|
|
99
100
|
attribute :passkey, :boolean, scope: :has_passkey
|
|
@@ -41,9 +41,7 @@ module Admin
|
|
|
41
41
|
end
|
|
42
42
|
|
|
43
43
|
def destroy
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
session[:admin_user_id] = nil
|
|
44
|
+
destroy_admin_session!
|
|
47
45
|
|
|
48
46
|
redirect_to new_admin_session_path
|
|
49
47
|
end
|
|
@@ -103,11 +101,14 @@ module Admin
|
|
|
103
101
|
def authenticate_local_admin
|
|
104
102
|
return if admin_signed_in? || !Rails.env.development?
|
|
105
103
|
|
|
106
|
-
Koi::Current.admin_user = Admin::User.find_by(email:
|
|
104
|
+
Koi::Current.admin_user = Admin::User.find_by(email: [
|
|
105
|
+
ENV.fetch("EMAIL", nil),
|
|
106
|
+
"#{ENV.fetch('USER', nil)}@katalyst.com.au",
|
|
107
|
+
].compact)
|
|
107
108
|
|
|
108
109
|
return unless admin_signed_in?
|
|
109
110
|
|
|
110
|
-
|
|
111
|
+
create_admin_session!
|
|
111
112
|
|
|
112
113
|
flash.delete(:redirect) if (redirect = flash[:redirect])
|
|
113
114
|
|
|
@@ -115,9 +116,9 @@ module Admin
|
|
|
115
116
|
end
|
|
116
117
|
|
|
117
118
|
def admin_sign_in(admin_user)
|
|
118
|
-
|
|
119
|
+
Koi::Current.admin_user = admin_user
|
|
119
120
|
|
|
120
|
-
|
|
121
|
+
create_admin_session!
|
|
121
122
|
|
|
122
123
|
redirect_to(url_from(params[:redirect].presence) || admin_dashboard_path, status: :see_other)
|
|
123
124
|
end
|
|
@@ -22,9 +22,7 @@ module Admin
|
|
|
22
22
|
|
|
23
23
|
def update
|
|
24
24
|
if (@admin_user = Admin::User.find_by_token_for(:password_reset, params[:token]))
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
session[:admin_user_id] = admin_user.id
|
|
25
|
+
create_admin_session!(admin_user)
|
|
28
26
|
|
|
29
27
|
if admin_user.credentials.any?
|
|
30
28
|
redirect_to(admin_root_path, status: :see_other)
|
|
@@ -3,33 +3,46 @@
|
|
|
3
3
|
module Koi
|
|
4
4
|
module Controller
|
|
5
5
|
module RecordsAuthentication
|
|
6
|
-
def
|
|
7
|
-
|
|
6
|
+
def create_admin_session!(admin_user = Koi::Current.admin_user)
|
|
7
|
+
sign_in_at = Time.current
|
|
8
8
|
|
|
9
|
-
admin_user.last_sign_in_at = admin_user.current_sign_in_at
|
|
10
|
-
admin_user.last_sign_in_ip = admin_user.current_sign_in_ip
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def record_sign_in!(admin_user)
|
|
14
9
|
update_last_sign_in(admin_user)
|
|
15
10
|
|
|
16
|
-
admin_user.current_sign_in_at =
|
|
11
|
+
admin_user.current_sign_in_at = sign_in_at
|
|
17
12
|
admin_user.current_sign_in_ip = request.remote_ip
|
|
18
13
|
admin_user.sign_in_count += 1
|
|
19
14
|
|
|
20
15
|
admin_user.save!
|
|
16
|
+
|
|
17
|
+
session[:admin_user_id] = admin_user.id
|
|
18
|
+
session[:admin_user_signed_in_at] = sign_in_at.iso8601
|
|
21
19
|
end
|
|
22
20
|
|
|
23
|
-
def
|
|
21
|
+
def destroy_admin_session!(admin_user = Koi::Current.admin_user)
|
|
22
|
+
session[:admin_user_id] = nil
|
|
23
|
+
session[:admin_user_signed_in_at] = nil
|
|
24
|
+
|
|
24
25
|
return unless admin_user
|
|
25
26
|
|
|
27
|
+
sign_out_at = Time.current
|
|
28
|
+
|
|
26
29
|
update_last_sign_in(admin_user)
|
|
27
30
|
|
|
31
|
+
admin_user.last_sign_out_at = sign_out_at
|
|
28
32
|
admin_user.current_sign_in_at = nil
|
|
29
33
|
admin_user.current_sign_in_ip = nil
|
|
30
34
|
|
|
31
35
|
admin_user.save!
|
|
32
36
|
end
|
|
37
|
+
|
|
38
|
+
private
|
|
39
|
+
|
|
40
|
+
def update_last_sign_in(admin_user)
|
|
41
|
+
return if admin_user.current_sign_in_at.blank?
|
|
42
|
+
|
|
43
|
+
admin_user.last_sign_in_at = admin_user.current_sign_in_at
|
|
44
|
+
admin_user.last_sign_in_ip = admin_user.current_sign_in_ip
|
|
45
|
+
end
|
|
33
46
|
end
|
|
34
47
|
end
|
|
35
48
|
end
|
|
@@ -27,7 +27,10 @@ module Koi
|
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
# Remove from session if not found
|
|
30
|
-
|
|
30
|
+
if session.has_key?(:admin_user_id) && !authenticated?
|
|
31
|
+
session.delete(:admin_user_id)
|
|
32
|
+
session.delete(:admin_user_signed_in_at)
|
|
33
|
+
end
|
|
31
34
|
|
|
32
35
|
if requires_authentication?(request) && !authenticated?
|
|
33
36
|
unauthorized_response(request)
|
|
@@ -58,7 +61,20 @@ module Koi
|
|
|
58
61
|
end
|
|
59
62
|
|
|
60
63
|
def session_admin_user(session)
|
|
61
|
-
Admin::User.find_by(id: session[:admin_user_id])
|
|
64
|
+
admin_user = Admin::User.find_by(id: session[:admin_user_id])
|
|
65
|
+
return unless admin_user
|
|
66
|
+
|
|
67
|
+
signed_in_at = session_signed_in_at(session)
|
|
68
|
+
return if signed_in_at.blank?
|
|
69
|
+
return if admin_user.last_sign_out_at.present? && signed_in_at < admin_user.last_sign_out_at
|
|
70
|
+
|
|
71
|
+
admin_user
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def session_signed_in_at(session)
|
|
75
|
+
Time.zone.parse(session[:admin_user_signed_in_at].to_s)
|
|
76
|
+
rescue ArgumentError
|
|
77
|
+
nil
|
|
62
78
|
end
|
|
63
79
|
|
|
64
80
|
def bearer_token(request)
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: katalyst-koi
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 5.
|
|
4
|
+
version: 5.6.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Katalyst Interactive
|
|
@@ -470,6 +470,7 @@ files:
|
|
|
470
470
|
- db/migrate/20241214060913_add_otp_secret_to_admin_users.rb
|
|
471
471
|
- db/migrate/20250204060748_create_well_knowns.rb
|
|
472
472
|
- db/migrate/20260413014834_create_admin_device_authorizations.rb
|
|
473
|
+
- db/migrate/20260501000000_add_last_sign_out_at_to_admin_users.rb
|
|
473
474
|
- db/seeds.rb
|
|
474
475
|
- lib/generators/koi/admin/USAGE
|
|
475
476
|
- lib/generators/koi/admin/admin_generator.rb
|