Elixir 1.19: Create ConfigDB blacklist and task for :pleroma, :logger

This option was never configurable with ConfigDB when it lived under
:logger, :backends; no need to be configurable now.
This commit is contained in:
Phantasm 2026-07-17 23:32:43 +02:00
commit ebd5596ba7
No known key found for this signature in database
GPG key ID: 2669E588BCC634C8
3 changed files with 89 additions and 0 deletions

View file

@ -966,6 +966,10 @@ config :pleroma, Pleroma.Search.QdrantSearch,
vectors: %{size: 384, distance: "Cosine"} vectors: %{size: 384, distance: "Cosine"}
} }
config :pleroma, :database_config_blacklist, [
{:pleroma, :logger}
]
config :pleroma, :database_config_whitelist, [ config :pleroma, :database_config_whitelist, [
{:pleroma}, {:pleroma},
{:cors_plug}, {:cors_plug},

View file

@ -289,6 +289,52 @@ defmodule Mix.Tasks.Pleroma.Config do
end end
end end
# Removes blacklisted configuration sections
def run(["filter_blacklisted" | rest]) do
{options, [], []} =
OptionParser.parse(
rest,
strict: [force: :boolean],
aliases: [f: :force]
)
force = Keyword.get(options, :force, false)
start_pleroma()
blacklisted_configs = Pleroma.Config.get(:database_config_blacklist)
if blacklisted_configs in [nil, false] do
shell_error("No unwanted settings in ConfigDB. No changes made.")
else
blacklisted_keys =
blacklisted_configs
|> Enum.filter(fn
{_group, _key} -> true
_ -> false
end)
filtered =
from(c in ConfigDB)
|> Repo.all()
|> Enum.filter(&blacklisted?(&1, blacklisted_keys))
if not Enum.empty?(filtered) do
shell_info("The following settings will be removed from ConfigDB:\n")
Enum.each(filtered, &dump(&1))
if force or shell_prompt("Are you sure you want to continue?", "n") in ~w(Yn Y y) do
filtered_ids = Enum.map(filtered, fn %{id: id} -> id end)
Repo.delete_all(from(c in ConfigDB, where: c.id in ^filtered_ids))
else
shell_error("No changes made.")
end
else
shell_error("No unwanted settings in ConfigDB. No changes made.")
end
end
end
@spec migrate_to_db(Path.t() | nil) :: any() @spec migrate_to_db(Path.t() | nil) :: any()
def migrate_to_db(file_path \\ nil) do def migrate_to_db(file_path \\ nil) do
with :ok <- Pleroma.Config.DeprecationWarnings.warn() do with :ok <- Pleroma.Config.DeprecationWarnings.warn() do
@ -494,4 +540,8 @@ defmodule Mix.Tasks.Pleroma.Config do
not Enum.member?(whitelisted_groups, group) and not Enum.member?(whitelisted_groups, group) and
not Enum.member?(whitelisted_keys, {group, key}) not Enum.member?(whitelisted_keys, {group, key})
end end
defp blacklisted?(%{group: group, key: key}, blacklisted_keys) do
Enum.member?(blacklisted_keys, {group, key})
end
end end

View file

@ -369,5 +369,40 @@ defmodule Mix.Tasks.Pleroma.ConfigTest do
MixTask.run(["filter_whitelisted", "--force"]) MixTask.run(["filter_whitelisted", "--force"])
assert config_records() == existing assert config_records() == existing
end end
test "filters blacklisted settings" do
clear_config(:database_config_whitelist, [{:pleroma}])
clear_config(:database_config_blacklist, [
{:pleroma, :logger}
])
insert_config_record(:pleroma, :logger, backends: :console)
insert_config_record(:web_push_encryption, :vapid_details, a: 1)
MixTask.run(["filter_blacklisted", "--force"])
assert [
%ConfigDB{group: :pleroma, key: :instance},
%ConfigDB{group: :pleroma, key: Pleroma.Captcha},
%ConfigDB{group: :pleroma2, key: :key2},
%ConfigDB{group: :web_push_encryption, key: :vapid_details},
] = config_records()
end
test "filter_blacklisted doesn't crash when blacklist is unset" do
clear_config(:database_config_blacklist, nil)
existing = config_records()
MixTask.run(["filter_blacklisted", "--force"])
assert config_records() == existing
end
test "filter_blacklisted doesn't crash when blacklist is disabled" do
clear_config(:database_config_blacklist, false)
existing = config_records()
MixTask.run(["filter_blacklisted", "--force"])
assert config_records() == existing
end
end end
end end