mirror of
https://github.com/internetee/registry.git
synced 2025-07-01 08:43:37 +02:00
Contacts validation improvement
This commit is contained in:
parent
7b750b7d9b
commit
8697f8eabb
5 changed files with 29 additions and 18 deletions
|
@ -45,6 +45,7 @@ module Epp::Common
|
||||||
|
|
||||||
# for debugging
|
# for debugging
|
||||||
@errors << { code: '1', msg: 'handle_errors was executed when there were actually no errors' } if @errors.blank?
|
@errors << { code: '1', msg: 'handle_errors was executed when there were actually no errors' } if @errors.blank?
|
||||||
|
|
||||||
render '/epp/error'
|
render '/epp/error'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -35,16 +35,18 @@ module Epp::DomainsHelper
|
||||||
end
|
end
|
||||||
|
|
||||||
def update_domain
|
def update_domain
|
||||||
@domain = find_domain
|
Domain.transaction do
|
||||||
|
@domain = find_domain
|
||||||
|
|
||||||
handle_errors(@domain) and return unless @domain
|
handle_errors(@domain) and return unless @domain
|
||||||
handle_errors(@domain) and return unless @domain.parse_and_attach_domain_dependencies(@ph, parsed_frame.css('add'))
|
handle_errors(@domain) and return unless @domain.parse_and_attach_domain_dependencies(@ph, parsed_frame.css('add'))
|
||||||
handle_errors(@domain) and return unless @domain.parse_and_detach_domain_dependencies(parsed_frame.css('rem'))
|
handle_errors(@domain) and return unless @domain.parse_and_detach_domain_dependencies(parsed_frame.css('rem'))
|
||||||
handle_errors(@domain) and return unless @domain.parse_and_update_domain_dependencies(parsed_frame.css('chg'))
|
handle_errors(@domain) and return unless @domain.parse_and_update_domain_dependencies(parsed_frame.css('chg'))
|
||||||
handle_errors(@domain) and return unless @domain.parse_and_update_domain_attributes(parsed_frame.css('chg'))
|
handle_errors(@domain) and return unless @domain.parse_and_update_domain_attributes(parsed_frame.css('chg'))
|
||||||
handle_errors(@domain) and return unless @domain.save
|
handle_errors(@domain) and return unless @domain.save
|
||||||
|
|
||||||
render '/epp/domains/success'
|
render '/epp/domains/success'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
### HELPER METHODS ###
|
### HELPER METHODS ###
|
||||||
|
|
|
@ -105,13 +105,13 @@ class Domain < ActiveRecord::Base
|
||||||
|
|
||||||
return unless owner_contact
|
return unless owner_contact
|
||||||
|
|
||||||
attach_contact(DomainContact::TECH, owner_contact) if tech_contacts.empty?
|
attach_contact(DomainContact::TECH, owner_contact) if tech_contacts_count.zero?
|
||||||
attach_contact(DomainContact::ADMIN, owner_contact) if admin_contacts.empty? if owner_contact.citizen?
|
attach_contact(DomainContact::ADMIN, owner_contact) if admin_contacts_count.zero? && owner_contact.citizen?
|
||||||
end
|
end
|
||||||
|
|
||||||
def attach_contact(type, contact)
|
def attach_contact(type, contact)
|
||||||
tech_contacts << contact if type.to_sym == :tech
|
domain_contacts.build(contact: contact, contact_type: DomainContact::TECH) if type.to_sym == :tech
|
||||||
admin_contacts << contact if type.to_sym == :admin
|
domain_contacts.build(contact: contact, contact_type: DomainContact::ADMIN) if type.to_sym == :admin
|
||||||
end
|
end
|
||||||
|
|
||||||
def attach_nameservers(ns_list)
|
def attach_nameservers(ns_list)
|
||||||
|
@ -137,9 +137,9 @@ class Domain < ActiveRecord::Base
|
||||||
|
|
||||||
def detach_contacts(contact_list)
|
def detach_contacts(contact_list)
|
||||||
to_delete = []
|
to_delete = []
|
||||||
contact_list.each do |_k, v|
|
contact_list.each do |k, v|
|
||||||
v.each do |x|
|
v.each do |x|
|
||||||
contact = domain_contacts.joins(:contact).where(contacts: { code: x[:contact] })
|
contact = domain_contacts.joins(:contact).where(contacts: { code: x[:contact] }, contact_type: k.to_s)
|
||||||
if contact.blank?
|
if contact.blank?
|
||||||
add_epp_error('2303', 'contact', x[:contact], [:domain_contacts, :not_found])
|
add_epp_error('2303', 'contact', x[:contact], [:domain_contacts, :not_found])
|
||||||
else
|
else
|
||||||
|
@ -205,7 +205,7 @@ class Domain < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def validate_admin_contacts_count
|
def validate_admin_contacts_count
|
||||||
errors.add(:admin_contacts, :blank) if admin_contacts.empty?
|
errors.add(:admin_contacts, :out_of_range) if admin_contacts_count.zero?
|
||||||
end
|
end
|
||||||
|
|
||||||
def validate_period
|
def validate_period
|
||||||
|
@ -236,7 +236,7 @@ class Domain < ActiveRecord::Base
|
||||||
],
|
],
|
||||||
'2306' => [ # Parameter policy error
|
'2306' => [ # Parameter policy error
|
||||||
[:owner_contact, :blank],
|
[:owner_contact, :blank],
|
||||||
[:admin_contacts, :blank]
|
[:admin_contacts, :out_of_range]
|
||||||
],
|
],
|
||||||
'2004' => [ # Parameter value range error
|
'2004' => [ # Parameter value range error
|
||||||
[:nameservers, :out_of_range,
|
[:nameservers, :out_of_range,
|
||||||
|
@ -261,6 +261,14 @@ class Domain < ActiveRecord::Base
|
||||||
errors.empty?
|
errors.empty?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def tech_contacts_count
|
||||||
|
domain_contacts.select { |x| x.contact_type == DomainContact::TECH }.count
|
||||||
|
end
|
||||||
|
|
||||||
|
def admin_contacts_count
|
||||||
|
domain_contacts.select { |x| x.contact_type == DomainContact::ADMIN }.count
|
||||||
|
end
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
def convert_period_to_time(period, unit)
|
def convert_period_to_time(period, unit)
|
||||||
return period.to_i.days if unit == 'd'
|
return period.to_i.days if unit == 'd'
|
||||||
|
|
|
@ -50,7 +50,7 @@ en:
|
||||||
domain_contacts:
|
domain_contacts:
|
||||||
not_found: 'Contact was not found'
|
not_found: 'Contact was not found'
|
||||||
admin_contacts:
|
admin_contacts:
|
||||||
blank: 'Admin contact is missing'
|
out_of_range: 'Admin contacts count must be between 1 - infinity'
|
||||||
nameservers:
|
nameservers:
|
||||||
out_of_range: 'Nameservers count must be between %{min}-%{max}'
|
out_of_range: 'Nameservers count must be between %{min}-%{max}'
|
||||||
not_found: 'Nameserver was not found'
|
not_found: 'Nameserver was not found'
|
||||||
|
|
|
@ -170,7 +170,7 @@ describe 'EPP Domain', epp: true do
|
||||||
|
|
||||||
response = epp_request(xml, :xml)
|
response = epp_request(xml, :xml)
|
||||||
expect(response[:result_code]).to eq('2306')
|
expect(response[:result_code]).to eq('2306')
|
||||||
expect(response[:msg]).to eq('Admin contact is missing')
|
expect(response[:msg]).to eq('Admin contacts count must be between 1 - infinity')
|
||||||
expect(response[:clTRID]).to eq('ABC-12345')
|
expect(response[:clTRID]).to eq('ABC-12345')
|
||||||
|
|
||||||
expect(Domain.count).to eq 0
|
expect(Domain.count).to eq 0
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue