mirror of
https://github.com/internetee/registry.git
synced 2025-06-08 05:34:46 +02:00
120 lines
3.2 KiB
Ruby
120 lines
3.2 KiB
Ruby
require 'deserializers/xml/legal_document'
|
|
require 'deserializers/xml/ident'
|
|
require 'deserializers/xml/contact'
|
|
|
|
class Epp::Contact < Contact
|
|
include EppErrors
|
|
|
|
# disable STI, there is type column present
|
|
self.inheritance_column = :sti_disabled
|
|
|
|
before_validation :manage_permissions
|
|
|
|
def manage_permissions
|
|
return unless update_prohibited? || delete_prohibited?
|
|
add_epp_error('2304', nil, nil, I18n.t(:object_status_prohibits_operation))
|
|
throw(:abort)
|
|
end
|
|
|
|
class << self
|
|
# support legacy search
|
|
def find_by_epp_code(code)
|
|
# find_by(code: code.sub(/^CID:/, '')) # legacy support turned off
|
|
find_by(code: code)
|
|
end
|
|
|
|
def attrs_from(frame, new_record: false)
|
|
at = ::Deserializers::Xml::Contact.new(frame).call
|
|
ident_attrs = ::Deserializers::Xml::Ident.new(frame).call
|
|
at.merge!(ident_attrs) if new_record
|
|
at
|
|
end
|
|
|
|
def new(frame, registrar, epp: true)
|
|
return super if frame.blank?
|
|
|
|
attrs = epp ? attrs_from(frame, new_record: true) : frame
|
|
super(
|
|
attrs.merge(
|
|
code: epp ? frame.css('id').text : frame[:id],
|
|
registrar: registrar
|
|
)
|
|
)
|
|
end
|
|
|
|
def check_availability(codes, reg:)
|
|
codes = [codes] if codes.is_a?(String)
|
|
codes = codes.map { |c| c.include?(':') ? c : "#{reg}:#{c}" }
|
|
|
|
res = []
|
|
codes.map { |c| c.include?(':') ? c : "#{reg}:#{c}" }.map { |c| c.strip.upcase }.each do |x|
|
|
c = find_by_epp_code(x)
|
|
res << (c ? { code: c.code, avail: 0, reason: 'in use' } : { code: x, avail: 1 })
|
|
end
|
|
|
|
res
|
|
end
|
|
end
|
|
|
|
delegate :ident_attr_valid?, to: :class
|
|
|
|
# rubocop:disable Style/SymbolArray
|
|
def epp_code_map
|
|
{
|
|
'2003' => [ # Required parameter missing
|
|
[:name, :blank],
|
|
[:email, :blank],
|
|
[:phone, :blank],
|
|
[:city, :blank],
|
|
[:zip, :blank],
|
|
[:street, :blank],
|
|
[:country_code, :blank]
|
|
],
|
|
'2005' => [ # Value syntax error
|
|
[:name, :invalid],
|
|
[:phone, :invalid],
|
|
[:email, :invalid],
|
|
[:country_code, :invalid],
|
|
[:code, :invalid],
|
|
[:code, :too_long_contact_code],
|
|
[:email, :email_smtp_check_error],
|
|
[:email, :email_mx_check_error],
|
|
[:email, :email_regex_check_error],
|
|
],
|
|
'2302' => [ # Object exists
|
|
[:code, :epp_id_taken]
|
|
],
|
|
'2304' => [ # Status prohibits operation
|
|
[:statuses, :delete_prohibited],
|
|
],
|
|
'2305' => [ # Association exists
|
|
[:domains, :exist],
|
|
]
|
|
}
|
|
end
|
|
# rubocop:enable Style/SymbolArray
|
|
|
|
def attach_legal_document(legal_document_data)
|
|
return unless legal_document_data
|
|
|
|
legal_documents.create(
|
|
document_type: legal_document_data[:type],
|
|
body: legal_document_data[:body]
|
|
)
|
|
end
|
|
|
|
def add_legal_file_to_new frame
|
|
legal_document_data = ::Deserializers::Xml::LegalDocument.new(frame).call
|
|
return unless legal_document_data
|
|
|
|
doc = LegalDocument.create(
|
|
documentable_type: Contact,
|
|
document_type: legal_document_data[:type],
|
|
body: legal_document_data[:body]
|
|
)
|
|
self.legal_documents = [doc]
|
|
|
|
frame.css("legalDocument").first.content = doc.path if doc&.persisted?
|
|
self.legal_document_id = doc.id
|
|
end
|
|
end
|