LikeValidator: Fix up context.
authorlain <lain@soykaf.club>
Mon, 4 May 2020 15:18:17 +0000 (17:18 +0200)
committerlain <lain@soykaf.club>
Mon, 4 May 2020 15:18:17 +0000 (17:18 +0200)
lib/pleroma/web/activity_pub/object_validators/like_validator.ex
test/web/activity_pub/object_validator_test.exs

index d9ee079957afa7fb4928fe800b6e6658d7e3b55c..1bce739bd08f8a7a2136c5d59a95a87dfd24b9e7 100644 (file)
@@ -44,11 +44,25 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.LikeValidator do
   def fix_after_cast(cng) do
     cng
     |> fix_recipients()
+    |> fix_context()
+  end
+
+  def fix_context(cng) do
+    object = get_field(cng, :object)
+
+    with nil <- get_field(cng, :context),
+         %Object{data: %{"context" => context}} <- Object.get_cached_by_ap_id(object) do
+      cng
+      |> put_change(:context, context)
+    else
+      _ ->
+        cng
+    end
   end
 
   def fix_recipients(cng) do
-    to = get_field(cng, :to) || []
-    cc = get_field(cng, :cc) || []
+    to = get_field(cng, :to)
+    cc = get_field(cng, :cc)
     object = get_field(cng, :object)
 
     with {[], []} <- {to, cc},
index 9e9e41c6be58afa8614fc1e1b7234aa6538f5cb6..93989e28ae6d7efce9a136c5c5e21224cd7d9528 100644 (file)
@@ -49,6 +49,19 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidatorTest do
       assert object["to"] == [user.ap_id]
     end
 
+    test "sets the context field to the context of the object if no context is given", %{
+      valid_like: valid_like,
+      post_activity: post_activity
+    } do
+      without_context =
+        valid_like
+        |> Map.delete("context")
+
+      {:ok, object, _meta} = ObjectValidator.validate(without_context, [])
+
+      assert object["context"] == post_activity.data["context"]
+    end
+
     test "it errors when the actor is missing or not known", %{valid_like: valid_like} do
       without_actor = Map.delete(valid_like, "actor")