From e15fed2cd014bab2421635496b5bc2e96f967072 Mon Sep 17 00:00:00 2001 From: Alex Sherman Date: Tue, 4 May 2021 15:19:50 +0500 Subject: [PATCH] Add epp errors tto the concern itself --- app/controllers/epp/base_controller.rb | 2 +- app/controllers/epp/contacts_controller.rb | 4 ++-- app/controllers/epp/domains_controller.rb | 5 ++++- app/models/concerns/epp_errors.rb | 13 +++++++++++-- app/views/epp/error.xml.builder | 2 +- 5 files changed, 19 insertions(+), 7 deletions(-) diff --git a/app/controllers/epp/base_controller.rb b/app/controllers/epp/base_controller.rb index 4e3ea32d1..eb999d857 100644 --- a/app/controllers/epp/base_controller.rb +++ b/app/controllers/epp/base_controller.rb @@ -94,7 +94,7 @@ module Epp end def handle_errors(obj = nil) - @errors ||= [] + @errors ||= ActiveModel::Errors.new(self) if obj obj.construct_epp_errors diff --git a/app/controllers/epp/contacts_controller.rb b/app/controllers/epp/contacts_controller.rb index 7d81c6e54..4d9b6ab0e 100644 --- a/app/controllers/epp/contacts_controller.rb +++ b/app/controllers/epp/contacts_controller.rb @@ -55,13 +55,13 @@ module Epp def renew authorize! :renew, Epp::Contact - epp_errors << { code: '2101', msg: t(:'errors.messages.unimplemented_command') } + epp_errors.add(:epp_errors, code: '2101', msg: t(:'errors.messages.unimplemented_command')) handle_errors end def transfer authorize! :transfer, Epp::Contact - epp_errors << { code: '2101', msg: t(:'errors.messages.unimplemented_command') } + epp_errors.add(:epp_errors, code: '2101', msg: t(:'errors.messages.unimplemented_command')) handle_errors end diff --git a/app/controllers/epp/domains_controller.rb b/app/controllers/epp/domains_controller.rb index d2ec74fa9..f5e32f153 100644 --- a/app/controllers/epp/domains_controller.rb +++ b/app/controllers/epp/domains_controller.rb @@ -44,7 +44,10 @@ module Epp update_params = ::Deserializers::Xml::DomainUpdate.new(params[:parsed_frame], registrar_id).call action = Actions::DomainUpdate.new(@domain, update_params, false) - (handle_errors(@domain) and return) unless action.call + unless action.call + handle_errors(@domain) + return + end pending = @domain.epp_pending_update.present? render_epp_response("/epp/domains/success#{'_pending' if pending}") diff --git a/app/models/concerns/epp_errors.rb b/app/models/concerns/epp_errors.rb index ba2665ac9..22ad83556 100644 --- a/app/models/concerns/epp_errors.rb +++ b/app/models/concerns/epp_errors.rb @@ -113,11 +113,20 @@ module EppErrors end def add_epp_error(code, obj, val, msg) - errors[:epp_errors] ||= [] t = errors.generate_message(*msg) if msg.is_a?(Array) t = msg if msg.is_a?(String) err = { code: code, msg: t } + val = check_for_status(code, obj, val) err[:value] = { val: val, obj: obj } if val.present? - errors[:epp_errors] << err + self.errors.add(:epp_errors, err) + end + + def check_for_status(code, obj, val) + if code == '2304' && val.present? && val == DomainStatus::SERVER_DELETE_PROHIBITED && + obj == 'status' + DomainStatus::PENDING_UPDATE + else + val + end end end diff --git a/app/views/epp/error.xml.builder b/app/views/epp/error.xml.builder index bb3ffd117..9f0bc45e8 100644 --- a/app/views/epp/error.xml.builder +++ b/app/views/epp/error.xml.builder @@ -2,7 +2,7 @@ xml.epp_head do xml.response do @errors.each do |error| x = error&.options - next if x.empty? + 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