summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorLain Soykaf <lain@lain.com>2023-11-12 16:19:54 +0400
committerLain Soykaf <lain@lain.com>2023-11-12 16:19:54 +0400
commita1a25029da74949a79c73d400b6f2bc0bf1dc01a (patch)
tree00199dfa329d8e441697ca0bc8ba412c9020889f /lib
parent5996bef7cdbe311443df3a75daf3968aee92eba6 (diff)
downloadpleroma-a1a25029da74949a79c73d400b6f2bc0bf1dc01a.tar.gz
pleroma-a1a25029da74949a79c73d400b6f2bc0bf1dc01a.zip
B DatabaseSearch: Fix local-only search.
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/search/database_search.ex25
1 files changed, 19 insertions, 6 deletions
diff --git a/lib/pleroma/search/database_search.ex b/lib/pleroma/search/database_search.ex
index 9a340abf1..f4c405773 100644
--- a/lib/pleroma/search/database_search.ex
+++ b/lib/pleroma/search/database_search.ex
@@ -8,6 +8,7 @@ defmodule Pleroma.Search.DatabaseSearch do
alias Pleroma.Pagination
alias Pleroma.User
alias Pleroma.Web.ActivityPub.Visibility
+ alias Pleroma.Config
require Pleroma.Constants
@@ -17,7 +18,7 @@ defmodule Pleroma.Search.DatabaseSearch do
@impl true
def search(user, search_query, options \\ []) do
- index_type = if Pleroma.Config.get([:database, :rum_enabled]), do: :rum, else: :gin
+ index_type = if Config.get([:database, :rum_enabled]), do: :rum, else: :gin
limit = Enum.min([Keyword.get(options, :limit), 40])
offset = Keyword.get(options, :offset, 0)
author = Keyword.get(options, :author)
@@ -33,7 +34,7 @@ defmodule Pleroma.Search.DatabaseSearch do
Activity
|> Activity.with_preloaded_object()
|> Activity.restrict_deactivated_users()
- |> restrict_public()
+ |> restrict_public(user)
|> query_with(index_type, search_query, search_function)
|> maybe_restrict_local(user)
|> maybe_restrict_author(author)
@@ -49,10 +50,10 @@ defmodule Pleroma.Search.DatabaseSearch do
end
@impl true
- def add_to_index(_activity), do: nil
+ def add_to_index(_activity), do: :ok
@impl true
- def remove_from_index(_object), do: nil
+ def remove_from_index(_object), do: :ok
def maybe_restrict_author(query, %User{} = author) do
Activity.Queries.by_author(query, author)
@@ -66,7 +67,19 @@ defmodule Pleroma.Search.DatabaseSearch do
def maybe_restrict_blocked(query, _), do: query
- def restrict_public(q) do
+ defp restrict_public(q, user) when not is_nil(user) do
+ intended_recipients = [
+ Pleroma.Constants.as_public(),
+ Pleroma.Web.ActivityPub.Utils.as_local_public()
+ ]
+
+ from([a, o] in q,
+ where: fragment("?->>'type' = 'Create'", a.data),
+ where: fragment("? && ?", ^intended_recipients, a.recipients)
+ )
+ end
+
+ defp restrict_public(q, _user) do
from([a, o] in q,
where: fragment("?->>'type' = 'Create'", a.data),
where: ^Pleroma.Constants.as_public() in a.recipients
@@ -134,7 +147,7 @@ defmodule Pleroma.Search.DatabaseSearch do
end
def maybe_restrict_local(q, user) do
- limit = Pleroma.Config.get([:instance, :limit_to_local_content], :unauthenticated)
+ limit = Config.get([:instance, :limit_to_local_content], :unauthenticated)
case {limit, user} do
{:all, _} -> restrict_local(q)