diff --git a/app/models/domain.rb b/app/models/domain.rb index 7237a24ed..7b744b03c 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -118,6 +118,11 @@ class Domain < ActiveRecord::Base validate :status_is_consistant def status_is_consistant has_error = (statuses.include?(DomainStatus::SERVER_HOLD) && statuses.include?(DomainStatus::SERVER_MANUAL_INZONE)) + unless has_error + if (statuses & [DomainStatus::PENDING_DELETE_CONFIRMATION, DomainStatus::PENDING_DELETE, DomainStatus::FORCE_DELETE]).any? + has_error = statuses.include? DomainStatus::SERVER_DELETE_PROHIBITED + end + end errors.add(:domains, I18n.t(:object_status_prohibits_operation)) if has_error end @@ -445,22 +450,17 @@ class Domain < ActiveRecord::Base # rubocop: disable Metrics/CyclomaticComplexity def registrant_update_confirmable?(token) - return true if Rails.env.development? + return false if (statuses & [DomainStatus::FORCE_DELETE, DomainStatus::DELETE_CANDIDATE]).any? return false unless pending_update? - return false if registrant_verification_token.blank? - return false if registrant_verification_asked_at.blank? - return false if token.blank? - return false if registrant_verification_token != token + return false unless registrant_verification_asked? + return false unless registrant_verification_token == token true end def registrant_delete_confirmable?(token) - return true if Rails.env.development? return false unless pending_delete? - return false if registrant_verification_token.blank? - return false if registrant_verification_asked_at.blank? - return false if token.blank? - return false if registrant_verification_token != token + return false unless registrant_verification_asked? + return false unless registrant_verification_token == token true end # rubocop: enable Metrics/CyclomaticComplexity @@ -695,7 +695,7 @@ class Domain < ActiveRecord::Base end def pending_delete? - statuses.include?(DomainStatus::PENDING_DELETE) && !statuses.include?(DomainStatus::FORCE_DELETE) + (statuses & [DomainStatus::PENDING_DELETE_CONFIRMATION, DomainStatus::PENDING_DELETE]).any? end def pending_delete_confirmation? diff --git a/app/models/epp/domain.rb b/app/models/epp/domain.rb index 9a9e51b4e..f59df6ddc 100644 --- a/app/models/epp/domain.rb +++ b/app/models/epp/domain.rb @@ -776,12 +776,12 @@ class Epp::Domain < Domain ### ABILITIES ### - # depricated -- this is redundant TODO: try to remove + def can_be_deleted? begin errors.add(:base, :domain_status_prohibits_operation) return false - end if statuses.include?(DomainStatus::CLIENT_DELETE_PROHIBITED) + end if (statuses & [DomainStatus::CLIENT_DELETE_PROHIBITED, DomainStatus::SERVER_DELETE_PROHIBITED]).any? true end diff --git a/app/views/admin/domains/form/_pending_delete.haml b/app/views/admin/domains/form/_pending_delete.haml index 6924a2b30..2e199d0b7 100644 --- a/app/views/admin/domains/form/_pending_delete.haml +++ b/app/views/admin/domains/form/_pending_delete.haml @@ -1,8 +1,8 @@ -- if (status == DomainStatus::PENDING_DELETE && f.object.pending_json.present?) - = link_to(t(:apply_pending), admin_domain_pending_delete_path(f.object.id, f.object.id), +- if (status == DomainStatus::PENDING_DELETE || status == DomainStatus::PENDING_DELETE_CONFIRMATION) + = link_to(t(:accept_delete), admin_domain_pending_delete_path(f.object.id, f.object.id), method: :patch, data: { confirm: t(:are_you_sure) }, class: 'btn btn-danger btn-xs') - = link_to(t(:delete_pending), admin_domain_pending_delete_path(f.object.id, f.object.id), + = link_to(t(:reject_delete), admin_domain_pending_delete_path(f.object.id, f.object.id), method: :delete, data: { confirm: t(:are_you_sure) }, class: 'btn btn-danger btn-xs') diff --git a/app/views/admin/shared/form/_statuses.haml b/app/views/admin/shared/form/_statuses.haml index 697abad44..27be8d032 100644 --- a/app/views/admin/shared/form/_statuses.haml +++ b/app/views/admin/shared/form/_statuses.haml @@ -9,8 +9,9 @@ .pull-left= t(:status) .pull-right - if model == 'domain' - = render 'admin/domains/form/pending_update', f: f, status: s - = render 'admin/domains/form/pending_delete', f: f, status: s + .hide-when-new + = render 'admin/domains/form/pending_update', f: f, status: s + = render 'admin/domains/form/pending_delete', f: f, status: s = link_to(t(:delete), '#', class: 'btn btn-danger btn-xs js-destroy-status', style: delete_style) .panel-body .form-group @@ -37,6 +38,7 @@ if el.find('.js-disabled-value') el.find('.js-disabled-value').remove() el.find('.js-select').show() + el.find('.hide-when-new').hide() el.find('.js-destroy-status').show() $(document).on 'click', '.js-destroy-status', (e) -> diff --git a/app/views/epp/domains/info.xml.builder b/app/views/epp/domains/info.xml.builder index c4827f29f..e7962002c 100644 --- a/app/views/epp/domains/info.xml.builder +++ b/app/views/epp/domains/info.xml.builder @@ -61,19 +61,34 @@ xml.epp_head do end xml.extension do + def tag_key_data(xml, key) + xml.tag!('secDNS:keyData') do + xml.tag!('secDNS:flags', key.flags) + xml.tag!('secDNS:protocol', key.protocol) + xml.tag!('secDNS:alg', key.alg) + xml.tag!('secDNS:pubKey', key.public_key) + end + end + + def tag_ds_data(xml, key) + xml.tag!('secDNS:dsData') do + xml.tag!('secDNS:keyTag', key.ds_key_tag) + xml.tag!('secDNS:alg', key.ds_alg) + xml.tag!('secDNS:digestType', key.ds_digest_type) + xml.tag!('secDNS:digest', key.ds_digest) + tag_key_data(xml, key) if key.public_key.present? + end + end + xml.tag!('secDNS:infData', 'xmlns:secDNS' => 'urn:ietf:params:xml:ns:secDNS-1.1') do - @domain.dnskeys.sort.each do |key| - xml.tag!('secDNS:dsData') do - xml.tag!('secDNS:keyTag', key.ds_key_tag) - xml.tag!('secDNS:alg', key.ds_alg) - xml.tag!('secDNS:digestType', key.ds_digest_type) - xml.tag!('secDNS:digest', key.ds_digest) - xml.tag!('secDNS:keyData') do - xml.tag!('secDNS:flags', key.flags) - xml.tag!('secDNS:protocol', key.protocol) - xml.tag!('secDNS:alg', key.alg) - xml.tag!('secDNS:pubKey', key.public_key) - end + # might not have ds in first key? maybe check any? k.ds_digest if requirements change (DS not accepted by EIS) + if @domain.dnskeys[0].ds_digest.blank? + @domain.dnskeys.sort.each do |key| + tag_key_data(xml, key) + end + else + @domain.dnskeys.sort.each do |key| + tag_ds_data(xml, key) end end end diff --git a/app/views/registrar/domains/partials/_dnskeys.haml b/app/views/registrar/domains/partials/_dnskeys.haml index fc5961849..46dcd0fce 100644 --- a/app/views/registrar/domains/partials/_dnskeys.haml +++ b/app/views/registrar/domains/partials/_dnskeys.haml @@ -19,7 +19,22 @@ - if x.css('digest').text.present? %dt= t(:ds_digest) %dd= x.css('digest').text + - @data.css('keyData').each do |x| + %dl.dl-horizontal + %dt= t(:flag) + %dd= x.css('flags').text + %dt= t(:protocol) + %dd= x.css('protocol').text + + %dt= t(:algorithm) + %dd= x.css('alg').text + + %dt= t(:public_key) + %dd= x.css('pubKey').text + + - @data.css('keyData').each do |x| + %dl.dl-horizontal %dt= t(:flag) %dd= x.css('flags').text @@ -27,7 +42,7 @@ %dd= x.css('protocol').text %dt= t(:algorithm) - %dd= x.css('keyData > alg').text + %dd= x.css('alg').text %dt= t(:public_key) %dd= x.css('pubKey').text diff --git a/spec/epp/domain_spec.rb b/spec/epp/domain_spec.rb index 4c5ba2118..8e3997649 100644 --- a/spec/epp/domain_spec.rb +++ b/spec/epp/domain_spec.rb @@ -2444,9 +2444,9 @@ describe 'EPP Domain', epp: true do }) response = epp_plain_request(xml) - response[:results][0][:msg].should start_with + response[:results][0][:msg].should start_with( "Element '{https://epp.tld.ee/schema/domain-eis-1.0.xsd}status', attribute 's': "\ - "[facet 'enumeration'] The value 'invalidStatus' is not an element of the set " + "[facet 'enumeration'] The value 'invalidStatus' is not an element of the set ") response[:results][0][:result_code].should == '2001' end