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
|
def renew
|
||||||
authorize! :renew, @domain
|
authorize! :renew, @domain
|
||||||
return handle_errors(@domain) if invalid_expiry_date?
|
|
||||||
|
|
||||||
registrar_id = current_user.registrar.id
|
registrar_id = current_user.registrar.id
|
||||||
renew_params = ::Deserializers::Xml::Domain.new(params[:parsed_frame],
|
renew_params = ::Deserializers::Xml::Domain.new(params[:parsed_frame],
|
||||||
registrar_id).call
|
registrar_id).call
|
||||||
|
|
||||||
action = Actions::DomainRenew.new(@domain, renew_params, current_user.registrar)
|
action = Actions::DomainRenew.new(@domain, renew_params, current_user.registrar)
|
||||||
if action.call
|
if action.call
|
||||||
render_epp_response '/epp/domains/renew'
|
render_epp_response '/epp/domains/renew'
|
||||||
|
@ -228,11 +228,6 @@ module Epp
|
||||||
statuses == [::DomainStatus::CLIENT_HOLD]
|
statuses == [::DomainStatus::CLIENT_HOLD]
|
||||||
end
|
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)
|
def balance_ok?(operation, period = nil, unit = nil)
|
||||||
@domain_pricelist = @domain.pricelist(operation, period.try(:to_i), unit)
|
@domain_pricelist = @domain.pricelist(operation, period.try(:to_i), unit)
|
||||||
if @domain_pricelist.try(:price) # checking if price list is not found
|
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 :renew, Hash, required: true, desc: 'Renew parameters' do
|
||||||
param :period, Integer, required: true, desc: 'Renew period. Month (m) or year (y)'
|
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 :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
|
end
|
||||||
def create
|
def create
|
||||||
authorize!(:renew, @domain)
|
authorize!(:renew, @domain)
|
||||||
|
@ -36,7 +37,7 @@ module Repp
|
||||||
private
|
private
|
||||||
|
|
||||||
def renew_params
|
def renew_params
|
||||||
params.permit(:domain_id, renew: %i[period period_unit])
|
params.permit(:domain_id, renew: %i[period period_unit exp_date])
|
||||||
end
|
end
|
||||||
|
|
||||||
def validate_renew_period
|
def validate_renew_period
|
||||||
|
|
|
@ -21,9 +21,9 @@ module Repp
|
||||||
desc 'Get a specific domain'
|
desc 'Get a specific domain'
|
||||||
def show
|
def show
|
||||||
@domain = Epp::Domain.find_by!(name: params[:id])
|
@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,
|
render_success(data: { domain: Serializers::Repp::Domain.new(@domain,
|
||||||
sponsored: sponsored).to_json })
|
sponsored: sponsor).to_json })
|
||||||
end
|
end
|
||||||
|
|
||||||
api :POST, '/repp/v1/domains'
|
api :POST, '/repp/v1/domains'
|
||||||
|
|
|
@ -16,11 +16,14 @@ module Actions
|
||||||
domain.add_renew_epp_errors
|
domain.add_renew_epp_errors
|
||||||
false
|
false
|
||||||
else
|
else
|
||||||
|
domain.validate_exp_dates(params[:exp_date])
|
||||||
renew
|
renew
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def renew
|
def renew
|
||||||
|
return false if domain.errors[:epp_errors].any?
|
||||||
|
|
||||||
task = Domains::BulkRenew::SingleDomainRenew.run(domain: domain,
|
task = Domains::BulkRenew::SingleDomainRenew.run(domain: domain,
|
||||||
period: params[:period],
|
period: params[:period],
|
||||||
unit: params[:period_unit],
|
unit: params[:period_unit],
|
||||||
|
|
|
@ -29,6 +29,7 @@ module Deserializers
|
||||||
{
|
{
|
||||||
period: period.text.present? ? Integer(period.text) : 1,
|
period: period.text.present? ? Integer(period.text) : 1,
|
||||||
period_unit: period.first ? period.first[:unit] : 'y',
|
period_unit: period.first ? period.first[:unit] : 'y',
|
||||||
|
exp_date: if_present('curExpDate'),
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@ module Serializers
|
||||||
@sponsored = sponsored
|
@sponsored = sponsored
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# rubocop:disable Metrics/AbcSize
|
||||||
def to_json(obj = domain)
|
def to_json(obj = domain)
|
||||||
json = {
|
json = {
|
||||||
name: obj.name, registrant: obj.registrant.code, created_at: obj.created_at,
|
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[:transfer_code] = obj.auth_info if @sponsored
|
||||||
json
|
json
|
||||||
end
|
end
|
||||||
|
# rubocop:enable Metrics/AbcSize
|
||||||
|
|
||||||
def contacts
|
def contacts
|
||||||
domain.domain_contacts.map { |c| { code: c.contact_code_cache, type: c.type } }
|
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')
|
travel_to Time.zone.parse('2010-07-05')
|
||||||
|
|
||||||
@auth_headers['Content-Type'] = 'application/json'
|
@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
|
post "/repp/v1/domains/#{@domain.name}/renew", headers: @auth_headers, params: payload.to_json
|
||||||
json = JSON.parse(response.body, symbolize_names: true)
|
json = JSON.parse(response.body, symbolize_names: true)
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ class ReppV1DomainsRenewsTest < ActionDispatch::IntegrationTest
|
||||||
travel_to Time.zone.parse('2010-07-05')
|
travel_to Time.zone.parse('2010-07-05')
|
||||||
|
|
||||||
@auth_headers['Content-Type'] = 'application/json'
|
@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
|
post "/repp/v1/domains/#{@domain.name}/renew", headers: @auth_headers, params: payload.to_json
|
||||||
json = JSON.parse(response.body, symbolize_names: true)
|
json = JSON.parse(response.body, symbolize_names: true)
|
||||||
|
|
||||||
|
@ -48,14 +48,14 @@ class ReppV1DomainsRenewsTest < ActionDispatch::IntegrationTest
|
||||||
days_to_renew_domain_before_expire.reload
|
days_to_renew_domain_before_expire.reload
|
||||||
|
|
||||||
original_valid_to = @domain.valid_to
|
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 = billing_prices(:renew_one_year)
|
||||||
one_year.update(valid_from: @domain.valid_to - 5.days)
|
one_year.update(valid_from: @domain.valid_to - 5.days)
|
||||||
one_year.reload
|
one_year.reload
|
||||||
|
|
||||||
@auth_headers['Content-Type'] = 'application/json'
|
@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
|
post "/repp/v1/domains/#{@domain.name}/renew", headers: @auth_headers, params: payload.to_json
|
||||||
json = JSON.parse(response.body, symbolize_names: true)
|
json = JSON.parse(response.body, symbolize_names: true)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue