mirror of
https://github.com/internetee/registry.git
synced 2025-08-06 01:35:10 +02:00
Transfer refactor
This commit is contained in:
parent
611130addc
commit
ad03165546
13 changed files with 172 additions and 18 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
13
app/models/domain_transfer.rb
Normal file
13
app/models/domain_transfer.rb
Normal 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
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue