diff --git a/app/controllers/epp/keyrelays_controller.rb b/app/controllers/epp/keyrelays_controller.rb index cbe7c25a4..e33e38510 100644 --- a/app/controllers/epp/keyrelays_controller.rb +++ b/app/controllers/epp/keyrelays_controller.rb @@ -1,4 +1,4 @@ -class Epp::KeyrelaysController < EppController + class Epp::KeyrelaysController < EppController # rubocop: disable Metrics/PerceivedComplexity # rubocop: disable Metrics/CyclomaticComplexity def keyrelay diff --git a/app/models/epp/epp_domain.rb b/app/models/epp/epp_domain.rb index 4d70aaf57..6597b7e18 100644 --- a/app/models/epp/epp_domain.rb +++ b/app/models/epp/epp_domain.rb @@ -423,7 +423,7 @@ class Epp::EppDomain < Domain abs_datetime = DateTime.parse(abs_datetime) if abs_datetime.present? transaction do - kr = keyrelays.create( + kr = keyrelays.build( pa_date: Time.now, key_data_flags: parsed_frame.css('flags').text, key_data_protocol: parsed_frame.css('protocol').text, @@ -436,6 +436,16 @@ class Epp::EppDomain < Domain accepter: registrar ) + legal_document_data = self.class.parse_legal_document_from_frame(parsed_frame) + if legal_document_data + kr.legal_documents.build( + document_type: legal_document_data[:type], + body: legal_document_data[:body] + ) + end + + kr.save + return false unless valid? registrar.messages.create!( diff --git a/app/models/keyrelay.rb b/app/models/keyrelay.rb index e6be8ccd4..a6df639e6 100644 --- a/app/models/keyrelay.rb +++ b/app/models/keyrelay.rb @@ -6,6 +6,8 @@ class Keyrelay < ActiveRecord::Base belongs_to :requester, class_name: 'Registrar' belongs_to :accepter, class_name: 'Registrar' + has_many :legal_documents, as: :documentable + delegate :name, to: :domain, prefix: true validates :expiry_relative, duration_iso8601: true diff --git a/spec/epp/keyrelay_spec.rb b/spec/epp/keyrelay_spec.rb index 9686c523b..0c34d0415 100644 --- a/spec/epp/keyrelay_spec.rb +++ b/spec/epp/keyrelay_spec.rb @@ -168,4 +168,38 @@ describe 'EPP Keyrelay', epp: true do @zone.messages.queued.count.should == msg_count end + + it 'saves legal document with keyrelay' do + xml = epp_xml.keyrelay({ + name: { value: domain.name }, + keyData: { + flags: { value: '256' }, + protocol: { value: '3' }, + alg: { value: '8' }, + pubKey: { value: 'cmlraXN0aGViZXN0' } + }, + authInfo: { + pw: { value: domain.auth_info } + }, + expiry: { + relative: { value: 'P1D' }, + } + }, { + _anonymus: [ + legalDocument: { + value: 'JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==', + attrs: { type: 'pdf' } + } + ] + }) + + response = epp_request(xml, :xml, :elkdata) + response[:msg].should == 'Command completed successfully' + + docs = Keyrelay.last.legal_documents + docs.count.should == 1 + docs.first.body.should == 'JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==' + docs.first.document_type.should == 'pdf' + + end end