mirror of
https://github.com/internetee/registry.git
synced 2025-08-02 16:02:03 +02:00
Version refactored
This commit is contained in:
parent
c1949e7069
commit
3e2be53853
48 changed files with 379 additions and 147 deletions
12
app/models/concerns/version_session.rb
Normal file
12
app/models/concerns/version_session.rb
Normal file
|
@ -0,0 +1,12 @@
|
|||
module VersionSession
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
included do
|
||||
before_save :add_session
|
||||
|
||||
def add_session
|
||||
self.session = PaperSession.session
|
||||
true
|
||||
end
|
||||
end
|
||||
end
|
|
@ -5,6 +5,7 @@ module Versions
|
|||
included do
|
||||
has_paper_trail class_name: "#{model_name}Version"
|
||||
|
||||
# add creator and updator
|
||||
before_create :add_creator
|
||||
before_create :add_updator
|
||||
before_update :add_updator
|
||||
|
@ -18,5 +19,14 @@ module Versions
|
|||
self.updator_str = ::PaperTrail.whodunnit
|
||||
true
|
||||
end
|
||||
|
||||
# callbacks
|
||||
def touch_domain_version
|
||||
domain.try(:touch_with_version)
|
||||
end
|
||||
|
||||
def touch_domains_version
|
||||
domains.each(&:touch_with_version)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
class Domain < ActiveRecord::Base
|
||||
include Versions # version/domain_version.rb
|
||||
has_paper_trail class_name: "DomainVersion", meta: { children: :children_log }
|
||||
|
||||
# TODO: whois requests ip whitelist for full info for own domains and partial info for other domains
|
||||
# TODO: most inputs should be trimmed before validatation, probably some global logic?
|
||||
paginates_per 10 # just for showoff
|
||||
|
@ -50,6 +52,10 @@ class Domain < ActiveRecord::Base
|
|||
before_create :set_validity_dates
|
||||
before_create :attach_default_contacts
|
||||
after_save :manage_automatic_statuses
|
||||
before_save :touch_always_version
|
||||
def touch_always_version
|
||||
self.updated_at = Time.now
|
||||
end
|
||||
|
||||
validates :name_dirty, domain_name: true, uniqueness: true
|
||||
validates :period, numericality: { only_integer: true }
|
||||
|
@ -280,11 +286,20 @@ class Domain < ActiveRecord::Base
|
|||
end
|
||||
end
|
||||
|
||||
def children_log
|
||||
log = HashWithIndifferentAccess.new
|
||||
log[:admin_contacts] = admin_contacts.map {|ac| ac.attributes}
|
||||
log[:tech_contacts] = tech_contacts.map {|tc| tc.attributes}
|
||||
log[:nameservers] = nameservers.map {|ns| ns.attributes}
|
||||
log[:owner_contact] = [owner_contact.try(:attributes)]
|
||||
log
|
||||
end
|
||||
|
||||
class << self
|
||||
def convert_period_to_time(period, unit)
|
||||
return period.to_i.days if unit == 'd'
|
||||
return period.to_i.days if unit == 'd'
|
||||
return period.to_i.months if unit == 'm'
|
||||
return period.to_i.years if unit == 'y'
|
||||
return period.to_i.years if unit == 'y'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -162,36 +162,36 @@ class Epp::EppDomain < Domain
|
|||
end
|
||||
|
||||
def detach_contacts(contact_list)
|
||||
to_delete = []
|
||||
to_destroy = []
|
||||
contact_list.each do |k, v|
|
||||
v.each do |x|
|
||||
contact = domain_contacts.joins(:contact).where(contacts: { code: x[:contact] }, contact_type: k.to_s)
|
||||
if contact.blank?
|
||||
add_epp_error('2303', 'contact', x[:contact], [:domain_contacts, :not_found])
|
||||
else
|
||||
to_delete << contact
|
||||
to_destroy << contact
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
domain_contacts.delete(to_delete)
|
||||
domain_contacts.destroy(to_destroy)
|
||||
end
|
||||
|
||||
def detach_nameservers(ns_list)
|
||||
to_delete = []
|
||||
to_destroy = []
|
||||
ns_list.each do |ns_attrs|
|
||||
nameserver = nameservers.where(ns_attrs)
|
||||
if nameserver.blank?
|
||||
add_epp_error('2303', 'hostAttr', ns_attrs[:hostname], [:nameservers, :not_found])
|
||||
else
|
||||
to_delete << nameserver
|
||||
to_destroy << nameserver
|
||||
end
|
||||
end
|
||||
nameservers.delete(to_delete)
|
||||
nameservers.destroy(to_destroy)
|
||||
end
|
||||
|
||||
def detach_statuses(status_list)
|
||||
to_delete = []
|
||||
to_destroy = []
|
||||
status_list.each do |x|
|
||||
unless DomainStatus::CLIENT_STATUSES.include?(x[:value])
|
||||
add_epp_error('2303', 'status', x[:value], [:domain_statuses, :not_found])
|
||||
|
@ -202,11 +202,11 @@ class Epp::EppDomain < Domain
|
|||
if status.blank?
|
||||
add_epp_error('2303', 'status', x[:value], [:domain_statuses, :not_found])
|
||||
else
|
||||
to_delete << status
|
||||
to_destroy << status
|
||||
end
|
||||
end
|
||||
|
||||
domain_statuses.delete(to_delete)
|
||||
domain_statuses.destroy(to_destroy)
|
||||
end
|
||||
|
||||
def attach_dnskeys(dnssec_data)
|
||||
|
@ -258,13 +258,13 @@ class Epp::EppDomain < Domain
|
|||
|
||||
def detach_dnskeys(dnssec_data)
|
||||
return false unless validate_dnssec_data(dnssec_data)
|
||||
to_delete = []
|
||||
to_destroy = []
|
||||
dnssec_data[:ds_data].each do |x|
|
||||
ds = dnskeys.where(ds_key_tag: x[:ds_key_tag])
|
||||
if ds.blank?
|
||||
add_epp_error('2303', 'keyTag', x[:key_tag], [:dnskeys, :not_found])
|
||||
else
|
||||
to_delete << ds
|
||||
to_destroy << ds
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -273,11 +273,11 @@ class Epp::EppDomain < Domain
|
|||
if ds.blank?
|
||||
add_epp_error('2303', 'publicKey', x[:public_key], [:dnskeys, :not_found])
|
||||
else
|
||||
to_delete << ds
|
||||
to_destroy << ds
|
||||
end
|
||||
end
|
||||
|
||||
dnskeys.delete(to_delete)
|
||||
dnskeys.destroy(to_destroy)
|
||||
end
|
||||
|
||||
### RENEW ###
|
||||
|
|
|
@ -16,6 +16,8 @@ class Keyrelay < ActiveRecord::Base
|
|||
|
||||
validate :validate_expiry_relative_xor_expiry_absolute
|
||||
|
||||
after_save :touch_domain_version
|
||||
|
||||
def epp_code_map
|
||||
{
|
||||
'2005' => [
|
||||
|
|
|
@ -8,6 +8,7 @@ class Registrar < ActiveRecord::Base
|
|||
|
||||
validates :name, :reg_no, :address, :country, :email, presence: true
|
||||
validates :name, :reg_no, uniqueness: true
|
||||
after_save :touch_domains_version
|
||||
|
||||
validates :email, :billing_email, format: /@/, allow_blank: true
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
class AddressVersion < PaperTrail::Version
|
||||
include VersionSession
|
||||
self.table_name = :log_addresses
|
||||
self.sequence_name = :log_addresses_id_seq
|
||||
end
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
class ApiUserVersion < PaperTrail::Version
|
||||
include VersionSession
|
||||
self.table_name = :log_api_users
|
||||
self.sequence_name = :log_api_users_id_seq
|
||||
end
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
class ContactDisclosureVersion < PaperTrail::Version
|
||||
include VersionSession
|
||||
self.table_name = :log_contact_disclosures
|
||||
self.sequence_name = :log_contact_disclosures_id_seq
|
||||
end
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
class ContactStatusVersion < PaperTrail::Version
|
||||
include VersionSession
|
||||
self.table_name = :log_contact_statuses
|
||||
self.sequence_name = :log_contact_statuses_id_seq
|
||||
end
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
class ContactVersion < PaperTrail::Version
|
||||
include VersionSession
|
||||
self.table_name = :log_contacts
|
||||
self.sequence_name = :log_contacts_id_seq
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
class CountryVersion < PaperTrail::Version
|
||||
include VersionSession
|
||||
self.table_name = :log_countries
|
||||
self.sequence_name = :log_countries_id_seq
|
||||
end
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
class DnskeyVersion < PaperTrail::Version
|
||||
include VersionSession
|
||||
self.table_name = :log_dnskeys
|
||||
self.sequence_name = :log_dnskeys_id_seq
|
||||
end
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
class DomainContactVersion < PaperTrail::Version
|
||||
include VersionSession
|
||||
self.table_name = :log_domain_contacts
|
||||
self.sequence_name = :log_domain_contacts_id_seq
|
||||
end
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
class DomainStatusVersion < PaperTrail::Version
|
||||
include VersionSession
|
||||
self.table_name = :log_domain_statuses
|
||||
self.sequence_name = :log_domain_statuses_id_seq
|
||||
end
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
class DomainTransferVersion < PaperTrail::Version
|
||||
include VersionSession
|
||||
self.table_name = :log_domain_transfers
|
||||
self.sequence_name = :log_domain_transfers_id_seq
|
||||
end
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
class DomainVersion < PaperTrail::Version
|
||||
include VersionSession
|
||||
|
||||
self.table_name = :log_domains
|
||||
self.sequence_name = :log_domains_id_seq
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
class KeyrelayVersion < PaperTrail::Version
|
||||
include VersionSession
|
||||
self.table_name = :log_keyrelays
|
||||
self.sequence_name = :log_keyrelays_id_seq
|
||||
end
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
class LegalDocumentVersion < PaperTrail::Version
|
||||
include VersionSession
|
||||
self.table_name = :log_legal_documents
|
||||
self.sequence_name = :log_legal_documents_id_seq
|
||||
end
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
class MessageVersion < PaperTrail::Version
|
||||
include VersionSession
|
||||
self.table_name = :log_messages
|
||||
self.sequence_name = :log_messages_id_seq
|
||||
end
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
class NameserverVersion < PaperTrail::Version
|
||||
include VersionSession
|
||||
self.table_name = :log_nameservers
|
||||
self.sequence_name = :log_nameservers_id_seq
|
||||
end
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
class RegistrarVersion < PaperTrail::Version
|
||||
include VersionSession
|
||||
self.table_name = :log_registrars
|
||||
self.sequence_name = :log_registrars_id_seq
|
||||
end
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
class ReservedDomainVersion < PaperTrail::Version
|
||||
include VersionSession
|
||||
self.table_name = :log_reserved_domains
|
||||
self.sequence_name = :log_reserved_domains_id_seq
|
||||
end
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
class SettingVersion < PaperTrail::Version
|
||||
include VersionSession
|
||||
self.table_name = :log_settings
|
||||
self.sequence_name = :log_settings_id_seq
|
||||
end
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
class UserVersion < PaperTrail::Version
|
||||
include VersionSession
|
||||
self.table_name = :log_users
|
||||
self.sequence_name = :log_users_id_seq
|
||||
end
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
class ZonefileSettingVersion < PaperTrail::Version
|
||||
include VersionSession
|
||||
self.table_name = :log_zonefile_settings
|
||||
self.sequence_name = :log_zonefile_settings_id_seq
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue