diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/pleroma/web/media_proxy/invalidation.ex | 8 | ||||
| -rw-r--r-- | lib/pleroma/web/media_proxy/invalidations/http.ex | 26 | ||||
| -rw-r--r-- | lib/pleroma/web/media_proxy/invalidations/script.ex | 30 | 
3 files changed, 60 insertions, 4 deletions
| diff --git a/lib/pleroma/web/media_proxy/invalidation.ex b/lib/pleroma/web/media_proxy/invalidation.ex index 371aa8ae0..c037ff13e 100644 --- a/lib/pleroma/web/media_proxy/invalidation.ex +++ b/lib/pleroma/web/media_proxy/invalidation.ex @@ -1,8 +1,15 @@ +# 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 do +  @moduledoc false +    @callback purge(list(String.t()), map()) :: {:ok, String.t()} | {:error, String.t()}    alias Pleroma.Config +  @spec purge(list(String.t())) :: {:ok, String.t()} | {:error, String.t()}    def purge(urls) do      [:media_proxy, :invalidation, :enabled]      |> Config.get() @@ -13,7 +20,6 @@ defmodule Pleroma.Web.MediaProxy.Invalidation do      provider = Config.get([:media_proxy, :invalidation, :provider])      options = Config.get(provider)      provider.purge(urls, options) -    :ok    end    defp do_purge(_, _), do: :ok diff --git a/lib/pleroma/web/media_proxy/invalidations/http.ex b/lib/pleroma/web/media_proxy/invalidations/http.ex index 66fafa7ba..07248df6e 100644 --- a/lib/pleroma/web/media_proxy/invalidations/http.ex +++ b/lib/pleroma/web/media_proxy/invalidations/http.ex @@ -1,16 +1,40 @@ +# 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.Http do +  @moduledoc false    @behaviour Pleroma.Web.MediaProxy.Invalidation +  require Logger +    @impl Pleroma.Web.MediaProxy.Invalidation    def purge(urls, opts) do      method = Map.get(opts, :method, :purge)      headers = Map.get(opts, :headers, [])      options = Map.get(opts, :options, []) +    Logger.debug("Running cache purge: #{inspect(urls)}") +      Enum.each(urls, fn url -> -      Pleroma.HTTP.request(method, url, "", headers, options) +      with {:error, error} <- do_purge(method, url, headers, options) do +        Logger.error("Error while cache purge: url - #{url}, error: #{inspect(error)}") +      end      end)      {:ok, "success"}    end + +  defp do_purge(method, url, headers, options) do +    case Pleroma.HTTP.request(method, url, "", headers, options) do +      {:ok, %{status: status} = env} when 400 <= status and status < 500 -> +        {:error, env} + +      {:error, error} = error -> +        error + +      _ -> +        {:ok, "success"} +    end +  end  end diff --git a/lib/pleroma/web/media_proxy/invalidations/script.ex b/lib/pleroma/web/media_proxy/invalidations/script.ex index 94c79511a..6be782132 100644 --- a/lib/pleroma/web/media_proxy/invalidations/script.ex +++ b/lib/pleroma/web/media_proxy/invalidations/script.ex @@ -1,6 +1,14 @@ +# 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      args = @@ -9,7 +17,25 @@ defmodule Pleroma.Web.MediaProxy.Invalidation.Script do        |> Enum.uniq()        |> Enum.join(" ") -    System.cmd(Path.expand(script_path), [args]) -    {:ok, "success"} +    path = Path.expand(script_path) + +    Logger.debug("Running cache purge: #{inspect(urls)}, #{path}") + +    case do_purge(path, [args]) do +      {result, exit_status} when exit_status > 0 -> +        Logger.error("Error while cache purge: #{inspect(result)}") +        {:error, inspect(result)} + +      _ -> +        {:ok, "success"} +    end +  end + +  def purge(_, _), do: {:error, "not found script path"} + +  defp do_purge(path, args) do +    System.cmd(path, args) +  rescue +    error -> {inspect(error), 1}    end  end | 
