include DomainNormalizable
belongs_to :account
- validates :domain, presence: true, uniqueness: { scope: :account_id }
+ validates :domain, presence: true, uniqueness: { scope: :account_id }, domain: true
after_commit :remove_blocking_cache
after_commit :remove_relationship_cache
extend ActiveSupport::Concern
included do
- before_validation :normalize_domain
+ before_save :normalize_domain
end
private
class DomainAllow < ApplicationRecord
include DomainNormalizable
- validates :domain, presence: true, uniqueness: true
+ validates :domain, presence: true, uniqueness: true, domain: true
scope :matches_domain, ->(value) { where(arel_table[:domain].matches("%#{value}%")) }
enum severity: [:silence, :suspend, :noop]
- validates :domain, presence: true, uniqueness: true
+ validates :domain, presence: true, uniqueness: true, domain: true
has_many :accounts, foreign_key: :domain, primary_key: :domain
delegate :count, to: :accounts, prefix: true
class EmailDomainBlock < ApplicationRecord
include DomainNormalizable
- validates :domain, presence: true, uniqueness: true
+ validates :domain, presence: true, uniqueness: true, domain: true
def self.block?(email)
_, domain = email.split('@', 2)
--- /dev/null
+# frozen_string_literal: true
+
+class DomainValidator < ActiveModel::EachValidator
+ def validate_each(record, attribute, value)
+ return if value.blank?
+
+ record.errors.add(attribute, I18n.t('domain_validator.invalid_domain')) unless compliant?(value)
+ end
+
+ private
+
+ def compliant?(value)
+ Addressable::URI.new.tap { |uri| uri.host = value }
+ rescue Addressable::URI::InvalidURIError
+ false
+ end
+end
people:
one: "%{count} person"
other: "%{count} people"
+ domain_validator:
+ invalid_domain: is not a valid domain name
errors:
'403': You don't have permission to view this page.
'404': The page you are looking for isn't here.