mirror of
https://github.com/internetee/registry.git
synced 2025-06-06 20:55:44 +02:00
Fix domain expiration mailer email validation
This commit is contained in:
parent
b5cbb33e1c
commit
ab248a641e
7 changed files with 64 additions and 42 deletions
|
@ -11,7 +11,11 @@ module Domains
|
||||||
|
|
||||||
saved = domain.save(validate: false)
|
saved = domain.save(validate: false)
|
||||||
|
|
||||||
DomainExpireEmailJob.enqueue(domain.id, run_at: send_time) if saved
|
return unless saved
|
||||||
|
|
||||||
|
recipients.each do |recipient|
|
||||||
|
DomainExpireEmailJob.enqueue(domain.id, recipient, run_at: send_time)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def set_graceful_expired
|
def set_graceful_expired
|
||||||
|
@ -23,6 +27,23 @@ module Domains
|
||||||
def send_time
|
def send_time
|
||||||
domain.valid_to + Setting.expiration_reminder_mail.to_i.days
|
domain.valid_to + Setting.expiration_reminder_mail.to_i.days
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def recipients
|
||||||
|
filter_invalid_emails(domain.expired_domain_contact_emails)
|
||||||
|
end
|
||||||
|
|
||||||
|
def filter_invalid_emails(emails)
|
||||||
|
emails.select do |email|
|
||||||
|
valid = Truemail.valid?(email)
|
||||||
|
|
||||||
|
unless valid
|
||||||
|
logger.info('Unable to send DomainExpireMailer#expired email for'\
|
||||||
|
"domain #{domain.name} (##{domain.id}) to invalid recipient #{email}")
|
||||||
|
end
|
||||||
|
|
||||||
|
valid
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,13 +1,19 @@
|
||||||
class DomainExpireEmailJob < Que::Job
|
class DomainExpireEmailJob < Que::Job
|
||||||
def run(domain_id)
|
def run(domain_id, email)
|
||||||
domain = Domain.find(domain_id)
|
domain = Domain.find(domain_id)
|
||||||
|
|
||||||
return if domain.registered?
|
return if domain.registered?
|
||||||
|
|
||||||
|
attrs = {
|
||||||
|
domain: domain,
|
||||||
|
registrar: domain.registrar,
|
||||||
|
email: email,
|
||||||
|
}
|
||||||
|
|
||||||
if domain.force_delete_scheduled?
|
if domain.force_delete_scheduled?
|
||||||
DomainExpireMailer.expired_soft(domain: domain, registrar: domain.registrar).deliver_now
|
DomainExpireMailer.expired_soft(attrs).deliver_now
|
||||||
else
|
else
|
||||||
DomainExpireMailer.expired(domain: domain, registrar: domain.registrar).deliver_now
|
DomainExpireMailer.expired(attrs).deliver_now
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,23 +1,23 @@
|
||||||
class DomainExpireMailer < ApplicationMailer
|
class DomainExpireMailer < ApplicationMailer
|
||||||
attr_accessor :domain, :registrar
|
attr_accessor :domain, :registrar, :email
|
||||||
|
|
||||||
def expired(domain:, registrar:)
|
def expired(domain:, registrar:, email:)
|
||||||
process_mail(domain: domain, registrar: registrar, method_name: __method__.to_s)
|
process_mail(domain: domain, registrar: registrar, email: email, method_name: __method__.to_s)
|
||||||
end
|
end
|
||||||
|
|
||||||
def expired_soft(domain:, registrar:)
|
def expired_soft(domain:, registrar:, email:)
|
||||||
process_mail(domain: domain, registrar: registrar, method_name: __method__.to_s)
|
process_mail(domain: domain, registrar: registrar, email: email, method_name: __method__.to_s)
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def process_mail(domain:, registrar:, method_name:)
|
def process_mail(domain:, registrar:, email:, method_name:)
|
||||||
init(domain, registrar)
|
init(domain, registrar)
|
||||||
|
|
||||||
logger.info("Send DomainExpireMailer##{method_name} email for #{domain.name} (##{domain.id})" \
|
logger.info("Send DomainExpireMailer##{method_name} email for #{domain.name} (##{domain.id})" \
|
||||||
" to #{recipient(domain).join(', ')}")
|
" to #{email}")
|
||||||
|
|
||||||
mail(to: recipient(domain), subject: subject(method_name))
|
mail(to: email, subject: subject(method_name))
|
||||||
end
|
end
|
||||||
|
|
||||||
def init(domain, registrar)
|
def init(domain, registrar)
|
||||||
|
@ -25,10 +25,6 @@ class DomainExpireMailer < ApplicationMailer
|
||||||
@registrar = registrar_presenter(registrar: registrar)
|
@registrar = registrar_presenter(registrar: registrar)
|
||||||
end
|
end
|
||||||
|
|
||||||
def recipient(domain)
|
|
||||||
filter_invalid_emails(emails: domain.primary_contact_emails, domain: @domain)
|
|
||||||
end
|
|
||||||
|
|
||||||
def subject(method_name)
|
def subject(method_name)
|
||||||
I18n.t("domain_expire_mailer.#{method_name}.subject", domain_name: @domain.name)
|
I18n.t("domain_expire_mailer.#{method_name}.subject", domain_name: @domain.name)
|
||||||
end
|
end
|
||||||
|
@ -40,23 +36,4 @@ class DomainExpireMailer < ApplicationMailer
|
||||||
def registrar_presenter(registrar:)
|
def registrar_presenter(registrar:)
|
||||||
RegistrarPresenter.new(registrar: registrar, view: view_context)
|
RegistrarPresenter.new(registrar: registrar, view: view_context)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Needed because there are invalid emails in the database, which have been imported from legacy app
|
|
||||||
def filter_invalid_emails(emails:, domain:)
|
|
||||||
old_validation_type = Truemail.configure.default_validation_type
|
|
||||||
Truemail.configure.default_validation_type = :regex
|
|
||||||
|
|
||||||
results = emails.select do |email|
|
|
||||||
valid = Truemail.valid?(email)
|
|
||||||
|
|
||||||
unless valid
|
|
||||||
logger.info("Unable to send DomainExpireMailer#expired email for domain #{domain.name} (##{domain.id})" \
|
|
||||||
" to invalid recipient #{email}")
|
|
||||||
end
|
|
||||||
|
|
||||||
valid
|
|
||||||
end
|
|
||||||
Truemail.configure.default_validation_type = old_validation_type
|
|
||||||
results
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -632,6 +632,12 @@ class Domain < ApplicationRecord
|
||||||
(admin_contacts.emails + [registrant.email]).uniq
|
(admin_contacts.emails + [registrant.email]).uniq
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def expired_domain_contact_emails
|
||||||
|
force_delete_contact_emails.reject do |email|
|
||||||
|
BouncedMailAddress.where(email: email).count.positive?
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def force_delete_contact_emails
|
def force_delete_contact_emails
|
||||||
(primary_contact_emails + tech_contacts.pluck(:email) +
|
(primary_contact_emails + tech_contacts.pluck(:email) +
|
||||||
["info@#{name}", "#{prepared_domain_name}@#{name}"]).uniq
|
["info@#{name}", "#{prepared_domain_name}@#{name}"]).uniq
|
||||||
|
|
|
@ -14,7 +14,9 @@ class StartTest < ActiveSupport::TestCase
|
||||||
QueJob.where("args->>0 = '#{@domain.id}'", job_class: DomainExpireEmailJob.name).count
|
QueJob.where("args->>0 = '#{@domain.id}'", job_class: DomainExpireEmailJob.name).count
|
||||||
end
|
end
|
||||||
|
|
||||||
assert_difference job_count, 1 do
|
one_job_per_contact_email = @domain.expired_domain_contact_emails.count
|
||||||
|
|
||||||
|
assert_difference job_count, one_job_per_contact_email do
|
||||||
perform_enqueued_jobs do
|
perform_enqueued_jobs do
|
||||||
DomainCron.start_expire_period
|
DomainCron.start_expire_period
|
||||||
end
|
end
|
||||||
|
|
|
@ -6,10 +6,11 @@ class DomainExpireEmailJobTest < ActiveSupport::TestCase
|
||||||
travel_to Time.zone.parse('2010-08-06')
|
travel_to Time.zone.parse('2010-08-06')
|
||||||
@domain.update(valid_to: Time.now - 1.day)
|
@domain.update(valid_to: Time.now - 1.day)
|
||||||
@domain.reload
|
@domain.reload
|
||||||
|
@email = @domain.registrant.email
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_domain_expire
|
def test_domain_expire
|
||||||
success = DomainExpireEmailJob.run(@domain.id)
|
success = DomainExpireEmailJob.run(@domain.id, @email)
|
||||||
assert success
|
assert success
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -18,7 +19,7 @@ class DomainExpireEmailJobTest < ActiveSupport::TestCase
|
||||||
@domain.reload
|
@domain.reload
|
||||||
assert_equal ['serverForceDelete'], @domain.statuses
|
assert_equal ['serverForceDelete'], @domain.statuses
|
||||||
|
|
||||||
success = DomainExpireEmailJob.run(@domain.id)
|
success = DomainExpireEmailJob.run(@domain.id, @email)
|
||||||
assert success
|
assert success
|
||||||
|
|
||||||
statuses = @domain.statuses
|
statuses = @domain.statuses
|
||||||
|
@ -26,4 +27,4 @@ class DomainExpireEmailJobTest < ActiveSupport::TestCase
|
||||||
@domain.update(statuses: statuses)
|
@domain.update(statuses: statuses)
|
||||||
assert_equal ['ok'], @domain.statuses
|
assert_equal ['ok'], @domain.statuses
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -3,9 +3,12 @@ require 'test_helper'
|
||||||
class DomainExpireMailerTest < ActionMailer::TestCase
|
class DomainExpireMailerTest < ActionMailer::TestCase
|
||||||
def test_delivers_domain_expiration_email
|
def test_delivers_domain_expiration_email
|
||||||
domain = domains(:shop)
|
domain = domains(:shop)
|
||||||
|
email = domain.registrar.email
|
||||||
assert_equal 'shop.test', domain.name
|
assert_equal 'shop.test', domain.name
|
||||||
|
|
||||||
email = DomainExpireMailer.expired(domain: domain, registrar: domain.registrar).deliver_now
|
email = DomainExpireMailer.expired(domain: domain,
|
||||||
|
registrar: domain.registrar,
|
||||||
|
email: email).deliver_now
|
||||||
|
|
||||||
assert_emails 1
|
assert_emails 1
|
||||||
assert_equal I18n.t("domain_expire_mailer.expired.subject", domain_name: domain.name),
|
assert_equal I18n.t("domain_expire_mailer.expired.subject", domain_name: domain.name),
|
||||||
|
@ -14,9 +17,12 @@ class DomainExpireMailerTest < ActionMailer::TestCase
|
||||||
|
|
||||||
def test_delivers_domain_expiration_soft_email
|
def test_delivers_domain_expiration_soft_email
|
||||||
domain = domains(:shop)
|
domain = domains(:shop)
|
||||||
|
email = domain.registrar.email
|
||||||
assert_equal 'shop.test', domain.name
|
assert_equal 'shop.test', domain.name
|
||||||
|
|
||||||
email = DomainExpireMailer.expired_soft(domain: domain, registrar: domain.registrar).deliver_now
|
email = DomainExpireMailer.expired_soft(domain: domain,
|
||||||
|
registrar: domain.registrar,
|
||||||
|
email: email).deliver_now
|
||||||
|
|
||||||
assert_emails 1
|
assert_emails 1
|
||||||
assert_equal I18n.t("domain_expire_mailer.expired_soft.subject", domain_name: domain.name),
|
assert_equal I18n.t("domain_expire_mailer.expired_soft.subject", domain_name: domain.name),
|
||||||
|
@ -25,6 +31,7 @@ class DomainExpireMailerTest < ActionMailer::TestCase
|
||||||
|
|
||||||
def test_delivers_domain_expiration_soft_email_if_auto_fd
|
def test_delivers_domain_expiration_soft_email_if_auto_fd
|
||||||
domain = domains(:shop)
|
domain = domains(:shop)
|
||||||
|
email_address = domain.registrar.email
|
||||||
assert_not domain.force_delete_scheduled?
|
assert_not domain.force_delete_scheduled?
|
||||||
travel_to Time.zone.parse('2010-07-05')
|
travel_to Time.zone.parse('2010-07-05')
|
||||||
email = 'some@strangesentence@internet.ee'
|
email = 'some@strangesentence@internet.ee'
|
||||||
|
@ -41,7 +48,9 @@ class DomainExpireMailerTest < ActionMailer::TestCase
|
||||||
|
|
||||||
assert domain.force_delete_scheduled?
|
assert domain.force_delete_scheduled?
|
||||||
|
|
||||||
email = DomainExpireMailer.expired_soft(domain: domain, registrar: domain.registrar).deliver_now
|
email = DomainExpireMailer.expired_soft(domain: domain,
|
||||||
|
registrar: domain.registrar,
|
||||||
|
email: email_address).deliver_now
|
||||||
|
|
||||||
assert_emails 1
|
assert_emails 1
|
||||||
assert_equal I18n.t("domain_expire_mailer.expired_soft.subject", domain_name: domain.name),
|
assert_equal I18n.t("domain_expire_mailer.expired_soft.subject", domain_name: domain.name),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue