mirror of
https://github.com/codeninjasllc/discourse.git
synced 2024-11-27 09:36:19 -05:00
FIX: incorrect logic in email blocker
if mail.com was blocked, email.com was automatically blocked
This commit is contained in:
parent
04288c14ff
commit
69ad0358c2
2 changed files with 20 additions and 8 deletions
|
@ -17,7 +17,7 @@ class EmailValidator < ActiveModel::EachValidator
|
|||
|
||||
def email_in_restriction_setting?(setting, value)
|
||||
domains = setting.gsub('.', '\.')
|
||||
regexp = Regexp.new("@(.+\.)?(#{domains})", true)
|
||||
regexp = Regexp.new("@(.+\\.)?(#{domains})", true)
|
||||
value =~ regexp
|
||||
end
|
||||
|
||||
|
|
|
@ -2,21 +2,33 @@ require 'spec_helper'
|
|||
|
||||
describe EmailValidator do
|
||||
|
||||
let(:record) { Fabricate.build(:user, email: "bad@spamclub.com") }
|
||||
let(:record) { }
|
||||
let(:validator) { described_class.new({attributes: :email}) }
|
||||
subject(:validate) { validator.validate_each(record,:email,record.email) }
|
||||
|
||||
def blocks?(email)
|
||||
user = Fabricate.build(:user, email: email)
|
||||
validator = EmailValidator.new(attributes: :email)
|
||||
validator.validate_each(user, :email, user.email)
|
||||
user.errors[:email].present?
|
||||
end
|
||||
|
||||
context "blocked email" do
|
||||
it "doesn't add an error when email doesn't match a blocked email" do
|
||||
ScreenedEmail.stubs(:should_block?).with(record.email).returns(false)
|
||||
validate
|
||||
expect(record.errors[:email]).not_to be_present
|
||||
expect(blocks?('sam@sam.com')).to eq(false)
|
||||
end
|
||||
|
||||
it "adds an error when email matches a blocked email" do
|
||||
ScreenedEmail.stubs(:should_block?).with(record.email).returns(true)
|
||||
validate
|
||||
expect(record.errors[:email]).to be_present
|
||||
ScreenedEmail.create!(email: 'sam@sam.com', action_type: ScreenedEmail.actions[:block])
|
||||
expect(blocks?('sam@sam.com')).to eq(true)
|
||||
end
|
||||
|
||||
it "blocks based on email_domains_blacklist" do
|
||||
SiteSetting.email_domains_blacklist = "email.com|mail.com|e-mail.com"
|
||||
expect(blocks?('sam@email.com')).to eq(true)
|
||||
expect(blocks?('sam@bob.email.com')).to eq(true)
|
||||
expect(blocks?('sam@e-mail.com')).to eq(true)
|
||||
expect(blocks?('sam@googlemail.com')).to eq(false)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue