aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/docs/json.ex8
-rw-r--r--lib/pleroma/web/activity_pub/mrf.ex2
-rw-r--r--lib/pleroma/web/admin_api/controllers/config_controller.ex23
-rw-r--r--lib/pleroma/web/api_spec/operations/admin/config_operation.ex63
-rw-r--r--lib/pleroma/web/router.ex5
5 files changed, 81 insertions, 20 deletions
diff --git a/lib/pleroma/docs/json.ex b/lib/pleroma/docs/json.ex
index f22432ea4..d28659b91 100644
--- a/lib/pleroma/docs/json.ex
+++ b/lib/pleroma/docs/json.ex
@@ -7,7 +7,9 @@ defmodule Pleroma.Docs.JSON do
@external_resource "config/description.exs"
@raw_config Pleroma.Config.Loader.read("config/description.exs")
@raw_descriptions @raw_config[:pleroma][:config_description]
+ @raw_tabs @raw_config[:pleroma][:tabs]
@term __MODULE__.Compiled
+ @tabs __MODULE__.CompiledTabs
@spec compile :: :ok
def compile do
@@ -16,13 +18,17 @@ defmodule Pleroma.Docs.JSON do
|> Enum.reduce(@raw_descriptions, fn description, acc -> [description | acc] end)
:persistent_term.put(@term, Pleroma.Docs.Generator.convert_to_strings(descriptions))
+ :persistent_term.put(@tabs, @raw_tabs)
end
- @spec compiled_descriptions :: Map.t()
+ @spec compiled_descriptions :: [map()]
def compiled_descriptions do
:persistent_term.get(@term)
end
+ @spec compiled_tabs() :: [map()]
+ def compiled_tabs, do: :persistent_term.get(@tabs)
+
@spec process(keyword()) :: {:ok, String.t()}
def process(descriptions) do
with path <- "docs/generated_config.json",
diff --git a/lib/pleroma/web/activity_pub/mrf.ex b/lib/pleroma/web/activity_pub/mrf.ex
index 432cac69f..f2fec3ff6 100644
--- a/lib/pleroma/web/activity_pub/mrf.ex
+++ b/lib/pleroma/web/activity_pub/mrf.ex
@@ -12,7 +12,6 @@ defmodule Pleroma.Web.ActivityPub.MRF do
group: :pleroma,
key: :mrf,
tab: :mrf,
- tab_label: "MRF",
label: "MRF",
type: :group,
description: "General MRF settings",
@@ -156,7 +155,6 @@ defmodule Pleroma.Web.ActivityPub.MRF do
|> Map.merge(policy.config_description)
|> Map.put(:group, :pleroma)
|> Map.put(:tab, :mrf)
- |> Map.put(:tab_label, "MRF")
|> Map.put(:type, :group)
if Enum.all?(@required_description_keys, &Map.has_key?(description, &1)) do
diff --git a/lib/pleroma/web/admin_api/controllers/config_controller.ex b/lib/pleroma/web/admin_api/controllers/config_controller.ex
index a718d7b8d..1042662c7 100644
--- a/lib/pleroma/web/admin_api/controllers/config_controller.ex
+++ b/lib/pleroma/web/admin_api/controllers/config_controller.ex
@@ -15,19 +15,34 @@ defmodule Pleroma.Web.AdminAPI.ConfigController do
plug(
OAuthScopesPlug,
%{scopes: ["admin:read"]}
- when action in [:show, :descriptions]
+ when action in [:show, :descriptions, :descriptions2]
)
action_fallback(Pleroma.Web.AdminAPI.FallbackController)
defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.Admin.ConfigOperation
+ @doc """
+ GET /api/v1/pleroma/admin/config/descriptions
+ """
def descriptions(conn, _params) do
- descriptions = Enum.filter(Pleroma.Docs.JSON.compiled_descriptions(), &whitelisted_config?/1)
+ descriptions =
+ whitelisted_descriptions()
+ |> Enum.map(&Map.delete(&1, "tab"))
json(conn, descriptions)
end
+ @doc """
+ GET /api/v2/pleroma/admin/config/descriptions
+ """
+ def descriptions2(conn, _params) do
+ json(conn, %{
+ tabs: Pleroma.Docs.JSON.compiled_tabs(),
+ descriptions: whitelisted_descriptions()
+ })
+ end
+
def show(conn, %{only_db: true}) do
with :ok <- configurable_from_database() do
configs = Pleroma.Repo.all(ConfigDB)
@@ -126,6 +141,10 @@ defmodule Pleroma.Web.AdminAPI.ConfigController do
end
end
+ defp whitelisted_descriptions do
+ Enum.filter(Pleroma.Docs.JSON.compiled_descriptions(), &whitelisted_config?/1)
+ end
+
defp whitelisted_config?(group, key) do
if whitelisted_configs = Config.get(:database_config_whitelist) do
Enum.any?(whitelisted_configs, fn
diff --git a/lib/pleroma/web/api_spec/operations/admin/config_operation.ex b/lib/pleroma/web/api_spec/operations/admin/config_operation.ex
index 30c3433b7..0ad8937c8 100644
--- a/lib/pleroma/web/api_spec/operations/admin/config_operation.ex
+++ b/lib/pleroma/web/api_spec/operations/admin/config_operation.ex
@@ -78,31 +78,64 @@ defmodule Pleroma.Web.ApiSpec.Admin.ConfigOperation do
parameters: admin_api_params(),
responses: %{
200 =>
+ Operation.response("Config Descriptions", "application/json", descriptions_schema()),
+ 400 => Operation.response("Bad Request", "application/json", ApiError)
+ }
+ }
+ end
+
+ def descriptions2_operation do
+ %Operation{
+ tags: ["Instance configuration"],
+ summary: "Retrieve config description",
+ operationId: "AdminAPI.ConfigController.descriptions2",
+ security: [%{"oAuth" => ["admin:read"]}],
+ parameters: admin_api_params(),
+ responses: %{
+ 200 =>
Operation.response("Config Descriptions", "application/json", %Schema{
+ type: :object,
+ properties: %{
+ tabs: %Schema{
+ type: :array,
+ items: %Schema{
+ type: :object,
+ properties: %{tab: %Schema{type: :string}, label: %Schema{type: :string}}
+ }
+ },
+ descriptions: descriptions_schema()
+ }
+ }),
+ 400 => Operation.response("Bad Request", "application/json", ApiError)
+ }
+ }
+ end
+
+ defp descriptions_schema do
+ %Schema{
+ type: :array,
+ items: %Schema{
+ type: :object,
+ properties: %{
+ group: %Schema{type: :string},
+ key: %Schema{type: :string},
+ tab: %Schema{type: :string},
+ label: %Schema{type: :string},
+ type: %Schema{oneOf: [%Schema{type: :string}, %Schema{type: :array}]},
+ description: %Schema{type: :string},
+ children: %Schema{
type: :array,
items: %Schema{
type: :object,
properties: %{
- group: %Schema{type: :string},
key: %Schema{type: :string},
type: %Schema{oneOf: [%Schema{type: :string}, %Schema{type: :array}]},
description: %Schema{type: :string},
- children: %Schema{
- type: :array,
- items: %Schema{
- type: :object,
- properties: %{
- key: %Schema{type: :string},
- type: %Schema{oneOf: [%Schema{type: :string}, %Schema{type: :array}]},
- description: %Schema{type: :string},
- suggestions: %Schema{type: :array}
- }
- }
- }
+ suggestions: %Schema{type: :array}
}
}
- }),
- 400 => Operation.response("Bad Request", "application/json", ApiError)
+ }
+ }
}
}
end
diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex
index ccf2ef796..ac933b0aa 100644
--- a/lib/pleroma/web/router.ex
+++ b/lib/pleroma/web/router.ex
@@ -155,6 +155,11 @@ defmodule Pleroma.Web.Router do
post("/uploader_callback/:upload_path", UploaderController, :callback)
end
+ scope "/api/v2/pleroma/admin", Pleroma.Web.AdminAPI do
+ pipe_through(:admin_api)
+ get("/config/descriptions", ConfigController, :descriptions2)
+ end
+
scope "/api/v1/pleroma/admin", Pleroma.Web.AdminAPI do
pipe_through(:admin_api)