mirror of
https://github.com/internetee/registry.git
synced 2025-06-11 07:04:47 +02:00
Merge pull request #2048 from internetee/2035-rem-secdns-all-true
2035-rem-secdns-all-true
This commit is contained in:
commit
0aa6676204
3 changed files with 117 additions and 4 deletions
|
@ -41,7 +41,7 @@ module Deserializers
|
|||
class DnssecKeys
|
||||
attr_reader :frame, :key_data, :ds_data
|
||||
|
||||
def initialize(frame)
|
||||
def initialize(frame, domain_name = nil)
|
||||
@key_data = []
|
||||
@ds_data = []
|
||||
|
||||
|
@ -50,9 +50,25 @@ module Deserializers
|
|||
frame.css('dsData').each { |k| @ds_data << key_from_params(k, dsa: true) }
|
||||
end
|
||||
|
||||
return if frame.css('keyData').blank?
|
||||
if frame.css('all')&.text == 'true'
|
||||
keys_from_domain_name(domain_name)
|
||||
elsif frame.css('keyData').present?
|
||||
frame.css('keyData').each { |k| @key_data << key_from_params(k, dsa: false) }
|
||||
end
|
||||
end
|
||||
|
||||
frame.css('keyData').each { |k| @key_data << key_from_params(k, dsa: false) }
|
||||
def keys_from_domain_name(domain_name)
|
||||
domain = Epp::Domain.find_by(name: domain_name)
|
||||
return unless domain
|
||||
|
||||
domain.dnskeys.each do |key|
|
||||
@key_data << {
|
||||
flags: key.flags,
|
||||
protocol: key.protocol,
|
||||
alg: key.alg,
|
||||
public_key: key.public_key,
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
def key_from_params(obj, dsa: false)
|
||||
|
|
|
@ -60,7 +60,8 @@ module Deserializers
|
|||
def dns_keys
|
||||
added = ::Deserializers::Xml::DnssecKeys.new(frame.css('add')).call
|
||||
added.each { |k| k[:action] = 'add' }
|
||||
removed = ::Deserializers::Xml::DnssecKeys.new(frame.css('rem')).call
|
||||
removed = ::Deserializers::Xml::DnssecKeys.new(frame.css('rem'),
|
||||
frame.css('name')&.text).call
|
||||
removed.each { |k| k[:action] = 'rem' }
|
||||
|
||||
return if (added + removed).blank?
|
||||
|
|
96
test/integration/epp/domain/update/rem_dns_test.rb
Normal file
96
test/integration/epp/domain/update/rem_dns_test.rb
Normal file
|
@ -0,0 +1,96 @@
|
|||
require 'test_helper'
|
||||
|
||||
class EppDomainUpdateRemDnsTest < EppTestCase
|
||||
include ActionMailer::TestHelper
|
||||
include ActiveJob::TestHelper
|
||||
|
||||
setup do
|
||||
@domain = domains(:shop)
|
||||
@contact = contacts(:john)
|
||||
@dnskey = dnskeys(:one)
|
||||
@dnskey.update(domain: @domain)
|
||||
@original_registrant_change_verification =
|
||||
Setting.request_confirmation_on_registrant_change_enabled
|
||||
ActionMailer::Base.deliveries.clear
|
||||
end
|
||||
|
||||
teardown do
|
||||
Setting.request_confirmation_on_registrant_change_enabled =
|
||||
@original_registrant_change_verification
|
||||
end
|
||||
|
||||
def test_remove_dnskey_if_explicitly_set
|
||||
request_xml = <<-XML
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<epp xmlns="#{Xsd::Schema.filename(for_prefix: 'epp-ee')}">
|
||||
<command>
|
||||
<update>
|
||||
<domain:update xmlns:domain="#{Xsd::Schema.filename(for_prefix: 'domain-ee')}">
|
||||
<domain:name>shop.test</domain:name>
|
||||
<domain:chg>
|
||||
<domain:authInfo>
|
||||
<domain:pw>f0ff7d17b0</domain:pw>
|
||||
</domain:authInfo>
|
||||
</domain:chg>
|
||||
</domain:update>
|
||||
</update>
|
||||
<extension>
|
||||
<secDNS:update xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1">
|
||||
<secDNS:rem>
|
||||
<secDNS:keyData>
|
||||
<secDNS:flags>#{@dnskey.flags}</secDNS:flags>
|
||||
<secDNS:protocol>#{@dnskey.protocol}</secDNS:protocol>
|
||||
<secDNS:alg>#{@dnskey.alg}</secDNS:alg>
|
||||
<secDNS:pubKey>#{@dnskey.public_key}</secDNS:pubKey>
|
||||
</secDNS:keyData>
|
||||
</secDNS:rem>
|
||||
</secDNS:update>
|
||||
</extension>
|
||||
</command>
|
||||
</epp>
|
||||
XML
|
||||
|
||||
post epp_update_path, params: { frame: request_xml },
|
||||
headers: { 'HTTP_COOKIE' => 'session=api_bestnames' }
|
||||
response_xml = Nokogiri::XML(response.body)
|
||||
assert_correct_against_schema response_xml
|
||||
@domain.reload
|
||||
assert_equal 0, @domain.dnskeys.count
|
||||
assert_epp_response :completed_successfully
|
||||
end
|
||||
|
||||
def test_remove_dnskey_if_remove_all
|
||||
request_xml = <<-XML
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<epp xmlns="#{Xsd::Schema.filename(for_prefix: 'epp-ee')}">
|
||||
<command>
|
||||
<update>
|
||||
<domain:update xmlns:domain="#{Xsd::Schema.filename(for_prefix: 'domain-ee')}">
|
||||
<domain:name>shop.test</domain:name>
|
||||
<domain:chg>
|
||||
<domain:authInfo>
|
||||
<domain:pw>f0ff7d17b0</domain:pw>
|
||||
</domain:authInfo>
|
||||
</domain:chg>
|
||||
</domain:update>
|
||||
</update>
|
||||
<extension>
|
||||
<secDNS:update xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1">
|
||||
<secDNS:rem>
|
||||
<secDNS:all>true</secDNS:all>
|
||||
</secDNS:rem>
|
||||
</secDNS:update>
|
||||
</extension>
|
||||
</command>
|
||||
</epp>
|
||||
XML
|
||||
|
||||
post epp_update_path, params: { frame: request_xml },
|
||||
headers: { 'HTTP_COOKIE' => 'session=api_bestnames' }
|
||||
response_xml = Nokogiri::XML(response.body)
|
||||
assert_correct_against_schema response_xml
|
||||
@domain.reload
|
||||
assert_equal 0, @domain.dnskeys.count
|
||||
assert_epp_response :completed_successfully
|
||||
end
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue