Merge pull request 'Update OpenBSD docs' (#414) from lechindianer/akkoma:update-openb...
[akkoma] / lib / pleroma / web / admin_api / controllers / config_controller.ex
index 0df13007f67ccd01fc78ff5da859c0fd6b963924..831ba3b6f0498239c85be5cca2639e74a9dc9e3e 100644 (file)
@@ -1,5 +1,5 @@
 # Pleroma: A lightweight social networking server
-# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
+# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
 # SPDX-License-Identifier: AGPL-3.0-only
 
 defmodule Pleroma.Web.AdminAPI.ConfigController do
@@ -7,14 +7,14 @@ defmodule Pleroma.Web.AdminAPI.ConfigController do
 
   alias Pleroma.Config
   alias Pleroma.ConfigDB
-  alias Pleroma.Plugs.OAuthScopesPlug
+  alias Pleroma.Web.Plugs.OAuthScopesPlug
 
   plug(Pleroma.Web.ApiSpec.CastAndValidate)
-  plug(OAuthScopesPlug, %{scopes: ["write"], admin: true} when action == :update)
+  plug(OAuthScopesPlug, %{scopes: ["admin:write"]} when action == :update)
 
   plug(
     OAuthScopesPlug,
-    %{scopes: ["read"], admin: true}
+    %{scopes: ["admin:read"]}
     when action in [:show, :descriptions]
   )
 
@@ -22,10 +22,58 @@ defmodule Pleroma.Web.AdminAPI.ConfigController do
 
   defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.Admin.ConfigOperation
 
+  defp translate_descriptions(descriptions, path \\ []) do
+    Enum.map(descriptions, fn desc -> translate_item(desc, path) end)
+  end
+
+  defp translate_string(str, path, type) do
+    Gettext.dpgettext(
+      Pleroma.Web.Gettext,
+      "config_descriptions",
+      Pleroma.Docs.Translator.Compiler.msgctxt_for(path, type),
+      str
+    )
+  end
+
+  defp maybe_put_translated(item, key, path) do
+    if item[key] do
+      Map.put(
+        item,
+        key,
+        translate_string(
+          item[key],
+          path ++ [Pleroma.Docs.Translator.Compiler.key_for(item)],
+          to_string(key)
+        )
+      )
+    else
+      item
+    end
+  end
+
+  defp translate_item(item, path) do
+    item
+    |> maybe_put_translated(:label, path)
+    |> maybe_put_translated(:description, path)
+    |> translate_children(path)
+  end
+
+  defp translate_children(%{children: children} = item, path) when is_list(children) do
+    item
+    |> Map.put(
+      :children,
+      translate_descriptions(children, path ++ [Pleroma.Docs.Translator.Compiler.key_for(item)])
+    )
+  end
+
+  defp translate_children(item, _path) do
+    item
+  end
+
   def descriptions(conn, _params) do
     descriptions = Enum.filter(Pleroma.Docs.JSON.compiled_descriptions(), &whitelisted_config?/1)
 
-    json(conn, descriptions)
+    json(conn, translate_descriptions(descriptions))
   end
 
   def show(conn, %{only_db: true}) do
@@ -122,7 +170,7 @@ defmodule Pleroma.Web.AdminAPI.ConfigController do
     if Config.get(:configurable_from_database) do
       :ok
     else
-      {:error, "To use this endpoint you need to enable configuration from database."}
+      {:error, "You must enable configurable_from_database in your config file."}
     end
   end