diff --git a/app/logical/user_name_validator.rb b/app/logical/user_name_validator.rb index 40a6a3f25..93bd4c9d7 100644 --- a/app/logical/user_name_validator.rb +++ b/app/logical/user_name_validator.rb @@ -6,5 +6,6 @@ class UserNameValidator < ActiveModel::EachValidator rec.errors[attr] << "must be 2 to 100 characters long" if !name.length.between?(2, 100) rec.errors[attr] << "cannot have whitespace or colons" if name =~ /[[:space:]]|:/ rec.errors[attr] << "cannot begin or end with an underscore" if name =~ /\A_|_\z/ + rec.errors[attr] << "is not allowed" if name =~ Regexp.union(Danbooru.config.user_name_blacklist) end end diff --git a/config/danbooru_default_config.rb b/config/danbooru_default_config.rb index 894532adb..1f7a0a1a9 100644 --- a/config/danbooru_default_config.rb +++ b/config/danbooru_default_config.rb @@ -69,6 +69,11 @@ module Danbooru true end + # An array of regexes containing disallowed usernames. + def user_name_blacklist + [] + end + # Thumbnail size def small_image_width 150 diff --git a/test/unit/user_test.rb b/test/unit/user_test.rb index cde212ac4..79fac4cda 100644 --- a/test/unit/user_test.rb +++ b/test/unit/user_test.rb @@ -91,6 +91,13 @@ class UserTest < ActiveSupport::TestCase assert_equal(["Name cannot begin or end with an underscore"], user.errors.full_messages) end + should "not allow blacklisted names" do + Danbooru.config.stubs(:user_name_blacklist).returns(["voldemort"]) + user = build(:user, name: "voldemort42") + user.save + assert_equal(["Name is not allowed"], user.errors.full_messages) + end + should "be updated" do @user = FactoryBot.create(:user) @user.update_attribute(:name, "danzig")