diff --git a/lib/discourse_ip_info.rb b/lib/discourse_ip_info.rb index 6aa0f165055..863de44fcd9 100644 --- a/lib/discourse_ip_info.rb +++ b/lib/discourse_ip_info.rb @@ -101,6 +101,13 @@ class DiscourseIpInfo ret[:latitude] = result.location.latitude ret[:longitude] = result.location.longitude ret[:location] = ret.values_at(:city, :region, :country).reject(&:blank?).uniq.join(", ") + + # used by plugins or API to locate users more accurate + ret[:geoname_ids] = [ + result.continent.geoname_id, result.country.geoname_id, result.city.geoname_id, + *result.subdivisions.map(&:geoname_id) + ] + ret[:geoname_ids].compact! end rescue => e Discourse.warn_exception(e, message: "IP #{ip} could not be looked up in MaxMind GeoLite2-City database.") diff --git a/spec/requests/admin/users_controller_spec.rb b/spec/requests/admin/users_controller_spec.rb index 0e6c2b4111a..2356b4ff46e 100644 --- a/spec/requests/admin/users_controller_spec.rb +++ b/spec/requests/admin/users_controller_spec.rb @@ -993,6 +993,7 @@ RSpec.describe Admin::UsersController do city: "London", country: "United Kingdom", country_code: "GB", + geoname_ids: [6255148, 2635167, 2643743, 6269131], hostname: "ip-81-2-69-142.example.com", location: "London, England, United Kingdom", region: "England",