First
[anni] / lib / pleroma / web / media_proxy / invalidation.ex
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Web.MediaProxy.Invalidation do
6   @moduledoc false
7
8   @callback purge(list(String.t()), Keyword.t()) :: {:ok, list(String.t())} | {:error, String.t()}
9
10   alias Pleroma.Config
11   alias Pleroma.Web.MediaProxy
12
13   @spec enabled?() :: boolean()
14   def enabled?, do: Config.get([:media_proxy, :invalidation, :enabled])
15
16   @spec purge(list(String.t()) | String.t()) :: {:ok, list(String.t())} | {:error, String.t()}
17   def purge(urls) do
18     prepared_urls = prepare_urls(urls)
19
20     if enabled?() do
21       do_purge(prepared_urls)
22     else
23       {:ok, prepared_urls}
24     end
25   end
26
27   defp do_purge(urls) do
28     provider = Config.get([:media_proxy, :invalidation, :provider])
29     options = Config.get(provider)
30     provider.purge(urls, options)
31   end
32
33   def prepare_urls(urls) do
34     urls
35     |> List.wrap()
36     |> Enum.map(fn url -> [MediaProxy.url(url), MediaProxy.preview_url(url)] end)
37     |> List.flatten()
38     |> Enum.uniq()
39   end
40 end