diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/tag.ex | 18 | ||||
-rw-r--r-- | lib/pleroma/user.ex | 7 | ||||
-rw-r--r-- | lib/pleroma/web/activity_pub/mrf/tag_policy.ex | 11 | ||||
-rw-r--r-- | lib/pleroma/web/admin_api/controllers/tag_controller.ex | 13 | ||||
-rw-r--r-- | lib/pleroma/web/api_spec/operations/admin/tag_operation.ex | 12 | ||||
-rw-r--r-- | lib/pleroma/web/router.ex | 7 |
6 files changed, 38 insertions, 30 deletions
diff --git a/lib/pleroma/tag.ex b/lib/pleroma/tag.ex index 3b01f1119..dbbb99068 100644 --- a/lib/pleroma/tag.ex +++ b/lib/pleroma/tag.ex @@ -8,7 +8,15 @@ defmodule Pleroma.Tag do import Ecto.Query alias Pleroma.Repo - alias Pleroma.Web.ActivityPub.MRF + + @mrf_tags [ + "mrf_tag:media-force-nsfw", + "mrf_tag:media-strip", + "mrf_tag:force-unlisted", + "mrf_tag:sandbox", + "mrf_tag:disable-remote-subscription", + "mrf_tag:disable-any-subscription" + ] @type t :: %__MODULE__{} @@ -43,11 +51,12 @@ defmodule Pleroma.Tag do def list_tags do from(u in __MODULE__, select: u.name) |> Repo.all() - |> Kernel.++(MRF.TagPolicy.policy_tags()) + |> Kernel.++(@mrf_tags) |> Enum.uniq() |> Enum.sort() end + @spec get_tag_ids([String.t()]) :: [pos_integer()] def get_tag_ids(tag_names) do names = normalize_tags(tag_names) @@ -59,6 +68,7 @@ defmodule Pleroma.Tag do |> Repo.all() end + @spec normalize_tags([String.t()]) :: [String.t()] def normalize_tags(tag_names) do tag_names |> List.wrap() @@ -66,6 +76,8 @@ defmodule Pleroma.Tag do end defp normalize_tag(tag_name) do - String.trim(String.downcase(tag_name)) + tag_name + |> String.downcase() + |> String.trim() end end diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 690d751fd..0ef5f4661 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -2006,6 +2006,7 @@ defmodule Pleroma.User do def parse_bio(_, _), do: "" + @spec tag_names(t()) :: [String.t()] def tag_names(%__MODULE__{} = user) do {:ok, tags} = Repo.get_assoc(user, :tags) Enum.map(tags, & &1.name) @@ -2013,6 +2014,7 @@ defmodule Pleroma.User do def tag_names(_), do: [] + @spec tag([String.t()] | String.t() | t(), [String.t()] | String.t()) :: {:ok, [t()]} | t() def tag(user_identifiers, tags) when is_list(user_identifiers) do Repo.transaction(fn -> for user_identifier <- user_identifiers, do: tag(user_identifier, tags) @@ -2025,9 +2027,10 @@ defmodule Pleroma.User do def tag(%User{} = user, tags) do tag_names = Pleroma.Tag.normalize_tags(tags) Pleroma.Tag.upsert_tags(tag_names) - update_tags(user, tag_names) + update_user_tags(user, tag_names) end + @spec untag([String.t()] | String.t() | t(), [String.t() | String.t()]) :: {:ok, [t()]} | t() def untag(user_identifiers, tags) when is_list(user_identifiers) do Repo.transaction(fn -> for user_identifier <- user_identifiers, do: untag(user_identifier, tags) @@ -2051,7 +2054,7 @@ defmodule Pleroma.User do preload_tags_and_set_cache(user) end - defp update_tags(%User{} = user, new_tags) do + defp update_user_tags(%User{} = user, new_tags) do {:ok, user_id} = FlakeId.Ecto.Type.dump(user.id) tags = diff --git a/lib/pleroma/web/activity_pub/mrf/tag_policy.ex b/lib/pleroma/web/activity_pub/mrf/tag_policy.ex index e4d174fa9..638bd6469 100644 --- a/lib/pleroma/web/activity_pub/mrf/tag_policy.ex +++ b/lib/pleroma/web/activity_pub/mrf/tag_policy.ex @@ -21,17 +21,6 @@ defmodule Pleroma.Web.ActivityPub.MRF.TagPolicy do require Pleroma.Constants - def policy_tags do - [ - "mrf_tag:media-force-nsfw", - "mrf_tag:media-strip", - "mrf_tag:force-unlisted", - "mrf_tag:sandbox", - "mrf_tag:disable-remote-subscription", - "mrf_tag:disable-any-subscription" - ] - end - defp process_tag( "mrf_tag:media-force-nsfw", %{ diff --git a/lib/pleroma/web/admin_api/controllers/tag_controller.ex b/lib/pleroma/web/admin_api/controllers/tag_controller.ex index 2cf6ff9bb..7fdee98d6 100644 --- a/lib/pleroma/web/admin_api/controllers/tag_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/tag_controller.ex @@ -15,12 +15,12 @@ defmodule Pleroma.Web.AdminAPI.TagController do plug( OAuthScopesPlug, - %{scopes: ["write:accounts"], admin: true} when action in [:tag, :untag] + %{scopes: ["write:accounts"], admin: true} when action in [:update, :delete] ) plug( OAuthScopesPlug, - %{scopes: ["read:accounts"], admin: true} when action in [:list] + %{scopes: ["read:accounts"], admin: true} when action in [:index] ) plug(ApiSpec.CastAndValidate) @@ -29,13 +29,16 @@ defmodule Pleroma.Web.AdminAPI.TagController do defdelegate open_api_operation(action), to: ApiSpec.Admin.TagOperation - def list(%{assigns: %{user: _admin}} = conn, _) do + def index(%{assigns: %{user: _admin}} = conn, _) do tags = Pleroma.Tag.list_tags() json(conn, tags) end - def tag(%{assigns: %{user: admin}, body_params: %{nicknames: nicknames, tags: tags}} = conn, _) do + def update( + %{assigns: %{user: admin}, body_params: %{nicknames: nicknames, tags: tags}} = conn, + _ + ) do with {:ok, _} <- User.tag(nicknames, tags) do ModerationLog.insert_log(%{ actor: admin, @@ -48,7 +51,7 @@ defmodule Pleroma.Web.AdminAPI.TagController do end end - def untag( + def delete( %{assigns: %{user: admin}, body_params: %{nicknames: nicknames, tags: tags}} = conn, _ ) do diff --git a/lib/pleroma/web/api_spec/operations/admin/tag_operation.ex b/lib/pleroma/web/api_spec/operations/admin/tag_operation.ex index 8bee51fe2..1716e5b7d 100644 --- a/lib/pleroma/web/api_spec/operations/admin/tag_operation.ex +++ b/lib/pleroma/web/api_spec/operations/admin/tag_operation.ex @@ -14,11 +14,11 @@ defmodule Pleroma.Web.ApiSpec.Admin.TagOperation do apply(__MODULE__, operation, []) end - def list_operation do + def index_operation do %Operation{ tags: ["Admin", "Tags"], summary: "List available tags.", - operationId: "AdminAPI.TagController.list", + operationId: "AdminAPI.TagController.index", parameters: admin_api_params(), responses: %{ 200 => @@ -31,11 +31,11 @@ defmodule Pleroma.Web.ApiSpec.Admin.TagOperation do } end - def tag_operation do + def update_operation do %Operation{ tags: ["Admin", "Tags"], summary: "Adds tags to users.", - operationId: "AdminAPI.TagController.tag", + operationId: "AdminAPI.TagController.update", parameters: admin_api_params(), requestBody: request_body( @@ -57,11 +57,11 @@ defmodule Pleroma.Web.ApiSpec.Admin.TagOperation do } end - def untag_operation do + def delete_operation do %Operation{ tags: ["Admin", "Tags"], summary: "Remove tags from users.", - operationId: "AdminAPI.TagController.untag", + operationId: "AdminAPI.TagController.delete", parameters: admin_api_params(), requestBody: request_body( diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 7410b29b6..17d7bee01 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -159,9 +159,10 @@ defmodule Pleroma.Web.Router do pipe_through(:admin_api) put("/users/disable_mfa", AdminAPIController, :disable_mfa) - get("/users/tag", TagController, :list) - put("/users/tag", TagController, :tag) - delete("/users/tag", TagController, :untag) + + get("/users/tags", TagController, :index) + patch("/users/tags", TagController, :update) + delete("/users/tags", TagController, :delete) get("/users/:nickname/permission_group", AdminAPIController, :right_get) get("/users/:nickname/permission_group/:permission_group", AdminAPIController, :right_get) |