mirror of
https://github.com/internetee/registry.git
synced 2025-05-17 17:59:47 +02:00
Validate keyrelay relative and absolute in controller
This commit is contained in:
parent
51978ef38a
commit
938bd75dfa
5 changed files with 28 additions and 4 deletions
|
@ -14,7 +14,14 @@ class Epp::KeyrelaysController < EppController
|
||||||
private
|
private
|
||||||
|
|
||||||
def validate_keyrelay
|
def validate_keyrelay
|
||||||
epp_request_valid?('pubKey', 'flags', 'protocol', 'alg', 'name', 'pw')
|
@prefix = 'keyrelay >'
|
||||||
|
epp_request_valid?(
|
||||||
|
'name',
|
||||||
|
'keyData', 'keyData > pubKey', 'keyData > flags', 'keyData > protocol', 'keyData > alg',
|
||||||
|
'authInfo', 'authInfo > pw'
|
||||||
|
)
|
||||||
|
|
||||||
|
exactly_one_of 'expiry > relative', 'expiry > absolute'
|
||||||
|
|
||||||
begin
|
begin
|
||||||
abs_datetime = params[:parsed_frame].css('absolute').text
|
abs_datetime = params[:parsed_frame].css('absolute').text
|
||||||
|
@ -26,8 +33,6 @@ class Epp::KeyrelaysController < EppController
|
||||||
value: { obj: 'expiry_absolute', val: abs_datetime }
|
value: { obj: 'expiry_absolute', val: abs_datetime }
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
epp_errors.empty?
|
|
||||||
end
|
end
|
||||||
# rubocop: enable Metrics/PerceivedComplexity
|
# rubocop: enable Metrics/PerceivedComplexity
|
||||||
# rubocop: enable Metrics/CyclomaticComplexity
|
# rubocop: enable Metrics/CyclomaticComplexity
|
||||||
|
|
|
@ -75,6 +75,23 @@ class EppController < ApplicationController
|
||||||
epp_errors.empty?
|
epp_errors.empty?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# let's follow grape's validations: https://github.com/intridea/grape/#parameter-validation-and-coercion
|
||||||
|
def exactly_one_of(*selectors)
|
||||||
|
present_count = 0
|
||||||
|
selectors.each do |selector|
|
||||||
|
full_selector = [@prefix, selector].join(' ')
|
||||||
|
el = params[:parsed_frame].css(full_selector).first
|
||||||
|
present_count += 1 if el && el.text.present?
|
||||||
|
end
|
||||||
|
|
||||||
|
return if present_count == 1
|
||||||
|
|
||||||
|
epp_errors << {
|
||||||
|
code: '2003',
|
||||||
|
msg: I18n.t(:exactly_one_parameter_required, params: selectors.join(' or '))
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
def xml_attrs_present?(ph, attributes) # TODO: THIS IS DEPRECATED AND WILL BE REMOVED IN FUTURE
|
def xml_attrs_present?(ph, attributes) # TODO: THIS IS DEPRECATED AND WILL BE REMOVED IN FUTURE
|
||||||
attributes.each do |x|
|
attributes.each do |x|
|
||||||
epp_errors << {
|
epp_errors << {
|
||||||
|
|
|
@ -19,6 +19,7 @@ class Keyrelay < ActiveRecord::Base
|
||||||
[:expiry_relative, :unknown_pattern, { value: { obj: 'relative', val: expiry_relative } }]
|
[:expiry_relative, :unknown_pattern, { value: { obj: 'relative', val: expiry_relative } }]
|
||||||
],
|
],
|
||||||
'2003' => [
|
'2003' => [
|
||||||
|
# TODO: Remove only_one_parameter_allowed and other params that are validated in controller?
|
||||||
[:base, :only_one_parameter_allowed, { param_1: 'relative', param_2: 'absolute' }],
|
[:base, :only_one_parameter_allowed, { param_1: 'relative', param_2: 'absolute' }],
|
||||||
[:key_data_public_key, :blank],
|
[:key_data_public_key, :blank],
|
||||||
[:key_data_flags, :blank],
|
[:key_data_flags, :blank],
|
||||||
|
|
|
@ -444,6 +444,7 @@ en:
|
||||||
generate_zonefile: 'Generate zonefile'
|
generate_zonefile: 'Generate zonefile'
|
||||||
zonefile: 'Zonefile'
|
zonefile: 'Zonefile'
|
||||||
only_one_parameter_allowed: 'Only one parameter allowed: %{param_1} or %{param_2}'
|
only_one_parameter_allowed: 'Only one parameter allowed: %{param_1} or %{param_2}'
|
||||||
|
exactly_one_parameter_required: 'Exactly one parameter required: %{params}'
|
||||||
required_parameter_missing_choice: 'Required parameter missing: %{param_1} or %{param_2}'
|
required_parameter_missing_choice: 'Required parameter missing: %{param_1} or %{param_2}'
|
||||||
transfer_wait_time: 'Transfer wait time'
|
transfer_wait_time: 'Transfer wait time'
|
||||||
ns_min_count: 'Nameserver minimum count'
|
ns_min_count: 'Nameserver minimum count'
|
||||||
|
|
|
@ -131,7 +131,7 @@ describe 'EPP Keyrelay', epp: true do
|
||||||
})
|
})
|
||||||
|
|
||||||
response = epp_request(xml, :xml, :elkdata)
|
response = epp_request(xml, :xml, :elkdata)
|
||||||
expect(response[:msg]).to eq('Only one parameter allowed: relative or absolute')
|
expect(response[:msg]).to eq('Exactly one parameter required: expiry > relative or expiry > absolute')
|
||||||
|
|
||||||
expect(zone.messages.queued.count).to eq(0)
|
expect(zone.messages.queued.count).to eq(0)
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue