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.

36 lines
913 B

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