diff options
author | Alex Gleason <alex@alexgleason.me> | 2021-07-17 14:06:35 -0500 |
---|---|---|
committer | Alex Gleason <alex@alexgleason.me> | 2021-07-17 14:06:35 -0500 |
commit | f67d00d12b5d66a960bd7b3822a5fa4418348e18 (patch) | |
tree | 3e5564b85cf0752cd1b30cac7553fe84ddefd054 /lib/pleroma/instances | |
parent | c136dc0987dda1b48298380b0db48bd92fef3f78 (diff) | |
download | pleroma-f67d00d12b5d66a960bd7b3822a5fa4418348e18.tar.gz |
Add Instance.delete_users_and_activities/1 to delete all content from a remote instance
Diffstat (limited to 'lib/pleroma/instances')
-rw-r--r-- | lib/pleroma/instances/instance.ex | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/lib/pleroma/instances/instance.ex b/lib/pleroma/instances/instance.ex index 4d0e8034d..2f338b3e2 100644 --- a/lib/pleroma/instances/instance.ex +++ b/lib/pleroma/instances/instance.ex @@ -8,6 +8,8 @@ defmodule Pleroma.Instances.Instance do alias Pleroma.Instances alias Pleroma.Instances.Instance alias Pleroma.Repo + alias Pleroma.User + alias Pleroma.Workers.BackgroundWorker use Ecto.Schema @@ -195,4 +197,24 @@ defmodule Pleroma.Instances.Instance do nil end end + + @doc """ + Deletes all users from an instance in a background task, thus also deleting + all of those users' activities and notifications. + """ + def delete_users_and_activities(host) when is_binary(host) do + BackgroundWorker.enqueue("delete_instance", %{"host" => host}) + end + + def perform(:delete_instance, host) when is_binary(host) do + User.Query.build(%{nickname: "@#{host}"}) + |> Repo.chunk_stream(100, :batches) + |> Stream.each(fn users -> + users + |> Enum.each(fn user -> + User.perform(:delete, user) + end) + end) + |> Stream.run() + end end |