Merge pull request 'Delete 'installation/download-mastofe-build.sh'' (#317) from...
[akkoma] / lib / pleroma / user / search.ex
index d747bfa525928b4ae0cf2d1628b0c0c627fc8bda..6b3f589993afee4b97d8d45ecdb730af4cafc7ce 100644 (file)
@@ -1,11 +1,12 @@
 # Pleroma: A lightweight social networking server
-# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
+# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
 # SPDX-License-Identifier: AGPL-3.0-only
 
 defmodule Pleroma.User.Search do
+  alias Pleroma.EctoType.ActivityPub.ObjectValidators.Uri, as: UriType
   alias Pleroma.Pagination
   alias Pleroma.User
-  alias Pleroma.EctoType.ActivityPub.ObjectValidators.Uri, as: UriType
+
   import Ecto.Query
 
   @limit 20
@@ -53,8 +54,9 @@ defmodule Pleroma.User.Search do
 
   defp maybe_add_uri_match(list, query) do
     with {:ok, query} <- UriType.cast(query),
-         %User{} = user <- Pleroma.Repo.get_by(User, uri: query) do
-      [user.id | list]
+         q = from(u in User, where: u.uri == ^query, select: u.id),
+         users = Pleroma.Repo.all(q) do
+      users ++ list
     else
       _ -> list
     end
@@ -83,7 +85,6 @@ defmodule Pleroma.User.Search do
     |> base_query(following)
     |> filter_blocked_user(for_user)
     |> filter_invisible_users()
-    |> filter_discoverable_users()
     |> filter_internal_users()
     |> filter_blocked_domains(for_user)
     |> fts_search(query_string)
@@ -93,6 +94,7 @@ defmodule Pleroma.User.Search do
     |> subquery()
     |> order_by(desc: :search_rank)
     |> maybe_restrict_local(for_user)
+    |> filter_deactivated_users()
   end
 
   defp select_top_users(query, top_user_ids) do
@@ -161,14 +163,14 @@ defmodule Pleroma.User.Search do
     from(q in query, where: q.invisible == false)
   end
 
-  defp filter_discoverable_users(query) do
-    from(q in query, where: q.discoverable == true)
-  end
-
   defp filter_internal_users(query) do
     from(q in query, where: q.actor_type != "Application")
   end
 
+  defp filter_deactivated_users(query) do
+    from(q in query, where: q.is_active == true)
+  end
+
   defp filter_blocked_user(query, %User{} = blocker) do
     query
     |> join(:left, [u], b in Pleroma.UserRelationship,