aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrinpatch <rinpatch@sdf.org>2019-05-13 07:39:12 +0000
committerrinpatch <rinpatch@sdf.org>2019-05-13 07:39:12 +0000
commit17f7c5e290a2386f0e62f93d434146849a5e5d84 (patch)
tree68d601ae0cd5f8813d73738e1d68a66721f4e032
parent3ded995253c9a430fcef1b210eb20fd33a409598 (diff)
parent15cda998f3bdc03f58c30e34e35ebc026a90cf29 (diff)
downloadpleroma-17f7c5e290a2386f0e62f93d434146849a5e5d84.tar.gz
Merge branch 'fix/unfollows-not-working' into 'develop'
Normalize the object in `create_or_bump_for` only after ensuring the activity type is Create Closes #874 See merge request pleroma/pleroma!1138
-rw-r--r--lib/pleroma/conversation.ex2
-rw-r--r--test/conversation_test.exs38
2 files changed, 39 insertions, 1 deletions
diff --git a/lib/pleroma/conversation.ex b/lib/pleroma/conversation.ex
index 6e26c5fd4..0db195988 100644
--- a/lib/pleroma/conversation.ex
+++ b/lib/pleroma/conversation.ex
@@ -47,8 +47,8 @@ defmodule Pleroma.Conversation do
"""
def create_or_bump_for(activity) do
with true <- Pleroma.Web.ActivityPub.Visibility.is_direct?(activity),
- object <- Pleroma.Object.normalize(activity),
"Create" <- activity.data["type"],
+ object <- Pleroma.Object.normalize(activity),
"Note" <- object.data["type"],
ap_id when is_binary(ap_id) and byte_size(ap_id) > 0 <- object.data["context"] do
{:ok, conversation} = create_for_ap_id(ap_id)
diff --git a/test/conversation_test.exs b/test/conversation_test.exs
index f3300e7d1..864b2eb03 100644
--- a/test/conversation_test.exs
+++ b/test/conversation_test.exs
@@ -4,7 +4,9 @@
defmodule Pleroma.ConversationTest do
use Pleroma.DataCase
+ alias Pleroma.Activity
alias Pleroma.Conversation
+ alias Pleroma.Object
alias Pleroma.Web.CommonAPI
import Pleroma.Factory
@@ -134,4 +136,40 @@ defmodule Pleroma.ConversationTest do
assert {:error, _} = Conversation.create_or_bump_for(activity)
end
+
+ test "create_or_bump_for does not normalize objects before checking the activity type" do
+ note = insert(:note)
+ note_id = note.data["id"]
+ Repo.delete(note)
+ refute Object.get_by_ap_id(note_id)
+
+ Tesla.Mock.mock(fn env ->
+ case env.url do
+ ^note_id ->
+ # TODO: add attributedTo and tag to the note factory
+ body =
+ note.data
+ |> Map.put("attributedTo", note.data["actor"])
+ |> Map.put("tag", [])
+ |> Jason.encode!()
+
+ %Tesla.Env{status: 200, body: body}
+ end
+ end)
+
+ undo = %Activity{
+ id: "fake",
+ data: %{
+ "id" => Pleroma.Web.ActivityPub.Utils.generate_activity_id(),
+ "actor" => note.data["actor"],
+ "to" => [note.data["actor"]],
+ "object" => note_id,
+ "type" => "Undo"
+ }
+ }
+
+ Conversation.create_or_bump_for(undo)
+
+ refute Object.get_by_ap_id(note_id)
+ end
end