aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/web/admin_api/controllers/tag_controller.ex9
-rw-r--r--lib/pleroma/web/api_spec/operations/admin/tag_operation.ex83
2 files changed, 90 insertions, 2 deletions
diff --git a/lib/pleroma/web/admin_api/controllers/tag_controller.ex b/lib/pleroma/web/admin_api/controllers/tag_controller.ex
index 60b5d2ab9..ee48efbd7 100644
--- a/lib/pleroma/web/admin_api/controllers/tag_controller.ex
+++ b/lib/pleroma/web/admin_api/controllers/tag_controller.ex
@@ -10,6 +10,7 @@ defmodule Pleroma.Web.AdminAPI.TagController do
alias Pleroma.ModerationLog
alias Pleroma.User
alias Pleroma.Web.AdminAPI
+ alias Pleroma.Web.ApiSpec
alias Pleroma.Web.Plugs.OAuthScopesPlug
plug(
@@ -22,15 +23,19 @@ defmodule Pleroma.Web.AdminAPI.TagController do
%{scopes: ["read:accounts"], admin: true} when action in [:list]
)
+ plug(ApiSpec.CastAndValidate)
+
action_fallback(AdminAPI.FallbackController)
+ defdelegate open_api_operation(action), to: ApiSpec.Admin.TagOperation
+
def list(%{assigns: %{user: _admin}} = conn, _) do
tags = Pleroma.Tag.list_tags()
json(conn, tags)
end
- def tag(%{assigns: %{user: admin}} = conn, %{"nicknames" => nicknames, "tags" => tags}) do
+ def tag(%{assigns: %{user: admin}} = conn, %{nicknames: nicknames, tags: tags}) do
with {:ok, _} <- User.tag(nicknames, tags) do
ModerationLog.insert_log(%{
actor: admin,
@@ -43,7 +48,7 @@ defmodule Pleroma.Web.AdminAPI.TagController do
end
end
- def untag(%{assigns: %{user: admin}} = conn, %{"nicknames" => nicknames, "tags" => tags}) do
+ def untag(%{assigns: %{user: admin}} = conn, %{nicknames: nicknames, tags: tags}) do
with {:ok, _} <- User.untag(nicknames, tags) do
ModerationLog.insert_log(%{
actor: admin,
diff --git a/lib/pleroma/web/api_spec/operations/admin/tag_operation.ex b/lib/pleroma/web/api_spec/operations/admin/tag_operation.ex
new file mode 100644
index 000000000..83a6b5c26
--- /dev/null
+++ b/lib/pleroma/web/api_spec/operations/admin/tag_operation.ex
@@ -0,0 +1,83 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Web.ApiSpec.Admin.TagOperation do
+ alias OpenApiSpex.Operation
+ alias OpenApiSpex.Schema
+
+ import Pleroma.Web.ApiSpec.Helpers
+
+ def open_api_operation(action) do
+ operation = String.to_existing_atom("#{action}_operation")
+ apply(__MODULE__, operation, [])
+ end
+
+ def list_operation do
+ %Operation{
+ tags: ["Admin", "Tags"],
+ summary: "List available tags.",
+ operationId: "AdminAPI.TagController.list",
+ responses: %{
+ 200 =>
+ Operation.response("Array of tags", "application/json", %Schema{
+ type: :array,
+ items: %Schema{type: :string}
+ })
+ },
+ security: [%{"oAuth" => ["read:accounts"]}]
+ }
+ end
+
+ def tag_operation do
+ %Operation{
+ tags: ["Admin", "Tags"],
+ summary: "Adds tags to users.",
+ operationId: "AdminAPI.TagController.tag",
+ parameters: [
+ Operation.parameter(
+ :nicknames,
+ :query,
+ %Schema{type: :array, items: %Schema{type: :string}},
+ "User's nicknames"
+ ),
+ Operation.parameter(
+ :tags,
+ :query,
+ %Schema{type: :array, items: %Schema{type: :string}},
+ "tags"
+ )
+ ],
+ responses: %{
+ 200 => empty_object_response()
+ },
+ security: [%{"oAuth" => ["write:accounts"]}]
+ }
+ end
+
+ def untag_operation do
+ %Operation{
+ tags: ["Admin", "Tags"],
+ summary: "Remove tags from users.",
+ operationId: "AdminAPI.TagController.untag",
+ parameters: [
+ Operation.parameter(
+ :nicknames,
+ :query,
+ %Schema{type: :array, items: %Schema{type: :string}},
+ "User's nicknames"
+ ),
+ Operation.parameter(
+ :tags,
+ :query,
+ %Schema{type: :array, items: %Schema{type: :string}},
+ "tags"
+ )
+ ],
+ responses: %{
+ 200 => empty_object_response()
+ },
+ security: [%{"oAuth" => ["write:accounts"]}]
+ }
+ end
+end