Prevent domain deleting if status prohibits it

This commit is contained in:
Martin Lensment 2014-09-18 16:41:47 +03:00
parent 0096968265
commit b4602e701c
7 changed files with 48 additions and 3 deletions

View file

@ -1,5 +1,6 @@
class Admin::DomainsController < ApplicationController
before_action :set_domain, only: [:show, :edit, :update]
before_action :set_domain, only: [:show, :edit, :update, :destroy]
before_action :verify_deletion, only: [:destroy]
def new
@domain = Domain.new
@ -37,6 +38,16 @@ class Admin::DomainsController < ApplicationController
end
end
def destroy
if @domain.destroy
flash[:notice] = I18n.t('shared.domain_deleted')
redirect_to admin_domains_path
else
flash[:alert] = I18n.t('shared.failed_to_delete_domain')
redirect_to [:admin, @domain]
end
end
private
def set_domain
@ -46,5 +57,11 @@ class Admin::DomainsController < ApplicationController
def domain_params
params.require(:domain).permit(:name, :period, :period_unit, :registrar_id, :owner_contact_id)
end
def verify_deletion
return if @domain.can_be_deleted?
flash[:alert] = I18n.t('shared.domain_status_prohibits_deleting')
redirect_to [:admin, @domain]
end
end

View file

@ -80,6 +80,7 @@ module Epp::DomainsHelper
@domain = find_domain
handle_errors(@domain) and return unless @domain
handle_errors(@domain) and return unless @domain.can_be_deleted?
handle_errors(@domain) and return unless @domain.destroy
render '/epp/domains/success'

View file

@ -67,7 +67,6 @@ class Domain < ActiveRecord::Base
def can_be_deleted?
(domain_statuses.pluck(:value) & %W(
#{DomainStatus::CLIENT_DELETE_PROHIBITED}
#{DomainStatus::SERVER_DELETE_PROHIBITED}
)).empty?
end

View file

@ -12,6 +12,9 @@ class Epp::EppDomain < Domain
[:name_dirty, :taken, { value: { obj: 'name', val: name_dirty } }],
[:name_dirty, :reserved, { value: { obj: 'name', val: name_dirty } }]
],
'2304' => [
[:base, :domain_status_prohibits_operation]
],
'2306' => [ # Parameter policy error
[:owner_contact, :blank],
[:admin_contacts, :out_of_range]
@ -237,6 +240,18 @@ class Epp::EppDomain < Domain
add_epp_error('2306', 'curExpDate', cur_exp_date, I18n.t('errors.messages.epp_exp_dates_do_not_match'))
end
### ABILITIES ###
def can_be_deleted?
begin
errors.add(:base, :domain_status_prohibits_operation)
return false
end if (domain_statuses.pluck(:value) & %W(
#{DomainStatus::CLIENT_DELETE_PROHIBITED}
)).any?
true
end
## SHARED
# For domain transfer

View file

@ -5,7 +5,7 @@
.col-sm-6
%h2.text-right.text-center-xs
= link_to(t('shared.edit'), edit_admin_domain_path(@domain), class: 'btn btn-primary')
= link_to(t('shared.delete'), root_path, method: :delete, data: { confirm: t('shared.are_you_sure') }, class: 'btn btn-danger')
= link_to(t('shared.delete'), admin_domain_path(@domain), method: :delete, data: { confirm: t('shared.are_you_sure') }, class: 'btn btn-danger')
%hr
.row

View file

@ -71,6 +71,8 @@ en:
epp_domain: &epp_domain_ar_attributes
attributes:
base:
domain_status_prohibits_operation: 'Domain status prohibits operation'
name_dirty:
invalid: 'Domain name is invalid'
reserved: 'Domain name is reserved or restricted'
@ -238,3 +240,6 @@ en:
failed_to_delete_status: 'Failed to delete status!'
tech_contact: 'Tech contact'
new_domain_contact: 'New contact'
domain_status_prohibits_deleting: 'Domain status prohibits deleting'
domain_deleted: 'Domain deleted!'
failed_to_delete_domain: 'Failed to delete domain!'

View file

@ -567,6 +567,14 @@ describe 'EPP Domain', epp: true do
expect(Domain.first).to eq(nil)
expect(DomainContact.count).to eq(0)
end
it 'does not delete domain with specific status' do
d = Domain.first
d.domain_statuses.create(value: DomainStatus::CLIENT_DELETE_PROHIBITED)
response = epp_request(domain_delete_xml, :xml)
expect(response[:result_code]).to eq('2304')
expect(response[:msg]).to eq('Domain status prohibits operation')
end
end
it 'checks a domain' do