Fail earlier if domain is non-transferable

Regardless of EPP transfer operation

#694
This commit is contained in:
Artur Beljajev 2018-02-19 02:04:39 +02:00
parent 126428f38f
commit 4ada9d1bd0
5 changed files with 44 additions and 8 deletions

View file

@ -142,6 +142,13 @@ class Epp::DomainsController < EppController
authorize! :transfer, @domain, @password
action = params[:parsed_frame].css('transfer').first[:op]
if @domain.non_transferable?
throw :epp_error, {
code: '2304',
msg: I18n.t(:object_status_prohibits_operation)
}
end
@domain_transfer = @domain.transfer(params[:parsed_frame], action, current_user)
if @domain_transfer

View file

@ -5,6 +5,10 @@ module Concerns::Domain::Transferable
after_initialize :generate_transfer_code, if: :generate_transfer_code?
end
def non_transferable?
!transferrable?
end
def transfer(new_registrar)
old_registrar = registrar

View file

@ -644,13 +644,6 @@ class Epp::Domain < Domain
# rubocop: disable Metrics/MethodLength
# rubocop: disable Metrics/AbcSize
def query_transfer(frame, current_user)
unless transferrable?
throw :epp_error, {
code: '2304',
msg: I18n.t(:object_status_prohibits_operation)
}
end
if current_user.registrar == registrar
throw :epp_error, {
code: '2002',

View file

@ -28,6 +28,15 @@ library:
period: 1
period_unit: m
non_transferable:
name: non-transferable.test
transfer_code: d382682
valid_to: 2010-07-05
registrar: bestnames
registrant: john
statuses:
- serverTransferProhibited
invalid:
name: invalid.test
transfer_code: any

View file

@ -1,7 +1,30 @@
require 'test_helper'
class EppDomainTransferBaseTest < ActionDispatch::IntegrationTest
def test_does_not_transfer_if_transfer_code_is_wrong
def test_non_transferable_domain
request_xml = <<-XML
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="https://epp.tld.ee/schema/epp-ee-1.0.xsd">
<command>
<transfer op="query">
<domain:transfer xmlns:domain="https://epp.tld.ee/schema/domain-eis-1.0.xsd">
<domain:name>non-transferable.test</domain:name>
<domain:authInfo>
<domain:pw>d382682</domain:pw>
</domain:authInfo>
</domain:transfer>
</transfer>
</command>
</epp>
XML
post '/epp/command/transfer', { frame: request_xml }, { 'HTTP_COOKIE' => 'session=api_bestnames' }
domains(:shop).reload
assert_equal registrars(:bestnames), domains(:shop).registrar
assert_equal '2304', Nokogiri::XML(response.body).at_css('result')[:code]
end
def test_wrong_transfer_code
request_xml = <<-XML
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<epp xmlns="https://epp.tld.ee/schema/epp-ee-1.0.xsd">