forked from AkkomaGang/akkoma
Merge branch 'bugfix/ostatus-as2-reflection' into 'develop'
ostatus: only federate activities concerning note objects See merge request pleroma/pleroma!437
This commit is contained in:
commit
c9c1f9dee2
3 changed files with 46 additions and 4 deletions
|
@ -7,6 +7,7 @@ defmodule Pleroma.Web.Federator do
|
||||||
alias Pleroma.Web.ActivityPub.Relay
|
alias Pleroma.Web.ActivityPub.Relay
|
||||||
alias Pleroma.Web.ActivityPub.Transmogrifier
|
alias Pleroma.Web.ActivityPub.Transmogrifier
|
||||||
alias Pleroma.Web.ActivityPub.Utils
|
alias Pleroma.Web.ActivityPub.Utils
|
||||||
|
alias Pleroma.Web.OStatus
|
||||||
require Logger
|
require Logger
|
||||||
|
|
||||||
@websub Application.get_env(:pleroma, :websub)
|
@websub Application.get_env(:pleroma, :websub)
|
||||||
|
@ -63,11 +64,13 @@ def handle(:publish, activity) do
|
||||||
{:ok, actor} = WebFinger.ensure_keys_present(actor)
|
{:ok, actor} = WebFinger.ensure_keys_present(actor)
|
||||||
|
|
||||||
if ActivityPub.is_public?(activity) do
|
if ActivityPub.is_public?(activity) do
|
||||||
|
if OStatus.is_representable?(activity) do
|
||||||
Logger.info(fn -> "Sending #{activity.data["id"]} out via WebSub" end)
|
Logger.info(fn -> "Sending #{activity.data["id"]} out via WebSub" end)
|
||||||
Websub.publish(Pleroma.Web.OStatus.feed_path(actor), actor, activity)
|
Websub.publish(Pleroma.Web.OStatus.feed_path(actor), actor, activity)
|
||||||
|
|
||||||
Logger.info(fn -> "Sending #{activity.data["id"]} out via Salmon" end)
|
Logger.info(fn -> "Sending #{activity.data["id"]} out via Salmon" end)
|
||||||
Pleroma.Web.Salmon.publish(actor, activity)
|
Pleroma.Web.Salmon.publish(actor, activity)
|
||||||
|
end
|
||||||
|
|
||||||
if Keyword.get(Application.get_env(:pleroma, :instance), :allow_relay) do
|
if Keyword.get(Application.get_env(:pleroma, :instance), :allow_relay) do
|
||||||
Logger.info(fn -> "Relaying #{activity.data["id"]} out" end)
|
Logger.info(fn -> "Relaying #{activity.data["id"]} out" end)
|
||||||
|
|
|
@ -11,6 +11,21 @@ defmodule Pleroma.Web.OStatus do
|
||||||
alias Pleroma.Web.OStatus.{FollowHandler, UnfollowHandler, NoteHandler, DeleteHandler}
|
alias Pleroma.Web.OStatus.{FollowHandler, UnfollowHandler, NoteHandler, DeleteHandler}
|
||||||
alias Pleroma.Web.ActivityPub.Transmogrifier
|
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
|
def feed_path(user) do
|
||||||
"#{user.ap_id}/feed.atom"
|
"#{user.ap_id}/feed.atom"
|
||||||
end
|
end
|
||||||
|
|
|
@ -456,4 +456,28 @@ test "it doesn't add nil in the do field" do
|
||||||
"https://www.w3.org/ns/activitystreams#Public"
|
"https://www.w3.org/ns/activitystreams#Public"
|
||||||
]
|
]
|
||||||
end
|
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
|
end
|
||||||
|
|
Loading…
Reference in a new issue