From c6aa74529c8b1a815292cce0517253aebf579bec Mon Sep 17 00:00:00 2001 From: Artur Beljajev Date: Fri, 16 Dec 2016 05:31:57 +0200 Subject: [PATCH 1/3] Remove EPP session timeout and certificate check in dev env #284 --- app/controllers/epp/sessions_controller.rb | 2 +- app/controllers/epp_controller.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/epp/sessions_controller.rb b/app/controllers/epp/sessions_controller.rb index 58a314410..1396a5b35 100644 --- a/app/controllers/epp/sessions_controller.rb +++ b/app/controllers/epp/sessions_controller.rb @@ -27,7 +27,7 @@ class Epp::SessionsController < EppController end end - if !webclient_request && @api_user + if !Rails.env.development? && (!webclient_request && @api_user) unless @api_user.api_pki_ok?(request.env['HTTP_SSL_CLIENT_CERT'], request.env['HTTP_SSL_CLIENT_S_DN_CN']) epp_errors << { msg: 'Authentication error; server closing connection (certificate is not valid)', diff --git a/app/controllers/epp_controller.rb b/app/controllers/epp_controller.rb index c4e5f661b..4f84f7284 100644 --- a/app/controllers/epp_controller.rb +++ b/app/controllers/epp_controller.rb @@ -97,7 +97,7 @@ class EppController < ApplicationController e_s = epp_session return if e_s.new_record? - if e_s.updated_at < Time.zone.now - 5.minutes + if !Rails.env.development? && (e_s.updated_at < Time.zone.now - 5.minutes) @api_user = current_user # cache current_user for logging e_s.destroy response.headers['X-EPP-Returncode'] = '1500' From cbedd33db3e015acef0e2a2863b17cf7940d5ae6 Mon Sep 17 00:00:00 2001 From: Artur Beljajev Date: Sun, 18 Dec 2016 15:56:56 +0200 Subject: [PATCH 2/3] Add account and pricelist factories --- spec/factories/account.rb | 7 +++++++ spec/factories/pricelist.rb | 10 ++++++++++ 2 files changed, 17 insertions(+) create mode 100644 spec/factories/account.rb create mode 100644 spec/factories/pricelist.rb diff --git a/spec/factories/account.rb b/spec/factories/account.rb new file mode 100644 index 000000000..19ed7f9c7 --- /dev/null +++ b/spec/factories/account.rb @@ -0,0 +1,7 @@ +FactoryGirl.define do + factory :account do + account_type Account::CASH + balance 1 + currency 'EUR' + end +end diff --git a/spec/factories/pricelist.rb b/spec/factories/pricelist.rb new file mode 100644 index 000000000..7d72d9c87 --- /dev/null +++ b/spec/factories/pricelist.rb @@ -0,0 +1,10 @@ +FactoryGirl.define do + factory :pricelist do + valid_from Time.zone.parse('05.07.2010') + valid_to Time.zone.parse('05.07.2010') + category 'com' + duration '1year' + operation_category 'create' + price 1.to_money + end +end From 5ec86cdb6362a061886d0df5b2f57e59ddedbecb Mon Sep 17 00:00:00 2001 From: Artur Beljajev Date: Sun, 18 Dec 2016 16:09:22 +0200 Subject: [PATCH 3/3] Require domain expire time to be before than now + 4 years on domain renewal #260 --- app/models/epp/domain.rb | 13 +++- config/locales/epp/domains.en.yml | 4 ++ spec/requests/epp/domain/renew_spec.rb | 92 ++++++++++++++++++++++++++ 3 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 config/locales/epp/domains.en.yml create mode 100644 spec/requests/epp/domain/renew_spec.rb diff --git a/app/models/epp/domain.rb b/app/models/epp/domain.rb index f78d94c31..155d70c18 100644 --- a/app/models/epp/domain.rb +++ b/app/models/epp/domain.rb @@ -601,7 +601,18 @@ class Epp::Domain < Domain return false if errors.any? p = self.class.convert_period_to_time(period, unit) - self.valid_to = valid_to + p + renewed_expire_time = valid_to + p + + # Change it when Pricelist model periods change + max_reg_time = 4.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.valid_to = renewed_expire_time self.outzone_at = nil self.delete_at = nil self.period = period diff --git a/config/locales/epp/domains.en.yml b/config/locales/epp/domains.en.yml new file mode 100644 index 000000000..788ca12d4 --- /dev/null +++ b/config/locales/epp/domains.en.yml @@ -0,0 +1,4 @@ +en: + epp: + domains: + object_is_not_eligible_for_renewal: Object is not eligible for renewal; Expiration date must be before %{max_date} diff --git a/spec/requests/epp/domain/renew_spec.rb b/spec/requests/epp/domain/renew_spec.rb new file mode 100644 index 000000000..69a482bf4 --- /dev/null +++ b/spec/requests/epp/domain/renew_spec.rb @@ -0,0 +1,92 @@ +require 'rails_helper' + +RSpec.describe 'EPP domain:renew' do + let(:user) { FactoryGirl.create(:api_user_epp, registrar: registrar) } + let(:registrar) { FactoryGirl.create(:registrar) } + 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 do + travel_to Time.zone.parse('05.07.2010') + sign_in_to_epp_area(user: user) + FactoryGirl.create(:account, registrar: registrar, balance: 1) + Setting.days_to_renew_domain_before_expire = 0 + + FactoryGirl.create(:pricelist, + category: 'com', + duration: '3years', + price: 1.to_money, + operation_category: 'renew', + valid_from: Time.zone.parse('05.07.2010'), + valid_to: Time.zone.parse('05.07.2010') + ) + end + + context 'when domain can be renewed' do + let!(:domain) { FactoryGirl.create(:domain, + registrar: registrar, + name: 'test.com', + expire_time: Time.zone.parse('05.07.2010')) + } + let(:request_xml) { <<-XML + + + + + + test.com + 2010-07-05 + 3 + + + + + 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) { FactoryGirl.create(:domain, + registrar: registrar, + name: 'test.com', + expire_time: Time.zone.parse('05.07.2011')) + } + let(:request_xml) { <<-XML + + + + + + test.com + 2011-07-05 + 3 + + + + + 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 2014-07-05') + end + end +end