From effbef7d0b783f06bbbce9f93c6da37a0f0e06f5 Mon Sep 17 00:00:00 2001 From: Bianca Nenciu Date: Thu, 25 Oct 2018 13:54:01 +0300 Subject: [PATCH] UX: Use user locale for locations. (#6527) * UX: Use user locale for locations. * DEV: Added MaxMindDB test data and fixed test. --- .../concerns/user_auth_tokens_mixin.rb | 2 +- lib/discourse_ip_info.rb | 28 ++++++++++++------ spec/fixtures/mmdb/GeoLite2-City.mmdb | Bin 0 -> 20831 bytes .../user_auth_token_serializer_spec.rb | 23 ++++++++++++++ 4 files changed, 43 insertions(+), 10 deletions(-) create mode 100644 spec/fixtures/mmdb/GeoLite2-City.mmdb create mode 100644 spec/serializers/user_auth_token_serializer_spec.rb diff --git a/app/serializers/concerns/user_auth_tokens_mixin.rb b/app/serializers/concerns/user_auth_tokens_mixin.rb index 39e6e3232a9..95315c4ed7a 100644 --- a/app/serializers/concerns/user_auth_tokens_mixin.rb +++ b/app/serializers/concerns/user_auth_tokens_mixin.rb @@ -20,7 +20,7 @@ module UserAuthTokensMixin end def location - ipinfo = DiscourseIpInfo.get(client_ip) + ipinfo = DiscourseIpInfo.get(client_ip, I18n.locale) location = [ipinfo[:city], ipinfo[:region], ipinfo[:country]].reject { |x| x.blank? }.join(", ") return I18n.t('staff_action_logs.unknown') if location.blank? diff --git a/lib/discourse_ip_info.rb b/lib/discourse_ip_info.rb index 3623c772559..11703cff79d 100644 --- a/lib/discourse_ip_info.rb +++ b/lib/discourse_ip_info.rb @@ -4,8 +4,12 @@ class DiscourseIpInfo include Singleton def initialize + open_db(File.join(Rails.root, 'vendor', 'data')) + end + + def open_db(path) begin - @mmdb_filename = File.join(Rails.root, 'vendor', 'data', 'GeoLite2-City.mmdb') + @mmdb_filename = File.join(path, 'GeoLite2-City.mmdb') @mmdb = MaxMindDB.new(@mmdb_filename, MaxMindDB::LOW_MEMORY_FILE_READER) @cache = LruRedux::ThreadSafeCache.new(1000) rescue Errno::ENOENT => e @@ -15,7 +19,7 @@ class DiscourseIpInfo end end - def lookup(ip) + def lookup(ip, locale = :en) return {} unless @mmdb begin @@ -26,22 +30,28 @@ class DiscourseIpInfo return {} if !result || !result.found? + locale = locale.to_s.sub('_', '-') + { - country: result.country.name, + country: result.country.name(locale) || result.country.name, country_code: result.country.iso_code, - region: result.subdivisions.most_specific.name, - city: result.city.name, + region: result.subdivisions.most_specific.name(locale) || result.subdivisions.most_specific.name, + city: result.city.name(locale) || result.city.name, } end - def get(ip) + def get(ip, locale = :en) return {} unless @mmdb ip = ip.to_s - @cache[ip] ||= lookup(ip) + @cache["#{ip}-#{locale}"] ||= lookup(ip, locale) end - def self.get(ip) - instance.get(ip) + def self.open_db(path) + instance.open_db(path) + end + + def self.get(ip, locale = :en) + instance.get(ip, locale) end end diff --git a/spec/fixtures/mmdb/GeoLite2-City.mmdb b/spec/fixtures/mmdb/GeoLite2-City.mmdb new file mode 100644 index 0000000000000000000000000000000000000000..2e7c95c7ce942405f1af8a2470fce650950030af GIT binary patch literal 20831 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 literal 0 HcmV?d00001 diff --git a/spec/serializers/user_auth_token_serializer_spec.rb b/spec/serializers/user_auth_token_serializer_spec.rb new file mode 100644 index 00000000000..ef8f9f7cc90 --- /dev/null +++ b/spec/serializers/user_auth_token_serializer_spec.rb @@ -0,0 +1,23 @@ +require 'rails_helper' + +describe UserAuthTokenSerializer do + + let(:user) { Fabricate(:user) } + let(:token) { UserAuthToken.generate!(user_id: user.id, client_ip: '2a02:ea00::') } + + before(:each) do + DiscourseIpInfo.open_db(File.join(Rails.root, 'spec', 'fixtures', 'mmdb')) + end + + it 'serializes user auth tokens with respect to user locale' do + I18n.locale = 'de' + json = UserAuthTokenSerializer.new(token, scope: Guardian.new(user), root: false).as_json + expect(json[:location]).to include('Schweiz') + end + + it 'correctly translates Discourse locale to MaxMindDb locale' do + I18n.locale = 'zh_CN' + json = UserAuthTokenSerializer.new(token, scope: Guardian.new(user), root: false).as_json + expect(json[:location]).to include('瑞士') + end +end