summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAlexander Strizhakov <alex.strizhakov@gmail.com>2021-02-25 14:00:44 +0300
committerAlexander Strizhakov <alex.strizhakov@gmail.com>2021-03-25 13:03:40 +0300
commit17f28c0507e3c34ce75e63747eed9abb66713e6e (patch)
tree4baf0a817fb9a5abc86da7f17ef5c9cebd3140ad /lib
parent3ec1dbd9223aa44205e90967175f07cc532501ab (diff)
downloadpleroma-17f28c0507e3c34ce75e63747eed9abb66713e6e.tar.gz
pleroma-17f28c0507e3c34ce75e63747eed9abb66713e6e.zip
mastodon pins
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/object/containment.ex8
-rw-r--r--lib/pleroma/web/activity_pub/transmogrifier.ex17
2 files changed, 21 insertions, 4 deletions
diff --git a/lib/pleroma/object/containment.ex b/lib/pleroma/object/containment.ex
index fb0398f92..040537acf 100644
--- a/lib/pleroma/object/containment.ex
+++ b/lib/pleroma/object/containment.ex
@@ -71,6 +71,14 @@ defmodule Pleroma.Object.Containment do
compare_uris(id_uri, other_uri)
end
+ # Mastodon pin activities don't have an id, so we check the object field, which will be pinned.
+ def contain_origin_from_id(id, %{"object" => object}) when is_binary(object) do
+ id_uri = URI.parse(id)
+ object_uri = URI.parse(object)
+
+ compare_uris(id_uri, object_uri)
+ end
+
def contain_origin_from_id(_id, _data), do: :error
def contain_child(%{"object" => %{"id" => id, "attributedTo" => _} = object}),
diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex
index 270cea6dc..b662f5379 100644
--- a/lib/pleroma/web/activity_pub/transmogrifier.ex
+++ b/lib/pleroma/web/activity_pub/transmogrifier.ex
@@ -557,10 +557,19 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
end
def handle_incoming(%{"type" => type} = data, _options) when type in ~w(Add Remove) do
- with :ok <- ObjectValidator.fetch_actor_and_object(data),
- %Object{} <- Object.normalize(data["object"], fetch: true),
- {:ok, activity, _meta} <- Pipeline.common_pipeline(data, local: false) do
- {:ok, activity}
+ with {:ok, user} <- ObjectValidator.fetch_actor(data),
+ %Object{} <- Object.normalize(data["object"], fetch: true) do
+ # Mastodon sends pin/unpin objects without id, to, cc fields
+ data =
+ data
+ |> Map.put_new("id", Utils.generate_activity_id())
+ |> Map.put_new("to", [Pleroma.Constants.as_public()])
+ |> Map.put_new("cc", [user.follower_address])
+
+ case Pipeline.common_pipeline(data, local: false) do
+ {:ok, activity, _meta} -> {:ok, activity}
+ error -> error
+ end
end
end