mirror of
https://github.com/funamitech/mastodon
synced 2024-11-30 07:49:04 +09:00
94f5c714f1
* Check to make sure usernames with '.' cannot be created * Add test for instance actor account name conflicts This makes sure that migration 20190715164535_add_instance_actor won't fail if there's already an account that is named the same as the domain (minus the .) * Put the test into the correct context... * Add another test to split this into two validations * Don't delete periods when validating username uniqueness (#11392) The 20190715164535_add_instance_actor migration fails if there's already a username similar to the domain name, e.g. if you are 'vulpine.club' and have a user named 'vulpineclub', validation fails. Upon further review, usernames with periods are dropped by the regular expression in the Account class, so we don't need to worry about it here. Fixes #11392
17 lines
471 B
Ruby
17 lines
471 B
Ruby
# frozen_string_literal: true
|
|
|
|
# See also: USERNAME_RE in the Account class
|
|
|
|
class UniqueUsernameValidator < ActiveModel::Validator
|
|
def validate(account)
|
|
return if account.username.nil?
|
|
|
|
normalized_username = account.username.downcase
|
|
|
|
scope = Account.where(domain: nil).where('lower(username) = ?', normalized_username)
|
|
scope = scope.where.not(id: account.id) if account.persisted?
|
|
|
|
account.errors.add(:username, :taken) if scope.exists?
|
|
end
|
|
end
|