logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://anongit.hacktivis.me/git/pleroma.git/

delete_worker.ex (1236B)


  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.Workers.DeleteWorker do
  5. alias Pleroma.User
  6. use Oban.Worker, queue: :slow
  7. @impl true
  8. def perform(%Job{args: %{"op" => "delete_user", "user_id" => user_id}}) do
  9. user = User.get_cached_by_id(user_id)
  10. User.perform(:delete, user)
  11. end
  12. def perform(%Job{args: %{"op" => "delete_instance", "host" => host}}) do
  13. # Schedule the per-user deletion jobs
  14. Pleroma.Repo.transaction(fn ->
  15. User.Query.build(%{nickname: "@#{host}"})
  16. |> Pleroma.Repo.all()
  17. |> Enum.each(fn user ->
  18. %{"op" => "delete_user", "user_id" => user.id}
  19. |> __MODULE__.new()
  20. |> Oban.insert()
  21. end)
  22. # Delete the instance from the Instances table
  23. case Pleroma.Repo.get_by(Pleroma.Instances.Instance, host: host) do
  24. nil -> :ok
  25. instance -> Pleroma.Repo.delete(instance)
  26. end
  27. # Delete any pending ReachabilityWorker jobs for this domain
  28. Pleroma.Workers.ReachabilityWorker.delete_jobs_for_host(host)
  29. :ok
  30. end)
  31. end
  32. @impl true
  33. def timeout(_job), do: :timer.seconds(900)
  34. end