authie 4.0.0 → 4.1.0

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: 3fc31edba5c9cfea934c40b4ac410c942f5d0fcb75a236a9a0f8bd671556058a
4
- data.tar.gz: 6ebbf8156b7092e358c4ed08f2d403a002c4f8930cc7e5b5bfc375cd5bc6e718
3
+ metadata.gz: 1b35fefc8e1d77c5dc713e70d46d29a2e6de782e3d3c6cb35a89f8a31f416406
4
+ data.tar.gz: f4bfa5628f66ef549e2cb0e74b87c2a503a0d49916d1a93aba7af299bc0e7d29
5
5
  SHA512:
6
- metadata.gz: 21b86b8a69c1878736de93952f5b4e88bcb1080470f3b3df9f1e12087a29996f71dc39177020747b2e31fff6a39da88ff560e168b35ce61e602e77eb68c7e45b
7
- data.tar.gz: 4cf16e7b8af0f80d68cae494c59f7f0c3722c92475c80b47ad2ea4f7b719099ad8e053deb708ee90fe1996db4065869f1f98c92121987cbf68bcae159001465e
6
+ metadata.gz: 47793da24b501a3e3a5f26652cde36431c90f6f43b8d0e1fa8477e366b2ba6f6ee524e989dd5d2520f15b61c567320f701c29caa5c62bf1acfafc1ad1d096415
7
+ data.tar.gz: 98e9993d49250765b479e7bd37703652f381d3dc6fb2cf1d1792498b5c95f81c200bb0ea68ff09be6fe072e7141ed49876b43a0953a94fed012370bbbce5c36f
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddCountriesToAuthieSessions < ActiveRecord::Migration[6.1]
4
+ def change
5
+ add_column :authie_sessions, :login_ip_country, :string
6
+ add_column :authie_sessions, :two_factored_ip_country, :string
7
+ add_column :authie_sessions, :last_activity_ip_country, :string
8
+ end
9
+ end
data/lib/authie/config.rb CHANGED
@@ -8,6 +8,7 @@ module Authie
8
8
  attr_accessor :browser_id_cookie_name
9
9
  attr_accessor :session_token_length
10
10
  attr_accessor :extend_session_expiry_on_touch
11
+ attr_accessor :ip_lookup
11
12
 
12
13
  def initialize
13
14
  @session_inactivity_timeout = 12.hours
@@ -16,6 +17,13 @@ module Authie
16
17
  @browser_id_cookie_name = :browser_id
17
18
  @session_token_length = 64
18
19
  @extend_session_expiry_on_touch = false
20
+ @lookup_ip_country_backend = nil
21
+ end
22
+
23
+ def lookup_ip_country(ip)
24
+ return nil if @lookup_ip_country_backend.nil?
25
+
26
+ @lookup_ip_country_backend.call(ip)
19
27
  end
20
28
  end
21
29
 
@@ -96,7 +96,11 @@ module Authie
96
96
  # @return [Authie::Session]
97
97
  def touch
98
98
  @session.last_activity_at = Time.now
99
+ if @controller.request.ip != @session.last_activity_ip
100
+ @session.last_activity_ip_country = Authie.config.lookup_ip_country(@controller.request.ip)
101
+ end
99
102
  @session.last_activity_ip = @controller.request.ip
103
+
100
104
  @session.last_activity_path = @controller.request.path
101
105
  @session.requests += 1
102
106
  extend_session_expiry_if_appropriate
@@ -124,6 +128,7 @@ module Authie
124
128
  def mark_as_two_factored(skip: nil)
125
129
  @session.two_factored_at = Time.now
126
130
  @session.two_factored_ip = @controller.request.ip
131
+ @session.two_factored_ip_country = Authie.config.lookup_ip_country(@controller.request.ip)
127
132
  @session.skip_two_factor = skip unless skip.nil?
128
133
  @session.save!
129
134
  Authie.notify(:mark_as_two_factor, session: self)
@@ -244,6 +249,7 @@ module Authie
244
249
  session.browser_id = cookies[:browser_id]
245
250
  session.login_at = Time.now
246
251
  session.login_ip = controller.request.ip
252
+ session.login_ip_country = Authie.config.lookup_ip_country(session.login_ip)
247
253
  session.host = controller.request.host
248
254
  session.user_agent = controller.request.user_agent
249
255
  session.expires_at = Time.now + Authie.config.persistent_session_length if persistent
@@ -298,9 +304,11 @@ module Authie
298
304
  delegate :invalidate_others!, to: :session
299
305
  delegate :last_activity_at, to: :session
300
306
  delegate :last_activity_ip, to: :session
307
+ delegate :last_activity_ip_country, to: :session
301
308
  delegate :last_activity_path, to: :session
302
309
  delegate :login_at, to: :session
303
310
  delegate :login_ip, to: :session
311
+ delegate :login_ip_country, to: :session
304
312
  delegate :password_seen_at, to: :session
305
313
  delegate :persisted?, to: :session
306
314
  delegate :persistent?, to: :session
@@ -311,6 +319,7 @@ module Authie
311
319
  delegate :token_hash, to: :session
312
320
  delegate :two_factored_at, to: :session
313
321
  delegate :two_factored_ip, to: :session
322
+ delegate :two_factored_ip_country, to: :session
314
323
  delegate :two_factored?, to: :session
315
324
  delegate :skip_two_factor?, to: :session
316
325
  delegate :update, 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
4
+ version: 4.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Cooke
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-05-02 00:00:00.000000000 Z
11
+ date: 2023-06-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -45,6 +45,7 @@ files:
45
45
  - db/migrate/20170421174100_add_index_to_token_hashes_on_authie_sessions.rb
46
46
  - db/migrate/20180215152200_add_host_to_authie_sessions.rb
47
47
  - db/migrate/20220502180100_add_two_factor_required_to_sessions.rb
48
+ - db/migrate/20230627165500_add_countries_to_authie_sessions.rb
48
49
  - lib/authie.rb
49
50
  - lib/authie/config.rb
50
51
  - lib/authie/controller_delegate.rb