Skip to content

Commit

Permalink
Change e-mail whitelist/blacklist to not be checked when invited (mas…
Browse files Browse the repository at this point in the history
…todon#10683)

* Change e-mail whitelist/blacklist to not be checked when invited

And only when creating an account, not when updating it later

Fix mastodon#10648

* Fix test
  • Loading branch information
Gargron authored May 3, 2019
1 parent b119596 commit c069be0
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 2 deletions.
2 changes: 1 addition & 1 deletion app/models/user.rb
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ class User < ApplicationRecord
accepts_nested_attributes_for :invite_request, reject_if: ->(attributes) { attributes['text'].blank? }

validates :locale, inclusion: I18n.available_locales.map(&:to_s), if: :locale?
validates_with BlacklistedEmailValidator, if: :email_changed?
validates_with BlacklistedEmailValidator, on: :create
validates_with EmailMxValidator, if: :validate_email_dns?
validates :agreement, acceptance: { allow_nil: false, accept: [true, 'true', '1'] }, on: :create

Expand Down
5 changes: 4 additions & 1 deletion app/validators/blacklisted_email_validator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@

class BlacklistedEmailValidator < ActiveModel::Validator
def validate(user)
return if user.invited?

@email = user.email

user.errors.add(:email, I18n.t('users.invalid_email')) if blocked_email?
end

Expand All @@ -13,7 +16,7 @@ def blocked_email?
end

def on_blacklist?
return true if EmailDomainBlock.block?(@email)
return true if EmailDomainBlock.block?(@email)
return false if Rails.configuration.x.email_domains_blacklist.blank?

domains = Rails.configuration.x.email_domains_blacklist.gsub('.', '\.')
Expand Down
1 change: 1 addition & 0 deletions spec/validators/blacklisted_email_validator_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
let(:errors) { double(add: nil) }

before do
allow(user).to receive(:invited?) { false }
allow_any_instance_of(described_class).to receive(:blocked_email?) { blocked_email }
described_class.new.validate(user)
end
Expand Down

0 comments on commit c069be0

Please sign in to comment.