logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git

invalidation.ex (1104B)


  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. defmodule Pleroma.Web.MediaProxy.Invalidation do
  5. @moduledoc false
  6. @callback purge(list(String.t()), Keyword.t()) :: {:ok, list(String.t())} | {:error, String.t()}
  7. alias Pleroma.Config
  8. alias Pleroma.Web.MediaProxy
  9. @spec enabled?() :: boolean()
  10. def enabled?, do: Config.get([:media_proxy, :invalidation, :enabled])
  11. @spec purge(list(String.t()) | String.t()) :: {:ok, list(String.t())} | {:error, String.t()}
  12. def purge(urls) do
  13. prepared_urls = prepare_urls(urls)
  14. if enabled?() do
  15. do_purge(prepared_urls)
  16. else
  17. {:ok, prepared_urls}
  18. end
  19. end
  20. defp do_purge(urls) do
  21. provider = Config.get([:media_proxy, :invalidation, :provider])
  22. options = Config.get(provider)
  23. provider.purge(urls, options)
  24. end
  25. def prepare_urls(urls) do
  26. urls
  27. |> List.wrap()
  28. |> Enum.map(fn url -> [MediaProxy.url(url), MediaProxy.preview_url(url)] end)
  29. |> List.flatten()
  30. |> Enum.uniq()
  31. end
  32. end