summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/pleroma/search/database_search.ex25
-rw-r--r--test/pleroma/search/database_search_test.exs (renamed from test/pleroma/search/database_search_test.ex)8
2 files changed, 23 insertions, 10 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)
diff --git a/test/pleroma/search/database_search_test.ex b/test/pleroma/search/database_search_test.exs
index c123d0b84..6c47ff425 100644
--- a/test/pleroma/search/database_search_test.ex
+++ b/test/pleroma/search/database_search_test.exs
@@ -3,7 +3,7 @@
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Search.DatabaseSearchTest do
- alias Pleroma.Search.DatabaseSearch
+ alias Pleroma.Search.DatabaseSearch, as: Search
alias Pleroma.Web.CommonAPI
import Pleroma.Factory
@@ -13,7 +13,7 @@ defmodule Pleroma.Search.DatabaseSearchTest do
user = insert(:user)
{:ok, post} = CommonAPI.post(user, %{status: "it's wednesday my dudes"})
- [result] = DatabaseSearch.search(nil, "wednesday")
+ [result] = Search.search(nil, "wednesday")
assert result.id == post.id
end
@@ -45,7 +45,7 @@ defmodule Pleroma.Search.DatabaseSearchTest do
{:ok, _post2} = CommonAPI.post(user, %{status: "it's wednesday my bros"})
# plainto doesn't understand complex queries
- assert [result] = DatabaseSearch.search(nil, "wednesday -dudes")
+ assert [result] = Search.search(nil, "wednesday -dudes")
assert result.id == post.id
end
@@ -55,7 +55,7 @@ defmodule Pleroma.Search.DatabaseSearchTest do
{:ok, _post} = CommonAPI.post(user, %{status: "it's wednesday my dudes"})
{:ok, other_post} = CommonAPI.post(user, %{status: "it's wednesday my bros"})
- assert [result] = DatabaseSearch.search(nil, "wednesday -dudes")
+ assert [result] = Search.search(nil, "wednesday -dudes")
assert result.id == other_post.id
end