header = config_header()
- shell_info("#{header}")
+ settings =
+ ConfigDB
+ |> Repo.all()
+ |> Enum.sort()
- ConfigDB
- |> Repo.all()
- |> Enum.sort()
- |> Enum.each(&dump(&1))
+ unless settings == [] do
+ shell_info("#{header}")
+
+ settings |> Enum.each(&dump(&1))
+ else
+ shell_error("No settings in ConfigDB.")
+ end
else
_ -> configdb_not_enabled()
end
with true <- Pleroma.Config.get([:configurable_from_database]) do
start_pleroma()
+ group = maybe_atomize(group)
+ key = maybe_atomize(key)
+
dump_key(group, key)
else
_ -> configdb_not_enabled()
with true <- Pleroma.Config.get([:configurable_from_database]) do
start_pleroma()
+ group = maybe_atomize(group)
+
dump_group(group)
else
_ -> configdb_not_enabled()
end
end
- def run(["keys" | group]) do
+ def run(["reset"]) do
with true <- Pleroma.Config.get([:configurable_from_database]) do
start_pleroma()
- keys =
- ConfigDB
- |> Repo.all()
- |> Enum.map(fn x ->
- if x.group == group do
- x.key
- end
- end)
- |> Enum.sort()
- |> Enum.uniq()
- |> Enum.reject(fn x -> x == nil end)
+ shell_info("The following settings will be permanently removed:")
- if length(keys) > 0 do
- shell_info("The following configuration keys under :#{group} are set in ConfigDB:\r\n")
- keys |> Enum.each(fn x -> shell_info("- #{x}") end)
- shell_info("\r\n")
+ ConfigDB
+ |> Repo.all()
+ |> Enum.sort()
+ |> Enum.each(&dump(&1))
+
+ shell_error("\nTHIS CANNOT BE UNDONE!")
+
+ if shell_prompt("Are you sure you want to continue?", "n") in ~w(Yn Y y) do
+ Ecto.Adapters.SQL.query!(Repo, "TRUNCATE config;")
+ Ecto.Adapters.SQL.query!(Repo, "ALTER SEQUENCE config_id_seq RESTART;")
+
+ shell_info("The ConfigDB settings have been removed from the database.")
+ else
+ shell_error("No changes made.")
end
else
_ -> configdb_not_enabled()
end
end
- def run(["reset"]) do
+ def run(["delete", group]) do
with true <- Pleroma.Config.get([:configurable_from_database]) do
start_pleroma()
- if shell_prompt("Are you sure you want to continue?", "n") in ~w(Yn Y y) do
- Ecto.Adapters.SQL.query!(Repo, "TRUNCATE config;")
- Ecto.Adapters.SQL.query!(Repo, "ALTER SEQUENCE config_id_seq RESTART;")
+ group = maybe_atomize(group)
- shell_info("The ConfigDB settings have been removed from the database.")
+ if group_exists?(group) do
+ shell_info("The following settings will be removed from ConfigDB:\n")
+
+ dump_group(group)
+
+ if shell_prompt("Are you sure you want to continue?", "n") in ~w(Yn Y y) do
+ ConfigDB
+ |> Repo.all()
+ |> Enum.filter(fn x ->
+ if x.group == group do
+ x |> delete(true)
+ end
+ end)
+ else
+ shell_error("No changes made.")
+ end
else
- shell_info("No changes made.")
+ shell_error("No settings in ConfigDB for :#{group}. Aborting.")
end
else
_ -> configdb_not_enabled()
end
end
- def run(["delete" | args]) when is_list(args) and length(args) == 2 do
+ def run(["delete", group, key]) do
with true <- Pleroma.Config.get([:configurable_from_database]) do
start_pleroma()
- [group, key] = args
+ group = maybe_atomize(group)
+ key = maybe_atomize(key)
if shell_prompt("Are you sure you want to continue?", "n") in ~w(Yn Y y) do
ConfigDB
end
end)
else
- shell_info("No changes made.")
+ shell_error("No changes made.")
end
else
_ -> configdb_not_enabled()
defp delete(config, true) do
{:ok, _} = Repo.delete(config)
- shell_info("#{config.key} deleted from the ConfigDB.")
+
+ shell_info(
+ "config #{inspect(config.group)}, #{inspect(config.key)} deleted from the ConfigDB."
+ )
end
defp delete(_config, _), do: :ok
)
end
- defp dump_key(group, key) do
- group = group |> String.to_atom()
- key = key |> String.to_atom()
-
+ defp dump_key(group, key) when is_atom(group) and is_atom(key) do
ConfigDB
|> Repo.all()
|> Enum.filter(fn x ->
end)
end
- defp dump_group(group) do
- group = group |> String.to_atom()
-
+ defp dump_group(group) when is_atom(group) do
ConfigDB
|> Repo.all()
|> Enum.filter(fn x ->
end
end)
end
+
+ defp group_exists?(group) when is_atom(group) do
+ result =
+ ConfigDB
+ |> Repo.all()
+ |> Enum.filter(fn x ->
+ if x.group == group do
+ x
+ end
+ end)
+
+ unless result == [] do
+ true
+ else
+ false
+ end
+ end
+
+ def maybe_atomize(arg) when is_atom(arg), do: arg
+
+ def maybe_atomize(arg) when is_binary(arg) do
+ chars = String.codepoints(arg)
+
+ if "." in chars do
+ :"Elixir.#{arg}"
+ else
+ String.to_atom(arg)
+ end
+ end
end