From f63eb66f02cb08ffe3b74f94f289f3b61ed6da0a Mon Sep 17 00:00:00 2001 From: Martin Lensment Date: Fri, 10 Oct 2014 10:43:42 +0300 Subject: [PATCH] Fix some epp tests --- app/models/delegation_signer.rb | 24 ++++++++- app/models/domain.rb | 14 ++++++ app/models/setting.rb | 3 ++ app/views/epp/domains/info.xml.builder | 4 ++ config/locales/en.yml | 7 ++- spec/epp/domain_spec.rb | 70 +++++++++++++------------- 6 files changed, 83 insertions(+), 39 deletions(-) diff --git a/app/models/delegation_signer.rb b/app/models/delegation_signer.rb index 4c97feb5d..63a87b507 100644 --- a/app/models/delegation_signer.rb +++ b/app/models/delegation_signer.rb @@ -3,12 +3,32 @@ class DelegationSigner < ActiveRecord::Base has_many :dnskeys validate :validate_dnskeys_uniqueness + validate :validate_dnskeys_count + def epp_code_map - {} + sg = SettingGroup.domain_validation + + { + '2004' => [ # Parameter value range error + [:dnskeys, :out_of_range, + { + min: sg.setting(Setting::DNSKEYS_MIN_COUNT).value, + max: sg.setting(Setting::DNSKEYS_MAX_COUNT).value + } + ] + ] + } end -def validate_dnskeys_uniqueness + def validate_dnskeys_count + sg = SettingGroup.domain_validation + min, max = sg.setting(:dnskeys_min_count).value.to_i, sg.setting(:dnskeys_max_count).value.to_i + return if dnskeys.reject(&:marked_for_destruction?).length.between?(min, max) + errors.add(:dnskeys, :out_of_range, { min: min, max: max }) + end + + def validate_dnskeys_uniqueness validated = [] list = dnskeys.reject(&:marked_for_destruction?) list.each do |dnskey| diff --git a/app/models/domain.rb b/app/models/domain.rb index 82aa2580d..101f95833 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -54,6 +54,7 @@ class Domain < ActiveRecord::Base validate :validate_tech_contacts_uniqueness validate :validate_admin_contacts_uniqueness validate :validate_domain_statuses_uniqueness + # validate :validate_dnskeys_uniqueness validate :validate_nameserver_ips attr_accessor :owner_contact_typeahead @@ -158,6 +159,19 @@ class Domain < ActiveRecord::Base end end + def validate_dnskeys_uniqueness + validated = [] + list = dnskeys.reject(&:marked_for_destruction?) + list.each do |dnskey| + next if dnskey.public_key.blank? + existing = list.select { |x| x.public_key == dnskey.public_key } + next unless existing.length > 1 + validated << dnskey.public_key + errors.add(:dnskeys, :invalid) if errors[:dnskeys].blank? + dnskey.errors.add(:public_key, :taken) + end + end + def validate_period return unless period.present? if period_unit == 'd' diff --git a/app/models/setting.rb b/app/models/setting.rb index 0c77db866..8ace24044 100644 --- a/app/models/setting.rb +++ b/app/models/setting.rb @@ -9,4 +9,7 @@ class Setting < ActiveRecord::Base ALLOW_DS_DATA = 'allow_ds_data' ALLOW_DS_DATA_WITH_KEYS = 'allow_ds_data_with_keys' ALLOW_KEY_DATA = 'allow_key_data' + DNSKEYS_MAX_COUNT = 'dnskeys_max_count' + DNSKEYS_MIN_COUNT = 'dnskeys_min_count' + end diff --git a/app/views/epp/domains/info.xml.builder b/app/views/epp/domains/info.xml.builder index cef29f662..c09ae3fe6 100644 --- a/app/views/epp/domains/info.xml.builder +++ b/app/views/epp/domains/info.xml.builder @@ -74,3 +74,7 @@ xml.epp_head do xml << render('/epp/shared/trID') end + + +9032 +72056 diff --git a/config/locales/en.yml b/config/locales/en.yml index 9d2724ea4..ca648aa06 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -112,7 +112,6 @@ en: dnskeys: invalid: 'DNS keys are invalid' not_found: 'Dnskey was not found' - out_of_range: 'DNS keys count must be between %{min}-%{max}' domain: <<: *epp_domain_ar_attributes @@ -207,6 +206,12 @@ en: blank: 'Public key is missing' + delegation_signer: + attributes: + dnskeys: + out_of_range: 'DNS keys count must be between %{min}-%{max}' + + attributes: epp_domain: &epp_domain_attributes name: 'Domain name' diff --git a/spec/epp/domain_spec.rb b/spec/epp/domain_spec.rb index 3f558bec2..85045cad3 100644 --- a/spec/epp/domain_spec.rb +++ b/spec/epp/domain_spec.rb @@ -430,24 +430,24 @@ describe 'EPP Domain', epp: true do end it 'does not create a domain with two identical dnskeys' do - xml = domain_create_xml({}, { - _other: [ - { keyData: { - flags: { value: '257' }, - protocol: { value: '3' }, - alg: { value: '3' }, - pubKey: { value: '700b97b591ed27ec2590d19f06f88bba700b97b591ed27ec2590d19f' } - } - }, - { - keyData: { - flags: { value: '0' }, - protocol: { value: '3' }, - alg: { value: '5' }, - pubKey: { value: '700b97b591ed27ec2590d19f06f88bba700b97b591ed27ec2590d19f' } - } - }] - }) + xml = domain_create_xml({}, { + _other: [ + { keyData: { + flags: { value: '257' }, + protocol: { value: '3' }, + alg: { value: '3' }, + pubKey: { value: '700b97b591ed27ec2590d19f06f88bba700b97b591ed27ec2590d19f' } + } + }, + { + keyData: { + flags: { value: '0' }, + protocol: { value: '3' }, + alg: { value: '5' }, + pubKey: { value: '700b97b591ed27ec2590d19f06f88bba700b97b591ed27ec2590d19f' } + } + }] + }) response = epp_request(xml, :xml) @@ -461,25 +461,23 @@ describe 'EPP Domain', epp: true do s.value = 1 s.save - xml = domain_create_xml({ - dnssec: [ - { - dnskey: { - flags: { value: '257' }, - protocol: { value: '3' }, - alg: { value: '3' }, - pubKey: { value: 'AwEAAddt2AkLfYGKgiEZB5SmIF8EvrjxNMH6HtxWEA4RJ9Ao6LCWheg8' } - } - }, - { - dnskey: { - flags: { value: '0' }, - protocol: { value: '3' }, - alg: { value: '5' }, - pubKey: { value: '700b97b591ed27ec2590d19f06f88bba700b97b591ed27ec2590d19f' } - } + xml = domain_create_xml({}, { + _other: [ + { keyData: { + flags: { value: '257' }, + protocol: { value: '3' }, + alg: { value: '3' }, + pubKey: { value: 'AwEAAddt2AkLfYGKgiEZB5SmIF8EvrjxNMH6HtxWEA4RJ9Ao6LCWheg8' } } - ] + }, + { + keyData: { + flags: { value: '0' }, + protocol: { value: '3' }, + alg: { value: '5' }, + pubKey: { value: '700b97b591ed27ec2590d19f06f88bba700b97b591ed27ec2590d19f' } + } + }] }) response = epp_request(xml, :xml)