Merge branch 'develop' of https://git.pleroma.social/pleroma/pleroma into develop
[akkoma] / lib / pleroma / web / admin_api / controllers / media_proxy_cache_controller.ex
index 76d3af4efccac79edcd8a1fc32faf46bc6ae365a..a6d7aaf54a49e28568ed9c69e7fbd1bb196dee45 100644 (file)
@@ -1,24 +1,26 @@
 # Pleroma: A lightweight social networking server
-# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
+# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
 # SPDX-License-Identifier: AGPL-3.0-only
 
 defmodule Pleroma.Web.AdminAPI.MediaProxyCacheController do
   use Pleroma.Web, :controller
 
-  alias Pleroma.Plugs.OAuthScopesPlug
   alias Pleroma.Web.ApiSpec.Admin, as: Spec
   alias Pleroma.Web.MediaProxy
+  alias Pleroma.Web.Plugs.OAuthScopesPlug
+
+  @cachex Pleroma.Config.get([:cachex, :provider], Cachex)
 
   plug(Pleroma.Web.ApiSpec.CastAndValidate)
 
   plug(
     OAuthScopesPlug,
-    %{scopes: ["read:media_proxy_caches"], admin: true} when action in [:index]
+    %{scopes: ["admin:read:media_proxy_caches"]} when action in [:index]
   )
 
   plug(
     OAuthScopesPlug,
-    %{scopes: ["write:media_proxy_caches"], admin: true} when action in [:purge, :delete]
+    %{scopes: ["admin:write:media_proxy_caches"]} when action in [:purge, :delete]
   )
 
   action_fallback(Pleroma.Web.AdminAPI.FallbackController)
@@ -38,18 +40,20 @@ defmodule Pleroma.Web.AdminAPI.MediaProxyCacheController do
 
   defp fetch_entries(params) do
     MediaProxy.cache_table()
-    |> Cachex.export!()
-    |> filter_urls(params[:query])
+    |> @cachex.stream!(Cachex.Query.create(true, :key))
+    |> filter_entries(params[:query])
   end
 
-  defp filter_urls(entries, query) when is_binary(query) do
-    for {_, url, _, _, _} <- entries, String.contains?(url, query), do: url
-  end
+  defp filter_entries(stream, query) when is_binary(query) do
+    regex = ~r/#{query}/i
 
-  defp filter_urls(entries, _) do
-    Enum.map(entries, fn {_, url, _, _, _} -> url end)
+    stream
+    |> Enum.filter(fn url -> String.match?(url, regex) end)
+    |> Enum.to_list()
   end
 
+  defp filter_entries(stream, _), do: Enum.to_list(stream)
+
   defp paginate_entries(entries, page, page_size) do
     offset = page_size * (page - 1)
     Enum.slice(entries, offset, page_size)