Add configurable temporary directory
authorEgor Kislitsyn <egor@kislitsyn.com>
Wed, 16 Sep 2020 19:21:13 +0000 (23:21 +0400)
committerEgor Kislitsyn <egor@kislitsyn.com>
Wed, 7 Oct 2020 14:34:30 +0000 (18:34 +0400)
config/config.exs
docs/configuration/cheatsheet.md
lib/pleroma/backup.ex

index 09023e2c335c6a32520de50450537e185dd20457..0e12d6e15f58f2bf4e13a7a2bc0dab43664c3529 100644 (file)
@@ -820,7 +820,8 @@ config :pleroma, Pleroma.Web.Auth.Authenticator, Pleroma.Web.Auth.PleromaAuthent
 
 config :pleroma, Pleroma.Backup,
   purge_after_days: 30,
-  limit_days: 7
+  limit_days: 7,
+  dir: nil
 
 # Import environment specific config. This must remain at the bottom
 # of this file so it overrides the configuration defined above.
index 8da8a7bd68e9050a40f9d411e6cad257fa46bf2e..9271964f1dea08c087fc1aadc855372a875f065f 100644 (file)
@@ -1090,6 +1090,12 @@ Control favicons for instances.
 
 * `:purge_after_days` an integer, remove backup achives after N days.
 * `:limit_days` an integer, limit user to export not more often than once per N days.
+* `:dir` a string with a path to backup temporary directory or `nil` to let Pleroma choose temporary directory in the following order:
+    1. the directory named by the TMPDIR environment variable
+    2. the directory named by the TEMP environment variable
+    3. the directory named by the TMP environment variable
+    4. C:\TMP on Windows or /tmp on Unix-like operating systems
+    5. as a last resort, the current working directory
 
 ## Frontend management
 
index 3b85dd1c107b62fe96ea4b6120cdfd3ce8f01a55..450dd5b84f61ae917e0c93709eac2fecaa25867f 100644 (file)
@@ -126,7 +126,7 @@ defmodule Pleroma.Backup do
   def export(%__MODULE__{} = backup) do
     backup = Repo.preload(backup, :user)
     name = String.trim_trailing(backup.file_name, ".zip")
-    dir = Path.join(System.tmp_dir!(), name)
+    dir = dir(name)
 
     with :ok <- File.mkdir(dir),
          :ok <- actor(dir, backup.user),
@@ -139,6 +139,11 @@ defmodule Pleroma.Backup do
     end
   end
 
+  def dir(name) do
+    dir = Pleroma.Config.get([__MODULE__, :dir]) || System.tmp_dir!()
+    Path.join(dir, name)
+  end
+
   def upload(%__MODULE__{} = backup, zip_path) do
     uploader = Pleroma.Config.get([Pleroma.Upload, :uploader])