ActivityPub core: fix handling of unlisted statuses by leveraging a similar strategy as for blocks

This commit is contained in:
William Pitcock 2018-04-29 02:53:19 +00:00
parent a7a40bb8f1
commit a3d1d4894f

View File

@ -212,11 +212,11 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
Repo.all(query) Repo.all(query)
end end
# TODO: Make this work properly with unlisted.
def fetch_public_activities(opts \\ %{}) do def fetch_public_activities(opts \\ %{}) do
q = fetch_activities_query(["https://www.w3.org/ns/activitystreams#Public"], opts) q = fetch_activities_query(["https://www.w3.org/ns/activitystreams#Public"], opts)
q q
|> restrict_unlisted()
|> Repo.all() |> Repo.all()
|> Enum.reverse() |> Enum.reverse()
end end
@ -321,6 +321,13 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
defp restrict_blocked(query, _), do: query defp restrict_blocked(query, _), do: query
defp restrict_unlisted(query) do
from(
activity in query,
where: fragment("not (?->'cc' \\?| ?)", activity.data, ^["https://www.w3.org/ns/activitystreams#Public"])
)
end
def fetch_activities_query(recipients, opts \\ %{}) do def fetch_activities_query(recipients, opts \\ %{}) do
base_query = base_query =
from( from(