From e4ac417bdedc1f0ffe0538c00da703ccb848a519 Mon Sep 17 00:00:00 2001 From: Martin Lensment Date: Fri, 1 Aug 2014 15:39:20 +0300 Subject: [PATCH] Value returning with error message --- app/controllers/concerns/epp/common.rb | 14 +++++++++++++- app/models/domain.rb | 8 +++++++- app/views/epp/error.xml.builder | 4 ++++ spec/epp/domain_spec.rb | 3 +++ spec/support/epp.rb | 2 +- 5 files changed, 28 insertions(+), 3 deletions(-) diff --git a/app/controllers/concerns/epp/common.rb b/app/controllers/concerns/epp/common.rb index 034029044..26f8dac57 100644 --- a/app/controllers/concerns/epp/common.rb +++ b/app/controllers/concerns/epp/common.rb @@ -35,7 +35,19 @@ module Epp::Common def handle_errors(error_code_map, obj) obj.errors.each do |key, err| error_code_map.each do |code, values| - epp_errors << {code: code, msg: err} and break if values.any? {|x| obj.errors.added?(key, x) } + if err.is_a?(Hash) + epp_errors << { + code: code, + msg: err[:msg], + value: {obj: err[:obj], val: err[:val]}, + } and break if values.any? {|x| I18n.t("errors.messages.#{x}") == err[:msg] } + else + epp_errors << { + code: code, + msg: err, + } and break if values.any? {|x| obj.errors.added?(key, x) } + end + end end end diff --git a/app/models/domain.rb b/app/models/domain.rb index eb30a6b8c..8d47cddac 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -33,7 +33,13 @@ class Domain < ActiveRecord::Base v.each do |x| contact = Contact.find_by(code: x[:contact]) attach_contact(k, contact) and next if contact - errors.add(:domain_contacts, I18n.t('errors.messages.epp_contact_not_found')) + + # Detailed error message with value to display in EPP response + errors.add(:domain_contacts, { + obj: 'contact', + val: x[:contact], + msg: I18n.t('errors.messages.epp_contact_not_found') + }) end end diff --git a/app/views/epp/error.xml.builder b/app/views/epp/error.xml.builder index f9aa2f81d..718440bd7 100644 --- a/app/views/epp/error.xml.builder +++ b/app/views/epp/error.xml.builder @@ -4,6 +4,10 @@ xml.epp_head do xml.result('code' => x[:code]) do xml.msg(x[:msg], 'lang' => 'en') + xml.value('xmlns:obj' => 'urn:ietf:params:xml:ns:obj') do + xml.tag!("obj:#{x[:value][:obj]}", x[:value][:val]) + end if x[:value] + x[:ext_values].each do |y| xml.extValue do xml.value do diff --git a/spec/epp/domain_spec.rb b/spec/epp/domain_spec.rb index 5bbc3a408..02339efe3 100644 --- a/spec/epp/domain_spec.rb +++ b/spec/epp/domain_spec.rb @@ -12,12 +12,15 @@ describe 'EPP Domain', epp: true do response = epp_request('domains/create.xml') expect(response[:results][0][:result_code]).to eq('2303') expect(response[:results][0][:msg]).to eq('Contact was not found') + expect(response[:results][0][:value]).to eq('sh8013') expect(response[:results][1][:result_code]).to eq('2303') expect(response[:results][1][:msg]).to eq('Contact was not found') + expect(response[:results][1][:value]).to eq('sh801333') expect(response[:results][2][:result_code]).to eq('2303') expect(response[:results][2][:msg]).to eq('Contact was not found') + expect(response[:results][2][:value]).to eq('sh8013') expect(response[:clTRID]).to eq('ABC-12345') end diff --git a/spec/support/epp.rb b/spec/support/epp.rb index 169bfa737..7111d9ed1 100644 --- a/spec/support/epp.rb +++ b/spec/support/epp.rb @@ -31,7 +31,7 @@ module Epp } res.css('epp response result').each do |x| - obj[:results] << {result_code: x[:code], msg: x.css('msg').text} + obj[:results] << {result_code: x[:code], msg: x.css('msg').text, value: x.css('value > *').try(:first).try(:text)} end obj[:result_code] = obj[:results][0][:result_code]