aboutsummaryrefslogtreecommitdiff
path: root/lib/pleroma/web
diff options
context:
space:
mode:
Diffstat (limited to 'lib/pleroma/web')
-rw-r--r--lib/pleroma/web/media_proxy/invalidation.ex19
-rw-r--r--lib/pleroma/web/media_proxy/invalidations/nginx.ex12
-rw-r--r--lib/pleroma/web/media_proxy/invalidations/script.ex10
3 files changed, 41 insertions, 0 deletions
diff --git a/lib/pleroma/web/media_proxy/invalidation.ex b/lib/pleroma/web/media_proxy/invalidation.ex
new file mode 100644
index 000000000..dd9a53a27
--- /dev/null
+++ b/lib/pleroma/web/media_proxy/invalidation.ex
@@ -0,0 +1,19 @@
+defmodule Pleroma.Web.MediaProxy.Invalidation do
+ @callback purge(list(String.t()), map()) :: {:ok, String.t()} | {:error, String.t()}
+
+ alias Pleroma.Config
+
+ def purge(urls) do
+ [:media_proxy, :invalidation, :enabled]
+ |> Config.get()
+ |> do_purge(urls)
+ end
+
+ defp do_purge(true, urls) do
+ config = Config.get([:media_proxy, :invalidation])
+ config[:provider].purge(urls, config[:options])
+ :ok
+ end
+
+ defp do_purge(_, _), do: :ok
+end
diff --git a/lib/pleroma/web/media_proxy/invalidations/nginx.ex b/lib/pleroma/web/media_proxy/invalidations/nginx.ex
new file mode 100644
index 000000000..5bfdd505c
--- /dev/null
+++ b/lib/pleroma/web/media_proxy/invalidations/nginx.ex
@@ -0,0 +1,12 @@
+defmodule Pleroma.Web.MediaProxy.Invalidation.Nginx do
+ @behaviour Pleroma.Web.MediaProxy.Invalidation
+
+ @impl Pleroma.Web.MediaProxy.Invalidation
+ def purge(urls, _opts) do
+ Enum.each(urls, fn url ->
+ Pleroma.HTTP.request(:purge, url, "", [], [])
+ end)
+
+ {:ok, "success"}
+ end
+end
diff --git a/lib/pleroma/web/media_proxy/invalidations/script.ex b/lib/pleroma/web/media_proxy/invalidations/script.ex
new file mode 100644
index 000000000..f458845a0
--- /dev/null
+++ b/lib/pleroma/web/media_proxy/invalidations/script.ex
@@ -0,0 +1,10 @@
+defmodule Pleroma.Web.MediaProxy.Invalidation.Script do
+ @behaviour Pleroma.Web.MediaProxy.Invalidation
+
+ @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"}
+ end
+end