From a1c2dc21750fc0e2144ca184f4589798721c7b5f Mon Sep 17 00:00:00 2001 From: Martin Lensment Date: Wed, 15 Oct 2014 10:11:50 +0300 Subject: [PATCH] Fix ds data and key data xml parsing --- app/models/epp/epp_domain.rb | 17 ++++++---- spec/epp/domain_spec.rb | 60 ++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+), 6 deletions(-) diff --git a/app/models/epp/epp_domain.rb b/app/models/epp/epp_domain.rb index 919434eff..084081c1a 100644 --- a/app/models/epp/epp_domain.rb +++ b/app/models/epp/epp_domain.rb @@ -197,7 +197,7 @@ class Epp::EppDomain < Domain end dnssec_data[:ds_data].each do |ds_data| - if ds_data[:key_data].any? && !ds_data_with_keys_allowed + if ds_data[:public_key] && !ds_data_with_keys_allowed errors.add(:base, :ds_data_with_keys_not_allowed) next else @@ -434,20 +434,25 @@ class Epp::EppDomain < Domain res[:max_sig_life] = parsed_frame.css('maxSigLife').first.try(:text) parsed_frame.css('dsData').each do |x| - kd = x.css('keyData').first - res[:ds_data] << { + data = { ds_key_tag: x.css('keyTag').first.try(:text), ds_alg: x.css('alg').first.try(:text), ds_digest_type: x.css('digestType').first.try(:text), - ds_digest: x.css('digest').first.try(:text), + ds_digest: x.css('digest').first.try(:text) + } + + kd = x.css('keyData').first + data.merge!({ flags: kd.css('flags').first.try(:text), protocol: kd.css('protocol').first.try(:text), alg: kd.css('alg').first.try(:text), public_key: kd.css('pubKey').first.try(:text) - } + }) if kd + + res[:ds_data] << data end - parsed_frame.css('* > keyData').each do |x| + parsed_frame.xpath('keyData').each do |x| res[:key_data] << { flags: x.css('flags').first.try(:text), protocol: x.css('protocol').first.try(:text), diff --git a/spec/epp/domain_spec.rb b/spec/epp/domain_spec.rb index 9a82a5b0e..f238ae060 100644 --- a/spec/epp/domain_spec.rb +++ b/spec/epp/domain_spec.rb @@ -507,6 +507,66 @@ describe 'EPP Domain', epp: true do expect(response[:result_code]).to eq('2004') expect(response[:msg]).to eq('DNS keys count must be between 0-1') end + + it 'creates domain with ds data' do + pending true + xml = domain_create_xml({}, { + _other: [ + { dsData: { + keyTag: { value: '12345' }, + alg: { value: '3' }, + digestType: { value: '1' }, + digest: { value: '49FD46E6C4B45C55D4AC' } + } + }] + }) + + epp_request(xml, :xml) + + d = Domain.first + ds = d.dnskeys.first + expect(ds.ds_key_tag).to eq('12345') + expect(ds.ds_alg).to eq(3) + expect(ds.ds_digest_type).to eq(1) + expect(ds.ds_digest).to eq('49FD46E6C4B45C55D4AC') + expect(ds.flags).to be_nil + expect(ds.protocol).to be_nil + expect(ds.alg).to be_nil + expect(ds.public_key).to be_nil + end + + it 'creates domain with ds data with key' do + xml = domain_create_xml({}, { + _other: [ + { dsData: { + keyTag: { value: '12345' }, + alg: { value: '3' }, + digestType: { value: '1' }, + digest: { value: '49FD46E6C4B45C55D4AC' }, + keyData: { + flags: { value: '0' }, + protocol: { value: '3' }, + alg: { value: '5' }, + pubKey: { value: '700b97b591ed27ec2590d19f06f88bba700b97b591ed27ec2590d19f' } + } + } + }] + }) + + r = epp_request(xml, :xml) + + d = Domain.first + ds = d.dnskeys.first + expect(ds.ds_key_tag).to eq('12345') + expect(ds.ds_alg).to eq(3) + expect(ds.ds_digest_type).to eq(1) + expect(ds.ds_digest).to eq('49FD46E6C4B45C55D4AC') + expect(ds.flags).to eq(0) + expect(ds.protocol).to eq(3) + expect(ds.alg).to eq(5) + expect(ds.public_key).to eq('700b97b591ed27ec2590d19f06f88bba700b97b591ed27ec2590d19f') + end + end context 'with juridical persion as an owner' do