diff --git a/app/models/domain.rb b/app/models/domain.rb index 2d43881d5..901249cd1 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -11,6 +11,11 @@ class Domain < ActiveRecord::Base def check_availability(domains) res = [] domains.each do |x| + if !DomainNameValidator.validate(x) + res << {name: x, avail: 0, reason: 'invalid format'} + next + end + res << {name: x, avail: Domain.find_by(name: x) ? 0 : 1} end diff --git a/app/validators/domain_name_validator.rb b/app/validators/domain_name_validator.rb index 95ebe56c1..3101a35a3 100644 --- a/app/validators/domain_name_validator.rb +++ b/app/validators/domain_name_validator.rb @@ -1,10 +1,14 @@ class DomainNameValidator < ActiveModel::EachValidator def validate_each(record, attribute, value) - ok = value =~ /\A[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9]\.ee\z/ - ok &&= !(value[2] == '-' && value[3] == '-') - - unless ok + unless self.class.validate(value) record.errors[attribute] << (options[:message] || 'invalid format') end end + + class << self + def validate(value) + ok = value =~ /\A[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9]\.ee\z/ + ok &&= !(value[2] == '-' && value[3] == '-') + end + end end diff --git a/app/views/epp/domains/check.xml.builder b/app/views/epp/domains/check.xml.builder index 5b1b8b31b..81035c639 100644 --- a/app/views/epp/domains/check.xml.builder +++ b/app/views/epp/domains/check.xml.builder @@ -9,6 +9,7 @@ xml.epp_head do @domains.each do |x| xml.tag!('domain:cd') do xml.tag!('domain:name', x[:name], 'avail' => x[:avail]) + xml.tag!('domain:reason', x[:reason]) if x[:reason].present? end end end