diff --git a/CHANGELOG.md b/CHANGELOG.md index 66e29f9f7..edd7378fc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,18 @@ +23.04.2018 +* WHOIS: domains with deleteCandidate status do not return registration details as domains waiting to be deleted [#789](https://github.com/internetee/registry/issues/789) +* Security: Nokigiri gem update to version 1.8.2 [#823](https://github.com/internetee/registry/pull/823) +* Bug: fixed missing translation error in admin mail templates page [#818](https://github.com/internetee/registry/pull/818) +* Admin: VAT percentage info to registrar profile for setting tax rate for foreign non vat liable registrars [#623](https://github.com/internetee/registry/issues/623) +* Admin: deleteCandidate status is now stressed in domain details view [#792](https://github.com/internetee/registry/issues/792) +* Removed invoice_type from invoice db data as unused [#772](https://github.com/internetee/registry/issues/772) +* Removed valid_from from domain db data as duplicated and unused [#787](https://github.com/internetee/registry/issues/787) +* Set Not null constraint to valid_ti domain db data [#800](https://github.com/internetee/registry/issues/800) +* Removed unused methods [#797](https://github.com/internetee/registry/issues/797) +* Removed unused cron tasks [#782](https://github.com/internetee/registry/issues/782) +* Removed some monkey-patching for flash message logging [#231](https://github.com/internetee/registry/issues/231) +* Added Docker container support for dev and test environments [#821](https://github.com/internetee/registry/issues/821) +* Fix for Travis CI random test failures [#809](https://github.com/internetee/registry/pull/809) + 03.04.2018 * BUG: Fixed bug with sometimes failing bank-link payments [#642](https://github.com/internetee/registry/issues/642) * EPP: Domain and associated objects are now validated on domain renew [#678](https://github.com/internetee/registry/issues/678) diff --git a/Gemfile b/Gemfile index 9b6f97dad..54210f794 100644 --- a/Gemfile +++ b/Gemfile @@ -11,7 +11,7 @@ source 'https://rubygems.org' gem 'SyslogLogger', '2.0', require: 'syslog/logger' gem 'iso8601', '0.8.6' # for dates and times -gem 'rails', '4.2.7.1' # when update, all initializers eis_custom files needs check/update +gem 'rails', '4.2.10' # when update, all initializers eis_custom files needs check/update gem 'rest-client' # load env diff --git a/Gemfile.lock b/Gemfile.lock index aebf698c7..03193e703 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -60,43 +60,42 @@ GEM remote: https://rubygems.org/ specs: SyslogLogger (2.0) - actionmailer (4.2.7.1) - actionpack (= 4.2.7.1) - actionview (= 4.2.7.1) - activejob (= 4.2.7.1) + actionmailer (4.2.10) + actionpack (= 4.2.10) + actionview (= 4.2.10) + activejob (= 4.2.10) mail (~> 2.5, >= 2.5.4) rails-dom-testing (~> 1.0, >= 1.0.5) - actionpack (4.2.7.1) - actionview (= 4.2.7.1) - activesupport (= 4.2.7.1) + actionpack (4.2.10) + actionview (= 4.2.10) + activesupport (= 4.2.10) rack (~> 1.6) rack-test (~> 0.6.2) rails-dom-testing (~> 1.0, >= 1.0.5) rails-html-sanitizer (~> 1.0, >= 1.0.2) - actionview (4.2.7.1) - activesupport (= 4.2.7.1) + actionview (4.2.10) + activesupport (= 4.2.10) builder (~> 3.1) erubis (~> 2.7.0) rails-dom-testing (~> 1.0, >= 1.0.5) - rails-html-sanitizer (~> 1.0, >= 1.0.2) + rails-html-sanitizer (~> 1.0, >= 1.0.3) active_model-errors_details (1.3.1) activemodel (>= 3.2.13, < 5.0.0) activesupport - activejob (4.2.7.1) - activesupport (= 4.2.7.1) + activejob (4.2.10) + activesupport (= 4.2.10) globalid (>= 0.3.0) - activemodel (4.2.7.1) - activesupport (= 4.2.7.1) + activemodel (4.2.10) + activesupport (= 4.2.10) builder (~> 3.1) - activerecord (4.2.7.1) - activemodel (= 4.2.7.1) - activesupport (= 4.2.7.1) + activerecord (4.2.10) + activemodel (= 4.2.10) + activesupport (= 4.2.10) arel (~> 6.0) activerecord-import (0.7.0) activerecord (>= 3.0) - activesupport (4.2.7.1) + activesupport (4.2.10) i18n (~> 0.7) - json (~> 1.7, >= 1.7.7) minitest (~> 5.1) thread_safe (~> 0.3, >= 0.3.4) tzinfo (~> 1.1) @@ -160,7 +159,7 @@ GEM unicode_utils (~> 1.4) crack (0.4.3) safe_yaml (~> 1.0.0) - crass (1.0.3) + crass (1.0.4) daemons (1.2.4) daemons-rails (1.2.1) daemons @@ -189,8 +188,8 @@ GEM railties (>= 3.0.0) figaro (1.1.1) thor (~> 0.14) - globalid (0.3.7) - activesupport (>= 4.1.0) + globalid (0.4.1) + activesupport (>= 4.2.0) grape (0.12.0) activesupport builder @@ -228,7 +227,7 @@ GEM httpi (2.4.2) rack socksify - i18n (0.8.4) + i18n (0.8.6) i18n_data (0.7.0) ice_nine (0.11.2) isikukood (0.1.2) @@ -251,8 +250,8 @@ GEM loofah (2.2.2) crass (~> 1.0.2) nokogiri (>= 1.5.9) - mail (2.6.6) - mime-types (>= 1.16, < 4) + mail (2.7.0) + mini_mime (>= 0.1.1) method_source (0.8.2) mime-types (3.1) mime-types-data (~> 3.2015) @@ -260,8 +259,9 @@ GEM mina (0.3.1) open4 (~> 1.3.4) rake + mini_mime (1.0.0) mini_portile2 (2.3.0) - minitest (5.10.3) + minitest (5.11.3) monetize (1.6.0) money (~> 6.8) money (6.8.3) @@ -275,7 +275,7 @@ GEM multi_json (1.12.1) multi_xml (0.6.0) netrc (0.11.0) - nokogiri (1.8.1) + nokogiri (1.8.2) mini_portile2 (~> 2.3.0) nori (2.6.0) open4 (1.3.4) @@ -313,35 +313,35 @@ GEM rack-test (0.6.3) rack (>= 1.0) railroady (1.3.0) - rails (4.2.7.1) - actionmailer (= 4.2.7.1) - actionpack (= 4.2.7.1) - actionview (= 4.2.7.1) - activejob (= 4.2.7.1) - activemodel (= 4.2.7.1) - activerecord (= 4.2.7.1) - activesupport (= 4.2.7.1) + rails (4.2.10) + actionmailer (= 4.2.10) + actionpack (= 4.2.10) + actionview (= 4.2.10) + activejob (= 4.2.10) + activemodel (= 4.2.10) + activerecord (= 4.2.10) + activesupport (= 4.2.10) bundler (>= 1.3.0, < 2.0) - railties (= 4.2.7.1) + railties (= 4.2.10) sprockets-rails rails-deprecated_sanitizer (1.0.3) activesupport (>= 4.2.0.alpha) - rails-dom-testing (1.0.8) - activesupport (>= 4.2.0.beta, < 5.0) + rails-dom-testing (1.0.9) + activesupport (>= 4.2.0, < 5.0) nokogiri (~> 1.6) rails-deprecated_sanitizer (>= 1.0.1) - rails-html-sanitizer (1.0.3) - loofah (~> 2.0) + rails-html-sanitizer (1.0.4) + loofah (~> 2.2, >= 2.2.2) rails-settings-cached (0.4.1) rails (>= 4.0.0) - railties (4.2.7.1) - actionpack (= 4.2.7.1) - activesupport (= 4.2.7.1) + railties (4.2.10) + actionpack (= 4.2.10) + activesupport (= 4.2.10) rake (>= 0.8.7) thor (>= 0.18.1, < 2.0) rainbow (2.2.2) rake - rake (12.0.0) + rake (12.3.1) ransack (1.5.1) actionpack (>= 3.0) activerecord (>= 3.0) @@ -430,14 +430,14 @@ GEM sprockets (3.7.1) concurrent-ruby (~> 1.0) rack (> 1, < 3) - sprockets-rails (3.2.0) + sprockets-rails (3.2.1) actionpack (>= 4.0) activesupport (>= 4.0) sprockets (>= 3.0.0) - thor (0.19.4) + thor (0.20.0) thread_safe (0.3.6) tilt (1.4.1) - tzinfo (1.2.3) + tzinfo (1.2.5) thread_safe (~> 0.1) unf (0.1.4) unf_ext @@ -522,7 +522,7 @@ DEPENDENCIES que-web (= 0.4.0) que_mailer! railroady (= 1.3.0) - rails (= 4.2.7.1) + rails (= 4.2.10) rails-settings-cached (= 0.4.1) ransack (= 1.5.1) rest-client diff --git a/app/controllers/admin/contact_versions_controller.rb b/app/controllers/admin/contact_versions_controller.rb index d066f698e..e64a86774 100644 --- a/app/controllers/admin/contact_versions_controller.rb +++ b/app/controllers/admin/contact_versions_controller.rb @@ -1,5 +1,7 @@ module Admin class ContactVersionsController < BaseController + include ObjectVersionsHelper + load_and_authorize_resource def index diff --git a/app/controllers/admin/domain_versions_controller.rb b/app/controllers/admin/domain_versions_controller.rb index 283c84f97..2585ab894 100644 --- a/app/controllers/admin/domain_versions_controller.rb +++ b/app/controllers/admin/domain_versions_controller.rb @@ -1,5 +1,7 @@ module Admin class DomainVersionsController < BaseController + include ObjectVersionsHelper + load_and_authorize_resource def index diff --git a/app/helpers/contact_helper.rb b/app/helpers/contact_helper.rb new file mode 100644 index 000000000..6b15e3da4 --- /dev/null +++ b/app/helpers/contact_helper.rb @@ -0,0 +1,5 @@ +module ContactHelper + def printable_street(street) + street.to_s.gsub("\n", '
').html_safe + end +end diff --git a/app/helpers/object_versions_helper.rb b/app/helpers/object_versions_helper.rb new file mode 100644 index 000000000..d8e00abbe --- /dev/null +++ b/app/helpers/object_versions_helper.rb @@ -0,0 +1,15 @@ +module ObjectVersionsHelper + def attach_existing_fields(version, new_object) + version.object_changes.to_h.each do |key, value| + method_name = "#{key}=".to_sym + if new_object.respond_to?(method_name) + new_object.public_send(method_name, value.last) + end + end + end + + def only_present_fields(version, model) + field_names = model.column_names + version.object.to_h.select { |key, _value| field_names.include?(key) } + end +end diff --git a/app/models/whois_record.rb b/app/models/whois_record.rb index e3ec636ba..3ff0e9023 100644 --- a/app/models/whois_record.rb +++ b/app/models/whois_record.rb @@ -23,6 +23,12 @@ class WhoisRecord < ActiveRecord::Base h = HashWithIndifferentAccess.new return h if domain.blank? + if domain.discarded? + h[:name] = domain.name + h[:status] = ['deleteCandidate'] + return h + end + status_map = { 'ok' => 'ok (paid and in zone)' } @@ -88,7 +94,8 @@ class WhoisRecord < ActiveRecord::Base end def generated_body - template = Rails.root.join("app/views/for_models/whois.erb".freeze) + template_name = domain.discarded? ? 'whois_discarded.erb' : 'whois.erb' + template = Rails.root.join("app/views/for_models/#{template_name}".freeze) ERB.new(template.read, nil, "-").result(binding) end # rubocop:enable Metrics/MethodLength diff --git a/app/views/admin/contact_versions/index.haml b/app/views/admin/contact_versions/index.haml index 0367db3be..8f293ba5d 100644 --- a/app/views/admin/contact_versions/index.haml +++ b/app/views/admin/contact_versions/index.haml @@ -57,8 +57,9 @@ %tbody - @versions.each do |version| - if version - - contact = Contact.new(version.object.to_h) - - version.object_changes.to_h.each { |k,v| contact.public_send("#{k}=", v.last) } + - attributes = only_present_fields(version, Contact) + - contact = Contact.new(attributes) + - attach_existing_fields(version, contact) %tr %td= link_to(contact.name, admin_contact_version_path(version.id)) diff --git a/app/views/admin/contact_versions/show.haml b/app/views/admin/contact_versions/show.haml index e19326fca..38139b455 100644 --- a/app/views/admin/contact_versions/show.haml +++ b/app/views/admin/contact_versions/show.haml @@ -1,5 +1,6 @@ -- contact = Contact.new(@version.object.to_h) -- @version.object_changes.to_h.each { |k,v| contact.public_send("#{k}=", v.last ) } +- attributes = only_present_fields(@version, Contact) +- contact = Contact.new(attributes) +- attach_existing_fields(@version, contact) = render 'shared/title', name: contact.name .row @@ -41,11 +42,11 @@ %br - %dt= t(:created) + %dt= t(:created_at) %dd{class: changing_css_class(@version,"created_at")} = l(contact.created_at, format: :short) - %dt= t(:updated) + %dt= t(:updated_at) %dd{class: changing_css_class(@version,"updated_at")} = l(contact.updated_at, format: :short) @@ -61,7 +62,7 @@ - if contact.street.present? %dt= t(:street) - %dd{class: changing_css_class(@version,"street")}= contact.street.to_s.gsub("\n", '
').html_safe + %dd{class: changing_css_class(@version,"street")}= printable_street(contact.street) - if contact.city.present? %dt= t(:city) diff --git a/app/views/admin/domain_versions/archive.haml b/app/views/admin/domain_versions/archive.haml index 5e6d8eaa9..9fdf8b000 100644 --- a/app/views/admin/domain_versions/archive.haml +++ b/app/views/admin/domain_versions/archive.haml @@ -55,8 +55,9 @@ %tbody - @versions.each do |version| - if version - - domain = Domain.new(version.object.to_h) - - version.object_changes.to_h.each{|k,v| domain.public_send("#{k}=", v.last) } + - attributes = only_present_fields(version, Domain) + - domain = Domain.new(attributes) + - attach_existing_fields(version, domain) %tr %td= link_to(domain.name, admin_domain_version_path(version.id)) diff --git a/app/views/admin/domain_versions/show.haml b/app/views/admin/domain_versions/show.haml index 1a17ba3f9..9a38150be 100644 --- a/app/views/admin/domain_versions/show.haml +++ b/app/views/admin/domain_versions/show.haml @@ -1,5 +1,6 @@ -- domain = Domain.new(@version.object.to_h) -- @version.object_changes.to_h.each{|k,v| domain.public_send("#{k}=", v.last) } +- present_fields = only_present_fields(@version, Domain) +- domain = Domain.new(present_fields) +- attach_existing_fields(@version, domain) - if @version - children = HashWithIndifferentAccess.new(@version.children) diff --git a/app/views/for_models/whois_discarded.erb b/app/views/for_models/whois_discarded.erb new file mode 100644 index 000000000..ecaa6f9af --- /dev/null +++ b/app/views/for_models/whois_discarded.erb @@ -0,0 +1,8 @@ +Estonia .ee Top Level Domain WHOIS server + +Domain: +name: <%= json['name'] %> +status: <%= json['status'] %> + +Estonia .ee Top Level Domain WHOIS server +More information at http://internet.ee diff --git a/app/views/registrant/contacts/partials/_address.haml b/app/views/registrant/contacts/partials/_address.haml index 9c0f548e3..fffef581f 100644 --- a/app/views/registrant/contacts/partials/_address.haml +++ b/app/views/registrant/contacts/partials/_address.haml @@ -8,7 +8,7 @@ %dd= @contact.org_name %dt= t(:street) - %dd= @contact.street.to_s.gsub("\n", '
').html_safe + %dd= printable_street(@contact.street) %dt= t(:city) %dd= @contact.city diff --git a/test/integration/admin/contact_versions_test.rb b/test/integration/admin/contact_versions_test.rb new file mode 100644 index 000000000..cd67eb964 --- /dev/null +++ b/test/integration/admin/contact_versions_test.rb @@ -0,0 +1,60 @@ +require 'test_helper' + +class ContactVersionsTest < ActionDispatch::IntegrationTest + def setup + super + + create_contact_with_history + login_as users(:admin) + end + + def teardown + super + + delete_objects_once_done + end + + def create_contact_with_history + sql = <<-SQL.squish + INSERT INTO registrars (id, name, reg_no, email, country_code, code, + accounting_customer_code, language) + VALUES (75, 'test_registrar', 'test123', 'test@test.com', 'EE', 'TEST123', + 'test123', 'en'); + + INSERT INTO contacts (id, code, auth_info, registrar_id) + VALUES (75, 'test_code', '8b4d462aa04194ca78840a', 75); + + INSERT INTO log_contacts (item_type, item_id, event, whodunnit, object, + object_changes, created_at, session, children, ident_updated_at, uuid) + VALUES ('Contact', 75, 'update', '1-AdminUser', + '{"id": 75, "code": "test_code", "auth_info": "8b4d462aa04194ca78840a", "registrar_id": 75, "old_field": "value"}', + '{"other_made_up_field": "value"}', + '2018-04-23 15:50:48.113491', '2018-04-23 12:44:56', + '{"legal_documents":[null]}', null, null + ) + SQL + + ActiveRecord::Base.connection.execute(sql) + end + + def delete_objects_once_done + ActiveRecord::Base.connection.execute('DELETE from log_contacts where item_id = 75') + Domain.destroy_all + Contact.destroy_all + Registrar.destroy_all + end + + def test_removed_fields_are_not_causing_errors_in_index_view + visit admin_contact_versions_path + assert_text 'test_registrar' + assert_text 'update 23.04.18, 18:50' + end + + def test_removed_fields_are_not_causing_errors_in_details_view + version_id = Contact.find(75).versions.last + visit admin_contact_version_path(version_id) + + assert_text 'test_registrar' + assert_text '23.04.18, 18:50 update 1-AdminUser' + end +end diff --git a/test/integration/admin/domain_versions_test.rb b/test/integration/admin/domain_versions_test.rb new file mode 100644 index 000000000..195433948 --- /dev/null +++ b/test/integration/admin/domain_versions_test.rb @@ -0,0 +1,65 @@ +require 'test_helper' + +class DomainVersionsTest < ActionDispatch::IntegrationTest + def setup + super + + create_domain_with_history + login_as users(:admin) + end + + def teardown + super + + delete_objects_once_done + end + + def create_domain_with_history + sql = <<-SQL.squish + INSERT INTO registrars (id, name, reg_no, email, country_code, code, + accounting_customer_code, language) + VALUES (54, 'test_registrar', 'test123', 'test@test.com', 'EE', 'TEST123', + 'test123', 'en'); + + INSERT INTO contacts (id, code, auth_info, registrar_id) + VALUES (54, 'test_code', '8b4d462aa04194ca78840a', 54); + + INSERT INTO domains (id, registrar_id, valid_to, registrant_id, + transfer_code) + VALUES (54, 54, '2018-06-23T12:14:02.732+03:00', 54, 'transfer_code'); + + INSERT INTO log_domains (item_type, item_id, event, whodunnit, object, + object_changes, created_at, nameserver_ids, tech_contact_ids, + admin_contact_ids, session, children) + VALUES ('Domain', 54, 'update', '1-AdminUser', + '{"id": 54, "registrar_id": 54, "valid_to": "2018-07-23T12:14:05.583+03:00", "registrant_id": 54, "transfer_code": "transfer_code", "valid_from": "2017-07-23T12:14:05.583+03:00"}', + '{"foo": "bar", "other_made_up_field": "value"}', + '2018-04-23 15:50:48.113491', '{}', '{}', '{}', '2018-04-23 12:44:56', + '{"null_fracdmin_contacts":[108],"tech_contacts":[109],"nameservers":[],"dnskeys":[],"legal_documents":[null],"registrant":[1]}' + ) + SQL + ActiveRecord::Base.connection.execute(sql) + end + + def delete_objects_once_done + ActiveRecord::Base.connection.execute('DELETE FROM log_domains where item_id = 54') + Domain.destroy_all + Contact.destroy_all + Registrar.destroy_all + end + + def test_removed_fields_are_not_causing_errors_in_index_view + visit admin_domain_versions_path + + assert_text 'test_registrar' + assert_text 'test_registrar update 23.04.18, 18:50' + end + + def test_removed_fields_are_not_causing_errors_in_details_view + version_id = Domain.find(54).versions.last + visit admin_domain_version_path(version_id) + + assert_text 'test_registrar' + assert_text '23.04.18, 18:50 update 1-AdminUser' + end +end