Do not log device changes if geo ip service is out of order.
This commit is contained in:
parent
e1140ebce6
commit
61f443dc89
2 changed files with 44 additions and 14 deletions
|
@ -29,7 +29,7 @@ store new device for user if device not already known
|
|||
# get location info
|
||||
location_details = Service::GeoIp.location(ip)
|
||||
location = 'unknown'
|
||||
if location_details
|
||||
if location_details && location_details['country_name']
|
||||
location = location_details['country_name']
|
||||
end
|
||||
|
||||
|
@ -154,8 +154,11 @@ log user device action
|
|||
if user_device.ip != ip
|
||||
user_device.ip = ip
|
||||
location_details = Service::GeoIp.location(ip)
|
||||
user_device.location_details = location_details
|
||||
|
||||
# if we do not have any data from backend (e. g. geo ip ist out of service), ignore log
|
||||
if location_details && location_details['country_name']
|
||||
|
||||
user_device.location_details = location_details
|
||||
location = location_details['country_name']
|
||||
|
||||
# notify if country has changed
|
||||
|
@ -169,6 +172,7 @@ log user device action
|
|||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# update attributes
|
||||
user_device.updated_at = Time.zone.now # force update, also if no other attribute has changed
|
||||
|
|
|
@ -207,6 +207,8 @@ class UserDeviceTest < ActiveSupport::TestCase
|
|||
'fingerprint1234',
|
||||
'session',
|
||||
)
|
||||
|
||||
# action with same fingerprint -> same device
|
||||
user_device1_1 = UserDevice.action(
|
||||
user_device1.id,
|
||||
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.107 Safari/537.36',
|
||||
|
@ -215,6 +217,8 @@ class UserDeviceTest < ActiveSupport::TestCase
|
|||
'session',
|
||||
)
|
||||
assert_equal(user_device1.id, user_device1_1.id)
|
||||
|
||||
# signin with same fingerprint -> same device
|
||||
user_device1_2 = UserDevice.add(
|
||||
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.107 Safari/537.36',
|
||||
'91.115.248.231',
|
||||
|
@ -223,6 +227,8 @@ class UserDeviceTest < ActiveSupport::TestCase
|
|||
'session',
|
||||
)
|
||||
assert_equal(user_device1.id, user_device1_2.id)
|
||||
|
||||
# action with different fingerprint -> new device
|
||||
user_device1_3 = UserDevice.add(
|
||||
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.107 Safari/537.36',
|
||||
'91.115.248.231',
|
||||
|
@ -232,7 +238,17 @@ class UserDeviceTest < ActiveSupport::TestCase
|
|||
)
|
||||
assert_not_equal(user_device1.id, user_device1_3.id)
|
||||
|
||||
# log with fingerprint A from country B via session -> new device #2
|
||||
# signin with without accessable location -> new device
|
||||
user_device1_4 = UserDevice.add(
|
||||
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.107 Safari/537.36',
|
||||
'not_existing_ip',
|
||||
@agent.id,
|
||||
'fingerprintABC',
|
||||
'session',
|
||||
)
|
||||
assert_not_equal(user_device1.id, user_device1_4.id)
|
||||
|
||||
# action with fingerprint A from country B via session -> new device #2
|
||||
user_device2 = UserDevice.action(
|
||||
user_device1.id,
|
||||
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.107 Safari/537.36',
|
||||
|
@ -242,6 +258,16 @@ class UserDeviceTest < ActiveSupport::TestCase
|
|||
)
|
||||
assert_not_equal(user_device1.id, user_device2.id)
|
||||
|
||||
# action with fingerprint A without accessable location -> use current device #2
|
||||
user_device3 = UserDevice.action(
|
||||
user_device2.id,
|
||||
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.107 Safari/537.36',
|
||||
'not_existing_ip',
|
||||
@agent.id,
|
||||
'session',
|
||||
)
|
||||
assert_equal(user_device2.id, user_device3.id)
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue