Questions: Move fixes to validators.
authorlain <lain@soykaf.club>
Wed, 5 Aug 2020 12:51:33 +0000 (14:51 +0200)
committerlain <lain@soykaf.club>
Wed, 5 Aug 2020 12:51:33 +0000 (14:51 +0200)
lib/pleroma/web/activity_pub/object_validators/create_generic_validator.ex
lib/pleroma/web/activity_pub/object_validators/question_validator.ex
lib/pleroma/web/activity_pub/transmogrifier.ex
lib/pleroma/web/mastodon_api/views/poll_view.ex

index 2569df7f69f11fbb08996ef086ef049122b3cc07..60868eae08ac83c1fd326227bdae9548d97b777f 100644 (file)
@@ -29,7 +29,9 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.CreateGenericValidator do
     field(:context, :string)
   end
 
-  def cast_data(data) do
+  def cast_data(data, meta \\ []) do
+    data = fix(data, meta)
+
     %__MODULE__{}
     |> changeset(data)
   end
@@ -42,7 +44,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.CreateGenericValidator do
 
   def cast_and_validate(data, meta \\ []) do
     data
-    |> cast_data
+    |> cast_data(meta)
     |> validate_data(meta)
   end
 
@@ -51,6 +53,19 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.CreateGenericValidator do
     |> cast(data, __schema__(:fields))
   end
 
+  defp fix_context(data, meta) do
+    if object = meta[:object_data] do
+      Map.put_new(data, "context", object["context"])
+    else
+      data
+    end
+  end
+
+  defp fix(data, meta) do
+    data
+    |> fix_context(meta)
+  end
+
   def validate_data(cng, meta \\ []) do
     cng
     |> validate_required([:actor, :type, :object])
index 694cb673052413d0d85777f2da9e5af5278e18e0..f47acf606aabd89ddc756f83176db4f4db48e628 100644 (file)
@@ -83,17 +83,23 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.QuestionValidator do
 
   # based on Pleroma.Web.ActivityPub.Utils.lazy_put_objects_defaults
   defp fix_defaults(data) do
-    %{data: %{"id" => context}, id: context_id} = Utils.create_context(data["context"])
+    %{data: %{"id" => context}, id: context_id} =
+      Utils.create_context(data["context"] || data["conversation"])
 
     data
-    |> Map.put_new_lazy("id", &Utils.generate_object_id/0)
     |> Map.put_new_lazy("published", &Utils.make_date/0)
     |> Map.put_new("context", context)
     |> Map.put_new("context_id", context_id)
   end
 
+  defp fix_attribution(data) do
+    data
+    |> Map.put_new("actor", data["attributedTo"])
+  end
+
   defp fix(data) do
     data
+    |> fix_attribution()
     |> fix_closed()
     |> fix_defaults()
   end
index f85a266796f89ad2482602040109a2191fe83172..7381d4476b06dd1526be8642889e228fd33fafec 100644 (file)
@@ -634,17 +634,10 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
   end
 
   def handle_incoming(
-        %{"type" => "Create", "object" => %{"type" => objtype} = object} = data,
+        %{"type" => "Create", "object" => %{"type" => objtype}} = data,
         _options
       )
-      when objtype in ["Question", "Answer"] do
-    data =
-      data
-      |> Map.put("object", fix_object(object))
-      |> fix_addressing()
-
-    data = Map.put_new(data, "context", data["object"]["context"])
-
+      when objtype in ["Question", "Answer", "ChatMessage"] do
     with {:ok, %User{}} <- ObjectValidator.fetch_actor(data),
          {:ok, activity, _} <- Pipeline.common_pipeline(data, local: false) do
       {:ok, activity}
index 1bfc99259c329ff10b64f92ca5d98f0639137049..1208dc9a053de85e959c0224d7460c6988ec7bd8 100644 (file)
@@ -28,10 +28,10 @@ defmodule Pleroma.Web.MastodonAPI.PollView do
 
   def render("show.json", %{object: object} = params) do
     case object.data do
-      %{"anyOf" => [ _ | _] = options} ->
+      %{"anyOf" => [_ | _] = options} ->
         render(__MODULE__, "show.json", Map.merge(params, %{multiple: true, options: options}))
 
-      %{"oneOf" => [ _ | _] = options} ->
+      %{"oneOf" => [_ | _] = options} ->
         render(__MODULE__, "show.json", Map.merge(params, %{multiple: false, options: options}))
 
       _ ->