X-Git-Url: https://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Fweb%2Factivity_pub%2Fobject_validators%2Fadd_remove_validator.ex;h=c38f86a0ef22cdda5368832721e49a0276c23f65;hb=2a520ba008f432e7e1fa297954966e0181245f01;hp=73d1c03f0fc2c78b1599cd3baefaca95ae0f2f25;hpb=ff612750b1bae5223bca76b34a39e7d2bd05770c;p=akkoma diff --git a/lib/pleroma/web/activity_pub/object_validators/add_remove_validator.ex b/lib/pleroma/web/activity_pub/object_validators/add_remove_validator.ex index 73d1c03f0..c38f86a0e 100644 --- a/lib/pleroma/web/activity_pub/object_validators/add_remove_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/add_remove_validator.ex @@ -8,6 +8,8 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.AddRemoveValidator do import Ecto.Changeset import Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations + require Pleroma.Constants + alias Pleroma.EctoType.ActivityPub.ObjectValidators @primary_key false @@ -24,10 +26,20 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.AddRemoveValidator do def cast_and_validate(data) do data + |> maybe_fix_data_for_mastodon() |> cast_data() |> validate_data() end + defp maybe_fix_data_for_mastodon(data) do + {:ok, actor} = Pleroma.User.get_or_fetch_by_ap_id(data["actor"]) + # Mastodon sends pin/unpin objects without id, to, cc fields + data + |> Map.put_new("id", Pleroma.Web.ActivityPub.Utils.generate_activity_id()) + |> Map.put_new("to", [Pleroma.Constants.as_public()]) + |> Map.put_new("cc", [actor.follower_address]) + end + defp cast_data(data) do cast(%__MODULE__{}, data, __schema__(:fields)) end @@ -42,8 +54,10 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.AddRemoveValidator do end defp validate_collection_belongs_to_actor(changeset) do + {:ok, actor} = Pleroma.User.get_or_fetch_by_ap_id(changeset.changes[:actor]) + validate_change(changeset, :target, fn :target, target -> - if String.starts_with?(target, changeset.changes[:actor]) do + if target == actor.featured_address do [] else [target: "collection doesn't belong to actor"]