aboutsummaryrefslogtreecommitdiff
path: root/lib/pleroma/web/media_proxy/invalidation/script.ex
diff options
context:
space:
mode:
authorAlex Gleason <alex@alexgleason.me>2020-10-13 19:20:00 -0500
committerAlex Gleason <alex@alexgleason.me>2020-10-13 19:20:00 -0500
commitc3112fd13a6af239b9dff0813e93266ec58f571e (patch)
tree7f2252d7a08e4a59b66e392b2732a1cdd8745758 /lib/pleroma/web/media_proxy/invalidation/script.ex
parent66e00ace7c0708f2f9361bc6e1008ccea08cb6ef (diff)
parent481906207e6d803e5c4d3e455c7b93119e392177 (diff)
downloadpleroma-c3112fd13a6af239b9dff0813e93266ec58f571e.tar.gz
Merge remote-tracking branch 'upstream/develop' into registration-workflow
Diffstat (limited to 'lib/pleroma/web/media_proxy/invalidation/script.ex')
-rw-r--r--lib/pleroma/web/media_proxy/invalidation/script.ex43
1 files changed, 43 insertions, 0 deletions
diff --git a/lib/pleroma/web/media_proxy/invalidation/script.ex b/lib/pleroma/web/media_proxy/invalidation/script.ex
new file mode 100644
index 000000000..d32ffc50b
--- /dev/null
+++ b/lib/pleroma/web/media_proxy/invalidation/script.ex
@@ -0,0 +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, 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