mirror of
https://github.com/internetee/registry.git
synced 2025-05-16 17:37:17 +02:00
Hosts attribute for domain info
This commit is contained in:
parent
a3cb7aed41
commit
aa2b46241a
5 changed files with 85 additions and 6 deletions
|
@ -17,6 +17,17 @@ class Epp::DomainsController < EppController
|
|||
|
||||
def info
|
||||
authorize! :info, @domain, @password
|
||||
@hosts = params[:parsed_frame].css('name').first['hosts'] || 'all'
|
||||
|
||||
case @hosts
|
||||
when 'del'
|
||||
@nameservers = @domain.delegated_nameservers
|
||||
when 'sub'
|
||||
@nameservers = @domain.subordinate_nameservers
|
||||
when 'all'
|
||||
@nameservers = @domain.nameservers
|
||||
end
|
||||
|
||||
render_epp_response '/epp/domains/info'
|
||||
end
|
||||
|
||||
|
@ -88,6 +99,7 @@ class Epp::DomainsController < EppController
|
|||
def validate_info
|
||||
@prefix = 'info > info >'
|
||||
requires('name')
|
||||
optional_attribute 'name', 'hosts', values: %(all, sub, del, none)
|
||||
end
|
||||
|
||||
def validate_check
|
||||
|
|
|
@ -139,6 +139,20 @@ class EppController < ApplicationController
|
|||
}
|
||||
end
|
||||
|
||||
def optional_attribute(element_selector, attribute_selector, options)
|
||||
element = requires(element_selector, allow_blank: options[:allow_blank])
|
||||
return unless element
|
||||
|
||||
attribute = element[attribute_selector]
|
||||
|
||||
return if (attribute && options[:values].include?(attribute)) || !attribute
|
||||
|
||||
epp_errors << {
|
||||
code: '2306',
|
||||
msg: I18n.t('attribute_is_invalid', attribute: attribute_selector)
|
||||
}
|
||||
end
|
||||
|
||||
def exactly_one_of(*selectors)
|
||||
full_selectors = create_full_selectors(*selectors)
|
||||
return if element_count(*full_selectors, use_prefix: false) == 1
|
||||
|
|
|
@ -124,6 +124,14 @@ class Domain < ActiveRecord::Base
|
|||
domain_contacts.select { |x| x.contact_type == DomainContact::ADMIN }
|
||||
end
|
||||
|
||||
def subordinate_nameservers
|
||||
nameservers.select { |x| x.hostname.end_with?(name) }
|
||||
end
|
||||
|
||||
def delegated_nameservers
|
||||
nameservers.select { |x| !x.hostname.end_with?(name) }
|
||||
end
|
||||
|
||||
def name=(value)
|
||||
value.strip!
|
||||
value.downcase!
|
||||
|
|
|
@ -22,12 +22,14 @@ xml.epp_head do
|
|||
xml.tag!('domain:contact', x.code, 'type' => 'admin')
|
||||
end
|
||||
|
||||
xml.tag!('domain:ns') do
|
||||
@domain.nameservers.each do |x|
|
||||
xml.tag!('domain:hostAttr') do
|
||||
xml.tag!('domain:hostName', x.hostname)
|
||||
xml.tag!('domain:hostAddr', x.ipv4, 'ip' => 'v4') if x.ipv4.present?
|
||||
xml.tag!('domain:hostAddr', x.ipv6, 'ip' => 'v6') if x.ipv6.present?
|
||||
if @nameservers && @nameservers.any?
|
||||
xml.tag!('domain:ns') do
|
||||
@nameservers.each do |x|
|
||||
xml.tag!('domain:hostAttr') do
|
||||
xml.tag!('domain:hostName', x.hostname)
|
||||
xml.tag!('domain:hostAddr', x.ipv4, 'ip' => 'v4') if x.ipv4.present?
|
||||
xml.tag!('domain:hostAddr', x.ipv6, 'ip' => 'v6') if x.ipv6.present?
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1775,6 +1775,49 @@ describe 'EPP Domain', epp: true do
|
|||
inf_data.css('upDate').text.should == domain.updated_at.to_time.utc.to_s
|
||||
end
|
||||
|
||||
it 'returns domain info with different nameservers' do
|
||||
domain.nameservers = []
|
||||
domain.save
|
||||
|
||||
domain.nameservers.build(hostname: "ns1.#{domain.name}", ipv4: '192.168.1.1', ipv6: '1080:0:0:0:8:800:200C:417A')
|
||||
domain.nameservers.build(hostname: "ns2.#{domain.name}", ipv4: '192.168.1.1', ipv6: '1080:0:0:0:8:800:200C:417A')
|
||||
domain.nameservers.build(hostname: "ns3.test.ee", ipv4: '192.168.1.1', ipv6: '1080:0:0:0:8:800:200C:417A')
|
||||
domain.save
|
||||
|
||||
xml = domain_info_xml(name: { value: domain.name, attrs: { hosts: 'inalid' } })
|
||||
response = epp_plain_request(xml, :xml)
|
||||
response[:msg].should == 'Attribute is invalid: hosts'
|
||||
response[:result_code].should == '2306'
|
||||
|
||||
xml = domain_info_xml(name: { value: domain.name, attrs: { hosts: 'sub' } })
|
||||
response = epp_plain_request(xml, :xml)
|
||||
|
||||
inf_data = response[:parsed].css('resData infData')
|
||||
inf_data.css('hostAttr').count.should == 2
|
||||
inf_data.css('hostName').first.text.should == "ns1.#{domain.name}"
|
||||
inf_data.css('hostName').last.text.should == "ns2.#{domain.name}"
|
||||
|
||||
xml = domain_info_xml(name: { value: domain.name, attrs: { hosts: 'del' } })
|
||||
response = epp_plain_request(xml, :xml)
|
||||
|
||||
inf_data = response[:parsed].css('resData infData')
|
||||
inf_data.css('hostAttr').count.should == 1
|
||||
inf_data.css('hostName').first.text.should == "ns3.test.ee"
|
||||
|
||||
xml = domain_info_xml(name: { value: domain.name, attrs: { hosts: 'none' } })
|
||||
response = epp_plain_request(xml, :xml)
|
||||
|
||||
inf_data = response[:parsed].css('resData infData')
|
||||
inf_data.css('ns').count.should == 0
|
||||
inf_data.css('hostAttr').count.should == 0
|
||||
|
||||
xml = domain_info_xml(name: { value: domain.name, attrs: { hosts: 'all' } })
|
||||
response = epp_plain_request(xml, :xml)
|
||||
|
||||
inf_data = response[:parsed].css('resData infData')
|
||||
inf_data.css('hostAttr').count.should == 3
|
||||
end
|
||||
|
||||
it 'returns error when domain can not be found' do
|
||||
response = epp_plain_request(domain_info_xml(name: { value: 'test.ee' }), :xml)
|
||||
response[:results][0][:result_code].should == '2303'
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue