ConfigDB: Refactor AdminAPI controller config filtering
This commit is contained in:
parent
232cdab753
commit
4c27a3c5a0
1 changed files with 23 additions and 40 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue