diff options
Diffstat (limited to 'lib/pleroma/web/activity_pub')
4 files changed, 69 insertions, 0 deletions
diff --git a/lib/pleroma/web/activity_pub/builder.ex b/lib/pleroma/web/activity_pub/builder.ex index e99f6fd83..bb579083c 100644 --- a/lib/pleroma/web/activity_pub/builder.ex +++ b/lib/pleroma/web/activity_pub/builder.ex @@ -65,6 +65,15 @@ defmodule Pleroma.Web.ActivityPub.Builder do end end + def close_poll(_activity, object) do + {:ok, + %{ + "id" => Utils.generate_activity_id(), + "type" => "ClosePoll", + "object" => object.data["id"] + }, []} + end + @spec undo(User.t(), Activity.t()) :: {:ok, map(), keyword()} def undo(actor, object) do {:ok, diff --git a/lib/pleroma/web/activity_pub/object_validator.ex b/lib/pleroma/web/activity_pub/object_validator.ex index bd0a2a8dc..aa1d64323 100644 --- a/lib/pleroma/web/activity_pub/object_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validator.ex @@ -21,6 +21,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidator do alias Pleroma.Web.ActivityPub.ObjectValidators.AudioVideoValidator alias Pleroma.Web.ActivityPub.ObjectValidators.BlockValidator alias Pleroma.Web.ActivityPub.ObjectValidators.ChatMessageValidator + alias Pleroma.Web.ActivityPub.ObjectValidators.ClosePollValidator alias Pleroma.Web.ActivityPub.ObjectValidators.CreateChatMessageValidator alias Pleroma.Web.ActivityPub.ObjectValidators.CreateGenericValidator alias Pleroma.Web.ActivityPub.ObjectValidators.DeleteValidator @@ -151,6 +152,16 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidator do end end + def validate(%{"type" => "ClosePoll"} = object, meta) do + with {:ok, object} <- + object + |> ClosePollValidator.cast_and_validate() + |> Ecto.Changeset.apply_action(:insert) do + object = stringify_keys(object) + {:ok, object, meta} + end + end + def validate(%{"type" => type} = object, meta) when type in ~w[Audio Video] do with {:ok, object} <- object diff --git a/lib/pleroma/web/activity_pub/object_validators/close_poll_validator.ex b/lib/pleroma/web/activity_pub/object_validators/close_poll_validator.ex new file mode 100644 index 000000000..c3325948e --- /dev/null +++ b/lib/pleroma/web/activity_pub/object_validators/close_poll_validator.ex @@ -0,0 +1,41 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ActivityPub.ObjectValidators.ClosePollValidator do + use Ecto.Schema + + alias Pleroma.EctoType.ActivityPub.ObjectValidators + + import Ecto.Changeset + + @primary_key false + + embedded_schema do + field(:id, ObjectValidators.ObjectID, primary_key: true) + field(:type, :string) + field(:object, ObjectValidators.ObjectID) + end + + def cast_and_validate(data) do + data + |> cast_data() + |> validate_data() + end + + def cast_data(data) do + %__MODULE__{} + |> changeset(data) + end + + def changeset(struct, data) do + struct + |> cast(data, __schema__(:fields)) + end + + def validate_data(data_cng) do + data_cng + |> validate_inclusion(:type, ["ClosePoll"]) + |> validate_required([:id, :type, :object]) + end +end diff --git a/lib/pleroma/web/activity_pub/side_effects.ex b/lib/pleroma/web/activity_pub/side_effects.ex index 4d8fb721e..d8ef04a62 100644 --- a/lib/pleroma/web/activity_pub/side_effects.ex +++ b/lib/pleroma/web/activity_pub/side_effects.ex @@ -245,6 +245,14 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do end # Tasks this handles: + # - Set up notification on close poll + def handle(%{data: %{"type" => "ClosePoll"}} = object, meta) do + Notification.create_notifications(object) + + {:ok, object, meta} + end + + # Tasks this handles: # - Delete and unpins the create activity # - Replace object with Tombstone # - Set up notification |