From 85f8f8f2d5dda35f9948c820404b813ac935840d Mon Sep 17 00:00:00 2001 From: Neil Lalonde Date: Wed, 20 Feb 2013 16:24:52 -0500 Subject: [PATCH] Better checking of blacklisted emails on create and when email is being updated --- app/models/user.rb | 4 ++-- spec/models/user_spec.rb | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index 47d5eb24ac8..e9ae855b7da 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -27,7 +27,7 @@ class User < ActiveRecord::Base validates_presence_of :email validates_uniqueness_of :email validate :username_validator - validate :email_validator + validate :email_validator, :if => :email_changed? validate :password_validator before_save :cook @@ -506,7 +506,7 @@ class User < ActiveRecord::Base end def email_validator - if new_record? and (setting = SiteSetting.email_domains_blacklist).present? + if (setting = SiteSetting.email_domains_blacklist).present? domains = setting.gsub('.', '\.') regexp = Regexp.new("@(#{domains})", true) if self.email =~ regexp diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index a8b740340a1..1771f9b2efb 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -484,6 +484,13 @@ describe User do SiteSetting.stubs(:email_domains_blacklist).returns('fakemail.com') u.should be_valid end + + it 'should be used when email is being changed' do + SiteSetting.stubs(:email_domains_blacklist).returns('mailinator.com') + u = Fabricate(:user, email: 'good@gmail.com') + u.email = 'nope@mailinator.com' + u.should_not be_valid + end end describe 'passwords' do