From f5ce88b548583ccb21b54117c3fe9c0f7edfe45d Mon Sep 17 00:00:00 2001 From: Martin Lensment Date: Mon, 17 Nov 2014 15:21:51 +0200 Subject: [PATCH] Keyrelay xmls --- app/helpers/epp/keyrelay_helper.rb | 5 +- app/helpers/epp/poll_helper.rb | 7 ++- app/models/keyrelay.rb | 2 + app/views/epp/poll/poll_keyrelay.xml.builder | 49 ++++++++++++++++++++ 4 files changed, 59 insertions(+), 4 deletions(-) create mode 100644 app/views/epp/poll/poll_keyrelay.xml.builder diff --git a/app/helpers/epp/keyrelay_helper.rb b/app/helpers/epp/keyrelay_helper.rb index f879621f4..b3debfba2 100644 --- a/app/helpers/epp/keyrelay_helper.rb +++ b/app/helpers/epp/keyrelay_helper.rb @@ -1,11 +1,10 @@ module Epp::KeyrelayHelper # rubocop: disable Metrics/PerceivedComplexity # rubocop: disable Metrics/CyclomaticComplexity - def keyrelay handle_errors and return unless validate_keyrelay_request - @domain = find_domain + @domain = find_domain_for_keyrelay handle_errors(@domain) and return unless @domain handle_errors(@domain) and return unless @domain.authenticate(parsed_frame.css('pw').text) @@ -36,7 +35,7 @@ module Epp::KeyrelayHelper epp_errors.empty? end - def find_domain + def find_domain_for_keyrelay domain_name = parsed_frame.css('name').text.strip.downcase domain = Epp::EppDomain.find_by(name: domain_name) diff --git a/app/helpers/epp/poll_helper.rb b/app/helpers/epp/poll_helper.rb index 354455219..7084ac191 100644 --- a/app/helpers/epp/poll_helper.rb +++ b/app/helpers/epp/poll_helper.rb @@ -11,7 +11,12 @@ module Epp::PollHelper if @message.attached_obj_type && @message.attached_obj_id @object = Object.const_get(@message.attached_obj_type).find(@message.attached_obj_id) end - render 'epp/poll/poll_req' + + if @message.attached_obj_type == 'Keyrelay' + render 'epp/poll/poll_keyrelay' + else + render 'epp/poll/poll_req' + end end def ack_poll diff --git a/app/models/keyrelay.rb b/app/models/keyrelay.rb index e613ddafa..5beb8b77f 100644 --- a/app/models/keyrelay.rb +++ b/app/models/keyrelay.rb @@ -3,4 +3,6 @@ class Keyrelay < ActiveRecord::Base belongs_to :requester, class_name: 'Registrar' belongs_to :accepter, class_name: 'Registrar' + + delegate :name, to: :domain, prefix: true end diff --git a/app/views/epp/poll/poll_keyrelay.xml.builder b/app/views/epp/poll/poll_keyrelay.xml.builder new file mode 100644 index 000000000..2238f5ac4 --- /dev/null +++ b/app/views/epp/poll/poll_keyrelay.xml.builder @@ -0,0 +1,49 @@ +xml.instruct!(:xml, standalone: 'no') +xml.epp( + 'xmlns' => 'urn:ietf:params:xml:ns:epp-1.0', + 'xmlns:secDNS' => 'urn:ietf:params:xml:ns:secDNS-1.1', + 'xmlns:domain' => 'urn:ietf:params:xml:ns:domain-1.0', + 'xmlns:keyrelay' => 'urn:ietf:params:xml:ns:keyrelay-1.0' +) do + xml.response do + xml.result('code' => '1301') do + xml.msg 'Command completed successfully; ack to dequeue' + end + + xml.tag!('msgQ', 'count' => current_epp_user.queued_messages.count, 'id' => @message.id) do + xml.qDate @message.created_at + xml.msg @message.body + end + + xml.resData do + xml.tag!('keyrelay:response') do + xml.tag!('keyrelay:panData') do + xml.tag!('keyrelay:name', @object.domain_name) + xml.tag!('keyrelay:paDate', @object.pa_date) + + xml.tag!('keyrelay:keyData') do + xml.tag!('secDNS:flags', @object.key_data_flags) + xml.tag!('secDNS:protocol', @object.key_data_protocol) + xml.tag!('secDNS:alg', @object.key_data_alg) + xml.tag!('secDNS:pubKey', @object.key_data_public_key) + end + + + xml.tag!('keyrelay:authInfo') do + xml.tag!('domain:pw', @object.auth_info_pw) + end + + xml.tag!('keyrelay:expiry') do + xml.tag!('keyrelay:relative', @object.expiry_relative) + xml.tag!('keyrelay:absolute', @object.expiry_absolute) + end + + xml.tag!('keyrelay:reID', @object.requester) + xml.tag!('keyrelay:acID', @object.accepter) + end + end + end + + xml << render('/epp/shared/trID') + end +end