about summary refs log tree commit diff
path: root/app
diff options
context:
space:
mode:
authorYamagishi Kazutoshi <ykzts@desire.sh>2017-11-15 04:37:17 +0900
committerEugen Rochko <eugen@zeonfederated.com>2017-11-14 20:37:17 +0100
commit20150659e6f084d6c6fb4080d08c4104b8ac0570 (patch)
tree62d0eef7a965d6dd942970cfe4e830bca514c388 /app
parent8087aa83d414150fd1141d237ae9d7c0366fec8d (diff)
Add uniqueness to block email domains (#5692)
Diffstat (limited to 'app')
-rw-r--r--app/models/email_domain_block.rb23
1 files changed, 21 insertions, 2 deletions
diff --git a/app/models/email_domain_block.rb b/app/models/email_domain_block.rb
index 51410605b..2c348197c 100644
--- a/app/models/email_domain_block.rb
+++ b/app/models/email_domain_block.rb
@@ -4,14 +4,33 @@
 # Table name: email_domain_blocks
 #
 #  id         :bigint           not null, primary key
-#  domain     :string           not null
+#  domain     :string           default(""), not null
 #  created_at :datetime         not null
 #  updated_at :datetime         not null
 #
 
 class EmailDomainBlock < ApplicationRecord
+  before_validation :normalize_domain
+
+  validates :domain, presence: true, uniqueness: true
+
   def self.block?(email)
-    domain = email.gsub(/.+@([^.]+)/, '\1')
+    _, domain = email.split('@', 2)
+
+    return true if domain.nil?
+
+    begin
+      domain = TagManager.instance.normalize_domain(domain)
+    rescue Addressable::URI::InvalidURIError
+      return true
+    end
+
     where(domain: domain).exists?
   end
+
+  private
+
+  def normalize_domain
+    self.domain = TagManager.instance.normalize_domain(domain)
+  end
 end