Document TagPolicy in `rewrite_policy` section
[akkoma] / lib / pleroma / user / search.ex
index d5b2eaa9ff12ff85f6adb0f44680fbe6056d2f22..add6a0bbf63d33b4beffde0c694079ffe75b1dbc 100644 (file)
@@ -14,7 +14,7 @@ defmodule Pleroma.User.Search do
     # Strip the beginning @ off if there is a query
     query = String.trim_leading(query, "@")
 
-    if match?(%User{}, for_user) and resolve, do: User.get_or_fetch(query)
+    maybe_resolve(resolve, for_user, query)
 
     {:ok, results} =
       Repo.transaction(fn ->
@@ -28,6 +28,16 @@ defmodule Pleroma.User.Search do
     results
   end
 
+  defp maybe_resolve(true, %User{}, query) do
+    User.get_or_fetch(query)
+  end
+
+  defp maybe_resolve(true, _, query) do
+    unless restrict_local?(), do: User.get_or_fetch(query)
+  end
+
+  defp maybe_resolve(_, _, _), do: :noop
+
   defp search_query(query, for_user) do
     query
     |> union_query()
@@ -39,6 +49,10 @@ defmodule Pleroma.User.Search do
     |> maybe_restrict_local(for_user)
   end
 
+  defp restrict_local? do
+    Pleroma.Config.get([:instance, :limit_unauthenticated_to_local_content], true)
+  end
+
   defp union_query(query) do
     fts_subquery = fts_search_subquery(query)
     trigram_subquery = trigram_search_subquery(query)
@@ -52,7 +66,14 @@ defmodule Pleroma.User.Search do
 
   # unauthenticated users can only search local activities
   defp maybe_restrict_local(q, %User{}), do: q
-  defp maybe_restrict_local(q, _), do: where(q, [u], u.local == true)
+
+  defp maybe_restrict_local(q, _) do
+    if restrict_local?() do
+      where(q, [u], u.local == true)
+    else
+      q
+    end
+  end
 
   defp boost_search_rank_query(query, nil), do: query
 
@@ -65,8 +86,8 @@ defmodule Pleroma.User.Search do
         search_rank:
           fragment(
             """
-             CASE WHEN (?) THEN (?) * 1.3
-             WHEN (?) THEN (?) * 1.2
+             CASE WHEN (?) THEN 0.5 + (?) * 1.3
+             WHEN (?) THEN 0.5 + (?) * 1.2
              WHEN (?) THEN (?) * 1.1
              ELSE (?) END
             """,