enabled: false,
provider: Pleroma.Web.MediaProxy.Invalidation.Script,
options: %{
- script_path: ""
+ script_path: "./installation/nginx-cache-purge.example"
}
],
proxy_opts: [
--- /dev/null
+#!/bin/bash
+
+# A simple Bash script to delete an media from the Nginx cache.
+
+SCRIPTNAME=${0##*/}
+
+# NGINX cache directory
+CACHE_DIRECTORY="/tmp/pleroma-media-cache"
+
+function get_cache_files() {
+ local max_parallel=${3-16}
+ find $2 -maxdepth 1 -type d | xargs -P $max_parallel -n 1 grep -ERl "^KEY:.*$1" | sort -u
+}
+
+function purge_item() {
+ local cache_files
+ cache_files=$(get_cache_files "$1" "$2")
+
+ if [ -n "$cache_files" ]; then
+ for i in $cache_files; do
+ [ -f $i ] || continue
+ echo "Deleting $i from $2."
+ rm $i
+ done
+ else
+ echo "$1 is not cached."
+ fi
+}
+
+function purge() {
+ for url in "$@"
+ do
+ echo "$SCRIPTNAME delete $url from cache ($CACHE_DIRECTORY)"
+ purge_item $url $CACHE_DIRECTORY
+ done
+
+}
+
+purge $1
--- /dev/null
+defmodule Pleroma.Web.MediaProxy.Invalidation.Http do
+ @behaviour Pleroma.Web.MediaProxy.Invalidation
+
+ @impl Pleroma.Web.MediaProxy.Invalidation
+ def purge(urls, opts) do
+ method = Map.get(opts, :http_method, :purge)
+ headers = Map.get(opts, :http_headers, [])
+ options = Map.get(opts, :http_options, [])
+
+ Enum.each(urls, fn url ->
+ Pleroma.HTTP.request(method, url, "", headers, options)
+ end)
+
+ {:ok, "success"}
+ end
+end
+++ /dev/null
-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
@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)
+ def purge(urls, %{script_path: script_path} = _options) do
+ args =
+ urls
+ |> List.wrap()
+ |> Enum.uniq()
+ |> Enum.join(" ")
+
+ System.cmd(Path.expand(script_path), [args])
{:ok, "success"}
end
end