logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git
commit: ddf46944063522f8ab51fc500b89a4d962b7791d
parent f09d90bc91ac11f646bfd03c8b8ce27b9d30e064
Author: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
Date:   Mon, 28 Sep 2020 20:55:44 +0200

Transmogrifier: Check object/activity existance for incoming Delete/Undo

Diffstat:

Mlib/pleroma/web/activity_pub/transmogrifier.ex17++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -496,10 +496,13 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do %{"type" => "Delete"} = data, _options ) do - with {:ok, activity, _} <- - Pipeline.common_pipeline(data, local: false) do + with {_, %Object{}} <- {:normalize, Object.normalize(data["object"], false)}, + {:ok, activity, _} <- Pipeline.common_pipeline(data, local: false) do {:ok, activity} else + {:normalize, nil} -> + {:error, "Unknown object to Delete"} + {:error, {:validate, _}} = e -> # Check if we have a create activity for this with {:ok, object_id} <- ObjectValidators.ObjectID.cast(data["object"]), @@ -537,13 +540,17 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do def handle_incoming( %{ "type" => "Undo", - "object" => %{"type" => type} + "object" => %{"type" => type, "id" => act_id} } = data, _options ) when type in ["Like", "EmojiReact", "Announce", "Block"] do - with {:ok, activity, _} <- Pipeline.common_pipeline(data, local: false) do + with {_, %Activity{}} <- {:normalize, Activity.get_by_id(act_id)}, + {:ok, activity, _} <- Pipeline.common_pipeline(data, local: false) do {:ok, activity} + else + {:normalize, nil} -> {:error, "Unknown activity to Undo"} + e -> e end end @@ -561,7 +568,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do |> Map.put("object", data) |> handle_incoming(options) else - _e -> :error + nil -> {:error, "Unknown activity to Undo"} end end