diff --git a/app/interactions/actions/a_and_aaaa_email_validation.rb b/app/interactions/actions/a_and_aaaa_email_validation.rb index 742bbaf21..f0ec569f4 100644 --- a/app/interactions/actions/a_and_aaaa_email_validation.rb +++ b/app/interactions/actions/a_and_aaaa_email_validation.rb @@ -9,25 +9,26 @@ module Actions private def check_for_records_value(email:, value:) - email = Mail::Address.new(email).domain - result = nil + email_domain = Mail::Address.new(email).domain dns_servers = ENV['dnssec_resolver_ips'].to_s.split(',').map(&:strip) + resolve_a_and_aaaa_records(dns_servers: dns_servers, email_domain: email_domain, value: value) + end + + def resolve_a_and_aaaa_records(dns_servers:, email_domain:, value:) Resolv::DNS.open({ nameserver: dns_servers }) do |dns| dns.timeouts = ENV['a_and_aaaa_validation_timeout'].to_i || 1 ress = nil case value when 'A' - ress = dns.getresources email, Resolv::DNS::Resource::IN::A + ress = dns.getresources email_domain, Resolv::DNS::Resource::IN::A when 'AAAA' - ress = dns.getresources email, Resolv::DNS::Resource::IN::AAAA + ress = dns.getresources email_domain, Resolv::DNS::Resource::IN::AAAA end - result = ress.map { |r| r.address } + ress.map(&:address) end - - result end end end diff --git a/app/interactions/actions/contact_create.rb b/app/interactions/actions/contact_create.rb index 6fcdf8d1f..d31af2e38 100644 --- a/app/interactions/actions/contact_create.rb +++ b/app/interactions/actions/contact_create.rb @@ -22,11 +22,11 @@ module Actions [:regex, :mx].each do |m| result = Actions::SimpleMailValidator.run(email: contact.email, level: m) - unless result - contact.add_epp_error('2005', nil, "email didn't pass validation", I18n.t(:parameter_value_syntax_error)) - @error = true - return - end + next if result + + contact.add_epp_error('2005', nil, "email didn't pass validation", I18n.t(:parameter_value_syntax_error)) + @error = true + return end true diff --git a/app/interactions/actions/contact_update.rb b/app/interactions/actions/contact_update.rb index 151376d3f..0cf76d116 100644 --- a/app/interactions/actions/contact_update.rb +++ b/app/interactions/actions/contact_update.rb @@ -25,12 +25,11 @@ module Actions [:regex, :mx].each do |m| result = Actions::SimpleMailValidator.run(email: @new_attributes[:email], level: m) + next if result - unless result - contact.add_epp_error('2005', nil, "email didn't pass validation", I18n.t(:parameter_value_syntax_error)) - @error = true - return - end + contact.add_epp_error('2005', nil, "email didn't pass validation", I18n.t(:parameter_value_syntax_error)) + @error = true + return end true diff --git a/app/interactions/actions/email_check.rb b/app/interactions/actions/email_check.rb index 397e403f7..b358db08d 100644 --- a/app/interactions/actions/email_check.rb +++ b/app/interactions/actions/email_check.rb @@ -54,12 +54,12 @@ module Actions result_validation = Actions::AAndAaaaEmailValidation.call(email: @email, value: 'A') output_a_and_aaaa_validation_results(email: @email, result: result_validation, - type: 'A') unless Rails.env.test? + type: 'A') result_validation = Actions::AAndAaaaEmailValidation.call(email: @email, value: 'AAAA') if result_validation.empty? output_a_and_aaaa_validation_results(email: @email, result: result_validation, - type: 'AAAA') unless Rails.env.test? + type: 'AAAA') result_validation.present? ? result.success = true : result.success = false validation_eventable.validation_events.create(validation_event_attrs(result)) @@ -71,7 +71,9 @@ module Actions true end - def output_a_and_aaaa_validation_results(email:, result:, type: ) + def output_a_and_aaaa_validation_results(email:, result:, type:) + return if Rails.env.test? + logger.info "Validated #{type} record for #{email}. Validation result - #{result}" end diff --git a/app/interactions/actions/simple_mail_validator.rb b/app/interactions/actions/simple_mail_validator.rb index 815422f65..7d945e875 100644 --- a/app/interactions/actions/simple_mail_validator.rb +++ b/app/interactions/actions/simple_mail_validator.rb @@ -3,26 +3,32 @@ module Actions extend self def run(email:, level:) - result = Truemail.validate(email, with: level).result.success + result = truemail_validate(email: email, level: level) result = validate_for_a_and_aaaa_records(email) if !result && level == :mx result end + def truemail_validate(email:, level:) + Truemail.validate(email, with: level).result.success + end + def validate_for_a_and_aaaa_records(email) result_validation = Actions::AAndAaaaEmailValidation.call(email: email, value: 'A') output_a_and_aaaa_validation_results(email: email, result: result_validation, - type: 'A') unless Rails.env.test? + type: 'A') result_validation = Actions::AAndAaaaEmailValidation.call(email: email, value: 'AAAA') if result_validation.empty? output_a_and_aaaa_validation_results(email: email, result: result_validation, - type: 'AAAA') unless Rails.env.test? + type: 'AAAA') result_validation.present? ? true : false end - def output_a_and_aaaa_validation_results(email:, result:, type: ) + def output_a_and_aaaa_validation_results(email:, result:, type:) + return if Rails.env.test? + logger.info "Validated #{type} record for #{email}. Validation result - #{result}" end