return db key on update requests
[akkoma] / lib / pleroma / web / admin_api / admin_api_controller.ex
index e1d16c30b9a81dabbdf37b56629caaf71a563e2d..7572a6b658a1c6c3314fc403f777e15aee7f4821 100644 (file)
@@ -797,7 +797,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do
     end
   end
 
-  def config_show(conn, _params) do
+  def config_show(conn, %{"only_db" => true}) do
     with :ok <- configurable_from_database(conn) do
       configs = Pleroma.Repo.all(ConfigDB)
 
@@ -814,6 +814,42 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do
     end
   end
 
+  def config_show(conn, _params) do
+    with :ok <- configurable_from_database(conn) do
+      configs = ConfigDB.get_all_as_keyword()
+
+      if configs == [] do
+        errors(
+          conn,
+          {:error, "To use configuration from database migrate your settings to database."}
+        )
+      else
+        merged =
+          Pleroma.Config.Holder.config()
+          |> DeepMerge.deep_merge(configs)
+          |> Enum.map(fn {group, values} ->
+            Enum.map(values, fn {key, value} ->
+              db =
+                if configs[group][key] do
+                  ConfigDB.get_db_keys(value, key)
+                end
+
+              setting = %{
+                group: ConfigDB.convert(group),
+                key: ConfigDB.convert(key),
+                value: ConfigDB.convert(value)
+              }
+
+              if db, do: Map.put(setting, :db, db), else: setting
+            end)
+          end)
+          |> List.flatten()
+
+        json(conn, %{configs: merged})
+      end
+    end
+  end
+
   def config_update(conn, %{"configs" => configs}) do
     with :ok <- configurable_from_database(conn) do
       updated =
@@ -831,6 +867,9 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do
             end
         end)
         |> Enum.reject(&is_nil(&1))
+        |> Enum.map(fn config ->
+          Map.put(config, :db, ConfigDB.get_db_keys(config))
+        end)
 
       Pleroma.Config.TransferTask.load_and_update_env()