ConfigDB: Refactor AdminAPI controller config filtering

This commit is contained in:
Phantasm 2026-07-19 21:52:31 +02:00
commit 4c27a3c5a0
No known key found for this signature in database
GPG key ID: 2669E588BCC634C8

View file

@ -73,8 +73,8 @@ defmodule Pleroma.Web.AdminAPI.ConfigController do
def descriptions(conn, _params) do def descriptions(conn, _params) do
descriptions = descriptions =
Pleroma.Docs.JSON.compiled_descriptions() Pleroma.Docs.JSON.compiled_descriptions()
|> Enum.filter(&whitelisted_config?/1) |> Enum.filter(&allowed_config?(&1, :whitelist))
|> Enum.reject(&blacklisted_config?/1) |> Enum.reject(&allowed_config?(&1, :blacklist))
json(conn, translate_descriptions(descriptions)) json(conn, translate_descriptions(descriptions))
end end
@ -135,8 +135,8 @@ defmodule Pleroma.Web.AdminAPI.ConfigController do
with :ok <- configurable_from_database() do with :ok <- configurable_from_database() do
results = results =
configs configs
|> Enum.filter(&whitelisted_config?/1) |> Enum.filter(&allowed_config?(&1, :whitelist))
|> Enum.reject(&blacklisted_config?/1) |> Enum.reject(&allowed_config?(&1, :blacklist))
|> Enum.map(fn |> Enum.map(fn
%{group: group, key: key, delete: true} = params -> %{group: group, key: key, delete: true} = params ->
ConfigDB.delete(%{group: group, key: key, subkeys: params[:subkeys]}) ConfigDB.delete(%{group: group, key: key, subkeys: params[:subkeys]})
@ -178,51 +178,34 @@ defmodule Pleroma.Web.AdminAPI.ConfigController do
end end
end end
defp whitelisted_config?(":pleroma", ":database_config_whitelist"), do: false defp allowed_config?(":pleroma", ":database_config_whitelist", _), do: true
defp allowed_config?(":pleroma", ":database_config_blacklist", _), do: true
defp whitelisted_config?(group, key) do defp allowed_config?(group, key, mode) do
if whitelisted_configs = Config.get(:database_config_whitelist) do configs =
Enum.any?(whitelisted_configs, fn case mode do
{whitelisted_group} -> :whitelist -> Config.get(:database_config_whitelist)
group == inspect(whitelisted_group) :blacklist -> Config.get(:database_config_blacklist)
end
{whitelisted_group, whitelisted_key} -> if configs do
group == inspect(whitelisted_group) && key == inspect(whitelisted_key) Enum.any?(configs, fn
{allowed_group} ->
group == inspect(allowed_group)
{allowed_group, allowed_key} ->
group == inspect(allowed_group) && key == inspect(allowed_key)
end) end)
else else
true true
end end
end end
defp whitelisted_config?(%{group: group, key: key}) do defp allowed_config?(%{group: group, key: key}, mode) do
whitelisted_config?(group, key) allowed_config?(group, key, mode)
end end
defp whitelisted_config?(%{group: group} = config) do defp allowed_config?(%{group: group} = config, mode) do
whitelisted_config?(group, config[:key]) allowed_config?(group, config[:key], mode)
end
defp blacklisted_config?(":pleroma", ":database_config_blacklist"), do: true
defp blacklisted_config?(group, key) do
if blacklisted_configs = Config.get(:database_config_blacklist) do
Enum.any?(blacklisted_configs, fn
{blacklisted_group} ->
group == inspect(blacklisted_group)
{blacklisted_group, blacklisted_key} ->
group == inspect(blacklisted_group) and key == inspect(blacklisted_key)
end)
else
true
end
end
defp blacklisted_config?(%{group: group, key: key}) do
blacklisted_config?(group, key)
end
defp blacklisted_config?(%{group: group} = config) do
blacklisted_config?(group, config[:key])
end end
end end