logo

pleroma

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

backup_worker.ex (2070B)


  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.BackupWorker do
  5. use Oban.Worker, queue: :backup, max_attempts: 1
  6. alias Oban.Job
  7. alias Pleroma.User.Backup
  8. def process(backup, admin_user_id \\ nil) do
  9. %{"op" => "process", "backup_id" => backup.id, "admin_user_id" => admin_user_id}
  10. |> new()
  11. |> Oban.insert()
  12. end
  13. def schedule_deletion(backup) do
  14. days = Pleroma.Config.get([Backup, :purge_after_days])
  15. time = 60 * 60 * 24 * days
  16. scheduled_at = Calendar.NaiveDateTime.add!(backup.inserted_at, time)
  17. %{"op" => "delete", "backup_id" => backup.id}
  18. |> new(scheduled_at: scheduled_at)
  19. |> Oban.insert()
  20. end
  21. def delete(backup) do
  22. %{"op" => "delete", "backup_id" => backup.id}
  23. |> new()
  24. |> Oban.insert()
  25. end
  26. @impl Oban.Worker
  27. def perform(%Job{
  28. args: %{"op" => "process", "backup_id" => backup_id, "admin_user_id" => admin_user_id}
  29. }) do
  30. with {:ok, %Backup{} = backup} <-
  31. backup_id |> Backup.get() |> Backup.process(),
  32. {:ok, _job} <- schedule_deletion(backup),
  33. :ok <- Backup.remove_outdated(backup),
  34. :ok <- maybe_deliver_email(backup, admin_user_id) do
  35. {:ok, backup}
  36. end
  37. end
  38. def perform(%Job{args: %{"op" => "delete", "backup_id" => backup_id}}) do
  39. case Backup.get(backup_id) do
  40. %Backup{} = backup -> Backup.delete(backup)
  41. nil -> :ok
  42. end
  43. end
  44. @impl Oban.Worker
  45. def timeout(_job), do: :infinity
  46. defp has_email?(user) do
  47. not is_nil(user.email) and user.email != ""
  48. end
  49. defp maybe_deliver_email(backup, admin_user_id) do
  50. has_mailer = Pleroma.Config.get([Pleroma.Emails.Mailer, :enabled])
  51. backup = backup |> Pleroma.Repo.preload(:user)
  52. if has_email?(backup.user) and has_mailer do
  53. backup
  54. |> Pleroma.Emails.UserEmail.backup_is_ready_email(admin_user_id)
  55. |> Pleroma.Emails.Mailer.deliver()
  56. :ok
  57. else
  58. :ok
  59. end
  60. end
  61. end