From 4116a94c2360f597149b55379c8adcf59e6bcde5 Mon Sep 17 00:00:00 2001 From: Martin Lensment Date: Mon, 22 Dec 2014 18:27:56 +0200 Subject: [PATCH] Refactor keyrelay helper --- app/helpers/epp/keyrelay_helper.rb | 12 ------------ app/models/keyrelay.rb | 12 ++++++++++++ config/locales/en.yml | 2 ++ spec/epp/keyrelay_spec.rb | 24 ++++++++++++++++++++++++ 4 files changed, 38 insertions(+), 12 deletions(-) diff --git a/app/helpers/epp/keyrelay_helper.rb b/app/helpers/epp/keyrelay_helper.rb index 06558251f..54d9dfb30 100644 --- a/app/helpers/epp/keyrelay_helper.rb +++ b/app/helpers/epp/keyrelay_helper.rb @@ -18,18 +18,6 @@ module Epp::KeyrelayHelper def validate_keyrelay_request epp_request_valid?('pubKey', 'flags', 'protocol', 'algorithm', 'name', 'pw') - if parsed_frame.css('relative').text.present? && parsed_frame.css('absolute').text.present? - epp_errors << { - code: '2003', - msg: I18n.t('only_one_parameter_allowed', param_1: 'relative', param_2: 'absolute') - } - elsif parsed_frame.css('relative').text.empty? && parsed_frame.css('absolute').text.empty? - epp_errors << { - code: '2003', - msg: I18n.t('required_parameter_missing_choice', param_1: 'relative', param_2: 'absolute') - } - end - begin abs_datetime = parsed_frame.css('absolute').text abs_datetime = DateTime.parse(abs_datetime) if abs_datetime.present? diff --git a/app/models/keyrelay.rb b/app/models/keyrelay.rb index 255695050..a39bf7883 100644 --- a/app/models/keyrelay.rb +++ b/app/models/keyrelay.rb @@ -10,10 +10,15 @@ class Keyrelay < ActiveRecord::Base validates :expiry_relative, duration_iso8601: true + validate :validate_expiry_relative_xor_expiry_absolute + def epp_code_map { '2005' => [ [:expiry_relative, :unknown_pattern, { value: { obj: 'relative', val: expiry_relative } }] + ], + '2003' => [ + [:base, :only_one_parameter_allowed, { param_1: 'relative', param_2: 'absolute' }] ] } end @@ -33,4 +38,11 @@ class Keyrelay < ActiveRecord::Base return 'pending' end end + + private + + def validate_expiry_relative_xor_expiry_absolute + return if expiry_relative.blank? ^ expiry_absolute.blank? + errors.add(:base, I18n.t(:only_one_parameter_allowed, param_1: 'relative', param_2: 'absolute')) + end end diff --git a/config/locales/en.yml b/config/locales/en.yml index be23b37f0..4fc1beefc 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -206,6 +206,8 @@ en: keyrelay: attributes: + base: + only_one_parameter_allowed: 'Only one parameter allowed: %{param_1} or %{param_2}' expiry_relative: unknown_pattern: 'Expiry relative must be compatible to ISO 8601' diff --git a/spec/epp/keyrelay_spec.rb b/spec/epp/keyrelay_spec.rb index b5ef19712..0aedc694b 100644 --- a/spec/epp/keyrelay_spec.rb +++ b/spec/epp/keyrelay_spec.rb @@ -64,5 +64,29 @@ describe 'EPP Keyrelay', epp: true do expect(zone.messages.queued.count).to eq(0) end + + it 'does not allow both relative and absolute' do + xml = epp_xml.keyrelay({ + name: { value: 'example.ee' }, + keyData: { + flags: { value: '256' }, + protocol: { value: '3' }, + alg: { value: '8' }, + pubKey: { value: 'cmlraXN0aGViZXN0' } + }, + authInfo: { + pw: { value: domain.auth_info } + }, + expiry: { + relative: { value: 'P1D' }, + absolute: { value: '2014-12-23' } + } + }) + + response = epp_request(xml, :xml, :elkdata) + expect(response[:msg]).to eq('Only one parameter allowed: relative or absolute') + + expect(zone.messages.queued.count).to eq(0) + end end end