Transfer refactor

This commit is contained in:
Martin Lensment 2014-08-28 12:39:23 +03:00
parent 611130addc
commit ad03165546
13 changed files with 172 additions and 18 deletions

View file

@ -63,10 +63,7 @@ module Epp::DomainsHelper
@domain = find_domain
handle_errors(@domain) and return unless @domain
@domain.transfer_requested_at = Time.now
@domain.transferred_at = Time.now
@domain.save
handle_errors(@domain) and return unless @domain.transfer(@ph[:authInfo][:pw], current_epp_user)
render '/epp/domains/transfer'
end

View file

@ -30,6 +30,8 @@ class Domain < ActiveRecord::Base
joins(:setting).where(settings: { setting_group_id: SettingGroup.domain_statuses.id })
}
has_many :domain_transfers
delegate :code, to: :owner_contact, prefix: true
delegate :name, to: :registrar, prefix: true
@ -202,6 +204,38 @@ class Domain < ActiveRecord::Base
save
end
### TRANSFER ###
def transfer(pw, current_user)
return false unless authenticate(pw)
return true if pending_transfer
wait_time = SettingGroup.domain_general.setting(:transfer_wait_time).value.to_i
if wait_time > 0
domain_transfers.create(
status: DomainTransfer::PENDING,
transfer_requested_at: Time.zone.now,
transfer_to: current_user.registrar,
transfer_from: registrar
)
else
domain_transfers.create(
status: DomainTransfer::SERVER_APPROVED,
transfer_requested_at: Time.zone.now,
transferred_at: Time.zone.now,
transfer_to: current_user.registrar,
transfer_from: registrar
)
self.registrar = current_user.registrar
save
end
end
def pending_transfer
domain_transfers.find_by(status: DomainTransfer::PENDING)
end
### VALIDATIONS ###
def validate_nameservers_count

View file

@ -0,0 +1,13 @@
class DomainTransfer < ActiveRecord::Base
belongs_to :domain
belongs_to :transfer_from, class_name: 'Registrar'
belongs_to :transfer_to, class_name: 'Registrar'
PENDING = 'pending'
CLIENT_APPROVED = 'clientApproved'
CLIENT_CANCELLED = 'clientCancelled'
CLIENT_REJECTED = 'clientRejected'
SERVER_APPROVED = 'serverApproved'
SERVER_CANCELLED = 'serverCancelled'
end

View file

@ -17,5 +17,9 @@ class SettingGroup < ActiveRecord::Base
def domain_statuses
find_by(code: 'domain_statuses')
end
def domain_general
find_by(code: 'domain_general')
end
end
end

View file

@ -7,11 +7,12 @@ xml.epp_head do
xml.resData do
xml.tag!('domain:trnData', 'xmlns:domain' => 'urn:ietf:params:xml:ns:domain-1.0') do
xml.tag!('domain:name', @domain.name)
xml.tag!('domain:trStatus', 'serverApproved')
xml.tag!('domain:reID', current_epp_user.username)
xml.tag!('domain:reDate', @domain.transfer_requested_at)
xml.tag!('domain:acID', current_epp_user.username)
xml.tag!('domain:acDate', @domain.transferred_at)
ldt = @domain.domain_transfers.last
xml.tag!('domain:trStatus', ldt.status)
xml.tag!('domain:reID', ldt.transfer_to.reg_no)
xml.tag!('domain:reDate', ldt.transfer_requested_at)
xml.tag!('domain:acID', ldt.transfer_from.reg_no)
xml.tag!('domain:acDate', ldt.transferred_at) if ldt.transferred_at
xml.tag!('domain:exDate', @domain.valid_to)
end
end