From c19168c2ea14544da43d6ab882affbeafb3cd357 Mon Sep 17 00:00:00 2001 From: Martin Lensment Date: Fri, 10 Oct 2014 11:21:23 +0300 Subject: [PATCH] Info query with extension support --- app/views/epp/domains/info.xml.builder | 32 +++++++++++++++++--------- spec/epp/domain_spec.rb | 18 +++++++++++---- 2 files changed, 34 insertions(+), 16 deletions(-) diff --git a/app/views/epp/domains/info.xml.builder b/app/views/epp/domains/info.xml.builder index c09ae3fe6..d8fe5e3e5 100644 --- a/app/views/epp/domains/info.xml.builder +++ b/app/views/epp/domains/info.xml.builder @@ -36,17 +36,6 @@ xml.epp_head do end end - xml.tag!('domain:dnssec') do - @domain.dnskeys.each do |x| - xml.tag!('domain:dnskey') do - xml.tag!('domain:flags', x.flags) - xml.tag!('domain:protocol', x.protocol) - xml.tag!('domain:alg', x.alg) - xml.tag!('domain:pubKey', x.public_key) - end - end - end if @domain.dnskeys.any? - ## TODO Find out what this domain:host is all about xml.tag!('domain:clID', @domain.owner_contact_code) @@ -72,6 +61,27 @@ xml.epp_head do end end + xml.extension do + xml.tag!('secDNS:infData', 'xmlns:secDNS' => 'urn:ietf:params:xml:ns:secDNS-1.1') do + @domain.delegation_signers.each do |x| + xml.tag!('secDNS:dsData') do + xml.tag!('secDNS:keyTag', x.key_tag) + xml.tag!('secDNS:alg', x.alg) + xml.tag!('secDNS:digestType', x.digest_type) + xml.tag!('secDNS:digest', x.digest) + x.dnskeys.each do |key| + xml.tag!('secDNS:keyData') do + xml.tag!('secDNS:flags', key.flags) + xml.tag!('secDNS:protocol', key.protocol) + xml.tag!('secDNS:alg', key.alg) + xml.tag!('secDNS:pubKey', key.public_key) + end + end if x.dnskeys.any? + end + end + end + end if @domain.delegation_signers.any? + xml << render('/epp/shared/trID') end diff --git a/spec/epp/domain_spec.rb b/spec/epp/domain_spec.rb index 85045cad3..a5d204622 100644 --- a/spec/epp/domain_spec.rb +++ b/spec/epp/domain_spec.rb @@ -225,7 +225,6 @@ describe 'EPP Domain', epp: true do }) response = epp_request(xml, :xml) - po response expect(response[:result_code]).to eq('2306') expect(response[:msg]).to eq('IPv4 is missing') end @@ -572,8 +571,10 @@ describe 'EPP Domain', epp: true do d.domain_statuses.build(value: DomainStatus::CLIENT_HOLD, description: 'Payment overdue.') d.nameservers.build(hostname: 'ns1.example.com', ipv4: '192.168.1.1', ipv6: '1080:0:0:0:8:800:200C:417A') - d.dnskeys.build(flags: 257, protocol: 3, alg: 3, public_key: 'AwEAAddt2AkLfYGKgiEZB5SmIF8EvrjxNMH6HtxWEA4RJ9Ao6LCWheg8') - d.dnskeys.build(flags: 0, protocol: 3, alg: 5, public_key: '700b97b591ed27ec2590d19f06f88bba700b97b591ed27ec2590d19f') + ds = d.delegation_signers.build(key_tag: '123', alg: 3, digest_type: 1, digest: 'abc') + + ds.dnskeys.build(flags: 257, protocol: 3, alg: 3, public_key: 'AwEAAddt2AkLfYGKgiEZB5SmIF8EvrjxNMH6HtxWEA4RJ9Ao6LCWheg8') + ds.dnskeys.build(flags: 0, protocol: 3, alg: 5, public_key: '700b97b591ed27ec2590d19f06f88bba700b97b591ed27ec2590d19f') d.save response = epp_request(domain_info_xml, :xml) @@ -603,13 +604,20 @@ describe 'EPP Domain', epp: true do expect(inf_data.css('exDate').text).to eq(d.valid_to.to_time.utc.to_s) expect(inf_data.css('pw').text).to eq(d.auth_info) - dnskey_1 = inf_data.css('dnskey')[0] + ds_data = response[:parsed].css('dsData')[0] + + expect(ds_data.css('keyTag').first.text).to eq('123') + expect(ds_data.css('alg').first.text).to eq('3') + expect(ds_data.css('digestType').first.text).to eq('1') + expect(ds_data.css('digest').first.text).to eq('abc') + + dnskey_1 = ds_data.css('keyData')[0] expect(dnskey_1.css('flags').first.text).to eq('257') expect(dnskey_1.css('protocol').first.text).to eq('3') expect(dnskey_1.css('alg').first.text).to eq('3') expect(dnskey_1.css('pubKey').first.text).to eq('AwEAAddt2AkLfYGKgiEZB5SmIF8EvrjxNMH6HtxWEA4RJ9Ao6LCWheg8') - dnskey_2 = inf_data.css('dnskey')[1] + dnskey_2 = ds_data.css('keyData')[1] expect(dnskey_2.css('flags').first.text).to eq('0') expect(dnskey_2.css('protocol').first.text).to eq('3') expect(dnskey_2.css('alg').first.text).to eq('5')