[#2497] Removed support for thumbnail_max_* params for media preview proxy
[akkoma] / lib / pleroma / web / media_proxy / invalidations / script.ex
index f458845a03be506fd92d984a7462b778b751df45..d32ffc50b7fb4907a8bdcbcb511bd22181818119 100644 (file)
@@ -1,10 +1,43 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
 defmodule Pleroma.Web.MediaProxy.Invalidation.Script do
+  @moduledoc false
+
   @behaviour Pleroma.Web.MediaProxy.Invalidation
 
+  require Logger
+
   @impl Pleroma.Web.MediaProxy.Invalidation
-  def purge(urls, %{script_path: script_path} = options) do
-    script_args = List.wrap(Map.get(options, :script_args, []))
-    System.cmd(Path.expand(script_path), [urls] ++ script_args)
-    {:ok, "success"}
+  def purge(urls, opts \\ []) do
+    args =
+      urls
+      |> List.wrap()
+      |> Enum.uniq()
+      |> Enum.join(" ")
+
+    opts
+    |> Keyword.get(:script_path)
+    |> do_purge([args])
+    |> handle_result(urls)
+  end
+
+  defp do_purge(script_path, args) when is_binary(script_path) do
+    path = Path.expand(script_path)
+    Logger.debug("Running cache purge: #{inspect(args)}, #{inspect(path)}")
+    System.cmd(path, args)
+  rescue
+    error -> error
+  end
+
+  defp do_purge(_, _), do: {:error, "not found script path"}
+
+  defp handle_result({_result, 0}, urls), do: {:ok, urls}
+  defp handle_result({:error, error}, urls), do: handle_result(error, urls)
+
+  defp handle_result(error, _) do
+    Logger.error("Error while cache purge: #{inspect(error)}")
+    {:error, inspect(error)}
   end
 end