diff options
| -rw-r--r-- | lib/pleroma/web/federator/federator.ex | 11 | ||||
| -rw-r--r-- | lib/pleroma/web/ostatus/ostatus.ex | 15 | ||||
| -rw-r--r-- | test/web/ostatus/ostatus_test.exs | 24 | 
3 files changed, 46 insertions, 4 deletions
diff --git a/lib/pleroma/web/federator/federator.ex b/lib/pleroma/web/federator/federator.ex index 6071d08e4..962cacfa3 100644 --- a/lib/pleroma/web/federator/federator.ex +++ b/lib/pleroma/web/federator/federator.ex @@ -7,6 +7,7 @@ defmodule Pleroma.Web.Federator do    alias Pleroma.Web.ActivityPub.Relay    alias Pleroma.Web.ActivityPub.Transmogrifier    alias Pleroma.Web.ActivityPub.Utils +  alias Pleroma.Web.OStatus    require Logger    @websub Application.get_env(:pleroma, :websub) @@ -63,11 +64,13 @@ defmodule Pleroma.Web.Federator do        {:ok, actor} = WebFinger.ensure_keys_present(actor)        if ActivityPub.is_public?(activity) do -        Logger.info(fn -> "Sending #{activity.data["id"]} out via WebSub" end) -        Websub.publish(Pleroma.Web.OStatus.feed_path(actor), actor, activity) +        if OStatus.is_representable?(activity) do +          Logger.info(fn -> "Sending #{activity.data["id"]} out via WebSub" end) +          Websub.publish(Pleroma.Web.OStatus.feed_path(actor), actor, activity) -        Logger.info(fn -> "Sending #{activity.data["id"]} out via Salmon" end) -        Pleroma.Web.Salmon.publish(actor, activity) +          Logger.info(fn -> "Sending #{activity.data["id"]} out via Salmon" end) +          Pleroma.Web.Salmon.publish(actor, activity) +        end          if Keyword.get(Application.get_env(:pleroma, :instance), :allow_relay) do            Logger.info(fn -> "Relaying #{activity.data["id"]} out" end) diff --git a/lib/pleroma/web/ostatus/ostatus.ex b/lib/pleroma/web/ostatus/ostatus.ex index 916c894eb..1d0019d3b 100644 --- a/lib/pleroma/web/ostatus/ostatus.ex +++ b/lib/pleroma/web/ostatus/ostatus.ex @@ -11,6 +11,21 @@ defmodule Pleroma.Web.OStatus do    alias Pleroma.Web.OStatus.{FollowHandler, UnfollowHandler, NoteHandler, DeleteHandler}    alias Pleroma.Web.ActivityPub.Transmogrifier +  def is_representable?(%Activity{data: data}) do +    object = Object.normalize(data["object"]) + +    cond do +      is_nil(object) -> +        false + +      object.data["type"] == "Note" -> +        true + +      true -> +        false +    end +  end +    def feed_path(user) do      "#{user.ap_id}/feed.atom"    end diff --git a/test/web/ostatus/ostatus_test.exs b/test/web/ostatus/ostatus_test.exs index f095e41dd..f95da8b0a 100644 --- a/test/web/ostatus/ostatus_test.exs +++ b/test/web/ostatus/ostatus_test.exs @@ -456,4 +456,28 @@ defmodule Pleroma.Web.OStatusTest do               "https://www.w3.org/ns/activitystreams#Public"             ]    end + +  describe "is_representable?" do +    test "Note objects are representable" do +      note_activity = insert(:note_activity) + +      assert OStatus.is_representable?(note_activity) +    end + +    test "Article objects are not representable" do +      note_activity = insert(:note_activity) + +      note_object = Object.normalize(note_activity.data["object"]) + +      note_data = +        note_object.data +        |> Map.put("type", "Article") + +      cs = Object.change(note_object, %{data: note_data}) +      {:ok, article_object} = Repo.update(cs) + +      # the underlying object is now an Article instead of a note, so this should fail +      refute OStatus.is_representable?(note_activity) +    end +  end  end  | 
