From e0582bb0a9affd7fc5cfa083da90330fdbfe2dcf Mon Sep 17 00:00:00 2001 From: Artur Beljajev Date: Thu, 27 Apr 2017 09:00:30 +0300 Subject: [PATCH] Limit EPP domain:renew #475 --- app/models/epp/domain.rb | 8 ++ .../epp/domain/renew/max_expire_time_spec.rb | 91 +++++++++++++++++++ 2 files changed, 99 insertions(+) create mode 100644 spec/requests/epp/domain/renew/max_expire_time_spec.rb diff --git a/app/models/epp/domain.rb b/app/models/epp/domain.rb index 563923af0..f16ad7fc3 100644 --- a/app/models/epp/domain.rb +++ b/app/models/epp/domain.rb @@ -603,6 +603,14 @@ class Epp::Domain < Domain plural_period_unit_name = (unit == 'm' ? 'months' : 'years').to_sym renewed_expire_time = valid_to.advance(plural_period_unit_name => period.to_i) + max_reg_time = 11.years.from_now + + if renewed_expire_time >= max_reg_time + add_epp_error('2105', nil, nil, I18n.t('epp.domains.object_is_not_eligible_for_renewal', + max_date: max_reg_time.to_date.to_s(:db))) + return false if errors.any? + end + self.expire_time = renewed_expire_time self.outzone_at = nil self.delete_at = nil diff --git a/spec/requests/epp/domain/renew/max_expire_time_spec.rb b/spec/requests/epp/domain/renew/max_expire_time_spec.rb new file mode 100644 index 000000000..2a9a0c52c --- /dev/null +++ b/spec/requests/epp/domain/renew/max_expire_time_spec.rb @@ -0,0 +1,91 @@ +require 'rails_helper' + +RSpec.describe 'EPP domain:renew' do + let(:user) { create(:api_user_epp, registrar: registrar) } + let(:registrar) { create(:registrar_with_unlimited_balance) } + let!(:zone) { create(:zone, origin: 'test') } + let!(:price) { create(:price, + duration: '10 years', + price: Money.from_amount(1), + operation_category: 'renew', + valid_from: Time.zone.parse('05.07.2010'), + valid_to: Time.zone.parse('05.07.2010'), + zone: zone) + } + subject(:response_xml) { Nokogiri::XML(response.body) } + subject(:response_code) { response_xml.xpath('//xmlns:result').first['code'] } + subject(:response_description) { response_xml.css('result msg').text } + + before :example do + travel_to Time.zone.parse('05.07.2010') + Setting.days_to_renew_domain_before_expire = 0 + sign_in_to_epp_area(user: user) + end + + context 'when domain can be renewed' do + let!(:domain) { create(:domain, + registrar: registrar, + name: 'test.test', + expire_time: Time.zone.parse('05.07.2010')) + } + let(:request_xml) { <<-XML + + + + + + test.test + 2010-07-05 + 10 + + + + + XML + } + + it 'returns epp code of 1000' do + post '/epp/command/renew', frame: request_xml + expect(response_code).to eq('1000') + end + + it 'returns epp description' do + post '/epp/command/renew', frame: request_xml + expect(response_description).to eq('Command completed successfully') + end + end + + context 'when domain cannot be renewed' do + let!(:domain) { create(:domain, + registrar: registrar, + name: 'test.test', + expire_time: Time.zone.parse('05.07.2011')) + } + let(:request_xml) { <<-XML + + + + + + test.test + 2011-07-05 + 10 + + + + + XML + } + + it 'returns epp code of 2105' do + post '/epp/command/renew', frame: request_xml + expect(response_code).to eq('2105') + end + + it 'returns epp description' do + post '/epp/command/renew', frame: request_xml + expect(response_description).to eq('Object is not eligible for renewal; ' \ + 'Expiration date must be before 2021-07-05') + end + end +end