mirror of
https://github.com/internetee/registry.git
synced 2025-06-12 15:44:45 +02:00
REPP: Add renew exp_date sanity check
This commit is contained in:
parent
016c5e802c
commit
546330b178
7 changed files with 15 additions and 13 deletions
|
@ -72,11 +72,11 @@ module Epp
|
|||
|
||||
def renew
|
||||
authorize! :renew, @domain
|
||||
return handle_errors(@domain) if invalid_expiry_date?
|
||||
|
||||
registrar_id = current_user.registrar.id
|
||||
renew_params = ::Deserializers::Xml::Domain.new(params[:parsed_frame],
|
||||
registrar_id).call
|
||||
|
||||
action = Actions::DomainRenew.new(@domain, renew_params, current_user.registrar)
|
||||
if action.call
|
||||
render_epp_response '/epp/domains/renew'
|
||||
|
@ -228,11 +228,6 @@ module Epp
|
|||
statuses == [::DomainStatus::CLIENT_HOLD]
|
||||
end
|
||||
|
||||
def invalid_expiry_date?
|
||||
@domain.validate_exp_dates(params[:parsed_frame].css('curExpDate').text)
|
||||
@domain.errors[:epp_errors].any?
|
||||
end
|
||||
|
||||
def balance_ok?(operation, period = nil, unit = nil)
|
||||
@domain_pricelist = @domain.pricelist(operation, period.try(:to_i), unit)
|
||||
if @domain_pricelist.try(:price) # checking if price list is not found
|
||||
|
|
|
@ -11,6 +11,7 @@ module Repp
|
|||
param :renew, Hash, required: true, desc: 'Renew parameters' do
|
||||
param :period, Integer, required: true, desc: 'Renew period. Month (m) or year (y)'
|
||||
param :period_unit, String, required: true, desc: 'For how many months or years to renew'
|
||||
param :exp_date, String, required: true, desc: 'Current expiry date for domain'
|
||||
end
|
||||
def create
|
||||
authorize!(:renew, @domain)
|
||||
|
@ -36,7 +37,7 @@ module Repp
|
|||
private
|
||||
|
||||
def renew_params
|
||||
params.permit(:domain_id, renew: %i[period period_unit])
|
||||
params.permit(:domain_id, renew: %i[period period_unit exp_date])
|
||||
end
|
||||
|
||||
def validate_renew_period
|
||||
|
|
|
@ -21,9 +21,9 @@ module Repp
|
|||
desc 'Get a specific domain'
|
||||
def show
|
||||
@domain = Epp::Domain.find_by!(name: params[:id])
|
||||
sponsored = @domain.registrar == current_user.registrar
|
||||
sponsor = @domain.registrar == current_user.registrar
|
||||
render_success(data: { domain: Serializers::Repp::Domain.new(@domain,
|
||||
sponsored: sponsored).to_json })
|
||||
sponsored: sponsor).to_json })
|
||||
end
|
||||
|
||||
api :POST, '/repp/v1/domains'
|
||||
|
|
|
@ -16,11 +16,14 @@ module Actions
|
|||
domain.add_renew_epp_errors
|
||||
false
|
||||
else
|
||||
domain.validate_exp_dates(params[:exp_date])
|
||||
renew
|
||||
end
|
||||
end
|
||||
|
||||
def renew
|
||||
return false if domain.errors[:epp_errors].any?
|
||||
|
||||
task = Domains::BulkRenew::SingleDomainRenew.run(domain: domain,
|
||||
period: params[:period],
|
||||
unit: params[:period_unit],
|
||||
|
|
|
@ -29,6 +29,7 @@ module Deserializers
|
|||
{
|
||||
period: period.text.present? ? Integer(period.text) : 1,
|
||||
period_unit: period.first ? period.first[:unit] : 'y',
|
||||
exp_date: if_present('curExpDate'),
|
||||
}
|
||||
end
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@ module Serializers
|
|||
@sponsored = sponsored
|
||||
end
|
||||
|
||||
# rubocop:disable Metrics/AbcSize
|
||||
def to_json(obj = domain)
|
||||
json = {
|
||||
name: obj.name, registrant: obj.registrant.code, created_at: obj.created_at,
|
||||
|
@ -19,6 +20,7 @@ module Serializers
|
|||
json[:transfer_code] = obj.auth_info if @sponsored
|
||||
json
|
||||
end
|
||||
# rubocop:enable Metrics/AbcSize
|
||||
|
||||
def contacts
|
||||
domain.domain_contacts.map { |c| { code: c.contact_code_cache, type: c.type } }
|
||||
|
|
|
@ -15,7 +15,7 @@ class ReppV1DomainsRenewsTest < ActionDispatch::IntegrationTest
|
|||
travel_to Time.zone.parse('2010-07-05')
|
||||
|
||||
@auth_headers['Content-Type'] = 'application/json'
|
||||
payload = { renew: { period: 1, period_unit: 'y' } }
|
||||
payload = { renew: { period: 1, period_unit: 'y', exp_date: original_valid_to } }
|
||||
post "/repp/v1/domains/#{@domain.name}/renew", headers: @auth_headers, params: payload.to_json
|
||||
json = JSON.parse(response.body, symbolize_names: true)
|
||||
|
||||
|
@ -31,7 +31,7 @@ class ReppV1DomainsRenewsTest < ActionDispatch::IntegrationTest
|
|||
travel_to Time.zone.parse('2010-07-05')
|
||||
|
||||
@auth_headers['Content-Type'] = 'application/json'
|
||||
payload = { renew: { period: 100, period_unit: 'y' } }
|
||||
payload = { renew: { period: 100, period_unit: 'y', exp_date: original_valid_to } }
|
||||
post "/repp/v1/domains/#{@domain.name}/renew", headers: @auth_headers, params: payload.to_json
|
||||
json = JSON.parse(response.body, symbolize_names: true)
|
||||
|
||||
|
@ -48,14 +48,14 @@ class ReppV1DomainsRenewsTest < ActionDispatch::IntegrationTest
|
|||
days_to_renew_domain_before_expire.reload
|
||||
|
||||
original_valid_to = @domain.valid_to
|
||||
travel_to @domain.valid_to - 3.days
|
||||
travel_to @domain.valid_to - 3.days
|
||||
|
||||
one_year = billing_prices(:renew_one_year)
|
||||
one_year.update(valid_from: @domain.valid_to - 5.days)
|
||||
one_year.reload
|
||||
|
||||
@auth_headers['Content-Type'] = 'application/json'
|
||||
payload = { renew: { period: 1, period_unit: 'y' } }
|
||||
payload = { renew: { period: 1, period_unit: 'y', exp_date: original_valid_to } }
|
||||
post "/repp/v1/domains/#{@domain.name}/renew", headers: @auth_headers, params: payload.to_json
|
||||
json = JSON.parse(response.body, symbolize_names: true)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue