diff options
author | lain <lain@soykaf.club> | 2020-05-18 16:54:10 +0200 |
---|---|---|
committer | lain <lain@soykaf.club> | 2020-05-18 16:54:10 +0200 |
commit | 0d5bce018df9c99c771daaaa1de3ab0efc0cba5c (patch) | |
tree | 1f43336950f76e39748084b48e650634718272de /lib/pleroma/web | |
parent | 17a8342c1e2bd615edb8e41535aa96c1b22d440a (diff) | |
download | pleroma-0d5bce018df9c99c771daaaa1de3ab0efc0cba5c.tar.gz |
AnnounceValidator: Validate for existing announce
Diffstat (limited to 'lib/pleroma/web')
-rw-r--r-- | lib/pleroma/web/activity_pub/object_validators/announce_validator.ex | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/lib/pleroma/web/activity_pub/object_validators/announce_validator.ex b/lib/pleroma/web/activity_pub/object_validators/announce_validator.ex index fbefaf257..158ae199d 100644 --- a/lib/pleroma/web/activity_pub/object_validators/announce_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/announce_validator.ex @@ -6,9 +6,10 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.AnnounceValidator do use Ecto.Schema alias Pleroma.Web.ActivityPub.ObjectValidators.Types + alias Pleroma.Web.ActivityPub.Utils - import Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations import Ecto.Changeset + import Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations @primary_key false @@ -49,5 +50,19 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.AnnounceValidator do |> validate_required([:id, :type, :object, :actor, :context, :to, :cc]) |> validate_actor_presence() |> validate_object_presence() + |> validate_existing_announce() + end + + def validate_existing_announce(cng) do + actor = get_field(cng, :actor) + object = get_field(cng, :object) + + if actor && object && Utils.get_existing_announce(actor, %{data: %{"id" => object}}) do + cng + |> add_error(:actor, "already announced this object") + |> add_error(:object, "already announced by this actor") + else + cng + end end end |