You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

33 lines
864 B

  1. # frozen_string_literal: true
  2. class BlacklistedEmailValidator < ActiveModel::Validator
  3. def validate(user)
  4. @email = user.email
  5. user.errors.add(:email, I18n.t('users.invalid_email')) if blocked_email?
  6. end
  7. private
  8. def blocked_email?
  9. on_blacklist? || not_on_whitelist?
  10. end
  11. def on_blacklist?
  12. return true if EmailDomainBlock.block?(@email)
  13. return false if Rails.configuration.x.email_domains_blacklist.blank?
  14. domains = Rails.configuration.x.email_domains_blacklist.gsub('.', '\.')
  15. regexp = Regexp.new("@(.+\\.)?(#{domains})", true)
  16. @email =~ regexp
  17. end
  18. def not_on_whitelist?
  19. return false if Rails.configuration.x.email_domains_whitelist.blank?
  20. domains = Rails.configuration.x.email_domains_whitelist.gsub('.', '\.')
  21. regexp = Regexp.new("@(.+\\.)?(#{domains})$", true)
  22. @email !~ regexp
  23. end
  24. end