Merge branch 'develop' into activation-meta
[akkoma] / lib / pleroma / web / media_proxy / invalidations / http.ex
index 40c624efcbee51c56f38b8db54ba490f81797980..bb81d8888365d2e88b50e215f3d418bacd69e8fd 100644 (file)
@@ -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, :http_method, :purge)
-    headers = Map.get(opts, :http_headers, [])
-    options = Map.get(opts, :http_options, [])
+  def purge(urls, opts \\ []) do
+    method = Keyword.get(opts, :method, :purge)
+    headers = Keyword.get(opts, :headers, [])
+    options = Keyword.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"}
+    {:ok, urls}
+  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