diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/docs/json.ex | 8 | ||||
-rw-r--r-- | lib/pleroma/web/activity_pub/mrf.ex | 2 | ||||
-rw-r--r-- | lib/pleroma/web/admin_api/controllers/config_controller.ex | 23 | ||||
-rw-r--r-- | lib/pleroma/web/api_spec/operations/admin/config_operation.ex | 63 | ||||
-rw-r--r-- | lib/pleroma/web/router.ex | 5 |
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) |