aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/tag.ex18
-rw-r--r--lib/pleroma/user.ex7
-rw-r--r--lib/pleroma/web/activity_pub/mrf/tag_policy.ex11
-rw-r--r--lib/pleroma/web/admin_api/controllers/tag_controller.ex13
-rw-r--r--lib/pleroma/web/api_spec/operations/admin/tag_operation.ex12
-rw-r--r--lib/pleroma/web/router.ex7
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)