diff --git a/app/controllers/epp/domains_controller.rb b/app/controllers/epp/domains_controller.rb index d9504a71d..acbe4082a 100644 --- a/app/controllers/epp/domains_controller.rb +++ b/app/controllers/epp/domains_controller.rb @@ -1,56 +1,22 @@ class Epp::DomainsController < EppController - before_action :find_domain, only: %i[renew update transfer delete] - before_action :find_password, only: %i[update transfer delete] - skip_authorization_check only: :info + before_action :find_domain, only: %i[info renew update transfer delete] + before_action :find_password, only: %i[info update transfer delete] def info - domain_name = DNS::DomainName.new(params[:parsed_frame].at_css('name').text.strip.downcase) + authorize! :info, @domain, @password - if Domain.release_to_auction - if domain_name.at_auction? - @name = domain_name - @status = 'At auction' - render_epp_response '/epp/domains/info/unregistered_domain' - return - elsif domain_name.awaiting_payment? - @name = domain_name - @status = 'Awaiting payment' - render_epp_response '/epp/domains/info/unregistered_domain' - return - elsif domain_name.pending_registration? - @name = domain_name - @status = 'Reserved' - render_epp_response '/epp/domains/info/unregistered_domain' - return - end + @hosts = params[:parsed_frame].css('name').first['hosts'] || 'all' + + case @hosts + when 'del' + @nameservers = @domain.delegated_nameservers.sort + when 'sub' + @nameservers = @domain.subordinate_nameservers.sort + when 'all' + @nameservers = @domain.nameservers.sort end - if domain_name.registered? - find_domain - find_password - authorize! :info, @domain, @password - - @hosts = params[:parsed_frame].css('name').first['hosts'] || 'all' - - case @hosts - when 'del' - @nameservers = @domain.delegated_nameservers.sort - when 'sub' - @nameservers = @domain.subordinate_nameservers.sort - when 'all' - @nameservers = @domain.nameservers.sort - end - - render_epp_response '/epp/domains/info/registered_domain' - elsif domain_name.blocked? - @name = domain_name - @status = 'Blocked' - render_epp_response '/epp/domains/info/unregistered_domain' - elsif domain_name.reserved? - @name = domain_name - @status = 'Reserved' - render_epp_response '/epp/domains/info/unregistered_domain' - end + render_epp_response '/epp/domains/info' end def create diff --git a/app/models/dns/domain_name.rb b/app/models/dns/domain_name.rb index 05eea2086..3a45ddc74 100644 --- a/app/models/dns/domain_name.rb +++ b/app/models/dns/domain_name.rb @@ -57,6 +57,10 @@ module DNS Domain.find_by_idn(name) end + def not_registered? + !registered? + end + def blocked? BlockedDomain.where(name: name).any? end diff --git a/app/views/epp/domains/info/registered_domain.xml.builder b/app/views/epp/domains/info.xml.builder similarity index 100% rename from app/views/epp/domains/info/registered_domain.xml.builder rename to app/views/epp/domains/info.xml.builder diff --git a/app/views/epp/domains/info/unregistered_domain.xml.builder b/app/views/epp/domains/info/unregistered_domain.xml.builder deleted file mode 100644 index a34dfa51a..000000000 --- a/app/views/epp/domains/info/unregistered_domain.xml.builder +++ /dev/null @@ -1,16 +0,0 @@ -xml.epp_head do - xml.response do - xml.result code: '1000' do - xml.msg 'Command completed successfully' - end - - xml.resData do - xml.tag! 'domain:infData', 'xmlns:domain' => 'https://epp.tld.ee/schema/domain-eis-1.0.xsd' do - xml.tag! 'domain:name', @name - xml.tag! 'domain:status', 's' => @status - end - end - - render 'epp/shared/trID', builder: xml - end -end \ No newline at end of file diff --git a/test/integration/epp/domain/info/auction_test.rb b/test/integration/epp/domain/info/auction_test.rb deleted file mode 100644 index 3b67ab7fd..000000000 --- a/test/integration/epp/domain/info/auction_test.rb +++ /dev/null @@ -1,87 +0,0 @@ -require 'test_helper' - -class EppDomainInfoAuctionTest < ApplicationIntegrationTest - setup do - @auction = auctions(:one) - Domain.release_to_auction = true - end - - teardown do - Domain.release_to_auction = false - end - - def test_domain_is_unavailable_when_at_auction - @auction.update!(status: Auction.statuses[:started]) - - request_xml = <<-XML - - - - - - auction.test - - - - - XML - - post '/epp/command/info', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames' - - response_xml = Nokogiri::XML(response.body) - assert_equal '1000', response_xml.at_css('result')[:code] - assert_equal 1, response_xml.css('result').size - assert_equal 'auction.test', response_xml.at_xpath('//domain:name', 'domain' => 'https://epp.tld.ee/schema/domain-eis-1.0.xsd').text - assert_equal 'At auction', response_xml.at_xpath('//domain:status', 'domain' => 'https://epp.tld.ee/schema/domain-eis-1.0.xsd')['s'] - end - - def test_domain_is_reserved_when_awaiting_payment - @auction.update!(status: Auction.statuses[:awaiting_payment]) - - request_xml = <<-XML - - - - - - auction.test - - - - - XML - - post '/epp/command/info', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames' - - response_xml = Nokogiri::XML(response.body) - assert_equal '1000', response_xml.at_css('result')[:code] - assert_equal 1, response_xml.css('result').size - assert_equal 'auction.test', response_xml.at_xpath('//domain:name', 'domain' => 'https://epp.tld.ee/schema/domain-eis-1.0.xsd').text - assert_equal 'Awaiting payment', response_xml.at_xpath('//domain:status', 'domain' => 'https://epp.tld.ee/schema/domain-eis-1.0.xsd')['s'] - end - - def test_domain_is_reserved_when_payment_received - @auction.update!(status: Auction.statuses[:payment_received]) - - request_xml = <<-XML - - - - - - auction.test - - - - - XML - - post '/epp/command/info', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames' - - response_xml = Nokogiri::XML(response.body) - assert_equal '1000', response_xml.at_css('result')[:code] - assert_equal 1, response_xml.css('result').size - assert_equal 'auction.test', response_xml.at_xpath('//domain:name', 'domain' => 'https://epp.tld.ee/schema/domain-eis-1.0.xsd').text - assert_equal 'Reserved', response_xml.at_xpath('//domain:status', 'domain' => 'https://epp.tld.ee/schema/domain-eis-1.0.xsd')['s'] - end -end diff --git a/test/integration/epp/domain/info/base_test.rb b/test/integration/epp/domain/info/base_test.rb index 93f04a476..2ba273951 100644 --- a/test/integration/epp/domain/info/base_test.rb +++ b/test/integration/epp/domain/info/base_test.rb @@ -107,8 +107,8 @@ class EppDomainInfoBaseTest < ApplicationIntegrationTest 'domain' => 'https://epp.tld.ee/schema/domain-eis-1.0.xsd') end - def test_blocked_domain - assert_equal 'blocked.test', blocked_domains(:one).name + def test_returns_not_found_error_when_domain_is_not_registered + assert DNS::DomainName.new('not-registered.test').not_registered? request_xml = <<-XML @@ -116,7 +116,7 @@ class EppDomainInfoBaseTest < ApplicationIntegrationTest - blocked.test + not-registered.test @@ -126,34 +126,7 @@ class EppDomainInfoBaseTest < ApplicationIntegrationTest post '/epp/command/info', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames' response_xml = Nokogiri::XML(response.body) - assert_equal '1000', response_xml.at_css('result')[:code] - assert_equal 1, response_xml.css('result').size - assert_equal 'blocked.test', response_xml.at_xpath('//domain:name', 'domain' => 'https://epp.tld.ee/schema/domain-eis-1.0.xsd').text - assert_equal 'Blocked', response_xml.at_xpath('//domain:status', 'domain' => 'https://epp.tld.ee/schema/domain-eis-1.0.xsd')['s'] + assert_equal '2303', response_xml.at_css('result')[:code] + assert_equal 'Domain not found', response_xml.at_css('result msg').text end - - def test_reserved_domain - assert_equal 'reserved.test', reserved_domains(:one).name - - request_xml = <<-XML - - - - - - reserved.test - - - - - XML - - post '/epp/command/info', { frame: request_xml }, 'HTTP_COOKIE' => 'session=api_bestnames' - - response_xml = Nokogiri::XML(response.body) - assert_equal '1000', response_xml.at_css('result')[:code] - assert_equal 1, response_xml.css('result').size - assert_equal 'reserved.test', response_xml.at_xpath('//domain:name', 'domain' => 'https://epp.tld.ee/schema/domain-eis-1.0.xsd').text - assert_equal 'Reserved', response_xml.at_xpath('//domain:status', 'domain' => 'https://epp.tld.ee/schema/domain-eis-1.0.xsd')['s'] - end -end +end \ No newline at end of file diff --git a/test/models/dns/domain_name_test.rb b/test/models/dns/domain_name_test.rb index e1e9df79e..4d66227d5 100644 --- a/test/models/dns/domain_name_test.rb +++ b/test/models/dns/domain_name_test.rb @@ -123,4 +123,22 @@ class DNS::DomainNameTest < ActiveSupport::TestCase assert DNS::DomainName.new('reserved.test').reserved? assert_not DNS::DomainName.new('unreserved.test').reserved? end + + def test_registered_when_domain_exists + assert Domain.exists?(name: 'shop.test') + + domain_name = DNS::DomainName.new('shop.test') + + assert domain_name.registered? + refute domain_name.not_registered? + end + + def test_not_registered_when_domain_does_not_exist + assert_not Domain.exists?(name: 'not-registered.test') + + domain_name = DNS::DomainName.new('not-registered.test') + + assert domain_name.not_registered? + assert_not domain_name.registered? + end end