mirror of
https://github.com/internetee/registry.git
synced 2025-07-02 01:03:35 +02:00
Validate dnskey uniqueness
This commit is contained in:
parent
416128823b
commit
f6ac22df52
5 changed files with 51 additions and 1 deletions
|
@ -15,6 +15,9 @@ class Dnskey < ActiveRecord::Base
|
||||||
[:protocol, :invalid, { value: { obj: 'protocol', val: protocol } }],
|
[:protocol, :invalid, { value: { obj: 'protocol', val: protocol } }],
|
||||||
[:flags, :invalid, { value: { obj: 'flags', val: flags } }]
|
[:flags, :invalid, { value: { obj: 'flags', val: flags } }]
|
||||||
],
|
],
|
||||||
|
'2302' => [
|
||||||
|
[:public_key, :taken, { value: { obj: 'pubKye', val: public_key } }]
|
||||||
|
],
|
||||||
'2303' => [
|
'2303' => [
|
||||||
[:base, :dnskey_not_found, { value: { obj: 'pubKey', val: public_key } }]
|
[:base, :dnskey_not_found, { value: { obj: 'pubKey', val: public_key } }]
|
||||||
],
|
],
|
||||||
|
@ -28,16 +31,19 @@ class Dnskey < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def validate_algorithm
|
def validate_algorithm
|
||||||
|
return if alg.blank?
|
||||||
return if %w(3 5 6 7 8 252 253 254 255).include?(alg.to_s)
|
return if %w(3 5 6 7 8 252 253 254 255).include?(alg.to_s)
|
||||||
errors.add(:alg, :invalid)
|
errors.add(:alg, :invalid)
|
||||||
end
|
end
|
||||||
|
|
||||||
def validate_protocol
|
def validate_protocol
|
||||||
|
return if protocol.blank?
|
||||||
return if %w(3).include?(protocol.to_s)
|
return if %w(3).include?(protocol.to_s)
|
||||||
errors.add(:protocol, :invalid)
|
errors.add(:protocol, :invalid)
|
||||||
end
|
end
|
||||||
|
|
||||||
def validate_flags
|
def validate_flags
|
||||||
|
return if flags.blank?
|
||||||
return if %w(0 256 257).include?(flags.to_s)
|
return if %w(0 256 257).include?(flags.to_s)
|
||||||
errors.add(:flags, :invalid)
|
errors.add(:flags, :invalid)
|
||||||
end
|
end
|
||||||
|
|
|
@ -53,6 +53,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_dnskeys_uniqueness
|
||||||
validate :validate_nameserver_ips
|
validate :validate_nameserver_ips
|
||||||
|
|
||||||
attr_accessor :owner_contact_typeahead
|
attr_accessor :owner_contact_typeahead
|
||||||
|
@ -148,6 +149,18 @@ class Domain < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def validate_dnskeys_uniqueness
|
||||||
|
validated = []
|
||||||
|
dnskeys.reject(&:marked_for_destruction?).each do |dnskey|
|
||||||
|
next if dnskey.public_key.blank?
|
||||||
|
existing = dnskeys.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
|
def validate_period
|
||||||
return unless period.present?
|
return unless period.present?
|
||||||
if period_unit == 'd'
|
if period_unit == 'd'
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
.row
|
.row
|
||||||
.col-md-4
|
.col-md-4
|
||||||
.form-group
|
.form-group
|
||||||
= key_fields.label :flags
|
= key_fields.label :flags, t('shared.flag')
|
||||||
= key_fields.text_field :flags, class: 'form-control'
|
= key_fields.text_field :flags, class: 'form-control'
|
||||||
.col-md-4
|
.col-md-4
|
||||||
.form-group
|
.form-group
|
||||||
|
|
|
@ -107,6 +107,7 @@ en:
|
||||||
registrar:
|
registrar:
|
||||||
blank: 'Registrar is missing'
|
blank: 'Registrar is missing'
|
||||||
dnskeys:
|
dnskeys:
|
||||||
|
invalid: 'DNS keys are invalid'
|
||||||
not_found: 'Dnskey was not found'
|
not_found: 'Dnskey was not found'
|
||||||
|
|
||||||
domain:
|
domain:
|
||||||
|
@ -197,6 +198,7 @@ en:
|
||||||
invalid: 'Flag is invalid'
|
invalid: 'Flag is invalid'
|
||||||
blank: 'Flag is missing'
|
blank: 'Flag is missing'
|
||||||
public_key:
|
public_key:
|
||||||
|
taken: 'Public key already exists'
|
||||||
blank: 'Public key is missing'
|
blank: 'Public key is missing'
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -418,6 +418,35 @@ describe 'EPP Domain', epp: true do
|
||||||
expect(response[:results][6][:msg]).to eq('Protocol is invalid')
|
expect(response[:results][6][:msg]).to eq('Protocol is invalid')
|
||||||
expect(response[:results][6][:value]).to eq('5')
|
expect(response[:results][6][:value]).to eq('5')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'does not create a domain with two identical dnskeys' do
|
||||||
|
xml = domain_create_xml({
|
||||||
|
dnssec: [
|
||||||
|
{
|
||||||
|
dnskey: {
|
||||||
|
flags: { value: '257' },
|
||||||
|
protocol: { value: '3' },
|
||||||
|
alg: { value: '3' },
|
||||||
|
pubKey: { value: '700b97b591ed27ec2590d19f06f88bba700b97b591ed27ec2590d19f' }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
dnskey: {
|
||||||
|
flags: { value: '0' },
|
||||||
|
protocol: { value: '3' },
|
||||||
|
alg: { value: '5' },
|
||||||
|
pubKey: { value: '700b97b591ed27ec2590d19f06f88bba700b97b591ed27ec2590d19f' }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
|
||||||
|
response = epp_request(xml, :xml)
|
||||||
|
|
||||||
|
expect(response[:result_code]).to eq('2302')
|
||||||
|
expect(response[:msg]).to eq('Public key already exists')
|
||||||
|
expect(response[:results][0][:value]).to eq('700b97b591ed27ec2590d19f06f88bba700b97b591ed27ec2590d19f')
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'with juridical persion as an owner' do
|
context 'with juridical persion as an owner' do
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue