diff options
| -rw-r--r-- | lib/pleroma/web/activity_pub/activity_pub.ex | 20 | ||||
| -rw-r--r-- | lib/pleroma/web/streamer.ex | 9 | ||||
| -rw-r--r-- | test/web/streamer_test.exs | 25 | 
3 files changed, 44 insertions, 10 deletions
diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 130c06028..0431d62af 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -92,7 +92,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do    def stream_out(activity) do      public = "https://www.w3.org/ns/activitystreams#Public" -    if activity.data["type"] in ["Create", "Announce"] do +    if activity.data["type"] in ["Create", "Announce", "Delete"] do        Pleroma.Web.Streamer.stream("user", activity)        Pleroma.Web.Streamer.stream("list", activity) @@ -103,16 +103,18 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do            Pleroma.Web.Streamer.stream("public:local", activity)          end -        activity.data["object"] -        |> Map.get("tag", []) -        |> Enum.filter(fn tag -> is_bitstring(tag) end) -        |> Enum.map(fn tag -> Pleroma.Web.Streamer.stream("hashtag:" <> tag, activity) end) +        if activity.data["type"] in ["Create"] do +          activity.data["object"] +          |> Map.get("tag", []) +          |> Enum.filter(fn tag -> is_bitstring(tag) end) +          |> Enum.map(fn tag -> Pleroma.Web.Streamer.stream("hashtag:" <> tag, activity) end) -        if activity.data["object"]["attachment"] != [] do -          Pleroma.Web.Streamer.stream("public:media", activity) +          if activity.data["object"]["attachment"] != [] do +            Pleroma.Web.Streamer.stream("public:media", activity) -          if activity.local do -            Pleroma.Web.Streamer.stream("public:local:media", activity) +            if activity.local do +              Pleroma.Web.Streamer.stream("public:local:media", activity) +            end            end          end        else diff --git a/lib/pleroma/web/streamer.ex b/lib/pleroma/web/streamer.ex index 3136b1b9d..978c77e57 100644 --- a/lib/pleroma/web/streamer.ex +++ b/lib/pleroma/web/streamer.ex @@ -205,6 +205,15 @@ defmodule Pleroma.Web.Streamer do      end)    end +  def push_to_socket(topics, topic, %Activity{id: id, data: %{"type" => "Delete"}}) do +    Enum.each(topics[topic] || [], fn socket -> +      send( +        socket.transport_pid, +        {:text, %{event: "delete", payload: to_string(id)} |> Jason.encode!()} +      ) +    end) +  end +    def push_to_socket(topics, topic, item) do      Enum.each(topics[topic] || [], fn socket ->        # Get the current user so we have up-to-date blocks etc. diff --git a/test/web/streamer_test.exs b/test/web/streamer_test.exs index 905e29d06..16d7b9c24 100644 --- a/test/web/streamer_test.exs +++ b/test/web/streamer_test.exs @@ -6,7 +6,8 @@ defmodule Pleroma.Web.StreamerTest do    use Pleroma.DataCase    alias Pleroma.Web.Streamer -  alias Pleroma.{List, User} +  alias Pleroma.List +  alias Pleroma.User    alias Pleroma.Web.CommonAPI    import Pleroma.Factory @@ -35,6 +36,28 @@ defmodule Pleroma.Web.StreamerTest do      Streamer.push_to_socket(topics, "public", activity)      Task.await(task) + +    task = +      Task.async(fn -> +        assert_receive {:text, _}, 4_000 +      end) + +    fake_socket = %{ +      transport_pid: task.pid, +      assigns: %{ +        user: user +      } +    } + +    {:ok, activity} = CommonAPI.delete(activity.id, other_user) + +    topics = %{ +      "public" => [fake_socket] +    } + +    Streamer.push_to_socket(topics, "public", activity) + +    Task.await(task)    end    test "it doesn't send to blocked users" do  | 
