+ def run(["dump"]) do
+ with true <- Pleroma.Config.get([:configurable_from_database]) do
+ start_pleroma()
+
+ header = config_header()
+
+ settings =
+ ConfigDB
+ |> Repo.all()
+ |> Enum.sort()
+
+ unless settings == [] do
+ shell_info("#{header}")
+
+ settings |> Enum.each(&dump(&1))
+ else
+ shell_error("No settings in ConfigDB.")
+ end
+ else
+ _ -> configdb_not_enabled()
+ end
+ end
+
+ def run(["dump", group, key]) do
+ 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()
+ end
+ end
+
+ def run(["dump", group]) do
+ 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(["groups"]) do
+ with true <- Pleroma.Config.get([:configurable_from_database]) do
+ start_pleroma()
+
+ groups =
+ ConfigDB
+ |> Repo.all()
+ |> Enum.map(fn x -> x.group end)
+ |> Enum.sort()
+ |> Enum.uniq()
+
+ if length(groups) > 0 do
+ shell_info("The following configuration groups are set in ConfigDB:\r\n")
+ groups |> Enum.each(fn x -> shell_info("- #{x}") end)
+ shell_info("\r\n")
+ end
+ else
+ _ -> configdb_not_enabled()
+ end
+ end
+
+ def run(["reset"]) do
+ with true <- Pleroma.Config.get([:configurable_from_database]) do
+ start_pleroma()
+
+ shell_info("The following settings will be permanently removed:")
+
+ 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(["delete", group]) do
+ with true <- Pleroma.Config.get([:configurable_from_database]) do
+ start_pleroma()
+
+ group = maybe_atomize(group)
+
+ 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_error("No settings in ConfigDB for :#{group}. Aborting.")
+ end
+ else
+ _ -> configdb_not_enabled()
+ end
+ end
+
+ def run(["delete", group, key]) do
+ with true <- Pleroma.Config.get([:configurable_from_database]) do
+ start_pleroma()
+
+ 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
+ |> Repo.all()
+ |> Enum.filter(fn x ->
+ if x.group == group and x.key == key do
+ x |> delete(true)
+ end
+ end)
+ else
+ shell_error("No changes made.")
+ end
+ else
+ _ -> configdb_not_enabled()
+ end
+ end
+