From 764414ba34c10e1556401b379f553b1f7a2c8d6d Mon Sep 17 00:00:00 2001 From: Maciej Szlosarczyk Date: Wed, 25 Apr 2018 14:34:37 +0300 Subject: [PATCH 1/7] Add new Setting to handle whois disclaimers --- app/views/admin/settings/index.haml | 1 + config/initializers/initial_settings.rb | 1 + 2 files changed, 2 insertions(+) diff --git a/app/views/admin/settings/index.haml b/app/views/admin/settings/index.haml index c41f5cd6b..14e158ec0 100644 --- a/app/views/admin/settings/index.haml +++ b/app/views/admin/settings/index.haml @@ -99,6 +99,7 @@ = render 'setting_row', var: :registry_state = render 'setting_row', var: :registry_zip = render 'setting_row', var: :registry_country_code + = render 'setting_row', var: :registry_whois_disclaimer .row .col-md-12.text-right diff --git a/config/initializers/initial_settings.rb b/config/initializers/initial_settings.rb index 5ae521bc5..b6efea6eb 100644 --- a/config/initializers/initial_settings.rb +++ b/config/initializers/initial_settings.rb @@ -72,4 +72,5 @@ if con.present? && con.table_exists?('settings') Setting.save_default(:registry_bank_code, '689') Setting.save_default(:registry_swift, 'LHVBEE22') Setting.save_default(:registry_invoice_contact, 'Martti Õigus') + Setting.save_default(:registry_whois_disclaimer, 'Search results may not be used for commercial, advertising, recompilation, repackaging, redistribution, reuse, obscuring or other similar activities.') end From 9c606bdf2f90717bd109b53a7a578ee6af9e9cba Mon Sep 17 00:00:00 2001 From: Maciej Szlosarczyk Date: Wed, 25 Apr 2018 15:28:56 +0300 Subject: [PATCH 2/7] Add disclaimer to whois JSON --- app/jobs/update_whois_record_job.rb | 2 +- app/models/whois_record.rb | 7 ++++++ test/models/whois_record_test.rb | 34 +++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 test/models/whois_record_test.rb diff --git a/app/jobs/update_whois_record_job.rb b/app/jobs/update_whois_record_job.rb index acfafa3d4..bee0e032c 100644 --- a/app/jobs/update_whois_record_job.rb +++ b/app/jobs/update_whois_record_job.rb @@ -51,4 +51,4 @@ class UpdateWhoisRecordJob < Que::Job def delete_blocked(name) delete_reserved(name) end -end \ No newline at end of file +end diff --git a/app/models/whois_record.rb b/app/models/whois_record.rb index 3ff0e9023..42ea0b2fa 100644 --- a/app/models/whois_record.rb +++ b/app/models/whois_record.rb @@ -36,6 +36,7 @@ class WhoisRecord < ActiveRecord::Base registrant = domain.registrant @disclosed = [] + h[:disclaimer] = disclaimer_text h[:name] = domain.name h[:status] = domain.statuses.map { |x| status_map[x] || x } h[:registered] = domain.registered_at.try(:to_s, :iso8601) @@ -120,4 +121,10 @@ class WhoisRecord < ActiveRecord::Base def destroy_whois_record Whois::Record.where(name: name).delete_all end + + private + + def disclaimer_text + Setting.registry_whois_disclaimer + end end diff --git a/test/models/whois_record_test.rb b/test/models/whois_record_test.rb new file mode 100644 index 000000000..ed9a087f7 --- /dev/null +++ b/test/models/whois_record_test.rb @@ -0,0 +1,34 @@ +require 'test_helper' + +class WhoisRecordTest < ActiveSupport::TestCase + def setup + super + + @domain = domains(:shop) + @record = WhoisRecord.new(domain: @domain) + end + + def test_generated_json_has_expected_values + + expected_disclaimer_text = <<-TEXT.squish + Search results may not be used for commercial, advertising, recompilation, + repackaging, redistribution, reuse, obscuring or other similar activities. + TEXT + + expected_partial_hash = { + disclaimer: expected_disclaimer_text, + name: 'shop.test', + registrant: 'John', + registrant_kind: 'priv', + email: 'john@inbox.test', + expire: '2010-07-05', + nameservers: ['ns1.bestnames.test', 'ns2.bestnames.test'], + registrar_address: 'Main Street, New York, New York, 12345', + dnssec_keys: [], + } + + expected_partial_hash.each do |key, value| + assert_equal(value, @record.generated_json[key]) + end + end +end From 449a37252fa31fe3d05970ff5527a51ed7ee0135 Mon Sep 17 00:00:00 2001 From: Maciej Szlosarczyk Date: Wed, 25 Apr 2018 16:59:07 +0300 Subject: [PATCH 3/7] Add disclaimer to UNIX template --- app/views/for_models/whois.erb | 2 ++ test/models/whois_record_test.rb | 14 +++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/app/views/for_models/whois.erb b/app/views/for_models/whois.erb index 390511031..2d8db1d59 100644 --- a/app/views/for_models/whois.erb +++ b/app/views/for_models/whois.erb @@ -1,3 +1,5 @@ +<%= json['disclaimer'].scan(/\S.{0,72}\S(?=\s|$)|\S+/).join('\n') %> + Estonia .ee Top Level Domain WHOIS server Domain: diff --git a/test/models/whois_record_test.rb b/test/models/whois_record_test.rb index ed9a087f7..83822d37e 100644 --- a/test/models/whois_record_test.rb +++ b/test/models/whois_record_test.rb @@ -9,7 +9,6 @@ class WhoisRecordTest < ActiveSupport::TestCase end def test_generated_json_has_expected_values - expected_disclaimer_text = <<-TEXT.squish Search results may not be used for commercial, advertising, recompilation, repackaging, redistribution, reuse, obscuring or other similar activities. @@ -31,4 +30,17 @@ class WhoisRecordTest < ActiveSupport::TestCase assert_equal(value, @record.generated_json[key]) end end + + def test_generated_body_has_justified_disclaimer + expected_disclaimer_first_line = begin + "Search results may not be used for commercial, advertising, recompilation," + end + expected_disclaimer_second_line = begin + "repackaging, redistribution, reuse, obscuring or other similar activities" + end + @record.populate + + assert_match(expected_disclaimer_first_line, @record.body) + assert_match(expected_disclaimer_second_line, @record.body) + end end From fcab0ccedb958307bfa9e9d6e6d61445cc97a8b4 Mon Sep 17 00:00:00 2001 From: Maciej Szlosarczyk Date: Wed, 25 Apr 2018 17:04:54 +0300 Subject: [PATCH 4/7] Remove migrated whois_record test from Rspec test collection --- spec/models/whois_record_spec.rb | 67 -------------------------------- 1 file changed, 67 deletions(-) delete mode 100644 spec/models/whois_record_spec.rb diff --git a/spec/models/whois_record_spec.rb b/spec/models/whois_record_spec.rb deleted file mode 100644 index c1fba57f9..000000000 --- a/spec/models/whois_record_spec.rb +++ /dev/null @@ -1,67 +0,0 @@ -require 'rails_helper' - -RSpec.describe WhoisRecord do - describe '::generate_json', db: false do - let(:registrant) { build_stubbed(:registrant) } - let(:domain) { build_stubbed(:domain, registrant: registrant) } - let(:whois_record) { described_class.new } - subject(:generated_json) { whois_record.generate_json } - - before do - allow(whois_record).to receive(:domain).and_return(domain) - end - - it 'generates registrant kind' do - expect(registrant).to receive(:kind).and_return('test kind') - expect(generated_json[:registrant_kind]).to eq('test kind') - end - - describe 'reg no' do - subject(:reg_no) { generated_json[:registrant_reg_no] } - - before do - allow(registrant).to receive(:reg_no).and_return('test reg no') - end - - context 'when registrant is legal entity' do - let(:registrant) { build_stubbed(:registrant_legal_entity) } - - it 'is present' do - expect(reg_no).to eq('test reg no') - end - end - - context 'when registrant is private entity' do - let(:registrant) { build_stubbed(:registrant_private_entity) } - - it 'is absent' do - expect(reg_no).to be_nil - end - end - end - - describe 'country code' do - subject(:country_code) { generated_json[:registrant_ident_country_code] } - - before do - allow(registrant).to receive(:ident_country_code).and_return('test country code') - end - - context 'when registrant is legal entity' do - let(:registrant) { build_stubbed(:registrant_legal_entity) } - - it 'is present' do - expect(country_code).to eq('test country code') - end - end - - context 'when registrant is private entity' do - let(:registrant) { build_stubbed(:registrant_private_entity) } - - it 'is absent' do - expect(country_code).to be_nil - end - end - end - end -end From 396852df5384182b574c5cbbecf130031e077c40 Mon Sep 17 00:00:00 2001 From: Maciej Szlosarczyk Date: Thu, 26 Apr 2018 11:44:05 +0300 Subject: [PATCH 5/7] Remove technical and administrative contacts info It's a partial solution for https://github.com/internetee/whois/issues/26 --- app/views/for_models/whois.erb | 10 +++++----- test/models/whois_record_test.rb | 21 ++++++++++++++------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/app/views/for_models/whois.erb b/app/views/for_models/whois.erb index 2d8db1d59..04abd3094 100644 --- a/app/views/for_models/whois.erb +++ b/app/views/for_models/whois.erb @@ -1,4 +1,4 @@ -<%= json['disclaimer'].scan(/\S.{0,72}\S(?=\s|$)|\S+/).join('\n') %> +<%= json['disclaimer'].scan(/\S.{0,72}\S(?=\s|$)|\S+/).join("\n") %> Estonia .ee Top Level Domain WHOIS server @@ -25,18 +25,18 @@ changed: <%= json['registrant_changed'].to_s.tr('T',' ').sub('+', ' +') %> <%- if json['admin_contacts'].present? -%> Administrative contact: <%- for contact in json['admin_contacts'] -%> -name: <%= contact['name'] %> +name: Not Disclosed - Visit www.internet.ee for webbased WHOIS email: Not Disclosed - Visit www.internet.ee for webbased WHOIS -changed: <%= contact['changed'].to_s.tr('T',' ').sub('+', ' +') %> +changed: Not Disclosed - Visit www.internet.ee for webbased WHOIS <%- end -%> <%- end -%> <% if json['tech_contacts'].present? %> Technical contact: <%- for contact in json['tech_contacts'] -%> -name: <%= contact['name'] %> +name: Not Disclosed - Visit www.internet.ee for webbased WHOIS email: Not Disclosed - Visit www.internet.ee for webbased WHOIS -changed: <%= contact['changed'].to_s.tr('T',' ').sub('+', ' +') %> +changed: Not Disclosed - Visit www.internet.ee for webbased WHOIS <%- end -%> <%- end -%> diff --git a/test/models/whois_record_test.rb b/test/models/whois_record_test.rb index 83822d37e..ea8de006a 100644 --- a/test/models/whois_record_test.rb +++ b/test/models/whois_record_test.rb @@ -32,15 +32,22 @@ class WhoisRecordTest < ActiveSupport::TestCase end def test_generated_body_has_justified_disclaimer - expected_disclaimer_first_line = begin - "Search results may not be used for commercial, advertising, recompilation," + expected_disclaimer = begin + 'Search results may not be used for commercial, advertising, recompilation,\n' \ + 'repackaging, redistribution, reuse, obscuring or other similar activities.' end - expected_disclaimer_second_line = begin - "repackaging, redistribution, reuse, obscuring or other similar activities" + expected_technical_contact = begin + 'Technical contact:\n' \ + 'name: Not Disclosed - Visit www.internet.ee for webbased WHOIS\n' \ + 'email: Not Disclosed - Visit www.internet.ee for webbased WHOIS\n' \ + 'changed: Not Disclosed - Visit www.internet.ee for webbased WHOIS' end - @record.populate - assert_match(expected_disclaimer_first_line, @record.body) - assert_match(expected_disclaimer_second_line, @record.body) + regexp_contact = Regexp.new(expected_technical_contact, Regexp::MULTILINE) + regexp_disclaimer = Regexp.new(expected_disclaimer, Regexp::MULTILINE) + + @record.populate + assert_match(regexp_disclaimer, @record.body) + assert_match(regexp_contact, @record.body) end end From 20d341f2e5ef45682b6a1f9252940f1158c87c2e Mon Sep 17 00:00:00 2001 From: Maciej Szlosarczyk Date: Thu, 26 Apr 2018 12:18:03 +0300 Subject: [PATCH 6/7] Add handling of missing disclaimer --- app/models/whois_record.rb | 2 +- app/views/for_models/whois.erb | 2 ++ test/models/whois_record_test.rb | 9 ++++++++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/app/models/whois_record.rb b/app/models/whois_record.rb index 42ea0b2fa..e4ccec22f 100644 --- a/app/models/whois_record.rb +++ b/app/models/whois_record.rb @@ -36,7 +36,7 @@ class WhoisRecord < ActiveRecord::Base registrant = domain.registrant @disclosed = [] - h[:disclaimer] = disclaimer_text + h[:disclaimer] = disclaimer_text if disclaimer_text.present? h[:name] = domain.name h[:status] = domain.statuses.map { |x| status_map[x] || x } h[:registered] = domain.registered_at.try(:to_s, :iso8601) diff --git a/app/views/for_models/whois.erb b/app/views/for_models/whois.erb index 04abd3094..5bc1b30f5 100644 --- a/app/views/for_models/whois.erb +++ b/app/views/for_models/whois.erb @@ -1,5 +1,7 @@ +<%- if json['disclaimer'].present? %> <%= json['disclaimer'].scan(/\S.{0,72}\S(?=\s|$)|\S+/).join("\n") %> +<%- end %> Estonia .ee Top Level Domain WHOIS server Domain: diff --git a/test/models/whois_record_test.rb b/test/models/whois_record_test.rb index ea8de006a..9d050bc29 100644 --- a/test/models/whois_record_test.rb +++ b/test/models/whois_record_test.rb @@ -6,6 +6,7 @@ class WhoisRecordTest < ActiveSupport::TestCase @domain = domains(:shop) @record = WhoisRecord.new(domain: @domain) + @record.populate end def test_generated_json_has_expected_values @@ -46,8 +47,14 @@ class WhoisRecordTest < ActiveSupport::TestCase regexp_contact = Regexp.new(expected_technical_contact, Regexp::MULTILINE) regexp_disclaimer = Regexp.new(expected_disclaimer, Regexp::MULTILINE) - @record.populate assert_match(regexp_disclaimer, @record.body) assert_match(regexp_contact, @record.body) end + + def test_whois_record_has_no_disclaimer_if_Setting_is_blank + Setting.stubs(:registry_whois_disclaimer, '') do + refute(@record.json['disclaimer']) + refute_match(/Search results may not be used for commercial/, @record.body) + end + end end From c08561fa0d8184fbf3d554e7eb788a5e4a6ad0bb Mon Sep 17 00:00:00 2001 From: Maciej Szlosarczyk Date: Fri, 27 Apr 2018 14:10:16 +0300 Subject: [PATCH 7/7] Remove information about web-based whois form name fields --- app/views/for_models/whois.erb | 13 ++++++------- test/models/whois_record_test.rb | 4 ++-- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/app/views/for_models/whois.erb b/app/views/for_models/whois.erb index 5bc1b30f5..02b9b1398 100644 --- a/app/views/for_models/whois.erb +++ b/app/views/for_models/whois.erb @@ -1,7 +1,6 @@ -<%- if json['disclaimer'].present? %> +<%- if json['disclaimer'].present? -%> <%= json['disclaimer'].scan(/\S.{0,72}\S(?=\s|$)|\S+/).join("\n") %> - -<%- end %> +<%- end -%> Estonia .ee Top Level Domain WHOIS server Domain: @@ -27,18 +26,18 @@ changed: <%= json['registrant_changed'].to_s.tr('T',' ').sub('+', ' +') %> <%- if json['admin_contacts'].present? -%> Administrative contact: <%- for contact in json['admin_contacts'] -%> -name: Not Disclosed - Visit www.internet.ee for webbased WHOIS +name: Not Disclosed email: Not Disclosed - Visit www.internet.ee for webbased WHOIS -changed: Not Disclosed - Visit www.internet.ee for webbased WHOIS +changed: Not Disclosed <%- end -%> <%- end -%> <% if json['tech_contacts'].present? %> Technical contact: <%- for contact in json['tech_contacts'] -%> -name: Not Disclosed - Visit www.internet.ee for webbased WHOIS +name: Not Disclosed email: Not Disclosed - Visit www.internet.ee for webbased WHOIS -changed: Not Disclosed - Visit www.internet.ee for webbased WHOIS +changed: Not Disclosed <%- end -%> <%- end -%> diff --git a/test/models/whois_record_test.rb b/test/models/whois_record_test.rb index 9d050bc29..438ee9cc4 100644 --- a/test/models/whois_record_test.rb +++ b/test/models/whois_record_test.rb @@ -39,9 +39,9 @@ class WhoisRecordTest < ActiveSupport::TestCase end expected_technical_contact = begin 'Technical contact:\n' \ - 'name: Not Disclosed - Visit www.internet.ee for webbased WHOIS\n' \ + 'name: Not Disclosed\n' \ 'email: Not Disclosed - Visit www.internet.ee for webbased WHOIS\n' \ - 'changed: Not Disclosed - Visit www.internet.ee for webbased WHOIS' + 'changed: Not Disclosed' end regexp_contact = Regexp.new(expected_technical_contact, Regexp::MULTILINE)