Refactor domain transfer

This commit is contained in:
Martin Lensment 2015-03-10 15:53:51 +02:00
parent d88364a926
commit 4c4488c303
2 changed files with 19 additions and 44 deletions

View file

@ -56,25 +56,26 @@ class Epp::DomainsController < EppController
def transfer def transfer
authorize! :transfer, @domain, @password authorize! :transfer, @domain, @password
action = params[:parsed_frame].css('transfer').first[:op]
if domain_transfer_params[:action] == 'query' if action == 'query'
if @domain.pending_transfer if @domain.pending_transfer
@domain_transfer = @domain.pending_transfer @domain_transfer = @domain.pending_transfer
else else
@domain_transfer = @domain.query_transfer(domain_transfer_params, params[:parsed_frame]) @domain_transfer = @domain.query_transfer(params[:parsed_frame], current_user)
handle_errors(@domain) and return unless @domain_transfer handle_errors(@domain) and return unless @domain_transfer
end end
elsif domain_transfer_params[:action] == 'approve' elsif action == 'approve'
if @domain.pending_transfer if @domain.pending_transfer
@domain_transfer = @domain.approve_transfer(domain_transfer_params, params[:parsed_frame]) @domain_transfer = @domain.approve_transfer(params[:parsed_frame], current_user)
handle_errors(@domain) and return unless @domain_transfer handle_errors(@domain) and return unless @domain_transfer
else else
epp_errors << { code: '2303', msg: I18n.t('pending_transfer_was_not_found') } epp_errors << { code: '2303', msg: I18n.t('pending_transfer_was_not_found') }
handle_errors(@domain) and return handle_errors(@domain) and return
end end
elsif domain_transfer_params[:action] == 'reject' elsif action == 'reject'
if @domain.pending_transfer if @domain.pending_transfer
@domain_transfer = @domain.reject_transfer(domain_transfer_params, params[:parsed_frame]) @domain_transfer = @domain.reject_transfer(params[:parsed_frame], current_user)
handle_errors(@domain) and return unless @domain_transfer handle_errors(@domain) and return unless @domain_transfer
else else
epp_errors << { code: '2303', msg: I18n.t('pending_transfer_was_not_found') } epp_errors << { code: '2303', msg: I18n.t('pending_transfer_was_not_found') }
@ -159,14 +160,6 @@ class Epp::DomainsController < EppController
requires 'name' requires 'name'
end end
def domain_transfer_params
res = {}
res[:pw] = params[:parsed_frame].css('pw').first.try(:text)
res[:action] = params[:parsed_frame].css('transfer').first[:op]
res[:current_user] = current_user
res
end
def find_domain def find_domain
domain_name = params[:parsed_frame].css('name').text.strip.downcase domain_name = params[:parsed_frame].css('name').text.strip.downcase
@domain = Epp::Domain.find_by(name: domain_name) @domain = Epp::Domain.find_by(name: domain_name)

View file

@ -386,8 +386,8 @@ class Epp::Domain < Domain
### TRANSFER ### ### TRANSFER ###
# rubocop: disable Metrics/MethodLength # rubocop: disable Metrics/MethodLength
def query_transfer(params, parsed_frame) def query_transfer(frame, current_user)
return false unless can_be_transferred_to?(params[:current_user].registrar) return false unless can_be_transferred_to?(current_user.registrar)
transaction do transaction do
begin begin
@ -395,7 +395,7 @@ class Epp::Domain < Domain
dt = domain_transfers.create!( dt = domain_transfers.create!(
status: DomainTransfer::PENDING, status: DomainTransfer::PENDING,
transfer_requested_at: Time.zone.now, transfer_requested_at: Time.zone.now,
transfer_to: params[:current_user].registrar, transfer_to: current_user.registrar,
transfer_from: registrar transfer_from: registrar
) )
@ -410,16 +410,16 @@ class Epp::Domain < Domain
status: DomainTransfer::SERVER_APPROVED, status: DomainTransfer::SERVER_APPROVED,
transfer_requested_at: Time.zone.now, transfer_requested_at: Time.zone.now,
transferred_at: Time.zone.now, transferred_at: Time.zone.now,
transfer_to: params[:current_user].registrar, transfer_to: current_user.registrar,
transfer_from: registrar transfer_from: registrar
) )
generate_auth_info generate_auth_info
self.registrar = params[:current_user].registrar self.registrar = current_user.registrar
end end
attach_legal_document(self.class.parse_legal_document_from_frame(parsed_frame)) attach_legal_document(self.class.parse_legal_document_from_frame(frame))
save!(validate: false) save!(validate: false)
return dt return dt
@ -431,9 +431,9 @@ class Epp::Domain < Domain
end end
# rubocop: enable Metrics/MethodLength # rubocop: enable Metrics/MethodLength
def approve_transfer(params, parsed_frame) def approve_transfer(frame, current_user)
pt = pending_transfer pt = pending_transfer
if params[:current_user].registrar != pt.transfer_from if current_user.registrar != pt.transfer_from
add_epp_error('2304', nil, nil, I18n.t('transfer_can_be_approved_only_by_current_registrar')) add_epp_error('2304', nil, nil, I18n.t('transfer_can_be_approved_only_by_current_registrar'))
return false return false
end end
@ -449,7 +449,7 @@ class Epp::Domain < Domain
self.registrar = pt.transfer_to self.registrar = pt.transfer_to
attach_legal_document(self.class.parse_legal_document_from_frame(parsed_frame)) attach_legal_document(self.class.parse_legal_document_from_frame(frame))
save!(validate: false) save!(validate: false)
rescue => _e rescue => _e
add_epp_error('2306', nil, nil, I18n.t('action_failed_due_to_server_error')) add_epp_error('2306', nil, nil, I18n.t('action_failed_due_to_server_error'))
@ -460,9 +460,9 @@ class Epp::Domain < Domain
pt pt
end end
def reject_transfer(params, parsed_frame) def reject_transfer(frame, current_user)
pt = pending_transfer pt = pending_transfer
if params[:current_user].registrar != pt.transfer_from if current_user.registrar != pt.transfer_from
add_epp_error('2304', nil, nil, I18n.t('transfer_can_be_rejected_only_by_current_registrar')) add_epp_error('2304', nil, nil, I18n.t('transfer_can_be_rejected_only_by_current_registrar'))
return false return false
end end
@ -473,7 +473,7 @@ class Epp::Domain < Domain
status: DomainTransfer::CLIENT_REJECTED status: DomainTransfer::CLIENT_REJECTED
) )
attach_legal_document(self.class.parse_legal_document_from_frame(parsed_frame)) attach_legal_document(self.class.parse_legal_document_from_frame(frame))
save!(validate: false) save!(validate: false)
rescue => _e rescue => _e
add_epp_error('2306', nil, nil, I18n.t('action_failed_due_to_server_error')) add_epp_error('2306', nil, nil, I18n.t('action_failed_due_to_server_error'))
@ -484,24 +484,6 @@ class Epp::Domain < Domain
pt pt
end end
def approve_pending_transfer(current_user)
pt = pending_transfer
if current_user.registrar != pt.transfer_from
add_epp_error('2304', nil, nil, I18n.t('transfer_can_be_approved_only_by_current_registrar'))
return false
end
pt.update(
status: DomainTransfer::CLIENT_APPROVED,
transferred_at: Time.zone.now
)
generate_auth_info
self.registrar = pt.transfer_to
save(validate: false)
end
# rubocop:disable Metrics/MethodLength # rubocop:disable Metrics/MethodLength
def keyrelay(parsed_frame, requester) def keyrelay(parsed_frame, requester)
if registrar == requester if registrar == requester