Refactor Mobilizon.Federation.ActivityPub and add typespecs
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
33
lib/federation/activity_pub/actions/delete.ex
Normal file
33
lib/federation/activity_pub/actions/delete.ex
Normal file
@@ -0,0 +1,33 @@
|
||||
defmodule Mobilizon.Federation.ActivityPub.Actions.Delete do
|
||||
@moduledoc """
|
||||
Delete things
|
||||
"""
|
||||
alias Mobilizon.Actors.Actor
|
||||
alias Mobilizon.Federation.ActivityPub.Activity
|
||||
alias Mobilizon.Federation.ActivityPub.Types.{Entity, Managable, Ownable}
|
||||
require Logger
|
||||
|
||||
import Mobilizon.Federation.ActivityPub.Utils,
|
||||
only: [
|
||||
create_activity: 2,
|
||||
maybe_federate: 1,
|
||||
maybe_relay_if_group_activity: 2,
|
||||
check_for_actor_key_rotation: 1
|
||||
]
|
||||
|
||||
@doc """
|
||||
Delete an entity, using an activity of type `Delete`
|
||||
"""
|
||||
@spec delete(Entity.t(), Actor.t(), boolean, map) :: {:ok, Activity.t(), Entity.t()}
|
||||
def delete(object, actor, local \\ true, additional \\ %{}) do
|
||||
with {:ok, activity_data, actor, object} <-
|
||||
Managable.delete(object, actor, local, additional),
|
||||
group <- Ownable.group_actor(object),
|
||||
:ok <- check_for_actor_key_rotation(actor),
|
||||
{:ok, activity} <- create_activity(activity_data, local),
|
||||
:ok <- maybe_federate(activity),
|
||||
:ok <- maybe_relay_if_group_activity(activity, group) do
|
||||
{:ok, activity, object}
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user