aboutsummaryrefslogtreecommitdiff
path: root/lib/pleroma/workers/backup_worker.ex
diff options
context:
space:
mode:
authorfeld <feld@feld.me>2020-10-31 17:03:40 +0000
committerfeld <feld@feld.me>2020-10-31 17:03:40 +0000
commit38b481d112d531df45a991e67c96b9c9387cd29d (patch)
tree4adc03b37415d1de545b872cd344628c2a206a2f /lib/pleroma/workers/backup_worker.ex
parent37e8e8bf8ef560bc42d8b470c25e6022b369590b (diff)
parentd1698267a27bd5084916f5f6f36d66b1ff2ffc5f (diff)
downloadpleroma-38b481d112d531df45a991e67c96b9c9387cd29d.tar.gz
Merge branch 'feature/account-export' into 'develop'
Add account export Closes #847 See merge request pleroma/pleroma!2918
Diffstat (limited to 'lib/pleroma/workers/backup_worker.ex')
-rw-r--r--lib/pleroma/workers/backup_worker.ex54
1 files changed, 54 insertions, 0 deletions
diff --git a/lib/pleroma/workers/backup_worker.ex b/lib/pleroma/workers/backup_worker.ex
new file mode 100644
index 000000000..5b4985983
--- /dev/null
+++ b/lib/pleroma/workers/backup_worker.ex
@@ -0,0 +1,54 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Workers.BackupWorker do
+ use Oban.Worker, queue: :backup, max_attempts: 1
+
+ alias Oban.Job
+ alias Pleroma.User.Backup
+
+ def process(backup, admin_user_id \\ nil) do
+ %{"op" => "process", "backup_id" => backup.id, "admin_user_id" => admin_user_id}
+ |> new()
+ |> Oban.insert()
+ end
+
+ def schedule_deletion(backup) do
+ days = Pleroma.Config.get([Backup, :purge_after_days])
+ time = 60 * 60 * 24 * days
+ scheduled_at = Calendar.NaiveDateTime.add!(backup.inserted_at, time)
+
+ %{"op" => "delete", "backup_id" => backup.id}
+ |> new(scheduled_at: scheduled_at)
+ |> Oban.insert()
+ end
+
+ def delete(backup) do
+ %{"op" => "delete", "backup_id" => backup.id}
+ |> new()
+ |> Oban.insert()
+ end
+
+ def perform(%Job{
+ args: %{"op" => "process", "backup_id" => backup_id, "admin_user_id" => admin_user_id}
+ }) do
+ with {:ok, %Backup{} = backup} <-
+ backup_id |> Backup.get() |> Backup.process(),
+ {:ok, _job} <- schedule_deletion(backup),
+ :ok <- Backup.remove_outdated(backup),
+ {:ok, _} <-
+ backup
+ |> Pleroma.Emails.UserEmail.backup_is_ready_email(admin_user_id)
+ |> Pleroma.Emails.Mailer.deliver() do
+ {:ok, backup}
+ end
+ end
+
+ def perform(%Job{args: %{"op" => "delete", "backup_id" => backup_id}}) do
+ case Backup.get(backup_id) do
+ %Backup{} = backup -> Backup.delete(backup)
+ nil -> :ok
+ end
+ end
+end