diff --git a/app/models/user_device.rb b/app/models/user_device.rb index 15d7b3698..444703d15 100644 --- a/app/models/user_device.rb +++ b/app/models/user_device.rb @@ -21,8 +21,9 @@ store new device for user if device not already known def self.add(user_agent, ip, user_id, fingerprint, type) - # since gem browser 2 is not handling nil for user_agent, set it to '' - user_agent ||= '' + if user_agent.blank? + user_agent = 'unknown' + end # get location info location_details = Service::GeoIp.location(ip) @@ -60,23 +61,26 @@ store new device for user if device not already known end # get browser details - browser = Browser.new(user_agent, accept_language: 'en-us') - browser = { - plattform: browser.platform.to_s.camelize, - name: browser.name, - version: browser.version, - full_version: browser.full_version, - } + browser = {} + if user_agent != 'unknown' + browser = Browser.new(user_agent, accept_language: 'en-us') + browser = { + plattform: browser.platform.to_s.camelize, + name: browser.name, + version: browser.version, + full_version: browser.full_version, + } + end # generate device name if browser[:name] == 'Generic Browser' browser[:name] = user_agent end name = '' - if browser[:plattform] && browser[:plattform] != 'Other' + if browser[:plattform].present? && browser[:plattform] != 'Other' name = browser[:plattform] end - if browser[:name] && browser[:name] != 'Other' + if browser[:name].present? && browser[:name] != 'Other' if name.present? name += ', ' end @@ -84,7 +88,7 @@ store new device for user if device not already known end # if not identified, use user agent - if !name || name == '' || name == 'Other, Other' || name == 'Other' + if name.blank? || name == 'Other, Other' || name == 'Other' name = user_agent browser[:name] = user_agent end @@ -103,7 +107,7 @@ store new device for user if device not already known end # create new device - user_device = create( + user_device = create!( user_id: user_id, name: name, os: browser[:plattform], diff --git a/test/unit/user_device_test.rb b/test/unit/user_device_test.rb index cd734e971..4d1ff1e52 100644 --- a/test/unit/user_device_test.rb +++ b/test/unit/user_device_test.rb @@ -204,6 +204,42 @@ class UserDeviceTest < ActiveSupport::TestCase ) assert_equal(user_device2.id, user_device6.id) + # signin without ua from country A via basic auth -> new device #3 + user_device7 = UserDevice.add( + '', + '91.115.248.231', + @agent.id, + nil, + 'basic_auth', + ) + assert_not_equal(user_device6.id, user_device7.id) + + user_device8 = UserDevice.add( + '', + '91.115.248.231', + @agent.id, + nil, + 'basic_auth', + ) + assert_equal(user_device7.id, user_device8.id) + + user_device9 = UserDevice.add( + nil, + '91.115.248.231', + @agent.id, + nil, + 'basic_auth', + ) + assert_equal(user_device8.id, user_device9.id) + + user_device10 = UserDevice.add( + nil, + '176.198.137.254', + @agent.id, + nil, + 'basic_auth', + ) + assert_not_equal(user_device9.id, user_device10.id) end test 'ddd - api test' do