mirror of
https://github.com/discourse/discourse.git
synced 2025-05-22 22:43:33 +08:00
Implement the email_blacklist_regexp ssite setting
This commit is contained in:
@ -28,6 +28,7 @@ class User < ActiveRecord::Base
|
|||||||
validates_presence_of :email
|
validates_presence_of :email
|
||||||
validates_uniqueness_of :email
|
validates_uniqueness_of :email
|
||||||
validate :username_validator
|
validate :username_validator
|
||||||
|
validate :email_validator
|
||||||
validate :password_validator
|
validate :password_validator
|
||||||
|
|
||||||
before_save :cook
|
before_save :cook
|
||||||
@ -481,6 +482,15 @@ class User < ActiveRecord::Base
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def email_validator
|
||||||
|
if (setting = SiteSetting.email_blacklist_regexp.try(:strip)).present?
|
||||||
|
regexp = Regexp.new(setting, true)
|
||||||
|
if self.email =~ regexp
|
||||||
|
return errors.add(:email, I18n.t(:'user.email.not_allowed'))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def password_validator
|
def password_validator
|
||||||
if (@raw_password and @raw_password.length < 6) or (@password_required and !@raw_password)
|
if (@raw_password and @raw_password.length < 6) or (@password_required and !@raw_password)
|
||||||
return errors.add(:password, "must be 6 letters or longer")
|
return errors.add(:password, "must be 6 letters or longer")
|
||||||
|
@ -1052,6 +1052,8 @@ en:
|
|||||||
unique: "must be unique"
|
unique: "must be unique"
|
||||||
blank: "must be present"
|
blank: "must be present"
|
||||||
must_begin_with_alphanumeric: "must begin with a letter or number"
|
must_begin_with_alphanumeric: "must begin with a letter or number"
|
||||||
|
email:
|
||||||
|
not_allowed: "is not allowed from that email provider. Please use another email address."
|
||||||
|
|
||||||
invite_mailer:
|
invite_mailer:
|
||||||
subject_template: "[%{site_name}] %{invitee_name} invited you to join a discussion on %{site_name}"
|
subject_template: "[%{site_name}] %{invitee_name} invited you to join a discussion on %{site_name}"
|
||||||
|
@ -445,6 +445,31 @@ describe User do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe 'email_validator' do
|
||||||
|
it 'should allow good emails' do
|
||||||
|
user = Fabricate.build(:user, email: 'good@gmail.com')
|
||||||
|
user.should be_valid
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should reject some emails based on the email_blacklist_regexp site setting' do
|
||||||
|
SiteSetting.stubs(:email_blacklist_regexp).returns('@mailinator')
|
||||||
|
Fabricate.build(:user, email: 'notgood@mailinator.com').should_not be_valid
|
||||||
|
Fabricate.build(:user, email: 'mailinator@gmail.com').should be_valid
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should reject some emails based on the email_blacklist_regexp site setting' do
|
||||||
|
SiteSetting.stubs(:email_blacklist_regexp).returns('@(mailinator|aol)\.com')
|
||||||
|
Fabricate.build(:user, email: 'notgood@mailinator.com').should_not be_valid
|
||||||
|
Fabricate.build(:user, email: 'notgood@aol.com').should_not be_valid
|
||||||
|
Fabricate.build(:user, email: 'aol+mailinator@gmail.com').should be_valid
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should reject some emails based on the email_blacklist_regexp site setting ignoring case' do
|
||||||
|
SiteSetting.stubs(:email_blacklist_regexp).returns('@mailinator')
|
||||||
|
Fabricate.build(:user, email: 'notgood@MAILINATOR.COM').should_not be_valid
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe 'passwords' do
|
describe 'passwords' do
|
||||||
before do
|
before do
|
||||||
@user = Fabricate.build(:user)
|
@user = Fabricate.build(:user)
|
||||||
|
Reference in New Issue
Block a user