Validate IPv4 on nameserver when in the same zone with domain

This commit is contained in:
Martin Lensment 2014-10-01 11:22:30 +03:00
parent 4f780e0c1a
commit b85420a598
4 changed files with 28 additions and 0 deletions

View file

@ -49,6 +49,7 @@ class Domain < ActiveRecord::Base
validate :validate_tech_contacts_uniqueness validate :validate_tech_contacts_uniqueness
validate :validate_admin_contacts_uniqueness validate :validate_admin_contacts_uniqueness
validate :validate_domain_statuses_uniqueness validate :validate_domain_statuses_uniqueness
validate :validate_nameserver_ips
attr_accessor :owner_contact_typeahead attr_accessor :owner_contact_typeahead
@ -98,6 +99,15 @@ class Domain < ActiveRecord::Base
end end
end end
def validate_nameserver_ips
nameservers.each do |ns|
next if !ns.hostname.end_with?(name)
next if ns.ipv4.present?
errors.add(:nameservers, :invalid) if errors[:nameservers].blank?
ns.errors.add(:ipv4, :blank)
end
end
def validate_tech_contacts_uniqueness def validate_tech_contacts_uniqueness
contacts = domain_contacts.reject(&:marked_for_destruction?).select { |x| x.contact_type == DomainContact::TECH } contacts = domain_contacts.reject(&:marked_for_destruction?).select { |x| x.contact_type == DomainContact::TECH }
validate_domain_contacts_uniqueness(contacts) validate_domain_contacts_uniqueness(contacts)

View file

@ -17,6 +17,9 @@ class Nameserver < ActiveRecord::Base
[:hostname, :invalid, { value: { obj: 'hostObj', val: hostname } }], [:hostname, :invalid, { value: { obj: 'hostObj', val: hostname } }],
[:ipv4, :invalid, { value: { obj: 'hostAddr', val: ipv4 } }], [:ipv4, :invalid, { value: { obj: 'hostAddr', val: ipv4 } }],
[:ipv6, :invalid, { value: { obj: 'hostAddr', val: ipv6 } }] [:ipv6, :invalid, { value: { obj: 'hostAddr', val: ipv6 } }]
],
'2306' => [
[:ipv4, :blank]
] ]
} }
end end

View file

@ -121,6 +121,7 @@ en:
invalid: 'Hostname is invalid' invalid: 'Hostname is invalid'
taken: 'Nameserver already exists on this domain' taken: 'Nameserver already exists on this domain'
ipv4: ipv4:
blank: 'IPv4 is missing'
invalid: 'IPv4 is invalid' invalid: 'IPv4 is invalid'
ipv6: ipv6:
invalid: 'IPv6 is invalid' invalid: 'IPv6 is invalid'

View file

@ -203,6 +203,20 @@ describe 'EPP Domain', epp: true do
expect(d.auth_info).not_to be_empty expect(d.auth_info).not_to be_empty
end end
it 'validates nameserver ipv4 when in same zone as domain' do
xml_params = {
nameservers: [
{ hostObj: 'ns1.example.ee' },
{ hostObj: 'ns2.example.ee' }
]
}
response = epp_request(domain_create_xml(xml_params), :xml)
expect(response[:result_code]).to eq('2306')
expect(response[:msg]).to eq('IPv4 is missing')
end
it 'does not create duplicate domain' do it 'does not create duplicate domain' do
epp_request(domain_create_xml, :xml) epp_request(domain_create_xml, :xml)
response = epp_request(domain_create_xml, :xml) response = epp_request(domain_create_xml, :xml)