diff --git a/app/controllers/admin/billing/prices_controller.rb b/app/controllers/admin/billing/prices_controller.rb index 7bd0c38560..4c1e2e30ae 100644 --- a/app/controllers/admin/billing/prices_controller.rb +++ b/app/controllers/admin/billing/prices_controller.rb @@ -81,7 +81,9 @@ def price_params ] allowed = params.require(:price).permit(*allowed_params) - allowed[:duration] = ActiveSupport::Duration.build(allowed[:duration].to_i) if allowed[:duration] + if allowed[:duration] + allowed[:duration] = ActiveSupport::Duration.build(allowed[:duration].to_i) + end allowed end diff --git a/app/controllers/epp/base_controller.rb b/app/controllers/epp/base_controller.rb index eb999d8570..3230d3e70f 100644 --- a/app/controllers/epp/base_controller.rb +++ b/app/controllers/epp/base_controller.rb @@ -163,9 +163,12 @@ def requires(*selectors) else missing = el.present? ? el.text.blank? : true end + next unless missing + epp_errors.add(:epp_errors, code: '2003', - message: I18n.t('errors.messages.required_parameter_missing', key: "#{full_selector} [#{attr}]")) if missing + message: I18n.t('errors.messages.required_parameter_missing', + key: "#{full_selector} [#{attr}]")) end missing ? false : el # return last selector if it was present @@ -185,7 +188,8 @@ def requires_attribute(element_selector, attribute_selector, options) unless attribute epp_errors.add(:epp_errors, code: '2003', - msg: I18n.t('errors.messages.required_parameter_missing', key: attribute_selector)) + msg: I18n.t('errors.messages.required_parameter_missing', + key: attribute_selector)) return end @@ -221,7 +225,8 @@ def exactly_one_of(*selectors) epp_errors.add(:epp_errors, code: '2306', - msg: I18n.t(:exactly_one_parameter_required, params: full_selectors.join(' OR '))) + msg: I18n.t(:exactly_one_parameter_required, + params: full_selectors.join(' OR '))) end def mutually_exclusive(*selectors) @@ -230,7 +235,8 @@ def mutually_exclusive(*selectors) epp_errors.add(:epp_errors, code: '2306', - msg: I18n.t(:mutally_exclusive_params, params: full_selectors.join(', '))) + msg: I18n.t(:mutally_exclusive_params, + params: full_selectors.join(', '))) end def optional(selector, *validations) @@ -273,9 +279,11 @@ def create_full_selectors(*selectors) def xml_attrs_present?(ph, attributes) # TODO: THIS IS DEPRECATED AND WILL BE REMOVED IN FUTURE attributes.each do |x| + next if has_attribute(ph, x) + epp_errors.add(:epp_errors, code: '2003', - msg: I18n.t('errors.messages.required_parameter_missing', key: x.last)) unless has_attribute(ph, x) + msg: I18n.t('errors.messages.required_parameter_missing', key: x.last)) end epp_errors.empty? end diff --git a/app/controllers/epp/contacts_controller.rb b/app/controllers/epp/contacts_controller.rb index 4d9b6ab0ed..10250563c2 100644 --- a/app/controllers/epp/contacts_controller.rb +++ b/app/controllers/epp/contacts_controller.rb @@ -173,8 +173,7 @@ def contact_org_disabled epp_errors.add(:epp_errors, code: '2306', - msg: "#{I18n.t(:contact_org_error)}: postalInfo > org [org]" - ) + msg: "#{I18n.t(:contact_org_error)}: postalInfo > org [org]") end def fax_disabled @@ -190,8 +189,7 @@ def status_editing_disabled return true if params[:parsed_frame].css('status').empty? epp_errors.add(:epp_errors, code: '2306', - msg: "#{I18n.t(:client_side_status_editing_error)}: status [status]" - ) + msg: "#{I18n.t(:client_side_status_editing_error)}: status [status]") end def address_given? diff --git a/app/controllers/epp/domains_controller.rb b/app/controllers/epp/domains_controller.rb index f5e32f153f..6f8d10ced1 100644 --- a/app/controllers/epp/domains_controller.rb +++ b/app/controllers/epp/domains_controller.rb @@ -218,8 +218,7 @@ def status_editing_disabled return true if params[:parsed_frame].css('status').empty? epp_errors.add(:epp_errors, code: '2306', - msg: "#{I18n.t(:client_side_status_editing_error)}: status [status]" - ) + msg: "#{I18n.t(:client_side_status_editing_error)}: status [status]") end def check_client_hold diff --git a/app/controllers/epp/errors_controller.rb b/app/controllers/epp/errors_controller.rb index e9f1ecea83..ab2e00b75a 100644 --- a/app/controllers/epp/errors_controller.rb +++ b/app/controllers/epp/errors_controller.rb @@ -3,12 +3,12 @@ class ErrorsController < BaseController skip_authorization_check def error - epp_errors.add(:epp_errors, code: params[:code], msg: params[:msg] ) + epp_errors.add(:epp_errors, code: params[:code], msg: params[:msg]) render_epp_response '/epp/error' end def command_handler - epp_errors.add(:epp_errors, code: '2000', msg: 'Unknown command' ) + epp_errors.add(:epp_errors, code: '2000', msg: 'Unknown command') render_epp_response '/epp/error' end end diff --git a/app/controllers/epp/sessions_controller.rb b/app/controllers/epp/sessions_controller.rb index dea42458ba..7e540bb899 100644 --- a/app/controllers/epp/sessions_controller.rb +++ b/app/controllers/epp/sessions_controller.rb @@ -20,8 +20,9 @@ def login server_md5 = Certificate.parse_md_from_string(File.read(ENV['cert_path'])) if client_md5 != server_md5 + msg = 'Authentication error; server closing connection (certificate is not valid)' epp_errors.add(:epp_errors, - msg: 'Authentication error; server closing connection (certificate is not valid)', + msg: msg, code: '2501') success = false @@ -31,8 +32,9 @@ def login if !Rails.env.development? && (!webclient_request && @api_user) unless @api_user.pki_ok?(request.env['HTTP_SSL_CLIENT_CERT'], request.env['HTTP_SSL_CLIENT_S_DN_CN']) + msg = 'Authentication error; server closing connection (certificate is not valid)' epp_errors.add(:epp_errors, - msg: 'Authentication error; server closing connection (certificate is not valid)', + msg: msg, code: '2501') success = false @@ -40,40 +42,45 @@ def login end if success && !@api_user + msg = 'Authentication error; server closing connection (API user not found)' epp_errors.add(:epp_errors, - msg: 'Authentication error; server closing connection (API user not found)', + msg: msg, code: '2501') success = false end if success && !@api_user.try(:active) + msg = 'Authentication error; server closing connection (API user is not active)' epp_errors.add(:epp_errors, - msg: 'Authentication error; server closing connection (API user is not active)', + msg: msg, code: '2501') success = false end if success && @api_user.cannot?(:create, :epp_login) + msg = 'Authentication error; server closing connection (API user does not have epp role)' epp_errors.add(:epp_errors, - msg: 'Authentication error; server closing connection (API user does not have epp role)', + msg: msg, code: '2501') success = false end if success && !ip_white? + msg = 'Authentication error; server closing connection (IP is not whitelisted)' epp_errors.add(:epp_errors, - msg: 'Authentication error; server closing connection (IP is not whitelisted)', + msg: msg, code: '2501') success = false end if success && EppSession.limit_reached?(@api_user.registrar) + msg = 'Session limit exceeded; server closing connection (connection limit reached)' epp_errors.add(:epp_errors, - msg: 'Session limit exceeded; server closing connection (connection limit reached)', + msg: msg, code: '2502') success = false diff --git a/app/controllers/repp/v1/base_controller.rb b/app/controllers/repp/v1/base_controller.rb index b26de845fe..37d4b95be0 100644 --- a/app/controllers/repp/v1/base_controller.rb +++ b/app/controllers/repp/v1/base_controller.rb @@ -63,7 +63,7 @@ def epp_errors @epp_errors ||= ActiveModel::Errors.new(self) end - def handle_errors(obj = nil, update: false) + def handle_errors(obj = nil) @epp_errors ||= ActiveModel::Errors.new(self) if obj @@ -78,8 +78,8 @@ def render_epp_error(status = :bad_request, data = {}) @epp_errors ||= ActiveModel::Errors.new(self) @epp_errors.add(:epp_errors, msg: 'Command failed', code: '2304') if data != {} - error_options = @epp_errors.errors.uniq. - select { |error| error.options[:code].present? }[0].options + error_options = @epp_errors.errors.uniq + .select { |error| error.options[:code].present? }[0].options @response = { code: error_options[:code].to_i, message: error_options[:msg], data: data } render(json: @response, status: status) diff --git a/app/controllers/repp/v1/domains/base_contacts_controller.rb b/app/controllers/repp/v1/domains/base_contacts_controller.rb index 521ca4ad45..65dbea9ace 100644 --- a/app/controllers/repp/v1/domains/base_contacts_controller.rb +++ b/app/controllers/repp/v1/domains/base_contacts_controller.rb @@ -16,11 +16,11 @@ def set_new_contact def update @epp_errors ||= ActiveModel::Errors.new(self) - if @new_contact.invalid? - @epp_errors.add(:epp_errors, - msg: 'New contact must be valid', - code: '2304') - end + return unless @new_contact.invalid? + + @epp_errors.add(:epp_errors, + msg: 'New contact must be valid', + code: '2304') end private diff --git a/app/controllers/repp/v1/domains/renews_controller.rb b/app/controllers/repp/v1/domains/renews_controller.rb index f8774a325c..af40e17b1f 100644 --- a/app/controllers/repp/v1/domains/renews_controller.rb +++ b/app/controllers/repp/v1/domains/renews_controller.rb @@ -30,7 +30,7 @@ def bulk_renew return render_success(data: { updated_domains: @domains.map(&:name) }) if renew.valid? msg = renew.errors.keys.map { |k, _v| renew.errors[k] }.join(', ') - @epp_errors.add(:epp_errors, msg: msg , code: '2002') + @epp_errors.add(:epp_errors, msg: msg, code: '2002') handle_errors end @@ -45,7 +45,7 @@ def validate_renew_period periods = Depp::Domain::PERIODS.map { |p| p[1] } return if periods.include? bulk_renew_params[:renew_period] - @epp_errors.add(:epp_errors, msg: 'Invalid renew period' , code: '2005') + @epp_errors.add(:epp_errors, msg: 'Invalid renew period', code: '2005') end def select_renewable_domains @@ -54,7 +54,7 @@ def select_renewable_domains if bulk_renew_params[:domains].instance_of?(Array) @domains = bulk_renew_domains else - @epp_errors.add(:epp_errors, msg: 'Domains attribute must be an array' , code: '2005') + @epp_errors.add(:epp_errors, msg: 'Domains attribute must be an array', code: '2005') end return handle_errors if @epp_errors.any? @@ -78,11 +78,11 @@ def bulk_renew_domains bulk_renew_params[:domains].each do |idn| domain = Epp::Domain.find_by(name: idn) domains << domain if domain - unless domain - @epp_errors.add(:epp_errors, - msg: "Object does not exist: #{idn}", - code: '2304') - end + next if domain + + @epp_errors.add(:epp_errors, + msg: "Object does not exist: #{idn}", + code: '2304') end domains diff --git a/app/controllers/repp/v1/domains_controller.rb b/app/controllers/repp/v1/domains_controller.rb index 4e1b6bc0da..c228bd3280 100644 --- a/app/controllers/repp/v1/domains_controller.rb +++ b/app/controllers/repp/v1/domains_controller.rb @@ -194,7 +194,9 @@ def validate_registrar_authorization return if @domain.registrar == current_user.registrar return if @domain.transfer_code.eql?(request.headers['Auth-Code']) - @epp_errors.add(:epp_errors, code: 2202, msg: I18n.t('errors.messages.epp_authorization_error')) + @epp_errors.add(:epp_errors, + code: 2202, + msg: I18n.t('errors.messages.epp_authorization_error')) handle_errors end diff --git a/app/interactions/domains/check_balance/mass.rb b/app/interactions/domains/check_balance/mass.rb index 55449c8b2f..cf1867a9f5 100644 --- a/app/interactions/domains/check_balance/mass.rb +++ b/app/interactions/domains/check_balance/mass.rb @@ -20,10 +20,8 @@ def execute def calculate_total_price @total_price = 0 domains.each do |domain| - task = Domains::CheckBalance::SingleDomain.run(domain: domain, - operation: 'renew', - period: period, - unit: unit) + task = Domains::CheckBalance::SingleDomain.run(domain: domain, operation: 'renew', + period: period, unit: unit) if task.valid? @total_price += task.result diff --git a/app/models/billing/price.rb b/app/models/billing/price.rb index d6705e0beb..cc42d643be 100644 --- a/app/models/billing/price.rb +++ b/app/models/billing/price.rb @@ -30,15 +30,15 @@ def self.durations '6 months' => 6.months, '9 months' => 9.months, '1 year' => 1.year, - '2 years'=> 2.years, - '3 years'=> 3.years, - '4 years'=> 4.years, - '5 years'=> 5.years, - '6 years'=> 6.years, - '7 years'=> 7.years, - '8 years'=> 8.years, - '9 years'=> 9.years, - '10 years'=> 10.years, + '2 years' => 2.years, + '3 years' => 3.years, + '4 years' => 4.years, + '5 years' => 5.years, + '6 years' => 6.years, + '7 years' => 7.years, + '8 years' => 8.years, + '9 years' => 9.years, + '10 years' => 10.years, } end diff --git a/app/models/concerns/epp_errors.rb b/app/models/concerns/epp_errors.rb index 349969507d..90d742609c 100644 --- a/app/models/concerns/epp_errors.rb +++ b/app/models/concerns/epp_errors.rb @@ -27,7 +27,7 @@ def construct_epp_errors epp_errors.import parent_error end end - epp_errors.each { |epp_error| errors.import epp_error} + epp_errors.each { |epp_error| errors.import epp_error } errors end @@ -49,13 +49,16 @@ def collect_child_errors(attr) multi = [:has_and_belongs_to_many, :has_many] epp_errors = ActiveModel::Errors.new(self) - send(attr).each do |x| - x.errors.each do |error| - x.collect_parent_errors(error.attribute, error.message).each do |parent_error| - epp_errors.import parent_error + + if multi.include?(macro) + send(attr).each do |x| + x.errors.each do |error| + x.collect_parent_errors(error.attribute, error.message).each do |parent_error| + epp_errors.import parent_error + end end end - end if multi.include?(macro) + end epp_errors end diff --git a/app/models/invoice/pdf_generator.rb b/app/models/invoice/pdf_generator.rb index a1569dd3a0..14fb99814c 100644 --- a/app/models/invoice/pdf_generator.rb +++ b/app/models/invoice/pdf_generator.rb @@ -14,7 +14,7 @@ def as_pdf private def invoice_html - ApplicationController.render(template: 'invoice/pdf', assigns: { invoice: invoice } ) + ApplicationController.render(template: 'invoice/pdf', assigns: { invoice: invoice }) end end end diff --git a/app/views/epp/error.xml.builder b/app/views/epp/error.xml.builder index 9f0bc45e85..be6b94a6a5 100644 --- a/app/views/epp/error.xml.builder +++ b/app/views/epp/error.xml.builder @@ -3,6 +3,7 @@ xml.epp_head do @errors.each do |error| x = error&.options next if x.empty? || x == { value: nil } + xml.result('code' => x[:code]) do xml.msg(x[:msg], 'lang' => 'en') model_name = resource ? resource.model_name.singular.sub('epp_','') : controller.controller_name.singularize