From 86dc8321c6559ca354c5947c69aff0491573096b Mon Sep 17 00:00:00 2001 From: Martin Lensment Date: Mon, 4 Aug 2014 12:49:41 +0300 Subject: [PATCH] Nameserver count validation 1 --- app/helpers/epp/domains_helper.rb | 1 + app/models/domain.rb | 12 +++++++ config/locales/en.yml | 4 ++- spec/epp/domain_spec.rb | 12 +++++++ .../domains/create_w_too_many_nameservers.xml | 36 +++++++++++++++++++ .../domains/create_wo_nameservers.xml | 18 ++++++++++ 6 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 spec/epp/requests/domains/create_w_too_many_nameservers.xml create mode 100644 spec/epp/requests/domains/create_wo_nameservers.xml diff --git a/app/helpers/epp/domains_helper.rb b/app/helpers/epp/domains_helper.rb index a2fc436e7..8298db66d 100644 --- a/app/helpers/epp/domains_helper.rb +++ b/app/helpers/epp/domains_helper.rb @@ -52,6 +52,7 @@ module Epp::DomainsHelper def domain_nameservers ph = params_hash['epp']['command']['create']['create']['ns'] + return [] unless ph ph[:hostObj] end diff --git a/app/models/domain.rb b/app/models/domain.rb index bee844482..98e5a9210 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -66,6 +66,18 @@ class Domain < ActiveRecord::Base self.nameservers << Nameserver.find_or_create_by(hostname: x) end save! + + validate_nameservers_count + + errors.empty? + end + + def validate_nameservers_count + errors.add(:nameservers, :blank) if nameservers.empty? + + if nameservers.count <= 1 || nameservers.count > 13 + errors.add(:nameservers, I18n.t('errors.messages.epp_nameservers_range_fail', min: 1, max: 13)) + end end def validate_admin_contacts_count diff --git a/config/locales/en.yml b/config/locales/en.yml index 760fc980b..1c895da78 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -43,7 +43,8 @@ en: blank: 'Required parameter missing - registrant' admin_contacts: blank: 'Required parameter missing - admin contact' - + nameservers: + blank: 'Required parameter missing - nameserver' errors: messages: @@ -52,3 +53,4 @@ en: epp_obj_does_not_exist: 'Object does not exist' epp_command_failed: 'Command failed' epp_contact_not_found: 'Contact was not found' + epp_nameservers_range_fail: 'Domain must have %{min}-%{max} nameservers' diff --git a/spec/epp/domain_spec.rb b/spec/epp/domain_spec.rb index 874d1bd12..dc7224d95 100644 --- a/spec/epp/domain_spec.rb +++ b/spec/epp/domain_spec.rb @@ -66,6 +66,18 @@ describe 'EPP Domain', epp: true do expect(response[:result_code]).to eq('2306') expect(response[:msg]).to eq('Required parameter missing - registrant') end + + it 'does not create domain without nameservers' do + response = epp_request('domains/create_wo_nameservers.xml') + expect(response[:result_code]).to eq('2306') + expect(response[:msg]).to eq('Required parameter missing - nameserver') + end + + it 'does not create domain with too many nameservers', pending: true do + response = epp_request('domains/create_w_too_many_nameservers.xml') + expect(response[:result_code]).to eq('2306') + expect(response[:msg]).to eq('Domain must have 1-13 nameservers') + end end context 'with juridical persion as an owner' do diff --git a/spec/epp/requests/domains/create_w_too_many_nameservers.xml b/spec/epp/requests/domains/create_w_too_many_nameservers.xml new file mode 100644 index 000000000..110cc66ed --- /dev/null +++ b/spec/epp/requests/domains/create_w_too_many_nameservers.xml @@ -0,0 +1,36 @@ + + + + + + example.ee + 1 + + ns1.example.net + ns2.example.net + ns3.example.net + ns4.example.net + ns5.example.net + ns6.example.net + ns7.example.net + ns8.example.net + ns9.example.net + ns10.example.net + ns11.example.net + ns12.example.net + ns13.example.net + ns14.example.net + + jd1234 + sh8013 + sh8013 + sh801333 + + 2fooBAR + + + + ABC-12345 + + diff --git a/spec/epp/requests/domains/create_wo_nameservers.xml b/spec/epp/requests/domains/create_wo_nameservers.xml new file mode 100644 index 000000000..4752f80cd --- /dev/null +++ b/spec/epp/requests/domains/create_wo_nameservers.xml @@ -0,0 +1,18 @@ + + + + + + example.ee + 1 + jd1234 + sh8013 + + 2fooBAR + + + + ABC-12345 + +