commit: cff0292d4b32cf51de8ad15281c35d783b137dd2
parent: 02866a42afde69f40724648757f6bdaab5a66d17
Author: kaniini <nenolod@gmail.com>
Date: Thu, 27 Dec 2018 19:35:06 +0000
Merge branch 'reserve-user-names' into 'develop'
Reserve a few user names
See merge request pleroma/pleroma!594
Diffstat:
5 files changed, 61 insertions(+), 3 deletions(-)
diff --git a/config/config.exs b/config/config.exs
@@ -137,8 +137,8 @@ config :pleroma, :fe,
logo_mask: true,
logo_margin: "0.1em",
background: "/static/aurora_borealis.jpg",
- redirect_root_no_login: "/~/main/all",
- redirect_root_login: "/~/main/friends",
+ redirect_root_no_login: "/main/all",
+ redirect_root_login: "/main/friends",
show_instance_panel: true,
scope_options_enabled: false,
formatting_options_enabled: false,
@@ -220,6 +220,37 @@ config :cors_plug,
credentials: true,
headers: ["Authorization", "Content-Type", "Idempotency-Key"]
+config :pleroma, Pleroma.User,
+ restricted_nicknames: [
+ "about",
+ "~",
+ "main",
+ "users",
+ "settings",
+ "objects",
+ "activities",
+ "web",
+ "registration",
+ "friend-requests",
+ "pleroma",
+ "api",
+ "tag",
+ "notice",
+ "status",
+ "user-search",
+ "ostatus_subscribe",
+ "oauth",
+ "push",
+ "relay",
+ "inbox",
+ ".well-known",
+ "nodeinfo",
+ "auth",
+ "proxy",
+ "dev",
+ "internal"
+ ]
+
# Import environment specific config. This must remain at the bottom
# of this file so it overrides the configuration defined above.
import_config "#{Mix.env()}.exs"
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex
@@ -197,6 +197,7 @@ defmodule Pleroma.User do
|> validate_confirmation(:password)
|> unique_constraint(:email)
|> unique_constraint(:nickname)
+ |> validate_exclusion(:nickname, Pleroma.Config.get([Pleroma.User, :restricted_nicknames]))
|> validate_format(:nickname, local_nickname_regex())
|> validate_format(:email, @email_regex)
|> validate_length(:bio, max: 1000)
diff --git a/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex
@@ -138,7 +138,8 @@ defmodule Pleroma.Web.Nodeinfo.NodeinfoController do
},
accountActivationRequired: Keyword.get(instance, :account_activation_required, false),
invitesEnabled: Keyword.get(instance, :invites_enabled, false),
- features: features
+ features: features,
+ restrictedNicknames: Pleroma.Config.get([Pleroma.User, :restricted_nicknames])
}
}
diff --git a/test/user_test.exs b/test/user_test.exs
@@ -153,6 +153,20 @@ defmodule Pleroma.UserTest do
end)
end
+ test "it restricts certain nicknames" do
+ [restricted_name | _] = Pleroma.Config.get([Pleroma.User, :restricted_nicknames])
+
+ assert is_bitstring(restricted_name)
+
+ params =
+ @full_user_data
+ |> Map.put(:nickname, restricted_name)
+
+ changeset = User.register_changeset(%User{}, params)
+
+ refute changeset.valid?
+ end
+
test "it sets the password_hash, ap_id and following fields" do
changeset = User.register_changeset(%User{}, @full_user_data)
diff --git a/test/web/node_info_test.exs b/test/web/node_info_test.exs
@@ -19,6 +19,17 @@ defmodule Pleroma.Web.NodeInfoTest do
assert user.ap_id in result["metadata"]["staffAccounts"]
end
+ test "nodeinfo shows restricted nicknames", %{conn: conn} do
+ conn =
+ conn
+ |> get("/nodeinfo/2.0.json")
+
+ assert result = json_response(conn, 200)
+
+ assert Pleroma.Config.get([Pleroma.User, :restricted_nicknames]) ==
+ result["metadata"]["restrictedNicknames"]
+ end
+
test "returns 404 when federation is disabled", %{conn: conn} do
instance =
Application.get_env(:pleroma, :instance)