diff --git a/app/helpers/epp/domains_helper.rb b/app/helpers/epp/domains_helper.rb index 174401e15..21b77322b 100644 --- a/app/helpers/epp/domains_helper.rb +++ b/app/helpers/epp/domains_helper.rb @@ -29,6 +29,8 @@ module Epp::DomainsHelper def info_domain @domain = find_domain + handle_errors(@domain) and return unless @domain + render '/epp/domains/info' end diff --git a/app/models/concerns/epp_errors.rb b/app/models/concerns/epp_errors.rb index d21c85b0c..e8c56918e 100644 --- a/app/models/concerns/epp_errors.rb +++ b/app/models/concerns/epp_errors.rb @@ -22,7 +22,9 @@ module EppErrors values.each do |err| if err.is_a?(Hash) next unless code = find_epp_code(err[:msg]) - epp_errors << {code: code, msg: err[:msg], value: {val: err[:val], obj: err[:obj]}} + err_msg = {code: code, msg: err[:msg]} + err_msg[:value] = {val: err[:val], obj: err[:obj]} if err[:val] + epp_errors << err_msg else next unless code = find_epp_code(err) err = {code: code, msg: err} diff --git a/app/models/domain.rb b/app/models/domain.rb index d8172bb64..eb6de0f13 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -8,7 +8,8 @@ class Domain < ActiveRecord::Base '2302' => ['Domain name already exists', 'Domain name is reserved or restricted'], # Object exists '2306' => ['Registrant is missing', 'Admin contact is missing', 'Given and current expire dates do not match'], # Parameter policy error '2004' => ['Nameservers count must be between 1-13', 'Period must add up to 1, 2 or 3 years'], # Parameter value range error - '2303' => ['Registrant not found', 'Contact was not found'] # Object does not exist + '2303' => ['Registrant not found', 'Contact was not found'], # Object does not exist + '2200' => ['Authentication error'] } EPP_ATTR_MAP = { @@ -156,6 +157,14 @@ class Domain < ActiveRecord::Base }) if cur_exp_date.to_date != valid_to end + ## SHARED + + # For domain transfer + def authenticate(pw) + errors.add(:auth_info, {msg: errors.generate_message(:auth_info, :wrong_pw)}) if pw != auth_info + errors.empty? + end + class << self def convert_period_to_time(period, unit) return period.to_i.days if unit == 'd' diff --git a/config/locales/en.yml b/config/locales/en.yml index 2b15d25f2..62537f891 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -54,6 +54,8 @@ en: ip_invalid: 'IPv4 is invalid' period: out_of_range: 'Period must add up to 1, 2 or 3 years' + auth_info: + wrong_pw: 'Authentication error' nameserver: attributes: hostname: diff --git a/doc/epp_request_examples.xml b/doc/epp_request_examples.xml index ef65f1599..d2d757a11 100644 --- a/doc/epp_request_examples.xml +++ b/doc/epp_request_examples.xml @@ -64,6 +64,9 @@ example.ee + + 2fooBAR + ABC-12345 diff --git a/spec/epp/domain_spec.rb b/spec/epp/domain_spec.rb index 099c0f2c9..18a6768e5 100644 --- a/spec/epp/domain_spec.rb +++ b/spec/epp/domain_spec.rb @@ -178,7 +178,7 @@ describe 'EPP Domain', epp: true do before(:each) { Fabricate(:domain, name: 'example.ee') } it 'renews a domain' do - response = epp_request('domains/renew.xml') + response = epp_request(domain_renew_xml, :xml) exDate = response[:parsed].css('renData exDate').text name = response[:parsed].css('renData name').text expect(exDate).to eq ('2015-08-07 00:00:00 UTC') @@ -234,10 +234,16 @@ describe 'EPP Domain', epp: true do expect(inf_data.css('upDate').text).to eq(d.updated_at.to_time.utc.to_s) end + + it 'returns error when domain can not be found' do + response = epp_request(domain_info_xml(name_value: 'test.ee'), :xml) + expect(response[:results][0][:result_code]).to eq('2303') + expect(response[:results][0][:msg]).to eq('Domain not found') + end end it 'checks a domain' do - response = epp_request('domains/check.xml') + response = epp_request(domain_check_xml, :xml) expect(response[:result_code]).to eq('1000') expect(response[:msg]).to eq('Command completed successfully') @@ -247,7 +253,7 @@ describe 'EPP Domain', epp: true do Fabricate(:domain, name: 'example.ee') - response = epp_request('domains/check.xml') + response = epp_request(domain_check_xml, :xml) domain = response[:parsed].css('resData chkData cd').first name = domain.css('name').first reason = domain.css('reason').first diff --git a/spec/epp/epp_helper_spec.rb b/spec/epp/epp_helper_spec.rb index 39e027907..ee0a6cea0 100644 --- a/spec/epp/epp_helper_spec.rb +++ b/spec/epp/epp_helper_spec.rb @@ -106,7 +106,7 @@ describe 'EPP Helper', epp: true do expect(generated).to eq(expected) end - it 'creates valid info request' do + it 'generates valid info xml' do expected = Nokogiri::XML(' @@ -114,6 +114,9 @@ describe 'EPP Helper', epp: true do example.ee + + 2fooBAR + ABC-12345 @@ -132,6 +135,9 @@ describe 'EPP Helper', epp: true do one.ee + + b3rafsla + ABC-12345 @@ -140,7 +146,89 @@ describe 'EPP Helper', epp: true do ').to_s.squish - generated = Nokogiri::XML(domain_info_xml(name_value: 'one.ee', name_hosts: 'sub')).to_s.squish + generated = Nokogiri::XML(domain_info_xml(name_value: 'one.ee', name_hosts: 'sub', pw: 'b3rafsla')).to_s.squish + expect(generated).to eq(expected) + end + + it 'generates valid check xml' do + expected = Nokogiri::XML(' + + + + + example.ee + + + ABC-12345 + + + ').to_s.squish + + + generated = Nokogiri::XML(domain_check_xml).to_s.squish + expect(generated).to eq(expected) + + expected = Nokogiri::XML(' + + + + + example.ee + example2.ee + example3.ee + + + ABC-12345 + + + ').to_s.squish + + + generated = Nokogiri::XML(domain_check_xml(names: ['example.ee', 'example2.ee', 'example3.ee'])).to_s.squish + expect(generated).to eq(expected) + end + + it 'generates valid renew xml' do + expected = Nokogiri::XML(' + + + + + example.ee + 2014-08-07 + 1 + + + ABC-12345 + + + ').to_s.squish + + + generated = Nokogiri::XML(domain_renew_xml).to_s.squish + expect(generated).to eq(expected) + + expected = Nokogiri::XML(' + + + + + one.ee + 2009-11-15 + 365 + + + ABC-12345 + + + ').to_s.squish + + + generated = Nokogiri::XML(domain_renew_xml(name: 'one.ee', curExpDate: '2009-11-15', period_value: '365', period_unit: 'd')).to_s.squish expect(generated).to eq(expected) end end diff --git a/spec/epp/requests/domains/check.xml b/spec/epp/requests/domains/check.xml deleted file mode 100644 index b55a4b129..000000000 --- a/spec/epp/requests/domains/check.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - example.ee - - - ABC-12345 - - diff --git a/spec/epp/requests/domains/info.xml b/spec/epp/requests/domains/info.xml deleted file mode 100644 index 758e86e7d..000000000 --- a/spec/epp/requests/domains/info.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - example.ee - - - ABC-12345 - - diff --git a/spec/epp/requests/domains/renew.xml b/spec/epp/requests/domains/renew.xml deleted file mode 100644 index 2ba7ea4a8..000000000 --- a/spec/epp/requests/domains/renew.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - example.ee - 2014-08-07 - 1 - - - ABC-12345 - - diff --git a/spec/support/epp.rb b/spec/support/epp.rb index 29b2d52f5..fb85caf36 100644 --- a/spec/support/epp.rb +++ b/spec/support/epp.rb @@ -128,6 +128,7 @@ module Epp def domain_info_xml(xml_params={}) xml_params[:name_value] = xml_params[:name_value] || 'example.ee' xml_params[:name_hosts] = xml_params[:name_hosts] || 'all' + xml_params[:pw] = xml_params[:pw] || '2fooBAR' xml = Builder::XmlMarkup.new @@ -137,6 +138,9 @@ module Epp xml.info do xml.tag!('domain:info', 'xmlns:domain' => 'urn:ietf:params:xml:ns:domain-1.0') do xml.tag!('domain:name', xml_params[:name_value], 'hosts' => xml_params[:name_hosts]) if xml_params[:name] != false + xml.tag!('domain:authInfo') do + xml.tag!('domain:pw', xml_params[:pw]) + end end end xml.clTRID 'ABC-12345'