about summary refs log tree commit diff
path: root/app/validators/email_mx_validator.rb
diff options
context:
space:
mode:
authorClaire <claire.github-309c@sitedethib.com>2021-03-19 23:48:47 +0100
committerGitHub <noreply@github.com>2021-03-19 23:48:47 +0100
commit051efed5edd544b4f88c63a1038274ae2db30038 (patch)
tree6921fb5734d0faaeb7b62f2267a54951859a879f /app/validators/email_mx_validator.rb
parentd023eefbcc1e6c2221a53484e58e61ac12eaa1d4 (diff)
Bypass MX validation for explicitly allowed domains (#15930)
* Bypass MX validation for explicitly allowed domains

This spares some lookups and prevent issues in some edge cases with
local domains.

* Add tests

* Fix test
Diffstat (limited to 'app/validators/email_mx_validator.rb')
-rw-r--r--app/validators/email_mx_validator.rb8
1 files changed, 7 insertions, 1 deletions
diff --git a/app/validators/email_mx_validator.rb b/app/validators/email_mx_validator.rb
index 9f70a1469..dceef5029 100644
--- a/app/validators/email_mx_validator.rb
+++ b/app/validators/email_mx_validator.rb
@@ -10,7 +10,7 @@ class EmailMxValidator < ActiveModel::Validator
 
     if domain.blank?
       user.errors.add(:email, :invalid)
-    else
+    elsif !on_allowlist?(domain)
       ips, hostnames = resolve_mx(domain)
 
       if ips.empty?
@@ -33,6 +33,12 @@ class EmailMxValidator < ActiveModel::Validator
     nil
   end
 
+  def on_allowlist?(domain)
+    return false if Rails.configuration.x.email_domains_whitelist.blank?
+
+    Rails.configuration.x.email_domains_whitelist.include?(domain)
+  end
+
   def resolve_mx(domain)
     hostnames = []
     ips       = []