about summary refs log tree commit diff
path: root/app/models/canonical_email_block.rb
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2021-04-17 03:14:25 +0200
committerGitHub <noreply@github.com>2021-04-17 03:14:25 +0200
commitb3ceb3dcc4df62803aa967d7aecee686973a8996 (patch)
treedc34486813237852b90cc81b26c4e361323c7757 /app/models/canonical_email_block.rb
parent170e05db127c9f357183239a5543bdfc9525680d (diff)
Add canonical e-mail blocks for suspended accounts (#16049)
Prevent new accounts from being created using the same underlying
e-mail as a suspended account using extensions and period
permutations. Stores e-mails as a SHA256 hash
Diffstat (limited to 'app/models/canonical_email_block.rb')
-rw-r--r--app/models/canonical_email_block.rb27
1 files changed, 27 insertions, 0 deletions
diff --git a/app/models/canonical_email_block.rb b/app/models/canonical_email_block.rb
new file mode 100644
index 000000000..a8546d65a
--- /dev/null
+++ b/app/models/canonical_email_block.rb
@@ -0,0 +1,27 @@
+# frozen_string_literal: true
+# == Schema Information
+#
+# Table name: canonical_email_blocks
+#
+#  id                   :bigint(8)        not null, primary key
+#  canonical_email_hash :string           default(""), not null
+#  reference_account_id :bigint(8)        not null
+#  created_at           :datetime         not null
+#  updated_at           :datetime         not null
+#
+
+class CanonicalEmailBlock < ApplicationRecord
+  include EmailHelper
+
+  belongs_to :reference_account, class_name: 'Account'
+
+  validates :canonical_email_hash, presence: true
+
+  def email=(email)
+    self.canonical_email_hash = email_to_canonical_email_hash(email)
+  end
+
+  def self.block?(email)
+    where(canonical_email_hash: email_to_canonical_email_hash(email)).exists?
+  end
+end