Fix ds data and key data xml parsing

This commit is contained in:
Martin Lensment 2014-10-15 10:11:50 +03:00
parent 9d302ac29d
commit a1c2dc2175
2 changed files with 71 additions and 6 deletions

View file

@ -197,7 +197,7 @@ class Epp::EppDomain < Domain
end end
dnssec_data[:ds_data].each do |ds_data| 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) errors.add(:base, :ds_data_with_keys_not_allowed)
next next
else else
@ -434,20 +434,25 @@ class Epp::EppDomain < Domain
res[:max_sig_life] = parsed_frame.css('maxSigLife').first.try(:text) res[:max_sig_life] = parsed_frame.css('maxSigLife').first.try(:text)
parsed_frame.css('dsData').each do |x| parsed_frame.css('dsData').each do |x|
kd = x.css('keyData').first data = {
res[:ds_data] << {
ds_key_tag: x.css('keyTag').first.try(:text), ds_key_tag: x.css('keyTag').first.try(:text),
ds_alg: x.css('alg').first.try(:text), ds_alg: x.css('alg').first.try(:text),
ds_digest_type: x.css('digestType').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), flags: kd.css('flags').first.try(:text),
protocol: kd.css('protocol').first.try(:text), protocol: kd.css('protocol').first.try(:text),
alg: kd.css('alg').first.try(:text), alg: kd.css('alg').first.try(:text),
public_key: kd.css('pubKey').first.try(:text) public_key: kd.css('pubKey').first.try(:text)
} }) if kd
res[:ds_data] << data
end end
parsed_frame.css('* > keyData').each do |x| parsed_frame.xpath('keyData').each do |x|
res[:key_data] << { res[:key_data] << {
flags: x.css('flags').first.try(:text), flags: x.css('flags').first.try(:text),
protocol: x.css('protocol').first.try(:text), protocol: x.css('protocol').first.try(:text),

View file

@ -507,6 +507,66 @@ describe 'EPP Domain', epp: true do
expect(response[:result_code]).to eq('2004') expect(response[:result_code]).to eq('2004')
expect(response[:msg]).to eq('DNS keys count must be between 0-1') expect(response[:msg]).to eq('DNS keys count must be between 0-1')
end 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 end
context 'with juridical persion as an owner' do context 'with juridical persion as an owner' do