mirror of
https://github.com/internetee/registry.git
synced 2025-07-28 13:36:15 +02:00
86 lines
2.5 KiB
Ruby
86 lines
2.5 KiB
Ruby
module EmailVerifable
|
|
extend ActiveSupport::Concern
|
|
|
|
included do
|
|
scope :recently_not_validated, -> { where.not(id: ValidationEvent.validated_ids_by(name)) }
|
|
end
|
|
|
|
def validate_email_by_regex_and_mx(single_email: false)
|
|
verify_email(check_level: 'regex', single_email: single_email)
|
|
verify_email(check_level: 'mx', single_email: single_email)
|
|
end
|
|
|
|
def remove_force_delete_for_valid_contact
|
|
domain_with_fd = domains.select(&:force_delete_scheduled?)
|
|
|
|
domain_with_fd.each do |domain|
|
|
contact_emails_valid?(domain) ? domain.cancel_force_delete : nil
|
|
end
|
|
end
|
|
|
|
def contact_emails_valid?(domain)
|
|
domain.contacts.each do |c|
|
|
return false unless c.need_to_lift_force_delete?
|
|
end
|
|
|
|
domain.registrant.need_to_lift_force_delete?
|
|
end
|
|
|
|
def email_verification_failed?
|
|
need_to_start_force_delete?
|
|
end
|
|
|
|
def validate_email_data(level:, count:)
|
|
validation_events.order(created_at: :desc).limit(count).all? do |event|
|
|
event.check_level == level.to_s && event.failed?
|
|
end
|
|
end
|
|
|
|
def need_to_start_force_delete?
|
|
ValidationEvent::INVALID_EVENTS_COUNT_BY_LEVEL.any? do |level, count|
|
|
validation_events.count >= count && validate_email_data(level: level, count: count)
|
|
end
|
|
end
|
|
|
|
def need_to_lift_force_delete?
|
|
return true if validation_events.failed.empty?
|
|
|
|
ValidationEvent::REDEEM_EVENTS_COUNT_BY_LEVEL.any? do |level, count|
|
|
validation_events.order(created_at: :desc)
|
|
.limit(count)
|
|
.all? { |event| event.check_level == level.to_s && event.successful? }
|
|
end
|
|
end
|
|
|
|
def correct_email_format
|
|
return if email.blank?
|
|
|
|
result = verify(email: email)
|
|
process_error(:email) unless result
|
|
end
|
|
|
|
def correct_billing_email_format
|
|
return if email.blank?
|
|
|
|
result = verify(email: billing_email)
|
|
process_error(:billing_email) unless result
|
|
end
|
|
|
|
def verify_email(check_level: 'regex', single_email: false)
|
|
verify(email: email, check_level: check_level, single_email: single_email)
|
|
end
|
|
|
|
def verify(email:, check_level: 'regex', single_email: false)
|
|
action = Actions::EmailCheck.new(email: email,
|
|
validation_eventable: self,
|
|
check_level: check_level,
|
|
single_email: single_email)
|
|
action.call
|
|
end
|
|
|
|
# rubocop:disable Metrics/LineLength
|
|
def process_error(field)
|
|
errors.add(field, I18n.t('activerecord.errors.models.contact.attributes.email.email_regex_check_error'))
|
|
end
|
|
# rubocop:enable Metrics/LineLength
|
|
end
|