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:
parent
1d758dbbf5
commit
ebd5596ba7
3 changed files with 89 additions and 0 deletions
|
|
@ -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},
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue