internetee-registry/lib/deserializers/xml/domain_update.rb
2020-12-09 15:03:40 +02:00

76 lines
2.3 KiB
Ruby

require 'deserializers/xml/legal_document'
require 'deserializers/xml/domain'
require 'deserializers/xml/nameserver'
require 'deserializers/xml/dnssec'
module Deserializers
module Xml
class DomainUpdate
attr_reader :frame, :registrar
def initialize(frame, registrar)
@frame = frame
@registrar = registrar
end
def call
obj = { domain: frame.css('name')&.text, registrant: registrant, contacts: contacts,
auth_info: if_present('pw'), nameservers: nameservers, dns_keys: dns_keys }
obj.reject { |_key, val| val.blank? }
end
def registrant
return if frame.css('chg > registrant').blank?
{ code: frame.css('chg > registrant').text, verified: frame.css('chg > registrant').attr('verified').to_s.downcase == 'yes' }
end
def contacts
contacts = []
frame.css('add > contact').each do |c|
contacts << { code: c.text, type: c['type'], action: 'add' }
end
frame.css('rem > contact').each do |c|
contacts << { code: c.text, type: c['type'], action: 'rem' }
end
contacts.present? ? contacts : nil
end
def nameservers
nameservers = []
frame.css('add > ns > hostAttr').each do |ns|
nsrv = { nameserver: ns.css('hostName').text, host_addr: [], action: 'add' }
ns.css('hostAddr').each { |ha| nsrv[:host_addr] << { proto: ha.attr('ip').to_s.downcase, addr: ha.text } }
nameservers << nsrv
end
frame.css('rem > ns > hostAttr').each do |ns|
nsrv = { nameserver: ns.css('hostName').text, host_addr: [], action: 'rem' }
ns.css('hostAddr').each { |ha| nsrv[:host_addr] << { proto: ha.attr('ip').to_s.downcase, addr: ha.text } }
nameservers << nsrv
end
nameservers.present? ? nameservers : nil
end
def dns_keys
added = ::Deserializers::Xml::DnssecKeys.new(frame.css('add')).call
added.each { |k| k[:action] = 'add' }
removed = ::Deserializers::Xml::DnssecKeys.new(frame.css('rem')).call
removed.each { |k| k[:action] = 'rem' }
return unless (added + removed).present?
added + removed
end
def if_present(css_path)
return if frame.css(css_path).blank?
frame.css(css_path).text
end
end
end
end