diff --git a/app/controllers/client/domain_transfers_controller.rb b/app/controllers/client/domain_transfers_controller.rb index 8bf62d840..3beb7ab78 100644 --- a/app/controllers/client/domain_transfers_controller.rb +++ b/app/controllers/client/domain_transfers_controller.rb @@ -1,5 +1,5 @@ class Client::DomainTransfersController < ClientController - before_action :set_domain_transfer, only: :show + before_action :set_domain_transfer, only: [:show, :approve] before_action :set_domain, only: [:create] def new @@ -12,11 +12,22 @@ class Client::DomainTransfersController < ClientController flash[:notice] = I18n.t('shared.domain_transfer_requested') redirect_to [:client, @domain_transfer] else - flash[:alert] = I18n.t('shared.other_registrar_has_already_requested_to_transfer_this_domain') + flash.now[:alert] = I18n.t('shared.other_registrar_has_already_requested_to_transfer_this_domain') render 'new' end end + def approve + if can? :approve_as_client, @domain_transfer + @domain_transfer.approve_as_client + flash[:notice] = I18n.t('shared.domain_transfer_approved') + else + flash[:alert] = I18n.t('shared.failed_to_approve_domain_transfer') + end + + redirect_to [:client, @domain_transfer] + end + private def set_domain_transfer @@ -45,11 +56,17 @@ class Client::DomainTransfersController < ClientController @domain_transfer = DomainTransfer.new @domain = Domain.find_by(name: params[:domain_name]) if @domain - return if @domain.auth_info == params[:domain_pw] - flash[:alert] = I18n.t('shared.password_invalid') - render 'new' + if @domain.auth_info != params[:domain_pw] + flash.now[:alert] = I18n.t('shared.password_invalid') + render 'new' and return + end + + if @domain.registrar == current_user.registrar + flash.now[:alert] = I18n.t('shared.domain_already_belongs_to_the_querying_registrar') + render 'new' and return + end else - flash[:alert] = I18n.t('shared.domain_was_not_found') + flash.now[:alert] = I18n.t('shared.domain_was_not_found') render 'new' end end diff --git a/app/controllers/client_controller.rb b/app/controllers/client_controller.rb index d45b8f5ad..2d79137c6 100644 --- a/app/controllers/client_controller.rb +++ b/app/controllers/client_controller.rb @@ -1,5 +1,5 @@ class ClientController < ApplicationController def current_user - EppUser.last + EppUser.first end end diff --git a/app/models/ability.rb b/app/models/ability.rb index ab5c6eec5..7f52f9220 100644 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -6,6 +6,7 @@ class Ability # user ||= EppUser.last can :read, DomainTransfer, transfer_to_id: user.registrar.id + can :approve_as_client, DomainTransfer, transfer_from_id: user.registrar.id, status: DomainTransfer::PENDING # Define abilities for the passed in user here. For example: # # user ||= User.new # guest user (not logged in) diff --git a/app/models/domain_transfer.rb b/app/models/domain_transfer.rb index 294262b11..7f7d203de 100644 --- a/app/models/domain_transfer.rb +++ b/app/models/domain_transfer.rb @@ -15,4 +15,16 @@ class DomainTransfer < ActiveRecord::Base wait_time = SettingGroup.domain_general.setting(:transfer_wait_time).value.to_i transfer_requested_at + wait_time.hours end + + def approve_as_client + transaction do + self.status = DomainTransfer::CLIENT_APPROVED + self.transferred_at = Time.zone.now + save! + + domain.generate_auth_info + domain.registrar = transfer_to + domain.save! + end + end end diff --git a/app/views/client/domain_transfers/show.haml b/app/views/client/domain_transfers/show.haml index 87141feab..5bfac848f 100644 --- a/app/views/client/domain_transfers/show.haml +++ b/app/views/client/domain_transfers/show.haml @@ -4,6 +4,8 @@ = "#{t('shared.domain_transfer')}" .col-sm-6 %h2.text-right.text-center-xs + - if can? :approve_as_client, @domain_transfer + = button_to(t('shared.approve'), approve_client_domain_transfer_path, class: 'btn btn-primary') %hr .row diff --git a/config/locales/en.yml b/config/locales/en.yml index 46fbb224c..15342263f 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -280,6 +280,10 @@ en: status: 'Status' eedirekt: 'EEDirekt' domain_transfer_requested: 'Domain transfer requested!' + domain_transfer_approved: 'Domain transfer approved!' + failed_to_approve_domain_transfer: 'Failed to approve domain transfer' + approve: 'Approve' + domain_already_belongs_to_the_querying_registrar: 'Domain already belongs to the querying registrar' other_registrar_has_already_requested_to_transfer_this_domain: 'Other registrar has already requested to transfer this domain.' transfer: 'Transfer' transfer_domain: 'Transfer domain' diff --git a/config/routes.rb b/config/routes.rb index 8943466f5..7af6bd80f 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -23,7 +23,11 @@ Rails.application.routes.draw do namespace(:client) do resources :domains - resources :domain_transfers + resources :domain_transfers do + member do + post 'approve' + end + end resources :contacts do collection do