diff --git a/app/controllers/epp/domains_controller.rb b/app/controllers/epp/domains_controller.rb index 33a602aed..f8cb2b752 100644 --- a/app/controllers/epp/domains_controller.rb +++ b/app/controllers/epp/domains_controller.rb @@ -229,7 +229,7 @@ class Epp::DomainsController < EppController def find_domain domain_name = params[:parsed_frame].css('name').text.strip.downcase - @domain = Epp::Domain.where(name: domain_name).includes(registrant: :registrar).first + @domain = Epp::Domain.find_by_idn domain_name unless @domain epp_errors << { diff --git a/app/models/domain.rb b/app/models/domain.rb index 7d2aa89ec..4608b83c0 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -334,6 +334,17 @@ class Domain < ActiveRecord::Base self[:name_dirty] = value end + # find by internationalized domain name + # internet domain name => ascii or puny, but db::domains.name is unicode + def self.find_by_idn(name) + domain = self.find_by_name name + if domain.blank? && name.include?('-') + unicode = SimpleIDN.to_unicode name # we have no index on domains.name_puny + domain = self.find_by_name unicode + end + domain + end + def roid "EIS-#{id}" end diff --git a/app/models/epp/domain.rb b/app/models/epp/domain.rb index a84f2ddba..876918407 100644 --- a/app/models/epp/domain.rb +++ b/app/models/epp/domain.rb @@ -838,7 +838,7 @@ class Epp::Domain < Domain next end - if Domain.find_by(name: x) + if Domain.find_by_idn x res << { name: x, avail: 0, reason: 'in use' } else res << { name: x, avail: 1 }