diff options
Diffstat (limited to 'lib')
7 files changed, 44 insertions, 34 deletions
| diff --git a/lib/pleroma/ecto_type/activity_pub/object_validators/recipients.ex b/lib/pleroma/ecto_type/activity_pub/object_validators/recipients.ex index af4b0e527..b76547e75 100644 --- a/lib/pleroma/ecto_type/activity_pub/object_validators/recipients.ex +++ b/lib/pleroma/ecto_type/activity_pub/object_validators/recipients.ex @@ -15,19 +15,23 @@ defmodule Pleroma.EctoType.ActivityPub.ObjectValidators.Recipients do    def cast(data) when is_list(data) do      data -    |> Enum.reduce_while({:ok, []}, fn element, {:ok, list} -> -      case ObjectID.cast(element) do -        {:ok, id} -> -          {:cont, {:ok, [id | list]}} - -        _ -> -          {:halt, :error} -      end +    |> Enum.reduce_while({:ok, []}, fn +      nil, {:ok, list} -> +        {:cont, {:ok, list}} + +      element, {:ok, list} -> +        case ObjectID.cast(element) do +          {:ok, id} -> +            {:cont, {:ok, [id | list]}} + +          _ -> +            {:halt, {:error, element}} +        end      end)    end -  def cast(_) do -    :error +  def cast(data) do +    {:error, data}    end    def dump(data) do diff --git a/lib/pleroma/web/activity_pub/object_validators/article_note_validator.ex b/lib/pleroma/web/activity_pub/object_validators/article_note_validator.ex index 39ef6dc29..d2026b5ea 100644 --- a/lib/pleroma/web/activity_pub/object_validators/article_note_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/article_note_validator.ex @@ -79,9 +79,8 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.ArticleNoteValidator do    defp fix(data) do      data -    |> CommonFixes.fix_defaults() -    |> CommonFixes.fix_attribution()      |> CommonFixes.fix_actor() +    |> CommonFixes.fix_object_defaults()      |> fix_url()      |> Transmogrifier.fix_emoji()    end diff --git a/lib/pleroma/web/activity_pub/object_validators/audio_video_validator.ex b/lib/pleroma/web/activity_pub/object_validators/audio_video_validator.ex index 8a5a60526..8ee432947 100644 --- a/lib/pleroma/web/activity_pub/object_validators/audio_video_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/audio_video_validator.ex @@ -120,9 +120,8 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.AudioVideoValidator do    defp fix(data) do      data -    |> CommonFixes.fix_defaults() -    |> CommonFixes.fix_attribution()      |> CommonFixes.fix_actor() +    |> CommonFixes.fix_object_defaults()      |> Transmogrifier.fix_emoji()      |> fix_url()      |> fix_content() diff --git a/lib/pleroma/web/activity_pub/object_validators/common_fixes.ex b/lib/pleroma/web/activity_pub/object_validators/common_fixes.ex index 5f2c633bc..950eb1494 100644 --- a/lib/pleroma/web/activity_pub/object_validators/common_fixes.ex +++ b/lib/pleroma/web/activity_pub/object_validators/common_fixes.ex @@ -3,26 +3,44 @@  # SPDX-License-Identifier: AGPL-3.0-only  defmodule Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes do +  alias Pleroma.EctoType.ActivityPub.ObjectValidators    alias Pleroma.Object.Containment +  alias Pleroma.User +  alias Pleroma.Web.ActivityPub.Transmogrifier    alias Pleroma.Web.ActivityPub.Utils -  # based on Pleroma.Web.ActivityPub.Utils.lazy_put_objects_defaults -  def fix_defaults(data) do +  def fix_object_defaults(data) do      %{data: %{"id" => context}, id: context_id} =        Utils.create_context(data["context"] || data["conversation"]) +    %User{follower_address: follower_collection} = User.get_cached_by_ap_id(data["attributedTo"]) +    {:ok, to} = ObjectValidators.Recipients.cast(data["to"] || []) +    {:ok, cc} = ObjectValidators.Recipients.cast(data["cc"] || []) +      data      |> Map.put("context", context)      |> Map.put("context_id", context_id) +    |> Map.put("to", to) +    |> Map.put("cc", cc) +    |> Transmogrifier.fix_explicit_addressing(follower_collection) +    |> Transmogrifier.fix_implicit_addressing(follower_collection)    end -  def fix_attribution(data) do +  def fix_activity_defaults(data, meta) do +    object = meta[:object_data] || %{} +      data -    |> Map.put_new("actor", data["attributedTo"]) +    |> Map.put_new("to", object["to"] || []) +    |> Map.put_new("cc", object["cc"] || []) +    |> Map.put_new("bto", object["bto"] || []) +    |> Map.put_new("bcc", object["bcc"] || [])    end    def fix_actor(data) do -    actor = Containment.get_actor(data) +    actor = +      data +      |> Map.put_new("actor", data["attributedTo"]) +      |> Containment.get_actor()      data      |> Map.put("actor", actor) diff --git a/lib/pleroma/web/activity_pub/object_validators/create_generic_validator.ex b/lib/pleroma/web/activity_pub/object_validators/create_generic_validator.ex index e06e442f4..99e8dc6c7 100644 --- a/lib/pleroma/web/activity_pub/object_validators/create_generic_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/create_generic_validator.ex @@ -62,21 +62,11 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.CreateGenericValidator do      end    end -  defp fix_addressing(data, meta) do -    if object = meta[:object_data] do -      data -      |> Map.put_new("to", object["to"] || []) -      |> Map.put_new("cc", object["cc"] || []) -    else -      data -    end -  end -    defp fix(data, meta) do      data      |> fix_context(meta) -    |> fix_addressing(meta)      |> CommonFixes.fix_actor() +    |> CommonFixes.fix_activity_defaults(meta)    end    defp validate_data(cng, meta) do diff --git a/lib/pleroma/web/activity_pub/object_validators/event_validator.ex b/lib/pleroma/web/activity_pub/object_validators/event_validator.ex index d42458ef5..fee2e997a 100644 --- a/lib/pleroma/web/activity_pub/object_validators/event_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/event_validator.ex @@ -72,8 +72,8 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.EventValidator do    defp fix(data) do      data -    |> CommonFixes.fix_defaults() -    |> CommonFixes.fix_attribution() +    |> CommonFixes.fix_actor() +    |> CommonFixes.fix_object_defaults()      |> Transmogrifier.fix_emoji()    end diff --git a/lib/pleroma/web/activity_pub/object_validators/question_validator.ex b/lib/pleroma/web/activity_pub/object_validators/question_validator.ex index 7012e2e1d..083d08ec4 100644 --- a/lib/pleroma/web/activity_pub/object_validators/question_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/question_validator.ex @@ -83,8 +83,8 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.QuestionValidator do    defp fix(data) do      data -    |> CommonFixes.fix_defaults() -    |> CommonFixes.fix_attribution() +    |> CommonFixes.fix_actor() +    |> CommonFixes.fix_object_defaults()      |> Transmogrifier.fix_emoji()      |> fix_closed()    end | 
