Browse Source

Merge branch 'bugfix/improve-boost-targeting' into 'develop'

improve handling of non-public Announces

See merge request pleroma/pleroma!681
tags/v0.9.9
kaniini 5 years ago
parent
commit
42612b1c8d
5 changed files with 32 additions and 13 deletions
  1. +8
    -8
      lib/pleroma/web/activity_pub/activity_pub.ex
  2. +1
    -1
      lib/pleroma/web/activity_pub/relay.ex
  3. +2
    -1
      lib/pleroma/web/activity_pub/transmogrifier.ex
  4. +5
    -3
      lib/pleroma/web/activity_pub/utils.ex
  5. +16
    -0
      test/web/activity_pub/transmogrifier_test.exs

+ 8
- 8
lib/pleroma/web/activity_pub/activity_pub.ex View File

@@ -224,10 +224,11 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
%User{ap_id: _} = user,
%Object{data: %{"id" => _}} = object,
activity_id \\ nil,
local \\ true
local \\ true,
public \\ true
) do
with true <- is_public?(object),
announce_data <- make_announce_data(user, object, activity_id),
announce_data <- make_announce_data(user, object, activity_id, public),
{:ok, activity} <- insert(announce_data, local),
{:ok, object} <- add_announce_to_object(activity, object),
:ok <- maybe_federate(activity) do
@@ -796,13 +797,12 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
end
end

def is_public?(%Object{data: %{"type" => "Tombstone"}}) do
false
end
def is_public?(%Object{data: %{"type" => "Tombstone"}}), do: false
def is_public?(%Object{data: data}), do: is_public?(data)
def is_public?(%Activity{data: data}), do: is_public?(data)

def is_public?(activity) do
"https://www.w3.org/ns/activitystreams#Public" in (activity.data["to"] ++
(activity.data["cc"] || []))
def is_public?(data) do
"https://www.w3.org/ns/activitystreams#Public" in (data["to"] ++ (data["cc"] || []))
end

def visible_for_user?(activity, nil) do


+ 1
- 1
lib/pleroma/web/activity_pub/relay.ex View File

@@ -40,7 +40,7 @@ defmodule Pleroma.Web.ActivityPub.Relay do
def publish(%Activity{data: %{"type" => "Create"}} = activity) do
with %User{} = user <- get_actor(),
%Object{} = object <- Object.normalize(activity.data["object"]["id"]) do
ActivityPub.announce(user, object)
ActivityPub.announce(user, object, nil, true, false)
else
e -> Logger.error("error: #{inspect(e)}")
end


+ 2
- 1
lib/pleroma/web/activity_pub/transmogrifier.ex View File

@@ -451,7 +451,8 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
with actor <- get_actor(data),
%User{} = actor <- User.get_or_fetch_by_ap_id(actor),
{:ok, object} <- get_obj_helper(object_id) || fetch_obj_helper(object_id),
{:ok, activity, _object} <- ActivityPub.announce(actor, object, id, false) do
public <- ActivityPub.is_public?(data),
{:ok, activity, _object} <- ActivityPub.announce(actor, object, id, false, public) do
{:ok, activity}
else
_e -> :error


+ 5
- 3
lib/pleroma/web/activity_pub/utils.ex View File

@@ -386,9 +386,10 @@ defmodule Pleroma.Web.ActivityPub.Utils do
"""
# for relayed messages, we only want to send to subscribers
def make_announce_data(
%User{ap_id: ap_id, nickname: nil} = user,
%User{ap_id: ap_id} = user,
%Object{data: %{"id" => id}} = object,
activity_id
activity_id,
false
) do
data = %{
"type" => "Announce",
@@ -405,7 +406,8 @@ defmodule Pleroma.Web.ActivityPub.Utils do
def make_announce_data(
%User{ap_id: ap_id} = user,
%Object{data: %{"id" => id}} = object,
activity_id
activity_id,
true
) do
data = %{
"type" => "Announce",


+ 16
- 0
test/web/activity_pub/transmogrifier_test.exs View File

@@ -288,6 +288,22 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do
assert Activity.get_create_activity_by_object_ap_id(data["object"]).id == activity.id
end

test "it does not clobber the addressing on announce activities" do
user = insert(:user)
{:ok, activity} = CommonAPI.post(user, %{"status" => "hey"})

data =
File.read!("test/fixtures/mastodon-announce.json")
|> Poison.decode!()
|> Map.put("object", activity.data["object"]["id"])
|> Map.put("to", ["http://mastodon.example.org/users/admin/followers"])
|> Map.put("cc", [])

{:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data)

assert data["to"] == ["http://mastodon.example.org/users/admin/followers"]
end

test "it works for incoming update activities" do
data = File.read!("test/fixtures/mastodon-post-activity.json") |> Poison.decode!()



Loading…
Cancel
Save