aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean King <seanking2919@protonmail.com>2022-07-05 20:36:47 -0600
committerSean King <seanking2919@protonmail.com>2022-07-05 20:36:47 -0600
commit0d4aceb9b0c6d742b481c08b88ba50d67c65c091 (patch)
treea2a9a88f607c61d0bf082b9f3aeda070374db3a4
parent29f4ab640b0269fc7751fca7c24cda5be912d1e5 (diff)
downloadpleroma-0d4aceb9b0c6d742b481c08b88ba50d67c65c091.tar.gz
Make checking blacklisted domains and restricted nicknames case-insenstive
-rw-r--r--lib/pleroma/user.ex17
-rw-r--r--test/pleroma/user_test.exs23
2 files changed, 38 insertions, 2 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex
index 747a83e8d..47c51469e 100644
--- a/lib/pleroma/user.ex
+++ b/lib/pleroma/user.ex
@@ -758,13 +758,26 @@ defmodule Pleroma.User do
valid? =
Config.get([User, :email_blacklist])
|> Enum.all?(fn blacklisted_domain ->
- !String.ends_with?(email, ["@" <> blacklisted_domain, "." <> blacklisted_domain])
+ blacklisted_domain_downcase = String.downcase(blacklisted_domain)
+
+ !String.ends_with?(String.downcase(email), [
+ "@" <> blacklisted_domain_downcase,
+ "." <> blacklisted_domain_downcase
+ ])
end)
if valid?, do: [], else: [email: "Invalid email"]
end)
|> unique_constraint(:nickname)
- |> validate_exclusion(:nickname, Config.get([User, :restricted_nicknames]))
+ |> validate_change(:nickname, fn :nickname, nickname ->
+ valid? =
+ Config.get([User, :restricted_nicknames])
+ |> Enum.all?(fn restricted_nickname ->
+ String.downcase(nickname) != String.downcase(restricted_nickname)
+ end)
+
+ if valid?, do: [], else: [nickname: "Invalid nickname"]
+ end)
|> validate_format(:nickname, local_nickname_regex())
|> validate_length(:bio, max: bio_limit)
|> validate_length(:name, min: 1, max: name_limit)
diff --git a/test/pleroma/user_test.exs b/test/pleroma/user_test.exs
index 884b846ae..5b513f01b 100644
--- a/test/pleroma/user_test.exs
+++ b/test/pleroma/user_test.exs
@@ -618,6 +618,7 @@ defmodule Pleroma.UserTest do
end
test "it restricts certain nicknames" do
+ clear_config([User, :restricted_nicknames], ["about"])
[restricted_name | _] = Pleroma.Config.get([User, :restricted_nicknames])
assert is_bitstring(restricted_name)
@@ -631,6 +632,23 @@ defmodule Pleroma.UserTest do
refute changeset.valid?
end
+ test "it is case-insensitive when restricting nicknames" do
+ clear_config([User, :restricted_nicknames], ["about"])
+ [restricted_name | _] = Pleroma.Config.get([User, :restricted_nicknames])
+
+ assert is_bitstring(restricted_name)
+
+ restricted_upcase_name = String.upcase(restricted_name)
+
+ params =
+ @full_user_data
+ |> Map.put(:nickname, restricted_upcase_name)
+
+ changeset = User.register_changeset(%User{}, params)
+
+ refute changeset.valid?
+ end
+
test "it blocks blacklisted email domains" do
clear_config([User, :email_blacklist], ["trolling.world"])
@@ -639,6 +657,11 @@ defmodule Pleroma.UserTest do
changeset = User.register_changeset(%User{}, params)
refute changeset.valid?
+ # Block with case-insensitive match
+ params = Map.put(@full_user_data, :email, "troll@TrOlLing.wOrld")
+ changeset = User.register_changeset(%User{}, params)
+ refute changeset.valid?
+
# Block with subdomain match
params = Map.put(@full_user_data, :email, "troll@gnomes.trolling.world")
changeset = User.register_changeset(%User{}, params)