diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index 6ef8fda62fe..7ea59463463 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -577,7 +577,7 @@ en: created_lowercase: 'created' trust_level: 'Trust Level' search_hint: 'username' - search_hint_admin: 'username or email' + search_hint_admin: 'username, email or IP address' create_account: title: "Create New Account" diff --git a/lib/admin_user_index_query.rb b/lib/admin_user_index_query.rb index fa468c96028..6e2e277b5ad 100644 --- a/lib/admin_user_index_query.rb +++ b/lib/admin_user_index_query.rb @@ -37,7 +37,11 @@ class AdminUserIndexQuery def filter_by_search if params[:filter].present? if params[:admin] == true - @query.where('username_lower ILIKE :filter OR email ILIKE :filter', filter: "%#{params[:filter]}%") + if params[:filter] =~ Resolv::IPv4::Regex || params[:filter] =~ Resolv::IPv6::Regex + @query.where('ip_address = :ip OR registration_ip_address = :ip', ip: params[:filter]) + else + @query.where('username_lower ILIKE :filter OR email ILIKE :filter', filter: "%#{params[:filter]}%") + end else @query.where('username_lower ILIKE :filter', filter: "%#{params[:filter]}%") end diff --git a/spec/components/admin_user_index_query_spec.rb b/spec/components/admin_user_index_query_spec.rb index 0947f2a5e7f..d6d5e2ea3e8 100644 --- a/spec/components/admin_user_index_query_spec.rb +++ b/spec/components/admin_user_index_query_spec.rb @@ -29,7 +29,6 @@ describe AdminUserIndexQuery do end - describe "users with trust level" do TrustLevel.levels.each do |key, value| @@ -138,5 +137,24 @@ describe AdminUserIndexQuery do end end + context "by ip address fragment" do + before(:each) { Fabricate(:user, ip_address: "117.207.94.9") } + + context "when authenticated as a non-admin user" do + it "doesn't match the ip address" do + query = ::AdminUserIndexQuery.new({ filter: "117.207.94.9" }) + expect(query.find_users.count()).to eq(0) + end + end + + context "when authenticated as an admin user" do + it "matches the ip address" do + query = ::AdminUserIndexQuery.new({ filter: "117.207.94.9", admin: true }) + expect(query.find_users.count()).to eq(1) + end + end + + end + end end