made refactoring base codeclimate

This commit is contained in:
olegphenomenon 2021-12-28 12:40:18 +02:00
parent b8be4ec928
commit 7cb220e704
5 changed files with 32 additions and 24 deletions

View file

@ -9,25 +9,26 @@ module Actions
private private
def check_for_records_value(email:, value:) def check_for_records_value(email:, value:)
email = Mail::Address.new(email).domain email_domain = Mail::Address.new(email).domain
result = nil
dns_servers = ENV['dnssec_resolver_ips'].to_s.split(',').map(&:strip) 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| Resolv::DNS.open({ nameserver: dns_servers }) do |dns|
dns.timeouts = ENV['a_and_aaaa_validation_timeout'].to_i || 1 dns.timeouts = ENV['a_and_aaaa_validation_timeout'].to_i || 1
ress = nil ress = nil
case value case value
when 'A' when 'A'
ress = dns.getresources email, Resolv::DNS::Resource::IN::A ress = dns.getresources email_domain, Resolv::DNS::Resource::IN::A
when 'AAAA' when 'AAAA'
ress = dns.getresources email, Resolv::DNS::Resource::IN::AAAA ress = dns.getresources email_domain, Resolv::DNS::Resource::IN::AAAA
end end
result = ress.map { |r| r.address } ress.map(&:address)
end end
result
end end
end end
end end

View file

@ -22,11 +22,11 @@ module Actions
[:regex, :mx].each do |m| [:regex, :mx].each do |m|
result = Actions::SimpleMailValidator.run(email: contact.email, level: m) result = Actions::SimpleMailValidator.run(email: contact.email, level: m)
unless result next if result
contact.add_epp_error('2005', nil, "email didn't pass validation", I18n.t(:parameter_value_syntax_error))
@error = true contact.add_epp_error('2005', nil, "email didn't pass validation", I18n.t(:parameter_value_syntax_error))
return @error = true
end return
end end
true true

View file

@ -25,12 +25,11 @@ module Actions
[:regex, :mx].each do |m| [:regex, :mx].each do |m|
result = Actions::SimpleMailValidator.run(email: @new_attributes[:email], level: 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))
contact.add_epp_error('2005', nil, "email didn't pass validation", I18n.t(:parameter_value_syntax_error)) @error = true
@error = true return
return
end
end end
true true

View file

@ -54,12 +54,12 @@ module Actions
result_validation = Actions::AAndAaaaEmailValidation.call(email: @email, value: 'A') result_validation = Actions::AAndAaaaEmailValidation.call(email: @email, value: 'A')
output_a_and_aaaa_validation_results(email: @email, output_a_and_aaaa_validation_results(email: @email,
result: result_validation, result: result_validation,
type: 'A') unless Rails.env.test? type: 'A')
result_validation = Actions::AAndAaaaEmailValidation.call(email: @email, value: 'AAAA') if result_validation.empty? result_validation = Actions::AAndAaaaEmailValidation.call(email: @email, value: 'AAAA') if result_validation.empty?
output_a_and_aaaa_validation_results(email: @email, output_a_and_aaaa_validation_results(email: @email,
result: result_validation, result: result_validation,
type: 'AAAA') unless Rails.env.test? type: 'AAAA')
result_validation.present? ? result.success = true : result.success = false result_validation.present? ? result.success = true : result.success = false
validation_eventable.validation_events.create(validation_event_attrs(result)) validation_eventable.validation_events.create(validation_event_attrs(result))
@ -71,7 +71,9 @@ module Actions
true true
end 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}" logger.info "Validated #{type} record for #{email}. Validation result - #{result}"
end end

View file

@ -3,26 +3,32 @@ module Actions
extend self extend self
def run(email:, level:) 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 = validate_for_a_and_aaaa_records(email) if !result && level == :mx
result result
end end
def truemail_validate(email:, level:)
Truemail.validate(email, with: level).result.success
end
def validate_for_a_and_aaaa_records(email) def validate_for_a_and_aaaa_records(email)
result_validation = Actions::AAndAaaaEmailValidation.call(email: email, value: 'A') result_validation = Actions::AAndAaaaEmailValidation.call(email: email, value: 'A')
output_a_and_aaaa_validation_results(email: email, output_a_and_aaaa_validation_results(email: email,
result: result_validation, result: result_validation,
type: 'A') unless Rails.env.test? type: 'A')
result_validation = Actions::AAndAaaaEmailValidation.call(email: email, value: 'AAAA') if result_validation.empty? result_validation = Actions::AAndAaaaEmailValidation.call(email: email, value: 'AAAA') if result_validation.empty?
output_a_and_aaaa_validation_results(email: email, output_a_and_aaaa_validation_results(email: email,
result: result_validation, result: result_validation,
type: 'AAAA') unless Rails.env.test? type: 'AAAA')
result_validation.present? ? true : false result_validation.present? ? true : false
end 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}" logger.info "Validated #{type} record for #{email}. Validation result - #{result}"
end end