From 0fd682c6b94f4269939784ecad5281fc8ad1b0cc Mon Sep 17 00:00:00 2001
From: Stas
Date: Wed, 9 Dec 2015 14:00:31 +0200
Subject: [PATCH 01/69] 107279984-credit_balance_views
---
app/controllers/admin/registrars_controller.rb | 2 +-
app/views/admin/account_activities/index.haml | 9 +++++++++
app/views/admin/registrars/index.haml | 7 +++++--
app/views/admin/registrars/show.haml | 3 +++
config/locales/en.yml | 1 +
5 files changed, 19 insertions(+), 3 deletions(-)
diff --git a/app/controllers/admin/registrars_controller.rb b/app/controllers/admin/registrars_controller.rb
index c0d28908f..cf8c89505 100644
--- a/app/controllers/admin/registrars_controller.rb
+++ b/app/controllers/admin/registrars_controller.rb
@@ -6,7 +6,7 @@ class Admin::RegistrarsController < AdminController
end
def index
- @q = Registrar.ordered.search(params[:q])
+ @q = Registrar.joins(:accounts).ordered.search(params[:q])
@registrars = @q.result.page(params[:page])
end
diff --git a/app/views/admin/account_activities/index.haml b/app/views/admin/account_activities/index.haml
index 35e270dce..521ebf84c 100644
--- a/app/views/admin/account_activities/index.haml
+++ b/app/views/admin/account_activities/index.haml
@@ -55,6 +55,7 @@
%th{class: 'col-xs-2'}
= sort_link(@q, 'sum')
%tbody
+ -total = 0
- @account_activities.each do |x|
%tr
%td= link_to(x.account.registrar.try(:code), admin_registrar_path(x.account.registrar))
@@ -63,7 +64,15 @@
%td= l(x.created_at)
- c = x.sum > 0.0 ? 'text-success' : 'text-danger'
- s = x.sum > 0.0 ? "+#{x.sum} #{x.currency}" : "#{x.sum} #{x.currency}"
+ -total += x.sum
%td{class: c}= s
+ - if @account_activities.count > 0
+ %tr
+ %td
+ %td
+ %td
+ %td{class: 'text-right'}= t(:total)
+ %td{class: 'text-success'}= total > 0 ? "+#{total} EUR" : "#{total} EUR"
.row
.col-md-12
= paginate @account_activities
diff --git a/app/views/admin/registrars/index.haml b/app/views/admin/registrars/index.haml
index a2604dbec..8ba45d205 100644
--- a/app/views/admin/registrars/index.haml
+++ b/app/views/admin/registrars/index.haml
@@ -8,15 +8,18 @@
%table.table.table-hover.table-bordered.table-condensed
%thead
%tr
- %th{class: 'col-xs-6'}
+ %th{class: 'col-xs-4'}
= sort_link(@q, 'name')
- %th{class: 'col-xs-6'}
+ %th{class: 'col-xs-4'}
= sort_link(@q, 'reg_no', t(:reg_no))
+ %th{class: 'col-xs-4'}
+ = t(:credit_balance)
%tbody
- @registrars.each do |x|
%tr
%td= link_to(x, [:admin, x])
%td= x.reg_no
+ %td= "#{x.balance}"
.row
.col-md-12
= paginate @registrars
diff --git a/app/views/admin/registrars/show.haml b/app/views/admin/registrars/show.haml
index e3966583f..35938c0c6 100644
--- a/app/views/admin/registrars/show.haml
+++ b/app/views/admin/registrars/show.haml
@@ -32,6 +32,9 @@
%dt= t(:id)
%dd= @registrar.code
+ %dt= t(:credit_balance)
+ %dd= @registrar.balance
+
.col-md-6
.panel.panel-default
.panel-heading
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 07f4ebc0a..07b8cde24 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -351,6 +351,7 @@ en:
status: 'Status'
eedirekt: 'EEDirekt'
contact: 'Contact'
+ credit_balance: 'Credit balance'
domain_transfer_requested: 'Domain transfer requested!'
domain_transfer_approved: 'Domain transfer approved!'
From 9ac1e8c933b95cb7f638365d09512ab22137e678 Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Thu, 17 Dec 2015 11:27:06 +0200
Subject: [PATCH 02/69] Story #110211760 - ensure that upDate is not shown when
domain has not changed since creation
---
app/views/epp/contacts/info.xml.builder | 2 +-
app/views/epp/domains/info.xml.builder | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/views/epp/contacts/info.xml.builder b/app/views/epp/contacts/info.xml.builder
index 39aa91b39..fe851a6d9 100644
--- a/app/views/epp/contacts/info.xml.builder
+++ b/app/views/epp/contacts/info.xml.builder
@@ -51,7 +51,7 @@ xml.epp_head do
xml.tag!('contact:crID', @contact.cr_id)
xml.tag!('contact:crDate', @contact.created_at.try(:iso8601))
- if @contact.updated_at != @contact.created_at
+ if @contact.updated_at > @contact.created_at
upID = @contact.updator.try(:registrar)
upID = upID.code if upID.present? # Did updator return a kind of User that has a registrar?
xml.tag!('contact:upID', upID) if upID.present? # optional upID
diff --git a/app/views/epp/domains/info.xml.builder b/app/views/epp/domains/info.xml.builder
index ec5947b13..ef283ab07 100644
--- a/app/views/epp/domains/info.xml.builder
+++ b/app/views/epp/domains/info.xml.builder
@@ -41,7 +41,7 @@ xml.epp_head do
xml.tag!('domain:crID', @domain.cr_id)
xml.tag!('domain:crDate', @domain.created_at.try(:iso8601))
- if @domain.updated_at != @domain.created_at
+ if @domain.updated_at > @domain.created_at
upID = @domain.updator.try(:registrar)
upID = upID.code if upID.present? # Did updator return a kind of User that has a registrar?
xml.tag!('domain:upID', upID) if upID.present? # optional upID
From 6909f3d0ef19be4a05cbd26476a4b0d838536404 Mon Sep 17 00:00:00 2001
From: Stas
Date: Fri, 18 Dec 2015 13:30:51 +0200
Subject: [PATCH 03/69] 10729984-starting_balance
---
app/controllers/admin/account_activities_controller.rb | 1 +
app/views/admin/account_activities/index.haml | 7 +++++++
config/locales/en.yml | 1 +
3 files changed, 9 insertions(+)
diff --git a/app/controllers/admin/account_activities_controller.rb b/app/controllers/admin/account_activities_controller.rb
index 1c447d8a6..640acf2e7 100644
--- a/app/controllers/admin/account_activities_controller.rb
+++ b/app/controllers/admin/account_activities_controller.rb
@@ -14,6 +14,7 @@ class Admin::AccountActivitiesController < AdminController
@q = AccountActivity.includes(:invoice, account: :registrar).search(params[:q])
@q.sorts = 'id desc' if @q.sorts.empty?
+ @b = AccountActivity.where.not(id: @q.result.map(&:id))
respond_to do |format|
format.html { @account_activities = @q.result.page(params[:page]) }
diff --git a/app/views/admin/account_activities/index.haml b/app/views/admin/account_activities/index.haml
index 521ebf84c..6efefb814 100644
--- a/app/views/admin/account_activities/index.haml
+++ b/app/views/admin/account_activities/index.haml
@@ -36,6 +36,13 @@
%button.btn.btn-default.js-reset-form
= t(:clear_fields)
+.row
+ .col-md-3
+ .col-md-3
+ .col-md-2
+ .col-md-4{class: 'text-right'}
+ = t(:starting_balance) + " #{@b.sum('sum').to_f} EUR"
+
%hr
.row
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 07b8cde24..fbfc09780 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -352,6 +352,7 @@ en:
eedirekt: 'EEDirekt'
contact: 'Contact'
credit_balance: 'Credit balance'
+ starting_balance: 'Starting balance'
domain_transfer_requested: 'Domain transfer requested!'
domain_transfer_approved: 'Domain transfer approved!'
From f46c7f554397584b12b4d97fa07865891ddfdc7a Mon Sep 17 00:00:00 2001
From: Stas
Date: Mon, 4 Jan 2016 16:35:02 +0200
Subject: [PATCH 04/69] 110152326-is_registrant_filter_modification
---
app/controllers/admin/contacts_controller.rb | 10 ++++++++--
app/views/admin/contacts/index.haml | 2 +-
2 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/app/controllers/admin/contacts_controller.rb b/app/controllers/admin/contacts_controller.rb
index a1df165d2..50131066f 100644
--- a/app/controllers/admin/contacts_controller.rb
+++ b/app/controllers/admin/contacts_controller.rb
@@ -4,7 +4,13 @@ class Admin::ContactsController < AdminController
def index
params[:q] ||= {}
- @q = Contact.includes(:registrar).search(params[:q])
+ search_params = params[:q].deep_dup
+
+ if search_params[:domain_contacts_type_in].is_a?(Array) && search_params[:domain_contacts_type_in].delete('registrant')
+ search_params[:registrant_domains_id_not_null] = 1
+ end
+
+ @q = Contact.includes(:registrar).search(search_params)
@contacts = @q.result.page(params[:page])
if params[:statuses_contains]
@@ -16,7 +22,7 @@ class Admin::ContactsController < AdminController
end
normalize_search_parameters do
- @q = contacts.search(params[:q])
+ @q = contacts.search(search_params)
@contacts = @q.result.page(params[:page])
end
diff --git a/app/views/admin/contacts/index.haml b/app/views/admin/contacts/index.haml
index b8e7850e6..c200dac02 100644
--- a/app/views/admin/contacts/index.haml
+++ b/app/views/admin/contacts/index.haml
@@ -37,7 +37,7 @@
.col-md-3
.form-group
= label_tag t(:contact_type)
- = select_tag '[q][domain_contacts_type_in]', options_for_select([['admin', 'AdminDomainContact'], ['tech', 'TechDomainContact']], params[:q][:domain_contacts_type_in]), { multiple: true, placeholder: t(:choose), class: 'form-control js-combobox' }
+ = select_tag '[q][domain_contacts_type_in]', options_for_select([['admin', 'AdminDomainContact'], ['tech', 'TechDomainContact'], ['registrant', 'registrant']], params[:q][:domain_contacts_type_in]), { multiple: true, placeholder: t(:choose), class: 'form-control js-combobox' }
.row
.col-md-3
.form-group
From 6415bfae389d70dd986af7d3ffa45dab1ee32fa3 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Tue, 5 Jan 2016 14:08:51 +0200
Subject: [PATCH 05/69] Story#108091488 - Seems that now reserved domains will
be in better table
---
.../admin/reserved_domains_controller.rb | 8 +++----
app/models/reserved_domain.rb | 23 +++++++++++--------
...6_name_and_password_for_reserved_domain.rb | 17 ++++++++++++++
db/seeds.rb | 2 +-
4 files changed, 34 insertions(+), 16 deletions(-)
create mode 100644 db/migrate/20151202123506_name_and_password_for_reserved_domain.rb
diff --git a/app/controllers/admin/reserved_domains_controller.rb b/app/controllers/admin/reserved_domains_controller.rb
index 57e4b8ed3..622f56eb2 100644
--- a/app/controllers/admin/reserved_domains_controller.rb
+++ b/app/controllers/admin/reserved_domains_controller.rb
@@ -2,7 +2,7 @@ class Admin::ReservedDomainsController < AdminController
load_and_authorize_resource
def index
- names = ReservedDomain.pluck(:names).each_with_object({}){|e_h,h| h.merge!(e_h)}
+ names = ReservedDomain.pluck(:name, :password).each_with_object({}){|domain, hash| hash[domain[0]] = domain[1]}
names.names = nil if names.blank?
@reserved_domains = names.to_yaml.gsub(/---.?\n/, '').gsub(/\.\.\..?\n/, '')
end
@@ -28,9 +28,8 @@ class Admin::ReservedDomainsController < AdminController
#updating and adding
names.each do |name, psw|
- rec = ReservedDomain.by_domain(name).first
- rec ||= ReservedDomain.new
- rec.names = {name => psw}
+ rec = ReservedDomain.find_or_initialize_by(name: name)
+ rec.password = psw
unless rec.save
result = false
@@ -39,7 +38,6 @@ class Admin::ReservedDomainsController < AdminController
end
end
-
if result
flash[:notice] = I18n.t('record_updated')
redirect_to :back
diff --git a/app/models/reserved_domain.rb b/app/models/reserved_domain.rb
index 09d72ec17..057321e56 100644
--- a/app/models/reserved_domain.rb
+++ b/app/models/reserved_domain.rb
@@ -2,24 +2,27 @@ class ReservedDomain < ActiveRecord::Base
include Versions # version/reserved_domain_version.rb
before_save :fill_empty_passwords
- def fill_empty_passwords
- return unless names
- names.each { |k, v| names[k] = SecureRandom.hex if v.blank? }
- end
-
class << self
def pw_for(domain_name)
- name_in_unicode = SimpleIDN.to_ascii(domain_name)
- by_domain(domain_name).select("names -> '#{domain_name}' AS pw").first.try(:pw) ||
- by_domain(name_in_unicode).select("names -> '#{name_in_unicode}' AS pw").first.try(:pw)
+ name_in_ascii = SimpleIDN.to_ascii(domain_name)
+ by_domain(domain_name).first.try(:password) || by_domain(name_in_ascii).first.try(:password)
end
def by_domain name
- where("names ? '#{name}'")
+ where(name: name)
end
def any_of_domains names
- where("names ?| ARRAY['#{names.join("','")}']")
+ where(name: names)
end
end
+
+
+ def fill_empty_passwords
+ self.password = SecureRandom.hex unless self.password
+ end
+
+ def name= val
+ super SimpleIDN.to_unicode(val)
+ end
end
diff --git a/db/migrate/20151202123506_name_and_password_for_reserved_domain.rb b/db/migrate/20151202123506_name_and_password_for_reserved_domain.rb
new file mode 100644
index 000000000..1176ee255
--- /dev/null
+++ b/db/migrate/20151202123506_name_and_password_for_reserved_domain.rb
@@ -0,0 +1,17 @@
+class NameAndPasswordForReservedDomain < ActiveRecord::Migration
+ def up
+ add_column :reserved_domains, :name, :string
+ add_column :reserved_domains, :password, :string
+
+ ReservedDomain.find_each do |domain|
+ names = domain.names
+ domain.update_columns(name: names.keys.first, password: names.values.first)
+ end
+
+ remove_column :reserved_domains, :names
+ end
+
+ def down
+
+ end
+end
diff --git a/db/seeds.rb b/db/seeds.rb
index 636ff4361..ac6da0598 100644
--- a/db/seeds.rb
+++ b/db/seeds.rb
@@ -73,7 +73,7 @@ admin3 = {
[admin1, admin2, admin3].each do |at|
admin = AdminUser.where(at)
next if admin.present?
- admin = AdminUser.new(at.merge({ password_confirmation: 'testtest' }))
+ admin = AdminUser.new(at.merge({ password_confirmation: 'testtest', password: 'testtest' }))
admin.roles = ['admin']
admin.save
end
From f3d22e0145d2b1f46fc21286685ff1db8f7d75d6 Mon Sep 17 00:00:00 2001
From: Stas
Date: Tue, 5 Jan 2016 14:41:09 +0200
Subject: [PATCH 06/69] 110152326-registrar_portal_filter
---
app/controllers/registrar/contacts_controller.rb | 13 ++++++++++---
app/views/admin/contacts/index.haml | 7 +------
app/views/registrar/contacts/index.haml | 9 ++-------
3 files changed, 13 insertions(+), 16 deletions(-)
diff --git a/app/controllers/registrar/contacts_controller.rb b/app/controllers/registrar/contacts_controller.rb
index 878e29cd2..c0b814993 100644
--- a/app/controllers/registrar/contacts_controller.rb
+++ b/app/controllers/registrar/contacts_controller.rb
@@ -6,8 +6,15 @@ class Registrar::ContactsController < Registrar::DeppController # EPP controller
params[:q] ||= {}
params[:q].delete_if { |_k, v| v.blank? }
- if params[:q].length == 1 && params[:q][:name_matches].present?
- @contacts = Contact.find_by(name: params[:q][:name_matches])
+
+ search_params = params[:q].deep_dup
+
+ if search_params[:domain_contacts_type_in].is_a?(Array) && search_params[:domain_contacts_type_in].delete('registrant')
+ search_params[:registrant_domains_id_not_null] = 1
+ end
+
+ if search_params.length == 1 && search_params[:name_matches].present?
+ @contacts = Contact.find_by(name: search_params[:name_matches])
end
if params[:statuses_contains]
@@ -19,7 +26,7 @@ class Registrar::ContactsController < Registrar::DeppController # EPP controller
end
normalize_search_parameters do
- @q = contacts.search(params[:q])
+ @q = contacts.search(search_params)
@contacts = @q.result.page(params[:page])
end
diff --git a/app/views/admin/contacts/index.haml b/app/views/admin/contacts/index.haml
index c200dac02..715b87eb6 100644
--- a/app/views/admin/contacts/index.haml
+++ b/app/views/admin/contacts/index.haml
@@ -29,12 +29,7 @@
.form-group
= label_tag t(:country)
= select_tag '[q][country_code_eq]', SortedCountry.all_options(params[:q][:country_code_eq]), { include_blank: true, placeholder: t(:choose), class: 'form-control selectize' }
- .col-md-3
- .form-group
- = f.label t(:is_registrant)
- %div
- = f.check_box :registrant_domains_id_not_null
- .col-md-3
+ .col-md-6
.form-group
= label_tag t(:contact_type)
= select_tag '[q][domain_contacts_type_in]', options_for_select([['admin', 'AdminDomainContact'], ['tech', 'TechDomainContact'], ['registrant', 'registrant']], params[:q][:domain_contacts_type_in]), { multiple: true, placeholder: t(:choose), class: 'form-control js-combobox' }
diff --git a/app/views/registrar/contacts/index.haml b/app/views/registrar/contacts/index.haml
index ae93a82fd..2226f7c6a 100644
--- a/app/views/registrar/contacts/index.haml
+++ b/app/views/registrar/contacts/index.haml
@@ -31,15 +31,10 @@
.form-group
= label_tag t(:country)
= select_tag '[q][country_code_eq]', SortedCountry.all_options(params[:q][:country_code_eq]), { include_blank: true, placeholder: t(:choose), class: 'form-control selectize' }
- .col-md-3
- .form-group
- = f.label t(:is_registrant)
- %div
- = f.check_box :registrant_domains_id_not_null
- .col-md-3
+ .col-md-6
.form-group
= label_tag t(:contact_type)
- = select_tag '[q][domain_contacts_type_in]', options_for_select([['admin', 'AdminDomainContact'], ['tech', 'TechDomainContact']], params[:q][:domain_contacts_type_in]), { multiple: true, placeholder: t(:choose), class: 'form-control js-combobox' }
+ = select_tag '[q][domain_contacts_type_in]', options_for_select([['admin', 'AdminDomainContact'], ['tech', 'TechDomainContact'], ['registrant', 'registrant']], params[:q][:domain_contacts_type_in]), { multiple: true, placeholder: t(:choose), class: 'form-control js-combobox' }
.row
.col-md-3
.form-group
From 6be09329d76ac410a1c66f0c5d6c272baa45c5c0 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Tue, 5 Jan 2016 15:03:29 +0200
Subject: [PATCH 07/69] Story#108091488 - add index to reserved domains
---
...6_name_and_password_for_reserved_domain.rb | 1 +
db/schema-read-only.rb | 57 ++---
db/structure.sql | 219 ++++++++++++------
3 files changed, 167 insertions(+), 110 deletions(-)
diff --git a/db/migrate/20151202123506_name_and_password_for_reserved_domain.rb b/db/migrate/20151202123506_name_and_password_for_reserved_domain.rb
index 1176ee255..3e4f16500 100644
--- a/db/migrate/20151202123506_name_and_password_for_reserved_domain.rb
+++ b/db/migrate/20151202123506_name_and_password_for_reserved_domain.rb
@@ -2,6 +2,7 @@ class NameAndPasswordForReservedDomain < ActiveRecord::Migration
def up
add_column :reserved_domains, :name, :string
add_column :reserved_domains, :password, :string
+ add_index :reserved_domains, :name
ReservedDomain.find_each do |domain|
names = domain.names
diff --git a/db/schema-read-only.rb b/db/schema-read-only.rb
index b362619b0..6cb666e3b 100644
--- a/db/schema-read-only.rb
+++ b/db/schema-read-only.rb
@@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 20151029152638) do
+ActiveRecord::Schema.define(version: 20151202123506) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -240,19 +240,20 @@ ActiveRecord::Schema.define(version: 20151029152638) do
end
create_table "dnskeys", force: :cascade do |t|
- t.integer "domain_id"
- t.integer "flags"
- t.integer "protocol"
- t.integer "alg"
- t.text "public_key"
- t.integer "delegation_signer_id"
- t.string "ds_key_tag"
- t.integer "ds_alg"
- t.integer "ds_digest_type"
- t.string "ds_digest"
- t.string "creator_str"
- t.string "updator_str"
- t.integer "legacy_domain_id"
+ t.integer "domain_id"
+ t.integer "flags"
+ t.integer "protocol"
+ t.integer "alg"
+ t.text "public_key"
+ t.integer "delegation_signer_id"
+ t.string "ds_key_tag"
+ t.integer "ds_alg"
+ t.integer "ds_digest_type"
+ t.string "ds_digest"
+ t.string "creator_str"
+ t.string "updator_str"
+ t.integer "legacy_domain_id"
+ t.datetime "updated_at"
end
add_index "dnskeys", ["delegation_signer_id"], name: "index_dnskeys_on_delegation_signer_id", using: :btree
@@ -336,6 +337,7 @@ ActiveRecord::Schema.define(version: 20151029152638) do
end
add_index "domains", ["delete_at"], name: "index_domains_on_delete_at", using: :btree
+ add_index "domains", ["name"], name: "index_domains_on_name", unique: true, using: :btree
add_index "domains", ["outzone_at"], name: "index_domains_on_outzone_at", using: :btree
add_index "domains", ["registrant_id"], name: "index_domains_on_registrant_id", using: :btree
add_index "domains", ["registrant_verification_asked_at"], name: "index_domains_on_registrant_verification_asked_at", using: :btree
@@ -442,9 +444,7 @@ ActiveRecord::Schema.define(version: 20151029152638) do
t.integer "documentable_id"
t.string "documentable_type"
t.datetime "created_at"
- t.datetime "updated_at"
t.string "creator_str"
- t.string "updator_str"
t.string "path"
end
@@ -739,21 +739,6 @@ ActiveRecord::Schema.define(version: 20151029152638) do
add_index "log_keyrelays", ["item_type", "item_id"], name: "index_log_keyrelays_on_item_type_and_item_id", using: :btree
add_index "log_keyrelays", ["whodunnit"], name: "index_log_keyrelays_on_whodunnit", using: :btree
- create_table "log_legal_documents", force: :cascade do |t|
- t.string "item_type", null: false
- t.integer "item_id", null: false
- t.string "event", null: false
- t.string "whodunnit"
- t.json "object"
- t.json "object_changes"
- t.datetime "created_at"
- t.string "session"
- t.json "children"
- end
-
- add_index "log_legal_documents", ["item_type", "item_id"], name: "index_log_legal_documents_on_item_type_and_item_id", using: :btree
- add_index "log_legal_documents", ["whodunnit"], name: "index_log_legal_documents_on_whodunnit", using: :btree
-
create_table "log_messages", force: :cascade do |t|
t.string "item_type", null: false
t.integer "item_id", null: false
@@ -910,10 +895,10 @@ ActiveRecord::Schema.define(version: 20151029152638) do
create_table "nameservers", force: :cascade do |t|
t.string "hostname"
- t.string "ipv4"
+ t.string "ipv4", array: true
t.datetime "created_at"
t.datetime "updated_at"
- t.string "ipv6"
+ t.string "ipv6", array: true
t.integer "domain_id"
t.string "creator_str"
t.string "updator_str"
@@ -1011,9 +996,13 @@ ActiveRecord::Schema.define(version: 20151029152638) do
t.datetime "updated_at"
t.string "creator_str"
t.string "updator_str"
- t.hstore "names"
+ t.integer "legacy_id"
+ t.string "name"
+ t.string "password"
end
+ add_index "reserved_domains", ["name"], name: "index_reserved_domains_on_name", using: :btree
+
create_table "settings", force: :cascade do |t|
t.string "var", null: false
t.text "value"
diff --git a/db/structure.sql b/db/structure.sql
index b2480a04e..c4ede9569 100644
--- a/db/structure.sql
+++ b/db/structure.sql
@@ -39,6 +39,106 @@ COMMENT ON EXTENSION hstore IS 'data type for storing sets of (key, value) pairs
SET search_path = public, pg_catalog;
+--
+-- Name: fill_ident_country(); Type: FUNCTION; Schema: public; Owner: -
+--
+
+CREATE FUNCTION fill_ident_country() RETURNS boolean
+ LANGUAGE plpgsql
+ AS $_$
+ DECLARE
+ changed BOOLEAN;
+ multiplier INT [];
+ multiplier2 INT [];
+ multiplier3 INT [];
+ multiplier4 INT [];
+ r RECORD;
+ control TEXT;
+ total INT;
+ i INT;
+ mod INT;
+ counter INT;
+ BEGIN
+
+ multiplier := ARRAY [1, 2, 3, 4, 5, 6, 7, 8, 9, 1];
+ multiplier2 := ARRAY [3, 4, 5, 6, 7, 8, 9, 1, 2, 3];
+ multiplier3 := ARRAY [1, 2, 3, 4, 5, 6, 7];
+ multiplier4 := ARRAY [3, 4, 5, 6, 7, 8, 9];
+
+ FOR r IN SELECT id, ident FROM contacts WHERE ident_type = 'priv' AND ident_country_code IS NULL
+ LOOP
+ IF (length(r.ident) = 11 AND (r.ident ~ '^[0-9]+$') AND (substring(r.ident, 1, 1) = '3' OR substring(r.ident, 1, 1) = '4' OR substring(r.ident, 1, 1) = '5' OR substring(r.ident, 1, 1) = '6'))
+ THEN
+ total := 0;
+ counter := 1;
+ FOREACH i IN ARRAY multiplier
+ LOOP
+ total := (total + (i * to_number(substring(r.ident, counter, 1), '9')));
+ counter := (counter + 1);
+ END LOOP;
+ mod := (total % 11);
+ counter := 1;
+ IF (mod >= 10)
+ THEN
+ total = 0;
+ FOREACH i IN ARRAY multiplier2
+ LOOP
+ total := (total + (i * to_number(substring(r.ident, counter, 1), '9')));
+ counter := (counter + 1);
+ END LOOP;
+ mod := (total % 11);
+ END IF;
+ IF (mod = 10)
+ THEN
+ mod := 0;
+ END IF;
+ IF (substring(r.ident, 11, 1) = to_char(mod, 'FM999MI'))
+ THEN
+ UPDATE contacts SET ident_country_code = 'EE' WHERE id = r.id;
+ END IF;
+ total := 0;
+ END IF;
+ END LOOP;
+
+ FOR r IN SELECT id, ident FROM contacts WHERE ident_type = 'org' AND ident_country_code IS NULL
+ LOOP
+ IF (length(r.ident) = 8 AND (r.ident ~ '^[0-9]+$') AND (substring(r.ident, 1, 1) = '1' OR substring(r.ident, 1, 1) = '8' OR substring(r.ident, 1, 1) = '9'))
+ THEN
+ total := 0;
+ counter := 1;
+ FOREACH i IN ARRAY multiplier3
+ LOOP
+ total := (total + (i * to_number(substring(r.ident, counter, 1), '9')));
+ counter := (counter + 1);
+ END LOOP;
+ mod := total % 11;
+ total := 0;
+ counter := 1;
+ IF (mod >= 10)
+ THEN
+ total = 0;
+ FOREACH i IN ARRAY multiplier4
+ LOOP
+ total := (total + (i * to_number(substring(r.ident, counter, 1), '9')));
+ counter := (counter + 1);
+ END LOOP;
+ mod := (total % 11);
+ END IF;
+ IF (mod = 10)
+ THEN
+ mod := 0;
+ END IF;
+ IF (substring(r.ident, 8, 1) = to_char(mod, 'FM999MI'))
+ THEN
+ UPDATE contacts SET ident_country_code = 'EE' WHERE id = r.id;
+ END IF;
+ END IF;
+ END LOOP;
+ RETURN changed;
+ END;
+ $_$;
+
+
--
-- Name: generate_zonefile(character varying); Type: FUNCTION; Schema: public; Owner: -
--
@@ -114,7 +214,7 @@ CREATE FUNCTION generate_zonefile(i_origin character varying) RETURNS text
WHERE d.name LIKE include_filter AND d.name NOT LIKE exclude_filter
AND ns.hostname LIKE '%.' || d.name
AND d.name <> i_origin
- AND ns.ipv4 IS NOT NULL AND ns.ipv4 <> ''
+ AND ns.ipv4 IS NOT NULL AND ns.ipv4 <> '{}'
AND NOT ('{serverHold,clientHold}' && d.statuses)
), chr(10)
) INTO tmp_var;
@@ -134,7 +234,7 @@ CREATE FUNCTION generate_zonefile(i_origin character varying) RETURNS text
WHERE d.name LIKE include_filter AND d.name NOT LIKE exclude_filter
AND ns.hostname LIKE '%.' || d.name
AND d.name <> i_origin
- AND ns.ipv6 IS NOT NULL AND ns.ipv6 <> ''
+ AND ns.ipv6 IS NOT NULL AND ns.ipv6 <> '{}'
AND NOT ('{serverHold,clientHold}' && d.statuses)
), chr(10)
) INTO tmp_var;
@@ -145,8 +245,8 @@ CREATE FUNCTION generate_zonefile(i_origin character varying) RETURNS text
SELECT array_to_string(
array(
SELECT concat(
- d.name_puny, '. IN DS ', dk.ds_key_tag, ' ',
- dk.ds_alg, ' ', dk.ds_digest_type, ' ( ', dk.ds_digest, ' )'
+ d.name_puny, '. 3600 IN DS ', dk.ds_key_tag, ' ',
+ dk.ds_alg, ' ', dk.ds_digest_type, ' ', dk.ds_digest
)
FROM domains d
JOIN dnskeys dk ON dk.domain_id = d.id
@@ -745,7 +845,8 @@ CREATE TABLE dnskeys (
ds_digest character varying,
creator_str character varying,
updator_str character varying,
- legacy_domain_id integer
+ legacy_domain_id integer,
+ updated_at timestamp without time zone
);
@@ -1130,9 +1231,7 @@ CREATE TABLE legal_documents (
documentable_id integer,
documentable_type character varying,
created_at timestamp without time zone,
- updated_at timestamp without time zone,
creator_str character varying,
- updator_str character varying,
path character varying
);
@@ -1863,43 +1962,6 @@ CREATE SEQUENCE log_keyrelays_id_seq
ALTER SEQUENCE log_keyrelays_id_seq OWNED BY log_keyrelays.id;
---
--- Name: log_legal_documents; Type: TABLE; Schema: public; Owner: -; Tablespace:
---
-
-CREATE TABLE log_legal_documents (
- id integer NOT NULL,
- item_type character varying NOT NULL,
- item_id integer NOT NULL,
- event character varying NOT NULL,
- whodunnit character varying,
- object json,
- object_changes json,
- created_at timestamp without time zone,
- session character varying,
- children json
-);
-
-
---
--- Name: log_legal_documents_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE log_legal_documents_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: log_legal_documents_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE log_legal_documents_id_seq OWNED BY log_legal_documents.id;
-
-
--
-- Name: log_messages; Type: TABLE; Schema: public; Owner: -; Tablespace:
--
@@ -2313,10 +2375,10 @@ ALTER SEQUENCE messages_id_seq OWNED BY messages.id;
CREATE TABLE nameservers (
id integer NOT NULL,
hostname character varying,
- ipv4 character varying,
+ ipv4 character varying[],
created_at timestamp without time zone,
updated_at timestamp without time zone,
- ipv6 character varying,
+ ipv6 character varying[],
domain_id integer,
creator_str character varying,
updator_str character varying,
@@ -2560,7 +2622,9 @@ CREATE TABLE reserved_domains (
updated_at timestamp without time zone,
creator_str character varying,
updator_str character varying,
- names hstore
+ legacy_id integer,
+ name character varying,
+ password character varying
);
@@ -3126,13 +3190,6 @@ ALTER TABLE ONLY log_invoices ALTER COLUMN id SET DEFAULT nextval('log_invoices_
ALTER TABLE ONLY log_keyrelays ALTER COLUMN id SET DEFAULT nextval('log_keyrelays_id_seq'::regclass);
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY log_legal_documents ALTER COLUMN id SET DEFAULT nextval('log_legal_documents_id_seq'::regclass);
-
-
--
-- Name: id; Type: DEFAULT; Schema: public; Owner: -
--
@@ -3645,14 +3702,6 @@ ALTER TABLE ONLY log_keyrelays
ADD CONSTRAINT log_keyrelays_pkey PRIMARY KEY (id);
---
--- Name: log_legal_documents_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace:
---
-
-ALTER TABLE ONLY log_legal_documents
- ADD CONSTRAINT log_legal_documents_pkey PRIMARY KEY (id);
-
-
--
-- Name: log_messages_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace:
--
@@ -3985,6 +4034,13 @@ CREATE INDEX index_domain_transfers_on_domain_id ON domain_transfers USING btree
CREATE INDEX index_domains_on_delete_at ON domains USING btree (delete_at);
+--
+-- Name: index_domains_on_name; Type: INDEX; Schema: public; Owner: -; Tablespace:
+--
+
+CREATE UNIQUE INDEX index_domains_on_name ON domains USING btree (name);
+
+
--
-- Name: index_domains_on_outzone_at; Type: INDEX; Schema: public; Owner: -; Tablespace:
--
@@ -4349,20 +4405,6 @@ CREATE INDEX index_log_keyrelays_on_item_type_and_item_id ON log_keyrelays USING
CREATE INDEX index_log_keyrelays_on_whodunnit ON log_keyrelays USING btree (whodunnit);
---
--- Name: index_log_legal_documents_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace:
---
-
-CREATE INDEX index_log_legal_documents_on_item_type_and_item_id ON log_legal_documents USING btree (item_type, item_id);
-
-
---
--- Name: index_log_legal_documents_on_whodunnit; Type: INDEX; Schema: public; Owner: -; Tablespace:
---
-
-CREATE INDEX index_log_legal_documents_on_whodunnit ON log_legal_documents USING btree (whodunnit);
-
-
--
-- Name: index_log_messages_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace:
--
@@ -4510,6 +4552,13 @@ CREATE INDEX index_registrant_verifications_on_domain_id ON registrant_verificat
CREATE INDEX index_registrars_on_code ON registrars USING btree (code);
+--
+-- Name: index_reserved_domains_on_name; Type: INDEX; Schema: public; Owner: -; Tablespace:
+--
+
+CREATE INDEX index_reserved_domains_on_name ON reserved_domains USING btree (name);
+
+
--
-- Name: index_settings_on_thing_type_and_thing_id_and_var; Type: INDEX; Schema: public; Owner: -; Tablespace:
--
@@ -4947,5 +4996,23 @@ INSERT INTO schema_migrations (version) VALUES ('20150921110152');
INSERT INTO schema_migrations (version) VALUES ('20150921111842');
+INSERT INTO schema_migrations (version) VALUES ('20151028183132');
+
INSERT INTO schema_migrations (version) VALUES ('20151029152638');
+INSERT INTO schema_migrations (version) VALUES ('20151112160452');
+
+INSERT INTO schema_migrations (version) VALUES ('20151117081204');
+
+INSERT INTO schema_migrations (version) VALUES ('20151120090455');
+
+INSERT INTO schema_migrations (version) VALUES ('20151124200353');
+
+INSERT INTO schema_migrations (version) VALUES ('20151125155601');
+
+INSERT INTO schema_migrations (version) VALUES ('20151127091716');
+
+INSERT INTO schema_migrations (version) VALUES ('20151130175654');
+
+INSERT INTO schema_migrations (version) VALUES ('20151202123506');
+
From 737afe57dfa1f2edb8df48b5dc58db30e915f7c1 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Tue, 5 Jan 2016 15:07:20 +0200
Subject: [PATCH 08/69] Story#108091488 - revert DB schema
---
db/schema-read-only.rb | 57 ++++++-----
db/structure.sql | 219 ++++++++++++++---------------------------
2 files changed, 110 insertions(+), 166 deletions(-)
diff --git a/db/schema-read-only.rb b/db/schema-read-only.rb
index 6cb666e3b..b362619b0 100644
--- a/db/schema-read-only.rb
+++ b/db/schema-read-only.rb
@@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 20151202123506) do
+ActiveRecord::Schema.define(version: 20151029152638) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -240,20 +240,19 @@ ActiveRecord::Schema.define(version: 20151202123506) do
end
create_table "dnskeys", force: :cascade do |t|
- t.integer "domain_id"
- t.integer "flags"
- t.integer "protocol"
- t.integer "alg"
- t.text "public_key"
- t.integer "delegation_signer_id"
- t.string "ds_key_tag"
- t.integer "ds_alg"
- t.integer "ds_digest_type"
- t.string "ds_digest"
- t.string "creator_str"
- t.string "updator_str"
- t.integer "legacy_domain_id"
- t.datetime "updated_at"
+ t.integer "domain_id"
+ t.integer "flags"
+ t.integer "protocol"
+ t.integer "alg"
+ t.text "public_key"
+ t.integer "delegation_signer_id"
+ t.string "ds_key_tag"
+ t.integer "ds_alg"
+ t.integer "ds_digest_type"
+ t.string "ds_digest"
+ t.string "creator_str"
+ t.string "updator_str"
+ t.integer "legacy_domain_id"
end
add_index "dnskeys", ["delegation_signer_id"], name: "index_dnskeys_on_delegation_signer_id", using: :btree
@@ -337,7 +336,6 @@ ActiveRecord::Schema.define(version: 20151202123506) do
end
add_index "domains", ["delete_at"], name: "index_domains_on_delete_at", using: :btree
- add_index "domains", ["name"], name: "index_domains_on_name", unique: true, using: :btree
add_index "domains", ["outzone_at"], name: "index_domains_on_outzone_at", using: :btree
add_index "domains", ["registrant_id"], name: "index_domains_on_registrant_id", using: :btree
add_index "domains", ["registrant_verification_asked_at"], name: "index_domains_on_registrant_verification_asked_at", using: :btree
@@ -444,7 +442,9 @@ ActiveRecord::Schema.define(version: 20151202123506) do
t.integer "documentable_id"
t.string "documentable_type"
t.datetime "created_at"
+ t.datetime "updated_at"
t.string "creator_str"
+ t.string "updator_str"
t.string "path"
end
@@ -739,6 +739,21 @@ ActiveRecord::Schema.define(version: 20151202123506) do
add_index "log_keyrelays", ["item_type", "item_id"], name: "index_log_keyrelays_on_item_type_and_item_id", using: :btree
add_index "log_keyrelays", ["whodunnit"], name: "index_log_keyrelays_on_whodunnit", using: :btree
+ create_table "log_legal_documents", force: :cascade do |t|
+ t.string "item_type", null: false
+ t.integer "item_id", null: false
+ t.string "event", null: false
+ t.string "whodunnit"
+ t.json "object"
+ t.json "object_changes"
+ t.datetime "created_at"
+ t.string "session"
+ t.json "children"
+ end
+
+ add_index "log_legal_documents", ["item_type", "item_id"], name: "index_log_legal_documents_on_item_type_and_item_id", using: :btree
+ add_index "log_legal_documents", ["whodunnit"], name: "index_log_legal_documents_on_whodunnit", using: :btree
+
create_table "log_messages", force: :cascade do |t|
t.string "item_type", null: false
t.integer "item_id", null: false
@@ -895,10 +910,10 @@ ActiveRecord::Schema.define(version: 20151202123506) do
create_table "nameservers", force: :cascade do |t|
t.string "hostname"
- t.string "ipv4", array: true
+ t.string "ipv4"
t.datetime "created_at"
t.datetime "updated_at"
- t.string "ipv6", array: true
+ t.string "ipv6"
t.integer "domain_id"
t.string "creator_str"
t.string "updator_str"
@@ -996,13 +1011,9 @@ ActiveRecord::Schema.define(version: 20151202123506) do
t.datetime "updated_at"
t.string "creator_str"
t.string "updator_str"
- t.integer "legacy_id"
- t.string "name"
- t.string "password"
+ t.hstore "names"
end
- add_index "reserved_domains", ["name"], name: "index_reserved_domains_on_name", using: :btree
-
create_table "settings", force: :cascade do |t|
t.string "var", null: false
t.text "value"
diff --git a/db/structure.sql b/db/structure.sql
index c4ede9569..b2480a04e 100644
--- a/db/structure.sql
+++ b/db/structure.sql
@@ -39,106 +39,6 @@ COMMENT ON EXTENSION hstore IS 'data type for storing sets of (key, value) pairs
SET search_path = public, pg_catalog;
---
--- Name: fill_ident_country(); Type: FUNCTION; Schema: public; Owner: -
---
-
-CREATE FUNCTION fill_ident_country() RETURNS boolean
- LANGUAGE plpgsql
- AS $_$
- DECLARE
- changed BOOLEAN;
- multiplier INT [];
- multiplier2 INT [];
- multiplier3 INT [];
- multiplier4 INT [];
- r RECORD;
- control TEXT;
- total INT;
- i INT;
- mod INT;
- counter INT;
- BEGIN
-
- multiplier := ARRAY [1, 2, 3, 4, 5, 6, 7, 8, 9, 1];
- multiplier2 := ARRAY [3, 4, 5, 6, 7, 8, 9, 1, 2, 3];
- multiplier3 := ARRAY [1, 2, 3, 4, 5, 6, 7];
- multiplier4 := ARRAY [3, 4, 5, 6, 7, 8, 9];
-
- FOR r IN SELECT id, ident FROM contacts WHERE ident_type = 'priv' AND ident_country_code IS NULL
- LOOP
- IF (length(r.ident) = 11 AND (r.ident ~ '^[0-9]+$') AND (substring(r.ident, 1, 1) = '3' OR substring(r.ident, 1, 1) = '4' OR substring(r.ident, 1, 1) = '5' OR substring(r.ident, 1, 1) = '6'))
- THEN
- total := 0;
- counter := 1;
- FOREACH i IN ARRAY multiplier
- LOOP
- total := (total + (i * to_number(substring(r.ident, counter, 1), '9')));
- counter := (counter + 1);
- END LOOP;
- mod := (total % 11);
- counter := 1;
- IF (mod >= 10)
- THEN
- total = 0;
- FOREACH i IN ARRAY multiplier2
- LOOP
- total := (total + (i * to_number(substring(r.ident, counter, 1), '9')));
- counter := (counter + 1);
- END LOOP;
- mod := (total % 11);
- END IF;
- IF (mod = 10)
- THEN
- mod := 0;
- END IF;
- IF (substring(r.ident, 11, 1) = to_char(mod, 'FM999MI'))
- THEN
- UPDATE contacts SET ident_country_code = 'EE' WHERE id = r.id;
- END IF;
- total := 0;
- END IF;
- END LOOP;
-
- FOR r IN SELECT id, ident FROM contacts WHERE ident_type = 'org' AND ident_country_code IS NULL
- LOOP
- IF (length(r.ident) = 8 AND (r.ident ~ '^[0-9]+$') AND (substring(r.ident, 1, 1) = '1' OR substring(r.ident, 1, 1) = '8' OR substring(r.ident, 1, 1) = '9'))
- THEN
- total := 0;
- counter := 1;
- FOREACH i IN ARRAY multiplier3
- LOOP
- total := (total + (i * to_number(substring(r.ident, counter, 1), '9')));
- counter := (counter + 1);
- END LOOP;
- mod := total % 11;
- total := 0;
- counter := 1;
- IF (mod >= 10)
- THEN
- total = 0;
- FOREACH i IN ARRAY multiplier4
- LOOP
- total := (total + (i * to_number(substring(r.ident, counter, 1), '9')));
- counter := (counter + 1);
- END LOOP;
- mod := (total % 11);
- END IF;
- IF (mod = 10)
- THEN
- mod := 0;
- END IF;
- IF (substring(r.ident, 8, 1) = to_char(mod, 'FM999MI'))
- THEN
- UPDATE contacts SET ident_country_code = 'EE' WHERE id = r.id;
- END IF;
- END IF;
- END LOOP;
- RETURN changed;
- END;
- $_$;
-
-
--
-- Name: generate_zonefile(character varying); Type: FUNCTION; Schema: public; Owner: -
--
@@ -214,7 +114,7 @@ CREATE FUNCTION generate_zonefile(i_origin character varying) RETURNS text
WHERE d.name LIKE include_filter AND d.name NOT LIKE exclude_filter
AND ns.hostname LIKE '%.' || d.name
AND d.name <> i_origin
- AND ns.ipv4 IS NOT NULL AND ns.ipv4 <> '{}'
+ AND ns.ipv4 IS NOT NULL AND ns.ipv4 <> ''
AND NOT ('{serverHold,clientHold}' && d.statuses)
), chr(10)
) INTO tmp_var;
@@ -234,7 +134,7 @@ CREATE FUNCTION generate_zonefile(i_origin character varying) RETURNS text
WHERE d.name LIKE include_filter AND d.name NOT LIKE exclude_filter
AND ns.hostname LIKE '%.' || d.name
AND d.name <> i_origin
- AND ns.ipv6 IS NOT NULL AND ns.ipv6 <> '{}'
+ AND ns.ipv6 IS NOT NULL AND ns.ipv6 <> ''
AND NOT ('{serverHold,clientHold}' && d.statuses)
), chr(10)
) INTO tmp_var;
@@ -245,8 +145,8 @@ CREATE FUNCTION generate_zonefile(i_origin character varying) RETURNS text
SELECT array_to_string(
array(
SELECT concat(
- d.name_puny, '. 3600 IN DS ', dk.ds_key_tag, ' ',
- dk.ds_alg, ' ', dk.ds_digest_type, ' ', dk.ds_digest
+ d.name_puny, '. IN DS ', dk.ds_key_tag, ' ',
+ dk.ds_alg, ' ', dk.ds_digest_type, ' ( ', dk.ds_digest, ' )'
)
FROM domains d
JOIN dnskeys dk ON dk.domain_id = d.id
@@ -845,8 +745,7 @@ CREATE TABLE dnskeys (
ds_digest character varying,
creator_str character varying,
updator_str character varying,
- legacy_domain_id integer,
- updated_at timestamp without time zone
+ legacy_domain_id integer
);
@@ -1231,7 +1130,9 @@ CREATE TABLE legal_documents (
documentable_id integer,
documentable_type character varying,
created_at timestamp without time zone,
+ updated_at timestamp without time zone,
creator_str character varying,
+ updator_str character varying,
path character varying
);
@@ -1962,6 +1863,43 @@ CREATE SEQUENCE log_keyrelays_id_seq
ALTER SEQUENCE log_keyrelays_id_seq OWNED BY log_keyrelays.id;
+--
+-- Name: log_legal_documents; Type: TABLE; Schema: public; Owner: -; Tablespace:
+--
+
+CREATE TABLE log_legal_documents (
+ id integer NOT NULL,
+ item_type character varying NOT NULL,
+ item_id integer NOT NULL,
+ event character varying NOT NULL,
+ whodunnit character varying,
+ object json,
+ object_changes json,
+ created_at timestamp without time zone,
+ session character varying,
+ children json
+);
+
+
+--
+-- Name: log_legal_documents_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE log_legal_documents_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: log_legal_documents_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE log_legal_documents_id_seq OWNED BY log_legal_documents.id;
+
+
--
-- Name: log_messages; Type: TABLE; Schema: public; Owner: -; Tablespace:
--
@@ -2375,10 +2313,10 @@ ALTER SEQUENCE messages_id_seq OWNED BY messages.id;
CREATE TABLE nameservers (
id integer NOT NULL,
hostname character varying,
- ipv4 character varying[],
+ ipv4 character varying,
created_at timestamp without time zone,
updated_at timestamp without time zone,
- ipv6 character varying[],
+ ipv6 character varying,
domain_id integer,
creator_str character varying,
updator_str character varying,
@@ -2622,9 +2560,7 @@ CREATE TABLE reserved_domains (
updated_at timestamp without time zone,
creator_str character varying,
updator_str character varying,
- legacy_id integer,
- name character varying,
- password character varying
+ names hstore
);
@@ -3190,6 +3126,13 @@ ALTER TABLE ONLY log_invoices ALTER COLUMN id SET DEFAULT nextval('log_invoices_
ALTER TABLE ONLY log_keyrelays ALTER COLUMN id SET DEFAULT nextval('log_keyrelays_id_seq'::regclass);
+--
+-- Name: id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY log_legal_documents ALTER COLUMN id SET DEFAULT nextval('log_legal_documents_id_seq'::regclass);
+
+
--
-- Name: id; Type: DEFAULT; Schema: public; Owner: -
--
@@ -3702,6 +3645,14 @@ ALTER TABLE ONLY log_keyrelays
ADD CONSTRAINT log_keyrelays_pkey PRIMARY KEY (id);
+--
+-- Name: log_legal_documents_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace:
+--
+
+ALTER TABLE ONLY log_legal_documents
+ ADD CONSTRAINT log_legal_documents_pkey PRIMARY KEY (id);
+
+
--
-- Name: log_messages_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace:
--
@@ -4034,13 +3985,6 @@ CREATE INDEX index_domain_transfers_on_domain_id ON domain_transfers USING btree
CREATE INDEX index_domains_on_delete_at ON domains USING btree (delete_at);
---
--- Name: index_domains_on_name; Type: INDEX; Schema: public; Owner: -; Tablespace:
---
-
-CREATE UNIQUE INDEX index_domains_on_name ON domains USING btree (name);
-
-
--
-- Name: index_domains_on_outzone_at; Type: INDEX; Schema: public; Owner: -; Tablespace:
--
@@ -4405,6 +4349,20 @@ CREATE INDEX index_log_keyrelays_on_item_type_and_item_id ON log_keyrelays USING
CREATE INDEX index_log_keyrelays_on_whodunnit ON log_keyrelays USING btree (whodunnit);
+--
+-- Name: index_log_legal_documents_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace:
+--
+
+CREATE INDEX index_log_legal_documents_on_item_type_and_item_id ON log_legal_documents USING btree (item_type, item_id);
+
+
+--
+-- Name: index_log_legal_documents_on_whodunnit; Type: INDEX; Schema: public; Owner: -; Tablespace:
+--
+
+CREATE INDEX index_log_legal_documents_on_whodunnit ON log_legal_documents USING btree (whodunnit);
+
+
--
-- Name: index_log_messages_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace:
--
@@ -4552,13 +4510,6 @@ CREATE INDEX index_registrant_verifications_on_domain_id ON registrant_verificat
CREATE INDEX index_registrars_on_code ON registrars USING btree (code);
---
--- Name: index_reserved_domains_on_name; Type: INDEX; Schema: public; Owner: -; Tablespace:
---
-
-CREATE INDEX index_reserved_domains_on_name ON reserved_domains USING btree (name);
-
-
--
-- Name: index_settings_on_thing_type_and_thing_id_and_var; Type: INDEX; Schema: public; Owner: -; Tablespace:
--
@@ -4996,23 +4947,5 @@ INSERT INTO schema_migrations (version) VALUES ('20150921110152');
INSERT INTO schema_migrations (version) VALUES ('20150921111842');
-INSERT INTO schema_migrations (version) VALUES ('20151028183132');
-
INSERT INTO schema_migrations (version) VALUES ('20151029152638');
-INSERT INTO schema_migrations (version) VALUES ('20151112160452');
-
-INSERT INTO schema_migrations (version) VALUES ('20151117081204');
-
-INSERT INTO schema_migrations (version) VALUES ('20151120090455');
-
-INSERT INTO schema_migrations (version) VALUES ('20151124200353');
-
-INSERT INTO schema_migrations (version) VALUES ('20151125155601');
-
-INSERT INTO schema_migrations (version) VALUES ('20151127091716');
-
-INSERT INTO schema_migrations (version) VALUES ('20151130175654');
-
-INSERT INTO schema_migrations (version) VALUES ('20151202123506');
-
From 0c36b3045acf8357778833d21f4d8635006ae55d Mon Sep 17 00:00:00 2001
From: Stas
Date: Tue, 5 Jan 2016 16:22:06 +0200
Subject: [PATCH 09/69] 111055076-callback_added
---
app/models/invoice.rb | 2 ++
1 file changed, 2 insertions(+)
diff --git a/app/models/invoice.rb b/app/models/invoice.rb
index 2f54e2287..fdcb3cf61 100644
--- a/app/models/invoice.rb
+++ b/app/models/invoice.rb
@@ -19,6 +19,8 @@ class Invoice < ActiveRecord::Base
before_create :set_invoice_number, :check_vat
+ before_save :check_vat
+
def set_invoice_number
last_no = Invoice.order(number: :desc).where('number IS NOT NULL').limit(1).pluck(:number).first
From cbe0193cbfb1dbdba5085d8041ac906993be6315 Mon Sep 17 00:00:00 2001
From: Stas
Date: Tue, 5 Jan 2016 17:57:56 +0200
Subject: [PATCH 10/69] 107279984-balance_fix
---
app/controllers/admin/account_activities_controller.rb | 8 +++++++-
app/views/admin/account_activities/index.haml | 4 ++--
2 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/app/controllers/admin/account_activities_controller.rb b/app/controllers/admin/account_activities_controller.rb
index 640acf2e7..bb5b72df8 100644
--- a/app/controllers/admin/account_activities_controller.rb
+++ b/app/controllers/admin/account_activities_controller.rb
@@ -12,9 +12,15 @@ class Admin::AccountActivitiesController < AdminController
logger.warn('Invalid date')
end
+ balance_params = params[:q].deep_dup
+
+ if balance_params[:created_at_gteq]
+ balance_params.delete('created_at_gteq')
+ end
+
@q = AccountActivity.includes(:invoice, account: :registrar).search(params[:q])
@q.sorts = 'id desc' if @q.sorts.empty?
- @b = AccountActivity.where.not(id: @q.result.map(&:id))
+ @b = AccountActivity.search(balance_params).result.where.not(id: @q.result.map(&:id))
respond_to do |format|
format.html { @account_activities = @q.result.page(params[:page]) }
diff --git a/app/views/admin/account_activities/index.haml b/app/views/admin/account_activities/index.haml
index 6efefb814..4999fd558 100644
--- a/app/views/admin/account_activities/index.haml
+++ b/app/views/admin/account_activities/index.haml
@@ -62,7 +62,7 @@
%th{class: 'col-xs-2'}
= sort_link(@q, 'sum')
%tbody
- -total = 0
+ -total = @b.sum('sum').to_f
- @account_activities.each do |x|
%tr
%td= link_to(x.account.registrar.try(:code), admin_registrar_path(x.account.registrar))
@@ -79,7 +79,7 @@
%td
%td
%td{class: 'text-right'}= t(:total)
- %td{class: 'text-success'}= total > 0 ? "+#{total} EUR" : "#{total} EUR"
+ %td{class: total > 0 ? 'text-success' : 'text-danger'}= total > 0 ? "+#{total} EUR" : "#{total} EUR"
.row
.col-md-12
= paginate @account_activities
From bb474ec62b7d4ca227fc90ae26676d1103b0d5c9 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Wed, 6 Jan 2016 09:17:45 +0200
Subject: [PATCH 11/69] Story#111066886 - Glue IP is required for nameservers
with matching domain name endings
---
app/models/domain.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/models/domain.rb b/app/models/domain.rb
index 05ffafc4d..a9defdf50 100644
--- a/app/models/domain.rb
+++ b/app/models/domain.rb
@@ -544,7 +544,7 @@ class Domain < ActiveRecord::Base
def validate_nameserver_ips
nameservers.to_a.reject(&:marked_for_destruction?).each do |ns|
- next unless ns.hostname.end_with?(name)
+ next unless ns.hostname.end_with?(".#{name}")
next if ns.ipv4.present?
errors.add(:nameservers, :invalid) if errors[:nameservers].blank?
ns.errors.add(:ipv4, :blank)
From 2d35556f2b8c9c05685cd734ff2b2fc1f931a731 Mon Sep 17 00:00:00 2001
From: Georg Kahest
Date: Tue, 5 Jan 2016 14:53:04 +0200
Subject: [PATCH 12/69] disclose refix
---
app/models/whois_record.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/models/whois_record.rb b/app/models/whois_record.rb
index 528f84816..08d1cdf14 100644
--- a/app/models/whois_record.rb
+++ b/app/models/whois_record.rb
@@ -52,7 +52,7 @@ class WhoisRecord < ActiveRecord::Base
h[:registrant] = domain.registrant.name
- h[:registrant_email] = domain.registrant.email
+ h[:email] = domain.registrant.email
@disclosed << [:email, domain.registrant.email]
h[:registrant_changed] = domain.registrant.updated_at.try(:to_s, :iso8601)
From a440169eaff75f6585e1f0b2e664247e75b11f27 Mon Sep 17 00:00:00 2001
From: Stas
Date: Wed, 6 Jan 2016 15:04:02 +0200
Subject: [PATCH 13/69] 11031910-callbacks_for_whois_server
---
.../admin/reserved_domains_controller.rb | 2 +-
app/models/reserved_domain.rb | 33 +++++++++++++++++++
app/views/for_models/whois_other.erb | 8 +++++
3 files changed, 42 insertions(+), 1 deletion(-)
create mode 100644 app/views/for_models/whois_other.erb
diff --git a/app/controllers/admin/reserved_domains_controller.rb b/app/controllers/admin/reserved_domains_controller.rb
index 622f56eb2..402d33022 100644
--- a/app/controllers/admin/reserved_domains_controller.rb
+++ b/app/controllers/admin/reserved_domains_controller.rb
@@ -24,7 +24,7 @@ class Admin::ReservedDomainsController < AdminController
ReservedDomain.transaction do
# removing old ones
existing = ReservedDomain.any_of_domains(names.keys).pluck(:id)
- ReservedDomain.where.not(id: existing).delete_all
+ ReservedDomain.where.not(id: existing).destroy_all
#updating and adding
names.each do |name, psw|
diff --git a/app/models/reserved_domain.rb b/app/models/reserved_domain.rb
index 057321e56..141fd7263 100644
--- a/app/models/reserved_domain.rb
+++ b/app/models/reserved_domain.rb
@@ -1,6 +1,9 @@
class ReservedDomain < ActiveRecord::Base
include Versions # version/reserved_domain_version.rb
before_save :fill_empty_passwords
+ before_save :generate_data
+ before_destroy :remove_data
+
class << self
def pw_for(domain_name)
@@ -25,4 +28,34 @@ class ReservedDomain < ActiveRecord::Base
def name= val
super SimpleIDN.to_unicode(val)
end
+
+ def generate_data
+ @json = generate_json
+ @body = generate_body
+ update_whois_server
+ end
+
+ def update_whois_server
+ wr = Whois::Record.find_or_initialize_by(name: name)
+ wr.body = @body
+ wr.json = @json
+ wr.save
+ end
+
+ def generate_body
+ template = Rails.root.join("app/views/for_models/whois_other.erb".freeze)
+ ERB.new(template.read, nil, "-").result(binding)
+ end
+
+ def generate_json
+ h = HashWithIndifferentAccess.new
+ h[:name] = self.name
+ h[:status] = 'Reserved'
+ h
+ end
+
+ def remove_data
+ Whois::Record.where(name: name).delete_all
+ end
+
end
diff --git a/app/views/for_models/whois_other.erb b/app/views/for_models/whois_other.erb
new file mode 100644
index 000000000..50cf0b2dc
--- /dev/null
+++ b/app/views/for_models/whois_other.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
From c0f9a0105eb32bdc5a86123fe875b064bc2e7144 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Wed, 6 Jan 2016 17:30:05 +0200
Subject: [PATCH 14/69] Story#111065230 - send expiration_reminder Mail 2 days
after
---
app/mailers/domain_mailer.rb | 4 ++--
app/models/domain.rb | 2 +-
app/views/admin/settings/index.haml | 1 +
config/initializers/initial_settings.rb | 1 +
4 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/app/mailers/domain_mailer.rb b/app/mailers/domain_mailer.rb
index 66533e316..443ac6fa9 100644
--- a/app/mailers/domain_mailer.rb
+++ b/app/mailers/domain_mailer.rb
@@ -97,8 +97,8 @@ class DomainMailer < ApplicationMailer
def expiration_reminder(domain_id)
@domain = Domain.find_by(id: domain_id)
- return unless @domain
- return if whitelist_blocked?(@domain.registrant.email)
+ return if @domain.nil? || !@domain.statuses.include?(DomainStatus::EXPIRED) || whitelist_blocked?(@domain.registrant.email)
+
mail(to: format(@domain.registrant.email),
subject: "#{I18n.t(:expiration_remind_subject,
name: @domain.name)} [#{@domain.name}]")
diff --git a/app/models/domain.rb b/app/models/domain.rb
index 05ffafc4d..ca819783b 100644
--- a/app/models/domain.rb
+++ b/app/models/domain.rb
@@ -264,7 +264,7 @@ class Domain < ActiveRecord::Base
domains.each do |domain|
next unless domain.expirable?
domain.set_graceful_expired
- DomainMailer.expiration_reminder(domain.id).deliver
+ DomainMailer.expiration_reminder(domain.id).deliver_in(Setting.redemption_grace_period.days)
STDOUT << "#{Time.zone.now.utc} Domain.start_expire_period: ##{domain.id} (#{domain.name}) #{domain.changes}\n" unless Rails.env.test?
domain.save
end
diff --git a/app/views/admin/settings/index.haml b/app/views/admin/settings/index.haml
index ede30e979..f03ca66bc 100644
--- a/app/views/admin/settings/index.haml
+++ b/app/views/admin/settings/index.haml
@@ -36,6 +36,7 @@
= render 'setting_row', var: :days_to_renew_domain_before_expire
= render 'setting_row', var: :expire_warning_period
= render 'setting_row', var: :redemption_grace_period
+ = render 'setting_row', var: :expiration_reminder_mail
.panel.panel-default
.panel-heading.clearfix
diff --git a/config/initializers/initial_settings.rb b/config/initializers/initial_settings.rb
index 812641a09..193d179b0 100644
--- a/config/initializers/initial_settings.rb
+++ b/config/initializers/initial_settings.rb
@@ -37,6 +37,7 @@ if con.present? && con.table_exists?('settings')
Setting.save_default(:days_to_renew_domain_before_expire, 90)
Setting.save_default(:expire_warning_period, 15)
Setting.save_default(:redemption_grace_period, 30)
+ Setting.save_default(:expiration_reminder_mail, 2)
Setting.save_default(:registrar_ip_whitelist_enabled, true)
Setting.save_default(:api_ip_whitelist_enabled, true)
From 6b3bfe01d2e8bd6ec8049c1b3e13fbc53c7e0df8 Mon Sep 17 00:00:00 2001
From: Stas
Date: Thu, 7 Jan 2016 18:06:43 +0200
Subject: [PATCH 15/69] 111068693-date_cfg_change
---
config/locales/en.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 893fe5665..91a3361b1 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -21,7 +21,7 @@ en:
default: "%d. %B %Y, %H:%M"
longer: "%a, %e. %b %Y, %H:%M"
long: "%A, %e. %B %Y, %H:%M"
- short: "%d.%m.%y, %H:%M"
+ short: "%d.%m.%y"
shorts: "%d.%m.%y, %H:%M:%S"
date: "%d.%m.%y"
date_long: "%d. %B %Y"
From 74ee6b3e8c88c7d930ee68f6444f83f60e82536f Mon Sep 17 00:00:00 2001
From: Stas
Date: Thu, 7 Jan 2016 19:08:49 +0200
Subject: [PATCH 16/69] 111068694-template_changes
---
.../mailers/domain_mailer/expiration_reminder.html.erb | 6 +++---
.../mailers/domain_mailer/expiration_reminder.text.erb | 6 +++---
app/views/mailers/domain_mailer/force_delete.html.erb | 6 +++---
app/views/mailers/domain_mailer/force_delete.text.erb | 6 +++---
config/locales/en.yml | 2 +-
5 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/app/views/mailers/domain_mailer/expiration_reminder.html.erb b/app/views/mailers/domain_mailer/expiration_reminder.html.erb
index 59f02c510..e29ca826e 100644
--- a/app/views/mailers/domain_mailer/expiration_reminder.html.erb
+++ b/app/views/mailers/domain_mailer/expiration_reminder.html.erb
@@ -1,7 +1,7 @@
Domeen <%= @domain.name %> on aegunud
Lugupeetud .ee domeeni kasutaja
-Domeeninimi <%= @domain.name %> on aegunud ja ei ole alates <%= l(@domain.outzone_at, format: :short) %> internetis kättesaadav. Alates <%= l(@domain.delete_at, format: :short) %> on domeen <%= @domain.name %> avatud registreerimiseks kõigile huvilistele.
+Domeeninimi <%= @domain.name %> on aegunud ja ei ole alates <%= l(@domain.outzone_at, format: :date) %> internetis kättesaadav. Alates <%= l(@domain.delete_at, format: :date) %> on domeen <%= @domain.name %> avatud registreerimiseks kõigile huvilistele.
Domeeni registreeringu pikendamiseks pöörduge palun oma registripidaja <%= @domain.registrar.name %> poole. Registripidajate kontaktid leiate aadressilt www.internet.ee/registripidajad.
@@ -27,7 +27,7 @@ Tel: +372 727 1000
The <%= @domain.name %> domain has expired
Dear user of .ee domain,
-The domain name <%= @domain.name %> has expired and will not be available on the Internet from <%= l(@domain.outzone_at, format: :short) %>. From <%= l(@domain.delete_at, format: :short) %>, the <%= @domain.name %> domain will be available for registration on a first come first served basis.
+The domain name <%= @domain.name %> has expired and will not be available on the Internet from <%= l(@domain.outzone_at, format: :date) %>. From <%= l(@domain.delete_at, format: :date) %>, the <%= @domain.name %> domain will be available for registration on a first come first served basis.
To renew the domain registration, please contact your registrar <%= @domain.registrar.name %>. You can find the registrar's contacts at http://www.internet.ee/en/registripidajad/.
@@ -53,7 +53,7 @@ Phone: +372 727 1000
Домен <%= @domain.name %> устарел
Уважаемый пользователь домена .ee
-Доменное имя <%= @domain.name %> устарело и с <%= l(@domain.outzone_at, format: :short) %> недоступно в Интернете. С <%= l(@domain.delete_at, format: :short) %> домен <%= @domain.name %> доступен для регистрации всем желающим по принципу "first come, first served".
+Доменное имя <%= @domain.name %> устарело и с <%= l(@domain.outzone_at, format: :date) %> недоступно в Интернете. С <%= l(@domain.delete_at, format: :date) %> домен <%= @domain.name %> доступен для регистрации всем желающим по принципу "first come, first served".
Для продления регистрации домена просим обратиться к своему регистратору <%= @domain.registrar.name %>. Контактные данные регистраторов можно найти по адресу http://www.internet.ee/ru/p/.
diff --git a/app/views/mailers/domain_mailer/expiration_reminder.text.erb b/app/views/mailers/domain_mailer/expiration_reminder.text.erb
index 988ae5e10..d16682ea5 100644
--- a/app/views/mailers/domain_mailer/expiration_reminder.text.erb
+++ b/app/views/mailers/domain_mailer/expiration_reminder.text.erb
@@ -1,7 +1,7 @@
Domeen <%= @domain.name %> on aegunud
Lugupeetud .ee domeeni kasutaja
-Domeeninimi <%= @domain.name %> on aegunud ja ei ole alates <%= l(@domain.outzone_at, format: :short) %> internetis kättesaadav. Alates <%= l(@domain.delete_at, format: :short) %> on domeen <%= @domain.name %> avatud registreerimiseks kõigile huvilistele.
+Domeeninimi <%= @domain.name %> on aegunud ja ei ole alates <%= l(@domain.outzone_at, format: :date) %> internetis kättesaadav. Alates <%= l(@domain.delete_at, format: :date) %> on domeen <%= @domain.name %> avatud registreerimiseks kõigile huvilistele.
Domeeni registreeringu pikendamiseks pöörduge palun oma registripidaja <%= @domain.registrar.name %> poole. Registripidajate kontaktid leiate aadressilt www.internet.ee/registripidajad.
@@ -27,7 +27,7 @@ Tel: +372 727 1000
The <%= @domain.name %> domain has expired
Dear user of .ee domain,
-The domain name <%= @domain.name %> has expired and will not be available on the Internet from <%= l(@domain.outzone_at, format: :short) %>. From <%= l(@domain.delete_at, format: :short) %>, the <%= @domain.name %> domain will be available for registration on a first come first served basis.
+The domain name <%= @domain.name %> has expired and will not be available on the Internet from <%= l(@domain.outzone_at, format: :date) %>. From <%= l(@domain.delete_at, format: :date) %>, the <%= @domain.name %> domain will be available for registration on a first come first served basis.
To renew the domain registration, please contact your registrar <%= @domain.registrar.name %>. You can find the registrar's contacts at http://www.internet.ee/en/registripidajad/.
@@ -53,7 +53,7 @@ Phone: +372 727 1000
Домен <%= @domain.name %> устарел
Уважаемый пользователь домена .ee
-Доменное имя <%= @domain.name %> устарело и с <%= l(@domain.outzone_at, format: :short) %> недоступно в Интернете. С <%= l(@domain.delete_at, format: :short) %> домен <%= @domain.name %> доступен для регистрации всем желающим по принципу "first come, first served".
+Доменное имя <%= @domain.name %> устарело и с <%= l(@domain.outzone_at, format: :date) %> недоступно в Интернете. С <%= l(@domain.delete_at, format: :date) %> домен <%= @domain.name %> доступен для регистрации всем желающим по принципу "first come, first served".
Для продления регистрации домена просим обратиться к своему регистратору <%= @domain.registrar.name %>. Контактные данные регистраторов можно найти по адресу http://www.internet.ee/ru/p/.
diff --git a/app/views/mailers/domain_mailer/force_delete.html.erb b/app/views/mailers/domain_mailer/force_delete.html.erb
index 82bdee156..6f4f4cb27 100644
--- a/app/views/mailers/domain_mailer/force_delete.html.erb
+++ b/app/views/mailers/domain_mailer/force_delete.html.erb
@@ -20,7 +20,7 @@ Registrikood: <%= @domain.registrant.try(:ident) %>
Domeenireeglite punktist 6.4 tulenevalt on domeeni suhtes õigust omaval registreerijal võimalus esitada domeeni <%= @domain.name %> registripidajale <%= @domain.registrar %> domeeni üleandmise taotlus Domeenireeglite p 5.3.6.2 kohaselt. Taotlusele tuleb lisada domeeni omandamist tõendavad dokumendid, mis asendavad Domeenireeglite punktis 5.3.6.3 sätestatud üleandva registreerija nõusolekut. Vastav dokumentatsioon tuleks esitada Registripidajale esimesel võimalusel.
-Kui üleandmine ei ole 30 päeva jooksul toimunud, kustub domeen <%= @domain.name %> 24 tunni jooksul <%= l(@domain.force_delete_at, format: :short) %> möödumisest juhuslikult valitud ajahetkel. Soovi korral on võimalik domeen pärast selle kustumist registrist “kes ees, see mees” põhimõttel uuesti registreerida.
+Kui üleandmine ei ole 30 päeva jooksul toimunud, kustub domeen <%= @domain.name %> 24 tunni jooksul <%= l(@domain.force_delete_at, format: :date) %> möödumisest juhuslikult valitud ajahetkel. Soovi korral on võimalik domeen pärast selle kustumist registrist “kes ees, see mees” põhimõttel uuesti registreerida.
Lisaküsimuste korral võtke palun ühendust oma registripidajaga <%= @domain.registrar %>, kelle kontaktandmed leiate lingilt http://www.internet.ee/registripidajad
@@ -39,7 +39,7 @@ Registry code: <%= @domain.registrant.try(:ident) %>
According to paragraph 6.4 of the Domain Regulation, the registrant holding a right to the domain name <%= @domain.name %> can submit a domain name transfer application to the registrar <%= @domain.registrar %> in accordance with paragraph 5.3.6.2 of the Domain Regulation. The application must be submitted together with documents certifying the acquisition of the domain that will replace the consent of the surrendering registrant as laid down in paragraph 5.3.6.3 of the Domain Regulation. The relevant documents should be submitted to the registrar as soon as possible.
-If the transfer has not been made in 30 days, the domain <%= @domain.name %> will be deleted at a randomly chosen moment within 24 hours after <%= l(@domain.force_delete_at, format: :short) %>. After deletion it is possible to reregister the domain on a "first come, first served" basis.
+If the transfer has not been made in 30 days, the domain <%= @domain.name %> will be deleted at a randomly chosen moment within 24 hours after <%= l(@domain.force_delete_at, format: :date) %>. After deletion it is possible to reregister the domain on a "first come, first served" basis.
Should you have additional questions, please contact your registrar <%= @domain.registrar %>, whose contact information can be found at http://www.internet.ee/registrars/
@@ -58,7 +58,7 @@ Registry code: <%= @domain.registrant.try(:ident) %>
Согласно пункту 6.4 Правил домена регистрант, имеющий право на домен, может подать регистратору <%= @domain.registrar %> домена <%= @domain.name %> ходатайство о передаче домена в соответствии с п. 5.3.6.2 Правил домена. К ходатайству следует приложить подтверждающие приобретение домена документы, заменяющие в соответствии с пунктом 5.3.6.3 Правил домена согласие передающего доменное имя регистранта. EIS предлагает представить соответствующую документацию Регистратору при первой возможности, начиная с инициирования процедуры удаления.
-Если в течение 30 дней передача не произошла, домен <%= @domain.name %> удаляется по истечении 24 часов <%= l(@domain.force_delete_at, format: :short) %> в случайный момент времени. По желанию после удаления из регистра домен можно снова зарегистрировать по принципу "кто успел, тот и съел".
+Если в течение 30 дней передача не произошла, домен <%= @domain.name %> удаляется по истечении 24 часов <%= l(@domain.force_delete_at, format: :date) %> в случайный момент времени. По желанию после удаления из регистра домен можно снова зарегистрировать по принципу "кто успел, тот и съел".
Просим обратиться к своему регистратору <%= @domain.registrar %>. Контактные данные регистраторов можно найти по адресу http://www.internet.ee/registratory/
diff --git a/app/views/mailers/domain_mailer/force_delete.text.erb b/app/views/mailers/domain_mailer/force_delete.text.erb
index 527288686..d6369c8cb 100644
--- a/app/views/mailers/domain_mailer/force_delete.text.erb
+++ b/app/views/mailers/domain_mailer/force_delete.text.erb
@@ -11,7 +11,7 @@ Kuivõrd äriregistrist kustutatud juriidiline isik ei saa olla domeeni registre
Domeenireeglite punktist 6.4 tulenevalt on domeeni suhtes õigust omaval registreerijal võimalus esitada domeeni <%= @domain.name %> registripidajale <%= @domain.registrar %> domeeni üleandmise taotlus Domeenireeglite p 5.3.6.2 kohaselt. Taotlusele tuleb lisada domeeni omandamist tõendavad dokumendid, mis asendavad Domeenireeglite punktis 5.3.6.3 sätestatud üleandva registreerija nõusolekut. Vastav dokumentatsioon tuleks esitada Registripidajale esimesel võimalusel.
-Kui üleandmine ei ole 30 päeva jooksul toimunud, kustub domeen <%= @domain.name %> 24 tunni jooksul <%= l(@domain.force_delete_at, format: :short) %> möödumisest juhuslikult valitud ajahetkel. Soovi korral on võimalik domeen pärast selle kustumist registrist "kes ees, see mees" põhimõttel uuesti registreerida.
+Kui üleandmine ei ole 30 päeva jooksul toimunud, kustub domeen <%= @domain.name %> 24 tunni jooksul <%= l(@domain.force_delete_at, format: :date) %> möödumisest juhuslikult valitud ajahetkel. Soovi korral on võimalik domeen pärast selle kustumist registrist "kes ees, see mees" põhimõttel uuesti registreerida.
Lisaküsimuste korral võtke palun ühendust oma registripidajaga <%= @domain.registrar %>, kelle kontaktandmed leiate lingilt http://www.internet.ee/registripidajad/
@@ -30,7 +30,7 @@ As a terminated legal person cannot be the registrant of a domain, the EIF start
According to paragraph 6.4 of the Domain Regulation, the registrant holding a right to the domain name <%= @domain.name %> can submit a domain name transfer application to the registrar <%= @domain.registrar %> in accordance with paragraph 5.3.6.2 of the Domain Regulation. The application must be submitted together with documents certifying the acquisition of the domain that will replace the consent of the surrendering registrant as laid down in paragraph 5.3.6.3 of the Domain Regulation. The relevant documents should be submitted to the registrar as soon as possible.
-If the transfer has not been made in 30 days, the domain <%= @domain.name %> will be deleted at a randomly chosen moment within 24 hours after <%= l(@domain.force_delete_at, format: :short) %>. After deletion it is possible to reregister the domain on a "first come, first served" basis.
+If the transfer has not been made in 30 days, the domain <%= @domain.name %> will be deleted at a randomly chosen moment within 24 hours after <%= l(@domain.force_delete_at, format: :date) %>. After deletion it is possible to reregister the domain on a "first come, first served" basis.
Should you have additional questions, please contact your registrar <%= @domain.registrar %>, whose contact information can be found at http://www.internet.ee/registrars/
@@ -49,7 +49,7 @@ EIS стало известно, что юридическое лицо с ре
Согласно пункту 6.4 Правил домена регистрант, имеющий право на домен, может подать регистратору <%= @domain.registrar %> домена <%= @domain.name %> ходатайство о передаче домена в соответствии с п. 5.3.6.2 Правил домена. К ходатайству следует приложить подтверждающие приобретение домена документы, заменяющие в соответствии с пунктом 5.3.6.3 Правил домена согласие передающего доменное имя регистранта. EIS предлагает представить соответствующую документацию Регистратору при первой возможности, начиная с инициирования процедуры удаления.
-Если в течение 30 дней передача не произошла, домен <%= @domain.name %> удаляется по истечении 24 часов <%= l(@domain.force_delete_at, format: :short) %> в случайный момент времени. По желанию после удаления из регистра домен можно снова зарегистрировать по принципу "кто успел, тот и съел".
+Если в течение 30 дней передача не произошла, домен <%= @domain.name %> удаляется по истечении 24 часов <%= l(@domain.force_delete_at, format: :date) %> в случайный момент времени. По желанию после удаления из регистра домен можно снова зарегистрировать по принципу "кто успел, тот и съел".
Просим обратиться к своему регистратору <%= @domain.registrar %>. Контактные данные регистраторов можно найти по адресу http://www.internet.ee/registratory
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 91a3361b1..893fe5665 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -21,7 +21,7 @@ en:
default: "%d. %B %Y, %H:%M"
longer: "%a, %e. %b %Y, %H:%M"
long: "%A, %e. %B %Y, %H:%M"
- short: "%d.%m.%y"
+ short: "%d.%m.%y, %H:%M"
shorts: "%d.%m.%y, %H:%M:%S"
date: "%d.%m.%y"
date_long: "%d. %B %Y"
From 11d543d9672544e6830de052b132e658b4552dc4 Mon Sep 17 00:00:00 2001
From: Stas
Date: Mon, 11 Jan 2016 10:12:15 +0200
Subject: [PATCH 17/69] 111297422-blocked_domains
---
.../admin/blocked_domains_controller.rb | 37 +-
app/models/blocked_domain.rb | 46 +-
...36_name_and_password_for_blocked_domain.rb | 17 +
db/schema-read-only.rb | 61 ++-
db/structure.sql | 441 ++++++++++++++----
5 files changed, 465 insertions(+), 137 deletions(-)
create mode 100644 db/migrate/20160108135436_name_and_password_for_blocked_domain.rb
diff --git a/app/controllers/admin/blocked_domains_controller.rb b/app/controllers/admin/blocked_domains_controller.rb
index 2df3f90d9..92e012cf5 100644
--- a/app/controllers/admin/blocked_domains_controller.rb
+++ b/app/controllers/admin/blocked_domains_controller.rb
@@ -2,20 +2,45 @@ class Admin::BlockedDomainsController < AdminController
load_and_authorize_resource
def index
- bd = BlockedDomain.first_or_initialize
- @blocked_domains = bd.names.join("\n")
+ bd = BlockedDomain.pluck(:name)
+ if bd
+ @blocked_domains = bd.to_yaml.gsub("---\n", '').gsub("-", '').gsub(/\.\.\..?\n/, '')
+ end
end
def create
- names = params[:blocked_domains].split("\r\n").map(&:strip)
+ @blocked_domains = params[:blocked_domains]
- bd = BlockedDomain.first_or_create
+ begin
+ params[:blocked_domains] = "---\n" if params[:blocked_domains].blank?
+ names = YAML.load(params[:blocked_domains])
+ fail if names == false
+ rescue
+ flash.now[:alert] = I18n.t('invalid_yaml')
+ logger.warn 'Invalid YAML'
+ render :index and return
+ end
- if bd.update(names: names)
+ result = true
+ BlockedDomain.transaction do
+ # removing old ones
+ existing = BlockedDomain.any_of_domains(names).pluck(:id)
+ BlockedDomain.where.not(id: existing).destroy_all
+
+ #updating and adding
+ names.each do |name|
+ rec = BlockedDomain.find_or_initialize_by(name: name)
+ unless rec.save
+ result = false
+ raise ActiveRecord::Rollback
+ end
+ end
+ end
+
+ if result
flash[:notice] = I18n.t('record_updated')
redirect_to :back
else
- @blocked_domains = params[:blocked_domains]
flash.now[:alert] = I18n.t('failed_to_update_record')
render :index
end
diff --git a/app/models/blocked_domain.rb b/app/models/blocked_domain.rb
index 2a646a74f..a25e1ff6a 100644
--- a/app/models/blocked_domain.rb
+++ b/app/models/blocked_domain.rb
@@ -1,5 +1,49 @@
class BlockedDomain < ActiveRecord::Base
include Versions
+ before_save :generate_data
+ before_destroy :remove_data
- after_initialize -> { self.names = [] if names.nil? }
+
+ class << self
+ def by_domain name
+ where(name: name)
+ end
+
+ def any_of_domains names
+ where(name: names)
+ end
+ end
+
+ def name= val
+ super SimpleIDN.to_unicode(val)
+ end
+
+ def generate_data
+ @json = generate_json
+ @body = generate_body
+ update_whois_server
+ end
+
+ def update_whois_server
+ wr = Whois::Record.find_or_initialize_by(name: name)
+ wr.body = @body
+ wr.json = @json
+ wr.save
+ end
+
+ def generate_body
+ template = Rails.root.join("app/views/for_models/whois_other.erb".freeze)
+ ERB.new(template.read, nil, "-").result(binding)
+ end
+
+ def generate_json
+ h = HashWithIndifferentAccess.new
+ h[:name] = self.name
+ h[:status] = 'Blocked'
+ h
+ end
+
+ def remove_data
+ Whois::Record.where(name: name).delete_all
+ end
end
diff --git a/db/migrate/20160108135436_name_and_password_for_blocked_domain.rb b/db/migrate/20160108135436_name_and_password_for_blocked_domain.rb
new file mode 100644
index 000000000..1935043b2
--- /dev/null
+++ b/db/migrate/20160108135436_name_and_password_for_blocked_domain.rb
@@ -0,0 +1,17 @@
+class NameAndPasswordForBlockedDomain < ActiveRecord::Migration
+ def up
+ add_column :blocked_domains, :name, :string
+ add_index :blocked_domains, :name
+
+ BlockedDomain.find_each do |x, domain|
+ names = domain.names
+ domain.update_columns(name: names[x])
+ end
+
+ remove_column :blocked_domains, :names
+ end
+
+ def down
+
+ end
+end
diff --git a/db/schema-read-only.rb b/db/schema-read-only.rb
index b362619b0..78722223a 100644
--- a/db/schema-read-only.rb
+++ b/db/schema-read-only.rb
@@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 20151029152638) do
+ActiveRecord::Schema.define(version: 20160108135436) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -135,13 +135,15 @@ ActiveRecord::Schema.define(version: 20151029152638) do
end
create_table "blocked_domains", force: :cascade do |t|
- t.string "names", array: true
t.datetime "created_at"
t.datetime "updated_at"
t.string "creator_str"
t.string "updator_str"
+ t.string "name"
end
+ add_index "blocked_domains", ["name"], name: "index_blocked_domains_on_name", using: :btree
+
create_table "cached_nameservers", id: false, force: :cascade do |t|
t.string "hostname", limit: 255
t.string "ipv4", limit: 255
@@ -240,19 +242,20 @@ ActiveRecord::Schema.define(version: 20151029152638) do
end
create_table "dnskeys", force: :cascade do |t|
- t.integer "domain_id"
- t.integer "flags"
- t.integer "protocol"
- t.integer "alg"
- t.text "public_key"
- t.integer "delegation_signer_id"
- t.string "ds_key_tag"
- t.integer "ds_alg"
- t.integer "ds_digest_type"
- t.string "ds_digest"
- t.string "creator_str"
- t.string "updator_str"
- t.integer "legacy_domain_id"
+ t.integer "domain_id"
+ t.integer "flags"
+ t.integer "protocol"
+ t.integer "alg"
+ t.text "public_key"
+ t.integer "delegation_signer_id"
+ t.string "ds_key_tag"
+ t.integer "ds_alg"
+ t.integer "ds_digest_type"
+ t.string "ds_digest"
+ t.string "creator_str"
+ t.string "updator_str"
+ t.integer "legacy_domain_id"
+ t.datetime "updated_at"
end
add_index "dnskeys", ["delegation_signer_id"], name: "index_dnskeys_on_delegation_signer_id", using: :btree
@@ -336,6 +339,7 @@ ActiveRecord::Schema.define(version: 20151029152638) do
end
add_index "domains", ["delete_at"], name: "index_domains_on_delete_at", using: :btree
+ add_index "domains", ["name"], name: "index_domains_on_name", unique: true, using: :btree
add_index "domains", ["outzone_at"], name: "index_domains_on_outzone_at", using: :btree
add_index "domains", ["registrant_id"], name: "index_domains_on_registrant_id", using: :btree
add_index "domains", ["registrant_verification_asked_at"], name: "index_domains_on_registrant_verification_asked_at", using: :btree
@@ -442,9 +446,7 @@ ActiveRecord::Schema.define(version: 20151029152638) do
t.integer "documentable_id"
t.string "documentable_type"
t.datetime "created_at"
- t.datetime "updated_at"
t.string "creator_str"
- t.string "updator_str"
t.string "path"
end
@@ -739,21 +741,6 @@ ActiveRecord::Schema.define(version: 20151029152638) do
add_index "log_keyrelays", ["item_type", "item_id"], name: "index_log_keyrelays_on_item_type_and_item_id", using: :btree
add_index "log_keyrelays", ["whodunnit"], name: "index_log_keyrelays_on_whodunnit", using: :btree
- create_table "log_legal_documents", force: :cascade do |t|
- t.string "item_type", null: false
- t.integer "item_id", null: false
- t.string "event", null: false
- t.string "whodunnit"
- t.json "object"
- t.json "object_changes"
- t.datetime "created_at"
- t.string "session"
- t.json "children"
- end
-
- add_index "log_legal_documents", ["item_type", "item_id"], name: "index_log_legal_documents_on_item_type_and_item_id", using: :btree
- add_index "log_legal_documents", ["whodunnit"], name: "index_log_legal_documents_on_whodunnit", using: :btree
-
create_table "log_messages", force: :cascade do |t|
t.string "item_type", null: false
t.integer "item_id", null: false
@@ -910,10 +897,10 @@ ActiveRecord::Schema.define(version: 20151029152638) do
create_table "nameservers", force: :cascade do |t|
t.string "hostname"
- t.string "ipv4"
+ t.string "ipv4", default: [], array: true
t.datetime "created_at"
t.datetime "updated_at"
- t.string "ipv6"
+ t.string "ipv6", default: [], array: true
t.integer "domain_id"
t.string "creator_str"
t.string "updator_str"
@@ -1011,9 +998,13 @@ ActiveRecord::Schema.define(version: 20151029152638) do
t.datetime "updated_at"
t.string "creator_str"
t.string "updator_str"
- t.hstore "names"
+ t.integer "legacy_id"
+ t.string "name"
+ t.string "password"
end
+ add_index "reserved_domains", ["name"], name: "index_reserved_domains_on_name", using: :btree
+
create_table "settings", force: :cascade do |t|
t.string "var", null: false
t.text "value"
diff --git a/db/structure.sql b/db/structure.sql
index b2480a04e..cf413eff1 100644
--- a/db/structure.sql
+++ b/db/structure.sql
@@ -39,6 +39,242 @@ COMMENT ON EXTENSION hstore IS 'data type for storing sets of (key, value) pairs
SET search_path = public, pg_catalog;
+--
+-- Name: change_ident_country(); Type: FUNCTION; Schema: public; Owner: -
+--
+
+CREATE FUNCTION change_ident_country() RETURNS boolean
+ LANGUAGE plpgsql
+ AS $_$
+DECLARE
+ changed BOOLEAN;
+ multiplier INT [];
+ multiplier2 INT [];
+ multiplier3 INT [];
+ multiplier4 INT [];
+ r RECORD;
+ control TEXT;
+ total INT;
+ i INT;
+ mod INT;
+ counter INT;
+BEGIN
+
+ multiplier := ARRAY [1, 2, 3, 4, 5, 6, 7, 8, 9, 1];
+
+ multiplier2 := ARRAY [3, 4, 5, 6, 7, 8, 9, 1, 2, 3];
+
+ multiplier3 := ARRAY [1, 2, 3, 4, 5, 6, 7];
+
+ multiplier4 := ARRAY [3, 4, 5, 6, 7, 8, 9];
+
+ FOR r IN SELECT id, ident FROM contacts WHERE ident_type = 'priv' /*AND ident_country_code IS NULL*/
+ LOOP
+ IF (length(r.ident) = 11 AND (r.ident ~ '^[0-9]+$') AND (substring(r.ident, 1, 1) = '3' OR substring(r.ident, 1, 1) = '4' OR substring(r.ident, 1, 1) = '5' OR substring(r.ident, 1, 1) = '6'))
+ THEN
+ total := 0;
+ counter := 1;
+ FOREACH i IN ARRAY multiplier
+ LOOP
+ total := (total + (i * to_number(substring(r.ident, counter, 1), '9')));
+ counter := (counter + 1);
+ END LOOP;
+ mod := (total % 11);
+ counter := 1;
+
+ IF (mod >= 10)
+ THEN
+ total = 0;
+ FOREACH i IN ARRAY multiplier2
+ LOOP
+ total := (total + (i * to_number(substring(r.ident, counter, 1), '9')));
+ counter := (counter + 1);
+ END LOOP;
+ mod := (total % 11);
+ END IF;
+
+ IF (mod < 10 AND substring(r.ident, 11, 1) = to_char(mod, 'FM999MI'))
+ THEN
+ UPDATE contacts SET ident_country_code = 'EE' WHERE id = r.id;
+ END IF;
+ total = 0;
+ END IF;
+ END LOOP;
+
+ FOR r IN SELECT id, ident FROM contacts WHERE ident_type = 'org'
+ LOOP
+ IF (length(r.ident) = 8 AND (r.ident ~ '^[0-9]+$') AND (substring(r.ident, 1, 1) = '1' OR substring(r.ident, 1, 1) = '8' OR substring(r.ident, 1, 1) = '9'))
+ THEN
+ total := 0;
+ counter := 1;
+ FOREACH i IN ARRAY multiplier3
+ LOOP
+ total := (total + (i * to_number(substring(r.ident, counter, 1), '9')));
+ counter := (counter + 1);
+ END LOOP;
+ mod := total % 11;
+ total = 0;
+ counter := 1;
+
+ IF (mod >= 10)
+ THEN
+ total = 0;
+ FOREACH i IN ARRAY multiplier4
+ LOOP
+ total := (total + (i * to_number(substring(r.ident, counter, 1), '9')));
+ counter := (counter + 1);
+ END LOOP;
+ mod := (total % 11);
+ END IF;
+
+ IF (mod < 10 AND (substring(r.ident, 8, 1) = to_char(mod, 'FM999MI')))
+ THEN
+ UPDATE contacts SET ident_country_code = 'EE' WHERE id = r.id;
+ END IF;
+ END IF;
+ END LOOP;
+
+
+
+ RETURN changed;
+END;
+$_$;
+
+
+--
+-- Name: change_ident_country(integer, text); Type: FUNCTION; Schema: public; Owner: -
+--
+
+CREATE FUNCTION change_ident_country(id integer, type text) RETURNS boolean
+ LANGUAGE plpgsql
+ AS $_$
+DECLARE
+ changed BOOLEAN;
+ multiplier int[];
+ multiplier2 int[];
+ code int;
+BEGIN
+
+ multiplier := ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9, 1];
+
+ multiplier2 := ARRAY[3, 4, 5, 6, 7, 8, 9, 1, 2, 3];
+
+ code := (SELECT code FROM contacts WHERE id = 208 AND ident_country_code = 'EE');
+
+
+
+ UPDATE contacts
+ SET ident = ''
+ WHERE id = $1 and ident_type = $2 AND ident_country_code = 'EE'
+ AND ident = '';
+
+ RETURN changed;
+END;
+$_$;
+
+
+--
+-- Name: fill_ident_country(); Type: FUNCTION; Schema: public; Owner: -
+--
+
+CREATE FUNCTION fill_ident_country() RETURNS boolean
+ LANGUAGE plpgsql
+ AS $_$
+ DECLARE
+ changed BOOLEAN;
+ multiplier INT [];
+ multiplier2 INT [];
+ multiplier3 INT [];
+ multiplier4 INT [];
+ r RECORD;
+ control TEXT;
+ total INT;
+ i INT;
+ mod INT;
+ counter INT;
+ BEGIN
+
+ multiplier := ARRAY [1, 2, 3, 4, 5, 6, 7, 8, 9, 1];
+ multiplier2 := ARRAY [3, 4, 5, 6, 7, 8, 9, 1, 2, 3];
+ multiplier3 := ARRAY [1, 2, 3, 4, 5, 6, 7];
+ multiplier4 := ARRAY [3, 4, 5, 6, 7, 8, 9];
+
+ FOR r IN SELECT id, ident FROM contacts WHERE ident_type = 'priv' AND ident_country_code IS NULL
+ LOOP
+ IF (length(r.ident) = 11 AND (r.ident ~ '^[0-9]+$') AND (substring(r.ident, 1, 1) = '3' OR substring(r.ident, 1, 1) = '4' OR substring(r.ident, 1, 1) = '5' OR substring(r.ident, 1, 1) = '6'))
+ THEN
+ total := 0;
+ counter := 1;
+ FOREACH i IN ARRAY multiplier
+ LOOP
+ total := (total + (i * to_number(substring(r.ident, counter, 1), '9')));
+ counter := (counter + 1);
+ END LOOP;
+ mod := (total % 11);
+ counter := 1;
+ IF (mod >= 10)
+ THEN
+ total = 0;
+ FOREACH i IN ARRAY multiplier2
+ LOOP
+ total := (total + (i * to_number(substring(r.ident, counter, 1), '9')));
+ counter := (counter + 1);
+ END LOOP;
+ mod := (total % 11);
+ END IF;
+
+ IF (mod = 10)
+ THEN
+ mod := 0;
+ END IF;
+
+ IF (substring(r.ident, 11, 1) = to_char(mod, 'FM999MI'))
+ THEN
+ UPDATE contacts SET ident_country_code = 'EE' WHERE id = r.id;
+ END IF;
+ total := 0;
+ END IF;
+ END LOOP;
+
+ FOR r IN SELECT id, ident FROM contacts WHERE ident_type = 'org' AND ident_country_code IS NULL
+ LOOP
+ IF (length(r.ident) = 8 AND (r.ident ~ '^[0-9]+$') AND (substring(r.ident, 1, 1) = '1' OR substring(r.ident, 1, 1) = '8' OR substring(r.ident, 1, 1) = '9'))
+ THEN
+ total := 0;
+ counter := 1;
+ FOREACH i IN ARRAY multiplier3
+ LOOP
+ total := (total + (i * to_number(substring(r.ident, counter, 1), '9')));
+ counter := (counter + 1);
+ END LOOP;
+ mod := total % 11;
+ total := 0;
+ counter := 1;
+ IF (mod >= 10)
+ THEN
+ total = 0;
+ FOREACH i IN ARRAY multiplier4
+ LOOP
+ total := (total + (i * to_number(substring(r.ident, counter, 1), '9')));
+ counter := (counter + 1);
+ END LOOP;
+ mod := (total % 11);
+ END IF;
+ IF (mod = 10)
+ THEN
+ mod := 0;
+ END IF;
+ IF (substring(r.ident, 8, 1) = to_char(mod, 'FM999MI'))
+ THEN
+ UPDATE contacts SET ident_country_code = 'EE' WHERE id = r.id;
+ END IF;
+ END IF;
+ END LOOP;
+ RETURN changed;
+ END;
+ $_$;
+
+
--
-- Name: generate_zonefile(character varying); Type: FUNCTION; Schema: public; Owner: -
--
@@ -55,7 +291,7 @@ CREATE FUNCTION generate_zonefile(i_origin character varying) RETURNS text
ret text;
BEGIN
-- define filters
- include_filter = '%.' || i_origin;
+ include_filter = '%' || i_origin;
-- for %.%.%
IF i_origin ~ '\.' THEN
@@ -82,10 +318,6 @@ CREATE FUNCTION generate_zonefile(i_origin character varying) RETURNS text
ret = concat(tmp_var, chr(10), chr(10));
- -- origin ns records
- SELECT ns_records FROM zonefile_settings zf WHERE i_origin = zf.origin INTO tmp_var;
- ret := concat(ret, '; Zone NS Records', chr(10), tmp_var, chr(10));
-
-- ns records
SELECT array_to_string(
array(
@@ -93,17 +325,26 @@ CREATE FUNCTION generate_zonefile(i_origin character varying) RETURNS text
FROM domains d
JOIN nameservers ns ON ns.domain_id = d.id
WHERE d.name LIKE include_filter AND d.name NOT LIKE exclude_filter
- AND NOT ('{serverHold,clientHold}' && d.statuses)
ORDER BY d.name
),
chr(10)
) INTO tmp_var;
- ret := concat(ret, tmp_var, chr(10), chr(10));
+ ret := concat(ret, '; Zone NS Records', chr(10), tmp_var, chr(10), chr(10));
- -- origin a glue records
- SELECT a_records FROM zonefile_settings zf WHERE i_origin = zf.origin INTO tmp_var;
- ret := concat(ret, '; Zone A Records', chr(10), tmp_var, chr(10));
+ -- a glue records for origin nameservers
+ SELECT array_to_string(
+ array(
+ SELECT concat(ns.hostname, '. IN A ', ns.ipv4)
+ FROM nameservers ns
+ JOIN domains d ON d.id = ns.domain_id
+ WHERE d.name = i_origin
+ AND ns.hostname LIKE '%.' || d.name
+ AND ns.ipv4 IS NOT NULL AND ns.ipv4 <> ''
+ ), chr(10)
+ ) INTO tmp_var;
+
+ ret := concat(ret, '; Zone A Records', chr(10), tmp_var);
-- a glue records for other nameservers
SELECT array_to_string(
@@ -115,15 +356,43 @@ CREATE FUNCTION generate_zonefile(i_origin character varying) RETURNS text
AND ns.hostname LIKE '%.' || d.name
AND d.name <> i_origin
AND ns.ipv4 IS NOT NULL AND ns.ipv4 <> ''
- AND NOT ('{serverHold,clientHold}' && d.statuses)
+ AND NOT EXISTS ( -- filter out glue records that already appeared in origin glue recrods
+ SELECT 1 FROM nameservers nsi
+ JOIN domains di ON nsi.domain_id = di.id
+ WHERE di.name = i_origin
+ AND nsi.hostname = ns.hostname
+ )
), chr(10)
) INTO tmp_var;
- ret := concat(ret, tmp_var, chr(10), chr(10));
+ -- TODO This is a possible subtitition to the previous query, stress testing is needed to see which is faster
- -- origin aaaa glue records
- SELECT a4_records FROM zonefile_settings zf WHERE i_origin = zf.origin INTO tmp_var;
- ret := concat(ret, '; Zone AAAA Records', chr(10), tmp_var, chr(10));
+ -- SELECT ns.*
+ -- FROM nameservers ns
+ -- JOIN domains d ON d.id = ns.domain_id
+ -- WHERE d.name LIKE '%ee' AND d.name NOT LIKE '%pri.ee'
+ -- AND ns.hostname LIKE '%.' || d.name
+ -- AND d.name <> 'ee'
+ -- AND ns.ipv4 IS NOT NULL AND ns.ipv4 <> ''
+ -- AND ns.hostname NOT IN (
+ -- SELECT ns.hostname FROM domains d JOIN nameservers ns ON d.id = ns.domain_id WHERE d.name = 'ee'
+ -- )
+
+ ret := concat(ret, chr(10), tmp_var, chr(10), chr(10));
+
+ -- aaaa glue records for origin nameservers
+ SELECT array_to_string(
+ array(
+ SELECT concat(ns.hostname, '. IN AAAA ', ns.ipv6)
+ FROM nameservers ns
+ JOIN domains d ON d.id = ns.domain_id
+ WHERE d.name = i_origin
+ AND ns.hostname LIKE '%.' || d.name
+ AND ns.ipv6 IS NOT NULL AND ns.ipv6 <> ''
+ ), chr(10)
+ ) INTO tmp_var;
+
+ ret := concat(ret, '; Zone AAAA Records', chr(10), tmp_var);
-- aaaa glue records for other nameservers
SELECT array_to_string(
@@ -135,23 +404,27 @@ CREATE FUNCTION generate_zonefile(i_origin character varying) RETURNS text
AND ns.hostname LIKE '%.' || d.name
AND d.name <> i_origin
AND ns.ipv6 IS NOT NULL AND ns.ipv6 <> ''
- AND NOT ('{serverHold,clientHold}' && d.statuses)
+ AND NOT EXISTS ( -- filter out glue records that already appeared in origin glue recrods
+ SELECT 1 FROM nameservers nsi
+ JOIN domains di ON nsi.domain_id = di.id
+ WHERE di.name = i_origin
+ AND nsi.hostname = ns.hostname
+ )
), chr(10)
) INTO tmp_var;
- ret := concat(ret, tmp_var, chr(10), chr(10));
+ ret := concat(ret, chr(10), tmp_var, chr(10), chr(10));
-- ds records
SELECT array_to_string(
array(
SELECT concat(
- d.name_puny, '. IN DS ', dk.ds_key_tag, ' ',
- dk.ds_alg, ' ', dk.ds_digest_type, ' ( ', dk.ds_digest, ' )'
+ d.name_puny, '. 3600 IN DS ', dk.ds_key_tag, ' ',
+ dk.ds_alg, ' ', dk.ds_digest_type, ' ', dk.ds_digest
)
FROM domains d
JOIN dnskeys dk ON dk.domain_id = d.id
- WHERE d.name LIKE include_filter AND d.name NOT LIKE exclude_filter AND dk.flags = 257
- AND NOT ('{serverHold,clientHold}' && d.statuses)
+ WHERE d.name LIKE include_filter AND d.name NOT LIKE exclude_filter
),
chr(10)
) INTO tmp_var;
@@ -457,11 +730,11 @@ ALTER SEQUENCE banklink_transactions_id_seq OWNED BY banklink_transactions.id;
CREATE TABLE blocked_domains (
id integer NOT NULL,
- names character varying[],
created_at timestamp without time zone,
updated_at timestamp without time zone,
creator_str character varying,
- updator_str character varying
+ updator_str character varying,
+ name character varying
);
@@ -745,7 +1018,8 @@ CREATE TABLE dnskeys (
ds_digest character varying,
creator_str character varying,
updator_str character varying,
- legacy_domain_id integer
+ legacy_domain_id integer,
+ updated_at timestamp without time zone
);
@@ -1130,9 +1404,7 @@ CREATE TABLE legal_documents (
documentable_id integer,
documentable_type character varying,
created_at timestamp without time zone,
- updated_at timestamp without time zone,
creator_str character varying,
- updator_str character varying,
path character varying
);
@@ -1863,43 +2135,6 @@ CREATE SEQUENCE log_keyrelays_id_seq
ALTER SEQUENCE log_keyrelays_id_seq OWNED BY log_keyrelays.id;
---
--- Name: log_legal_documents; Type: TABLE; Schema: public; Owner: -; Tablespace:
---
-
-CREATE TABLE log_legal_documents (
- id integer NOT NULL,
- item_type character varying NOT NULL,
- item_id integer NOT NULL,
- event character varying NOT NULL,
- whodunnit character varying,
- object json,
- object_changes json,
- created_at timestamp without time zone,
- session character varying,
- children json
-);
-
-
---
--- Name: log_legal_documents_id_seq; Type: SEQUENCE; Schema: public; Owner: -
---
-
-CREATE SEQUENCE log_legal_documents_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
-
-
---
--- Name: log_legal_documents_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
---
-
-ALTER SEQUENCE log_legal_documents_id_seq OWNED BY log_legal_documents.id;
-
-
--
-- Name: log_messages; Type: TABLE; Schema: public; Owner: -; Tablespace:
--
@@ -2313,10 +2548,10 @@ ALTER SEQUENCE messages_id_seq OWNED BY messages.id;
CREATE TABLE nameservers (
id integer NOT NULL,
hostname character varying,
- ipv4 character varying,
+ ipv4 character varying[] DEFAULT '{}'::character varying[],
created_at timestamp without time zone,
updated_at timestamp without time zone,
- ipv6 character varying,
+ ipv6 character varying[] DEFAULT '{}'::character varying[],
domain_id integer,
creator_str character varying,
updator_str character varying,
@@ -2560,7 +2795,9 @@ CREATE TABLE reserved_domains (
updated_at timestamp without time zone,
creator_str character varying,
updator_str character varying,
- names hstore
+ legacy_id integer,
+ name character varying,
+ password character varying
);
@@ -3126,13 +3363,6 @@ ALTER TABLE ONLY log_invoices ALTER COLUMN id SET DEFAULT nextval('log_invoices_
ALTER TABLE ONLY log_keyrelays ALTER COLUMN id SET DEFAULT nextval('log_keyrelays_id_seq'::regclass);
---
--- Name: id; Type: DEFAULT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY log_legal_documents ALTER COLUMN id SET DEFAULT nextval('log_legal_documents_id_seq'::regclass);
-
-
--
-- Name: id; Type: DEFAULT; Schema: public; Owner: -
--
@@ -3645,14 +3875,6 @@ ALTER TABLE ONLY log_keyrelays
ADD CONSTRAINT log_keyrelays_pkey PRIMARY KEY (id);
---
--- Name: log_legal_documents_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace:
---
-
-ALTER TABLE ONLY log_legal_documents
- ADD CONSTRAINT log_legal_documents_pkey PRIMARY KEY (id);
-
-
--
-- Name: log_messages_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace:
--
@@ -3880,6 +4102,13 @@ CREATE INDEX index_accounts_on_registrar_id ON accounts USING btree (registrar_i
CREATE INDEX index_api_users_on_registrar_id ON api_users USING btree (registrar_id);
+--
+-- Name: index_blocked_domains_on_name; Type: INDEX; Schema: public; Owner: -; Tablespace:
+--
+
+CREATE INDEX index_blocked_domains_on_name ON blocked_domains USING btree (name);
+
+
--
-- Name: index_cached_nameservers_on_hostname_and_ipv4_and_ipv6; Type: INDEX; Schema: public; Owner: -; Tablespace:
--
@@ -3985,6 +4214,13 @@ CREATE INDEX index_domain_transfers_on_domain_id ON domain_transfers USING btree
CREATE INDEX index_domains_on_delete_at ON domains USING btree (delete_at);
+--
+-- Name: index_domains_on_name; Type: INDEX; Schema: public; Owner: -; Tablespace:
+--
+
+CREATE UNIQUE INDEX index_domains_on_name ON domains USING btree (name);
+
+
--
-- Name: index_domains_on_outzone_at; Type: INDEX; Schema: public; Owner: -; Tablespace:
--
@@ -4349,20 +4585,6 @@ CREATE INDEX index_log_keyrelays_on_item_type_and_item_id ON log_keyrelays USING
CREATE INDEX index_log_keyrelays_on_whodunnit ON log_keyrelays USING btree (whodunnit);
---
--- Name: index_log_legal_documents_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace:
---
-
-CREATE INDEX index_log_legal_documents_on_item_type_and_item_id ON log_legal_documents USING btree (item_type, item_id);
-
-
---
--- Name: index_log_legal_documents_on_whodunnit; Type: INDEX; Schema: public; Owner: -; Tablespace:
---
-
-CREATE INDEX index_log_legal_documents_on_whodunnit ON log_legal_documents USING btree (whodunnit);
-
-
--
-- Name: index_log_messages_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace:
--
@@ -4510,6 +4732,13 @@ CREATE INDEX index_registrant_verifications_on_domain_id ON registrant_verificat
CREATE INDEX index_registrars_on_code ON registrars USING btree (code);
+--
+-- Name: index_reserved_domains_on_name; Type: INDEX; Schema: public; Owner: -; Tablespace:
+--
+
+CREATE INDEX index_reserved_domains_on_name ON reserved_domains USING btree (name);
+
+
--
-- Name: index_settings_on_thing_type_and_thing_id_and_var; Type: INDEX; Schema: public; Owner: -; Tablespace:
--
@@ -4947,5 +5176,27 @@ INSERT INTO schema_migrations (version) VALUES ('20150921110152');
INSERT INTO schema_migrations (version) VALUES ('20150921111842');
+INSERT INTO schema_migrations (version) VALUES ('20151028183132');
+
INSERT INTO schema_migrations (version) VALUES ('20151029152638');
+INSERT INTO schema_migrations (version) VALUES ('20151112160452');
+
+INSERT INTO schema_migrations (version) VALUES ('20151117081204');
+
+INSERT INTO schema_migrations (version) VALUES ('20151120090455');
+
+INSERT INTO schema_migrations (version) VALUES ('20151124200353');
+
+INSERT INTO schema_migrations (version) VALUES ('20151125155601');
+
+INSERT INTO schema_migrations (version) VALUES ('20151127091716');
+
+INSERT INTO schema_migrations (version) VALUES ('20151130175654');
+
+INSERT INTO schema_migrations (version) VALUES ('20151202123506');
+
+INSERT INTO schema_migrations (version) VALUES ('20160106092052');
+
+INSERT INTO schema_migrations (version) VALUES ('20160108135436');
+
From 4a0b1fea39368bb1859550eef64e3a1622582f6c Mon Sep 17 00:00:00 2001
From: Stas
Date: Mon, 11 Jan 2016 11:03:31 +0200
Subject: [PATCH 18/69] 111297422-mask_fix
---
app/controllers/admin/blocked_domains_controller.rb | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/app/controllers/admin/blocked_domains_controller.rb b/app/controllers/admin/blocked_domains_controller.rb
index 92e012cf5..9394a9334 100644
--- a/app/controllers/admin/blocked_domains_controller.rb
+++ b/app/controllers/admin/blocked_domains_controller.rb
@@ -4,7 +4,7 @@ class Admin::BlockedDomainsController < AdminController
def index
bd = BlockedDomain.pluck(:name)
if bd
- @blocked_domains = bd.to_yaml.gsub("---\n", '').gsub("-", '').gsub(/\.\.\..?\n/, '')
+ @blocked_domains = bd.to_yaml.gsub("---\n", '').gsub("-", '').gsub(" ", '')
end
end
@@ -21,13 +21,12 @@ class Admin::BlockedDomainsController < AdminController
render :index and return
end
+ names = names.split(' ')
result = true
BlockedDomain.transaction do
- # removing old ones
existing = BlockedDomain.any_of_domains(names).pluck(:id)
BlockedDomain.where.not(id: existing).destroy_all
- #updating and adding
names.each do |name|
rec = BlockedDomain.find_or_initialize_by(name: name)
unless rec.save
From 1370a5f0feee1c265e9b6a59a27962b1347ee2e1 Mon Sep 17 00:00:00 2001
From: Stas
Date: Mon, 11 Jan 2016 11:05:01 +0200
Subject: [PATCH 19/69] 111297422-migration_fix
---
.../20160108135436_name_and_password_for_blocked_domain.rb | 6 ------
1 file changed, 6 deletions(-)
diff --git a/db/migrate/20160108135436_name_and_password_for_blocked_domain.rb b/db/migrate/20160108135436_name_and_password_for_blocked_domain.rb
index 1935043b2..efd46ac88 100644
--- a/db/migrate/20160108135436_name_and_password_for_blocked_domain.rb
+++ b/db/migrate/20160108135436_name_and_password_for_blocked_domain.rb
@@ -2,12 +2,6 @@ class NameAndPasswordForBlockedDomain < ActiveRecord::Migration
def up
add_column :blocked_domains, :name, :string
add_index :blocked_domains, :name
-
- BlockedDomain.find_each do |x, domain|
- names = domain.names
- domain.update_columns(name: names[x])
- end
-
remove_column :blocked_domains, :names
end
From b047ce27ca5cb799a2b2efa22c65cdd0a21df2a8 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Mon, 11 Jan 2016 12:40:44 +0200
Subject: [PATCH 20/69] Story#111065230 - set whitelist check
---
app/mailers/domain_mailer.rb | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/mailers/domain_mailer.rb b/app/mailers/domain_mailer.rb
index 443ac6fa9..28e232a8c 100644
--- a/app/mailers/domain_mailer.rb
+++ b/app/mailers/domain_mailer.rb
@@ -98,6 +98,7 @@ class DomainMailer < ApplicationMailer
def expiration_reminder(domain_id)
@domain = Domain.find_by(id: domain_id)
return if @domain.nil? || !@domain.statuses.include?(DomainStatus::EXPIRED) || whitelist_blocked?(@domain.registrant.email)
+ return if whitelist_blocked?(@domain.registrant.email)
mail(to: format(@domain.registrant.email),
subject: "#{I18n.t(:expiration_remind_subject,
From a807aba1f4f3f1bc032e049dc598549e365f99ff Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Mon, 11 Jan 2016 12:44:32 +0200
Subject: [PATCH 21/69] Story#111065230 - fix typo
---
app/models/domain.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/models/domain.rb b/app/models/domain.rb
index ca819783b..8dace41a9 100644
--- a/app/models/domain.rb
+++ b/app/models/domain.rb
@@ -264,7 +264,7 @@ class Domain < ActiveRecord::Base
domains.each do |domain|
next unless domain.expirable?
domain.set_graceful_expired
- DomainMailer.expiration_reminder(domain.id).deliver_in(Setting.redemption_grace_period.days)
+ DomainMailer.expiration_reminder(domain.id).deliver_in(Setting.expiration_reminder_mail.days)
STDOUT << "#{Time.zone.now.utc} Domain.start_expire_period: ##{domain.id} (#{domain.name}) #{domain.changes}\n" unless Rails.env.test?
domain.save
end
From 96552a03440cd080eb4a570007a55d57a954505b Mon Sep 17 00:00:00 2001
From: Stas
Date: Mon, 11 Jan 2016 15:44:26 +0200
Subject: [PATCH 22/69] 107279984-filter_changes
---
.../admin/account_activities_controller.rb | 44 ++++++++++++++++++-
app/views/admin/account_activities/index.haml | 10 +++--
2 files changed, 49 insertions(+), 5 deletions(-)
diff --git a/app/controllers/admin/account_activities_controller.rb b/app/controllers/admin/account_activities_controller.rb
index bb5b72df8..1419dbea9 100644
--- a/app/controllers/admin/account_activities_controller.rb
+++ b/app/controllers/admin/account_activities_controller.rb
@@ -19,11 +19,51 @@ class Admin::AccountActivitiesController < AdminController
end
@q = AccountActivity.includes(:invoice, account: :registrar).search(params[:q])
+ @b = AccountActivity.search(balance_params)
@q.sorts = 'id desc' if @q.sorts.empty?
- @b = AccountActivity.search(balance_params).result.where.not(id: @q.result.map(&:id))
+
+
+
+ @account_activities = @q.result.page(params[:page]).per(params[:results_per_page])
+ sort = @account_activities.orders.map(&:to_sql).join(",")
+
+
+ if params[:page] && params[:page].to_i > 1
+
+
+ @sum = @q.result.reorder(sort).limit(@account_activities.offset_value) + @b.result.where.not(id: @q.result.map(&:id))
+
+ else
+
+ @sum = @b.result.where.not(id: @q.result.map(&:id))
+
+
+ end
+
+
+
+
+
+
+ # throw "cdsfs"
+
+ # if params[:page] && params[:page].to_i > 1
+ #
+ # @b = @q.result.page(params[:page].to_i - 1)
+ #
+ # @b = @b.per(params[:results_per_page])
+ #
+ #
+ # else
+ #
+ # @b = AccountActivity.search(balance_params)
+ #
+ # @b = @b.result.where.not(id: @q.result.map(&:id))
+ #
+ # end
respond_to do |format|
- format.html { @account_activities = @q.result.page(params[:page]) }
+ format.html
format.csv do
send_data @q.result.to_csv, filename: "account_activities_#{Time.zone.now.to_formatted_s(:number)}.csv"
end
diff --git a/app/views/admin/account_activities/index.haml b/app/views/admin/account_activities/index.haml
index 4999fd558..80ebba2f6 100644
--- a/app/views/admin/account_activities/index.haml
+++ b/app/views/admin/account_activities/index.haml
@@ -29,7 +29,11 @@
.form-group
= f.label t(:receipt_date_until)
= f.search_field :created_at_lteq, value: params[:q][:created_at_lteq], class: 'form-control datepicker', placeholder: t(:receipt_date_until), autocomplete: 'off'
- .col-md-6{style: 'padding-top: 25px;'}
+ .col-md-3
+ .form-group
+ = label_tag t(:results_per_page)
+ = text_field_tag :results_per_page, params[:results_per_page], class: 'form-control', placeholder: t(:results_per_page)
+ .col-md-3{style: 'padding-top: 25px;'}
%button.btn.btn-default.search
%span.glyphicon.glyphicon-search
@@ -41,7 +45,7 @@
.col-md-3
.col-md-2
.col-md-4{class: 'text-right'}
- = t(:starting_balance) + " #{@b.sum('sum').to_f} EUR"
+ = t(:starting_balance) + " #{@sum.to_a.map(&:sum).sum.to_f} EUR"
%hr
@@ -62,7 +66,7 @@
%th{class: 'col-xs-2'}
= sort_link(@q, 'sum')
%tbody
- -total = @b.sum('sum').to_f
+ -total = @sum.to_a.map(&:sum).sum.to_f
- @account_activities.each do |x|
%tr
%td= link_to(x.account.registrar.try(:code), admin_registrar_path(x.account.registrar))
From 830afc0e0edf5dd2f347f34429aebe85edf488ab Mon Sep 17 00:00:00 2001
From: Stas
Date: Mon, 11 Jan 2016 16:26:54 +0200
Subject: [PATCH 23/69] 111297422-validation_method_fix
---
app/validators/domain_name_validator.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/validators/domain_name_validator.rb b/app/validators/domain_name_validator.rb
index e39437f2b..be83f0835 100644
--- a/app/validators/domain_name_validator.rb
+++ b/app/validators/domain_name_validator.rb
@@ -38,7 +38,7 @@ class DomainNameValidator < ActiveModel::EachValidator
def validate_blocked(value)
return true unless value
- return false if BlockedDomain.where("names @> ?::varchar[]", "{#{value}}").count > 0
+ return false if BlockedDomain.where(name: value).count > 0
ZonefileSetting.where(origin: value).count == 0
end
end
From c4ead607da38e05f7c17a7bf420fff65fc0b38cd Mon Sep 17 00:00:00 2001
From: Stas
Date: Mon, 11 Jan 2016 17:02:35 +0200
Subject: [PATCH 24/69] 107279984-refactor
---
.../admin/account_activities_controller.rb | 31 -------------------
1 file changed, 31 deletions(-)
diff --git a/app/controllers/admin/account_activities_controller.rb b/app/controllers/admin/account_activities_controller.rb
index 1419dbea9..0f095734f 100644
--- a/app/controllers/admin/account_activities_controller.rb
+++ b/app/controllers/admin/account_activities_controller.rb
@@ -22,46 +22,15 @@ class Admin::AccountActivitiesController < AdminController
@b = AccountActivity.search(balance_params)
@q.sorts = 'id desc' if @q.sorts.empty?
-
-
@account_activities = @q.result.page(params[:page]).per(params[:results_per_page])
sort = @account_activities.orders.map(&:to_sql).join(",")
-
if params[:page] && params[:page].to_i > 1
-
-
@sum = @q.result.reorder(sort).limit(@account_activities.offset_value) + @b.result.where.not(id: @q.result.map(&:id))
-
else
-
@sum = @b.result.where.not(id: @q.result.map(&:id))
-
-
end
-
-
-
-
-
- # throw "cdsfs"
-
- # if params[:page] && params[:page].to_i > 1
- #
- # @b = @q.result.page(params[:page].to_i - 1)
- #
- # @b = @b.per(params[:results_per_page])
- #
- #
- # else
- #
- # @b = AccountActivity.search(balance_params)
- #
- # @b = @b.result.where.not(id: @q.result.map(&:id))
- #
- # end
-
respond_to do |format|
format.html
format.csv do
From b28748d667c76ef73e69ae69f2a303d4c195a49d Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Tue, 12 Jan 2016 14:06:32 +0200
Subject: [PATCH 25/69] Story#111503520 - couldn't apply pending update as
registrar wasn't valid
---
app/jobs/domain_update_confirm_job.rb | 7 ++-----
app/models/epp/domain.rb | 13 ++++++-------
2 files changed, 8 insertions(+), 12 deletions(-)
diff --git a/app/jobs/domain_update_confirm_job.rb b/app/jobs/domain_update_confirm_job.rb
index be0ada219..3da95287d 100644
--- a/app/jobs/domain_update_confirm_job.rb
+++ b/app/jobs/domain_update_confirm_job.rb
@@ -3,19 +3,16 @@ class DomainUpdateConfirmJob < Que::Job
# it's recommended to keep transaction against job table as short as possible.
ActiveRecord::Base.transaction do
domain = Epp::Domain.find(domain_id)
+ domain.is_admin = true
case action
when RegistrantVerification::CONFIRMED
domain.poll_message!(:poll_pending_update_confirmed_by_registrant)
- domain.apply_pending_update! do |e|
- e.instance_variable_set("@changed_attributes", e.changed_attributes.merge("statuses"=>[]))
- end
+ domain.apply_pending_update!
domain.clean_pendings!
- WhoisRecord.find_by(domain_id: domain.id).save
when RegistrantVerification::REJECTED
domain.send_mail :pending_update_rejected_notification_for_new_registrant
domain.poll_message!(:poll_pending_update_rejected_by_registrant)
domain.clean_pendings!
- domain.instance_variable_set("@changed_attributes", domain.changed_attributes.merge("statuses"=>[]))
domain.save
end
destroy # it's best to destroy the job in the same transaction
diff --git a/app/models/epp/domain.rb b/app/models/epp/domain.rb
index d84de4ca6..15e16163a 100644
--- a/app/models/epp/domain.rb
+++ b/app/models/epp/domain.rb
@@ -507,18 +507,17 @@ class Epp::Domain < Domain
frame = Nokogiri::XML(pending_json['frame'])
self.deliver_emails = true # turn on email delivery
- send_mail :registrant_updated_notification_for_old_registrant
-
- statuses.delete(DomainStatus::PENDING_UPDATE)
- yield(self) if block_given? # need to skip statuses check here
- self.save
-
+ self.statuses.delete(DomainStatus::PENDING_UPDATE)
::PaperTrail.whodunnit = user.id_role_username # updator str should be the request originator not the approval user
+
+ send_mail :registrant_updated_notification_for_old_registrant
return unless update(frame, user, false)
clean_pendings!
send_mail :registrant_updated_notification_for_new_registrant
- update_whois_record
+ WhoisRecord.find_by(domain_id: id).save # need to reload model
+
+ save! # for notification if everything fails
true
end
From cb6601ce1dc688a61a4d69b448b9242828842ee3 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Tue, 12 Jan 2016 14:10:34 +0200
Subject: [PATCH 26/69] Story#111396470 - show special message on contact ident
update
---
app/models/contact.rb | 5 +++--
app/models/epp/contact.rb | 1 +
config/locales/en.yml | 1 +
3 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/app/models/contact.rb b/app/models/contact.rb
index ccc44851d..573ffe22e 100644
--- a/app/models/contact.rb
+++ b/app/models/contact.rb
@@ -238,13 +238,14 @@ class Contact < ActiveRecord::Base
def ident_valid_format?
case ident_country_code
when 'EE'.freeze
+ err_msg = "invalid_EE_identity_format#{"__update" if id}".to_sym
case ident_type
when 'priv'.freeze
- errors.add(:ident, :invalid_EE_identity_format) unless Isikukood.new(ident).valid?
+ errors.add(:ident, err_msg) unless Isikukood.new(ident).valid?
when 'org'.freeze
# !%w(1 7 8 9).freeze.include?(ident.first) ||
if ident.size != 8 || !(ident =~/\A[0-9]{8}\z/)
- errors.add(:ident, :invalid_EE_identity_format)
+ errors.add(:ident, err_msg)
end
end
end
diff --git a/app/models/epp/contact.rb b/app/models/epp/contact.rb
index f4773f732..5f0a7b209 100644
--- a/app/models/epp/contact.rb
+++ b/app/models/epp/contact.rb
@@ -123,6 +123,7 @@ class Epp::Contact < Contact
[:email, :invalid],
[:ident, :invalid],
[:ident, :invalid_EE_identity_format],
+ [:ident, :invalid_EE_identity_format_update],
[:ident, :invalid_birthday_format],
[:ident, :invalid_country_code],
[:ident_type, :missing],
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 893fe5665..61a476ab6 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -49,6 +49,7 @@ en:
ident:
blank: "Required parameter missing - ident"
invalid_EE_identity_format: "Ident not in valid Estonian identity format."
+ invalid_EE_identity_format_update: "Ident not in valid Estonian identity format. Please create new contact"
invalid_birthday_format: "Ident not in valid birthady format, should be YYYY-MM-DD"
invalid_country_code: "Ident country code is not valid, should be in ISO_3166-1 alpha 2 format"
domains:
From a20df5243a921a1bc762e02eb4d86d1651addf52 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Tue, 12 Jan 2016 14:24:32 +0200
Subject: [PATCH 27/69] Story#111396470 - show special message on contact ident
update (typo fix)
---
app/models/contact.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/models/contact.rb b/app/models/contact.rb
index 573ffe22e..75f03de09 100644
--- a/app/models/contact.rb
+++ b/app/models/contact.rb
@@ -238,7 +238,7 @@ class Contact < ActiveRecord::Base
def ident_valid_format?
case ident_country_code
when 'EE'.freeze
- err_msg = "invalid_EE_identity_format#{"__update" if id}".to_sym
+ err_msg = "invalid_EE_identity_format#{"_update" if id}".to_sym
case ident_type
when 'priv'.freeze
errors.add(:ident, err_msg) unless Isikukood.new(ident).valid?
From e27cd0c31676675858fd4cd6f455ce99486e2a33 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Tue, 12 Jan 2016 17:11:31 +0200
Subject: [PATCH 28/69] Story#111396470 - better code
---
app/models/contact.rb | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/models/contact.rb b/app/models/contact.rb
index 75f03de09..99a41a6a4 100644
--- a/app/models/contact.rb
+++ b/app/models/contact.rb
@@ -29,7 +29,7 @@ class Contact < ActiveRecord::Base
uniqueness: { message: :epp_id_taken },
format: { with: /\A[\w\-\:\.\_]*\z/i, message: :invalid },
length: { maximum: 100, message: :too_long_contact_code }
- validate :ident_valid_format?
+ validate :val_ident_valid_format?
validate :uniq_statuses?
validate :validate_html
@@ -235,7 +235,7 @@ class Contact < ActiveRecord::Base
name || '[no name]'
end
- def ident_valid_format?
+ def val_ident_valid_format?
case ident_country_code
when 'EE'.freeze
err_msg = "invalid_EE_identity_format#{"_update" if id}".to_sym
From 782fcc9deccb5d389e23c4f67a98e58b8fbe0c84 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Tue, 12 Jan 2016 17:29:13 +0200
Subject: [PATCH 29/69] Story#111503520 - reject verification shouldn't
validate
---
app/jobs/domain_update_confirm_job.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/jobs/domain_update_confirm_job.rb b/app/jobs/domain_update_confirm_job.rb
index 3da95287d..f028b95f8 100644
--- a/app/jobs/domain_update_confirm_job.rb
+++ b/app/jobs/domain_update_confirm_job.rb
@@ -13,7 +13,7 @@ class DomainUpdateConfirmJob < Que::Job
domain.send_mail :pending_update_rejected_notification_for_new_registrant
domain.poll_message!(:poll_pending_update_rejected_by_registrant)
domain.clean_pendings!
- domain.save
+ domain.save(validate: false)
end
destroy # it's best to destroy the job in the same transaction
end
From d9d8aef813fdc99a529086da899a430d6af4e202 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Tue, 12 Jan 2016 18:27:29 +0200
Subject: [PATCH 30/69] Story#111503520 - custom lowlevel pending state
rejection
---
app/jobs/domain_update_confirm_job.rb | 3 +--
app/models/domain.rb | 21 ++++++++++++++++++++-
2 files changed, 21 insertions(+), 3 deletions(-)
diff --git a/app/jobs/domain_update_confirm_job.rb b/app/jobs/domain_update_confirm_job.rb
index f028b95f8..098b9853e 100644
--- a/app/jobs/domain_update_confirm_job.rb
+++ b/app/jobs/domain_update_confirm_job.rb
@@ -12,8 +12,7 @@ class DomainUpdateConfirmJob < Que::Job
when RegistrantVerification::REJECTED
domain.send_mail :pending_update_rejected_notification_for_new_registrant
domain.poll_message!(:poll_pending_update_rejected_by_registrant)
- domain.clean_pendings!
- domain.save(validate: false)
+ domain.clean_pendings_lowlevel
end
destroy # it's best to destroy the job in the same transaction
end
diff --git a/app/models/domain.rb b/app/models/domain.rb
index 05ffafc4d..baf7d0308 100644
--- a/app/models/domain.rb
+++ b/app/models/domain.rb
@@ -244,7 +244,7 @@ class Domain < ActiveRecord::Base
if domain.pending_delete? || domain.pending_delete_confirmation?
DomainMailer.pending_delete_expired_notification(domain.id, true).deliver
end
- domain.clean_pendings!
+ domain.clean_pendings_lowlevel
unless Rails.env.test?
STDOUT << "#{Time.zone.now.utc} Domain.clean_expired_pendings: ##{domain.id} (#{domain.name})\n"
end
@@ -439,6 +439,25 @@ class Domain < ActiveRecord::Base
save
end
+
+ # state change shouln't be
+ def clean_pendings_lowlevel
+ statuses.delete(DomainStatus::PENDING_DELETE_CONFIRMATION)
+ statuses.delete(DomainStatus::PENDING_UPDATE)
+ statuses.delete(DomainStatus::PENDING_DELETE)
+
+ status_notes[DomainStatus::PENDING_UPDATE] = ''
+ status_notes[DomainStatus::PENDING_DELETE] = ''
+
+ update_columns(
+ registrant_verification_token: nil,
+ registrant_verification_asked_at: nil,
+ pending_json: {},
+ status_notes: status_notes,
+ statuses: statuses.presence || [DomainStatus::OK]
+ )
+ end
+
def pending_update!
return true if pending_update?
self.epp_pending_update = true # for epp
From f019bf5e0da5adf093fa2a2a9558ca3b4071f11c Mon Sep 17 00:00:00 2001
From: Stas
Date: Wed, 13 Jan 2016 15:41:21 +0200
Subject: [PATCH 31/69] 110152326-filter_fix
---
app/controllers/admin/contacts_controller.rb | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/controllers/admin/contacts_controller.rb b/app/controllers/admin/contacts_controller.rb
index 50131066f..960d74002 100644
--- a/app/controllers/admin/contacts_controller.rb
+++ b/app/controllers/admin/contacts_controller.rb
@@ -11,7 +11,7 @@ class Admin::ContactsController < AdminController
end
@q = Contact.includes(:registrar).search(search_params)
- @contacts = @q.result.page(params[:page])
+ @contacts = @q.result(distinct: :true).page(params[:page])
if params[:statuses_contains]
contacts = Contact.includes(:registrar).where(
@@ -23,7 +23,7 @@ class Admin::ContactsController < AdminController
normalize_search_parameters do
@q = contacts.search(search_params)
- @contacts = @q.result.page(params[:page])
+ @contacts = @q.result(distinct: :true).page(params[:page])
end
@contacts = @contacts.per(params[:results_per_page]) if params[:results_per_page].to_i > 0
From 764abdfd89555ea8317049964b6839646ee1e99c Mon Sep 17 00:00:00 2001
From: Stas
Date: Wed, 13 Jan 2016 15:54:30 +0200
Subject: [PATCH 32/69] 111297422-whitespaces
---
app/views/for_models/whois_other.erb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/views/for_models/whois_other.erb b/app/views/for_models/whois_other.erb
index 50cf0b2dc..33ee735e7 100644
--- a/app/views/for_models/whois_other.erb
+++ b/app/views/for_models/whois_other.erb
@@ -2,7 +2,7 @@ Estonia .ee Top Level Domain WHOIS server
Domain:
name: <%= @json['name'] %>
-status: <%= @json['status'] %>
+status: <%= @json['status'] %>
Estonia .ee Top Level Domain WHOIS server
More information at http://internet.ee
From 86bc1e81a0a54708a0be7c95ee20e4d01571ee92 Mon Sep 17 00:00:00 2001
From: Stas
Date: Thu, 14 Jan 2016 15:11:15 +0200
Subject: [PATCH 33/69] 111237776-renew_logic_change
---
app/models/domain.rb | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/app/models/domain.rb b/app/models/domain.rb
index e4882473a..26148ca78 100644
--- a/app/models/domain.rb
+++ b/app/models/domain.rb
@@ -408,8 +408,7 @@ class Domain < ActiveRecord::Base
end
end
- return false if statuses.include_any?(DomainStatus::DELETE_CANDIDATE, DomainStatus::SERVER_RENEW_PROHIBITED,
- DomainStatus::CLIENT_RENEW_PROHIBITED, DomainStatus::PENDING_RENEW,
+ return false if statuses.include_any?(DomainStatus::DELETE_CANDIDATE, DomainStatus::PENDING_RENEW,
DomainStatus::PENDING_TRANSFER, DomainStatus::PENDING_DELETE,
DomainStatus::PENDING_UPDATE, DomainStatus::PENDING_DELETE_CONFIRMATION)
true
From b85a637ef2a9fc1b0dbb8f281c418a71b8bf1208 Mon Sep 17 00:00:00 2001
From: Stas
Date: Fri, 15 Jan 2016 17:34:05 +0200
Subject: [PATCH 34/69] 111219288-template_fix_for_corrupted_log
---
app/views/admin/domain_versions/_version.haml | 58 ++++++++++---------
1 file changed, 31 insertions(+), 27 deletions(-)
diff --git a/app/views/admin/domain_versions/_version.haml b/app/views/admin/domain_versions/_version.haml
index fd449b4b0..321e9abda 100644
--- a/app/views/admin/domain_versions/_version.haml
+++ b/app/views/admin/domain_versions/_version.haml
@@ -55,43 +55,47 @@
= "#{l(domain.valid_to, format: :date)}"
%td
- - registrant.each do |r|
- %p
- = r[:name]
- = r[:phone]
- = r[:email]
- %p
- = r[:code]
+ - if registrant
+ - registrant.each do |r|
+ %p
+ = r[:name]
+ = r[:phone]
+ = r[:email]
+ %p
+ = r[:code]
%td
- - admin_contacts.each do |ac|
- %p
- = ac[:name]
- = ac[:phone]
- = ac[:email]
- %p
- = ac[:code]
+ - if admin_contacts
+ - admin_contacts.each do |ac|
+ %p
+ = ac[:name]
+ = ac[:phone]
+ = ac[:email]
+ %p
+ = ac[:code]
%td
- - tech_contacts.each do |tc|
- %p
- = tc[:name]
- = tc[:phone]
- = tc[:email]
- %p
- = tc[:code]
+ - if tech_contacts
+ - tech_contacts.each do |tc|
+ %p
+ = tc[:name]
+ = tc[:phone]
+ = tc[:email]
+ %p
+ = tc[:code]
%td
%p
- - nameservers.each do |ns|
- = ns[:hostname]
- %br
- = ns[:ipv4]
- = ns[:ipv6]
+ - if nameservers
+ - nameservers.each do |ns|
+ = ns[:hostname]
+ %br
+ = ns[:ipv4]
+ = ns[:ipv6]
%td
%p
- = domain.registrar.name
+ = domain.registrar.name if domain.registrar
- if domain.pending_json.present?
%tr.js-pending{ style: 'display: none;' }
From 49e66d33dee67e3ed353edbc3046ab091b754057 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Mon, 18 Jan 2016 14:13:28 +0200
Subject: [PATCH 35/69] Story#105852786 - Push bank transfers to directo
---
Gemfile | 1 +
Gemfile.lock | 13 +++++
app/models/bank_transaction.rb | 30 ++++++++----
app/models/directo.rb | 47 +++++++++++++++++++
app/views/admin/settings/index.haml | 2 +
config/application-example.yml | 2 +
config/initializers/initial_settings.rb | 2 +
db/migrate/20160113143447_create_directos.rb | 10 ++++
...2453_add_in_directo_to_bank_transaction.rb | 5 ++
spec/models/directo_spec.rb | 5 ++
10 files changed, 108 insertions(+), 9 deletions(-)
create mode 100644 app/models/directo.rb
create mode 100644 db/migrate/20160113143447_create_directos.rb
create mode 100644 db/migrate/20160118092453_add_in_directo_to_bank_transaction.rb
create mode 100644 spec/models/directo_spec.rb
diff --git a/Gemfile b/Gemfile
index 10c680786..d29fa223b 100644
--- a/Gemfile
+++ b/Gemfile
@@ -12,6 +12,7 @@ gem 'rails', '4.2.4' # when update, all initializers eis_custom files nee
gem 'iso8601', '0.8.6' # for dates and times
gem 'hashie-forbidden_attributes', '0.1.1'
gem 'SyslogLogger', '2.0', require: 'syslog/logger'
+gem 'rest-client'
# load env
gem 'figaro', '1.1.1'
diff --git a/Gemfile.lock b/Gemfile.lock
index b92d6dc1b..45eb09943 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -188,6 +188,8 @@ GEM
nokogiri (>= 1.4.0)
savon (>= 2.4.0)
docile (1.1.5)
+ domain_name (0.5.25)
+ unf (>= 0.0.5, < 1.0.0)
epp-xml (1.0.4)
activesupport (~> 4.1)
builder (~> 3.2)
@@ -261,6 +263,8 @@ GEM
nokogiri (~> 1.6.0)
ruby_parser (~> 3.5)
html5_validators (1.2.2)
+ http-cookie (1.0.2)
+ domain_name (~> 0.5)
httpclient (2.6.0.1)
httpi (2.4.1)
rack
@@ -320,6 +324,7 @@ GEM
multi_json (1.11.2)
multi_xml (0.5.5)
nenv (0.2.0)
+ netrc (0.11.0)
newrelic_rpm (3.12.0.288)
nokogiri (1.6.6.2)
mini_portile (~> 0.6.0)
@@ -412,6 +417,10 @@ GEM
request_store (1.1.0)
responders (2.1.0)
railties (>= 4.2.0, < 5)
+ rest-client (1.8.0)
+ http-cookie (>= 1.0.2, < 2.0)
+ mime-types (>= 1.16, < 3.0)
+ netrc (~> 0.7)
rspec (3.3.0)
rspec-core (~> 3.3.0)
rspec-expectations (~> 3.3.0)
@@ -515,6 +524,9 @@ GEM
uglifier (2.7.1)
execjs (>= 0.3.0)
json (>= 1.8.0)
+ unf (0.1.4)
+ unf_ext
+ unf_ext (0.0.7.1)
unicorn (4.9.0)
kgio (~> 2.6)
rack
@@ -617,6 +629,7 @@ DEPENDENCIES
rails-settings-cached (= 0.4.1)
rake
ransack (= 1.5.1)
+ rest-client
rspec-rails (= 3.3.2)
rubocop (= 0.32.1)
rubycritic (= 1.4.0)
diff --git a/app/models/bank_transaction.rb b/app/models/bank_transaction.rb
index 2e5b90a2e..b827670c4 100644
--- a/app/models/bank_transaction.rb
+++ b/app/models/bank_transaction.rb
@@ -2,6 +2,7 @@ class BankTransaction < ActiveRecord::Base
include Versions
belongs_to :bank_statement
has_one :account_activity
+ has_many :directo_records, as: :item, class_name: 'Directo'
scope :unbinded, lambda {
where('id NOT IN (SELECT bank_transaction_id FROM account_activities where bank_transaction_id IS NOT NULL)')
@@ -16,21 +17,32 @@ class BankTransaction < ActiveRecord::Base
account_activity.invoice
end
+
+ def invoice_num
+ return @invoice_no if defined?(@invoice_no)
+
+ match = description.match(/^[^\d]*(\d+)/)
+ return unless match
+
+ @invoice_no = match[1].try(:to_i)
+ end
+
+ def invoice
+ @invoice ||= registrar.invoices.find_by(number: invoice_num) if registrar
+ end
+
+ def registrar
+ @registrar ||= Registrar.find_by(reference_no: reference_no)
+ end
+
+
# For successful binding, reference number, invoice id and sum must match with the invoice
# rubocop: disable Metrics/PerceivedComplexity
# rubocop: disable Metrics/CyclomaticComplexity
def autobind_invoice
return if binded?
- registrar = Registrar.find_by(reference_no: reference_no)
return unless registrar
-
- match = description.match(/^[^\d]*(\d+)/)
- return unless match
-
- invoice_no = match[1].to_i
- return unless invoice_no
-
- invoice = registrar.invoices.find_by(number: invoice_no)
+ return unless invoice_num
return unless invoice
return if invoice.binded?
diff --git a/app/models/directo.rb b/app/models/directo.rb
new file mode 100644
index 000000000..73b88e0ae
--- /dev/null
+++ b/app/models/directo.rb
@@ -0,0 +1,47 @@
+class Directo < ActiveRecord::Base
+ belongs_to :item, polymorphic: true
+
+ def self.send_receipts
+ new_trans = BankTransaction.where(in_directo: false)
+ new_trans.find_in_batches(batch_size: 10).each do |group|
+ mappers = {} # need them as no direct connection between transaction and invoice
+ builder = Nokogiri::XML::Builder.new(encoding: "UTF-8") do |xml|
+ xml.invoices {
+ group.each do |transaction|
+ next unless transaction.invoice
+ num = transaction.invoice_num
+ mappers[num] = transaction
+
+ xml.invoice(
+ "SalesAgent" => transaction.invoice.seller_name,
+ "Number" => num,
+ "InvoiceDate" => (transaction.paid_at||transaction.created_at).strftime("%Y-%m-%dT%H:%M:%S"),
+ "PaymentTerm" => Setting.directo_receipt_payment_term,
+ "Currency" => transaction.currency,
+ "CustomerCode"=> transaction.invoice.try(:buyer).try(:directo_handle)
+ ){
+ xml.line(
+ "ProductID"=> Setting.directo_receipt_product_name,
+ "Quantity" => 1,
+ "UnitPriceWoVAT" =>ActionController::Base.helpers.number_with_precision(transaction.sum.to_f/1.2, precision: 2, separator: "."),
+ "ProductName" => transaction.description
+ )
+ }
+ end
+ }
+ end
+
+ data = builder.to_xml.gsub("\n",'')
+ response = RestClient::Request.execute(url: ENV['directo_invoice_url'], method: :post, payload: {put: "1", what: "invoice", xmldata: data}, verify_ssl: false).to_s
+ dump_result_to_db(mappers, response)
+ end
+ end
+
+ def self.dump_result_to_db mappers, xml
+ Nokogiri::XML(xml).css("Result").each do |res|
+ obj = mappers[res.attributes["docid"].value.to_i]
+ obj.directo_records.first_or_create!(response: res.as_json.to_h)
+ obj.update_columns(in_directo: true)
+ end
+ end
+end
diff --git a/app/views/admin/settings/index.haml b/app/views/admin/settings/index.haml
index f03ca66bc..52430eb2a 100644
--- a/app/views/admin/settings/index.haml
+++ b/app/views/admin/settings/index.haml
@@ -71,6 +71,8 @@
= render 'setting_row', var: :days_to_keep_invoices_active
= render 'setting_row', var: :days_to_keep_overdue_invoices_active
= render 'setting_row', var: :minimum_deposit
+ = render 'setting_row', var: :directo_receipt_payment_term
+ = render 'setting_row', var: :directo_receipt_product_name
= render 'setting_row', var: :registry_billing_email
= render 'setting_row', var: :registry_invoice_contact
= render 'setting_row', var: :registry_vat_no
diff --git a/config/application-example.yml b/config/application-example.yml
index b08a1b007..cf6e26357 100644
--- a/config/application-example.yml
+++ b/config/application-example.yml
@@ -45,6 +45,8 @@ ca_cert_path: '/home/registry/registry/shared/ca/certs/ca.crt.pem'
ca_key_path: '/home/registry/registry/shared/ca/private/ca.key.pem'
ca_key_password: 'your-root-key-password'
+directo_invoice_url: 'https://domain/ddddd.asp'
+
#
# EPP
diff --git a/config/initializers/initial_settings.rb b/config/initializers/initial_settings.rb
index 193d179b0..8309d299a 100644
--- a/config/initializers/initial_settings.rb
+++ b/config/initializers/initial_settings.rb
@@ -33,6 +33,8 @@ if con.present? && con.table_exists?('settings')
Setting.save_default(:days_to_keep_invoices_active, 30)
Setting.save_default(:days_to_keep_overdue_invoices_active, 30)
Setting.save_default(:minimum_deposit, 0.0)
+ Setting.save_default(:directo_receipt_payment_term, "R")
+ Setting.save_default(:directo_receipt_product_name, "ETTEM06")
Setting.save_default(:days_to_renew_domain_before_expire, 90)
Setting.save_default(:expire_warning_period, 15)
diff --git a/db/migrate/20160113143447_create_directos.rb b/db/migrate/20160113143447_create_directos.rb
new file mode 100644
index 000000000..2fb6f85f8
--- /dev/null
+++ b/db/migrate/20160113143447_create_directos.rb
@@ -0,0 +1,10 @@
+class CreateDirectos < ActiveRecord::Migration
+ def change
+ create_table :directos do |t|
+ t.belongs_to :item, index: true, polymorphic: true
+ t.json :response
+
+ t.timestamps null: false
+ end
+ end
+end
diff --git a/db/migrate/20160118092453_add_in_directo_to_bank_transaction.rb b/db/migrate/20160118092453_add_in_directo_to_bank_transaction.rb
new file mode 100644
index 000000000..14433b341
--- /dev/null
+++ b/db/migrate/20160118092453_add_in_directo_to_bank_transaction.rb
@@ -0,0 +1,5 @@
+class AddInDirectoToBankTransaction < ActiveRecord::Migration
+ def change
+ add_column :bank_transactions, :in_directo, :boolean, default: false
+ end
+end
diff --git a/spec/models/directo_spec.rb b/spec/models/directo_spec.rb
new file mode 100644
index 000000000..bf187d2bf
--- /dev/null
+++ b/spec/models/directo_spec.rb
@@ -0,0 +1,5 @@
+require 'rails_helper'
+
+RSpec.describe Directo, type: :model do
+ pending "add some examples to (or delete) #{__FILE__}"
+end
From b111285334a7c41102fdb030e4f40c4c75e09f40 Mon Sep 17 00:00:00 2001
From: Stas
Date: Mon, 18 Jan 2016 14:20:27 +0200
Subject: [PATCH 36/69] 111396946-templates_and_actions
---
.../admin/reserved_domains_controller.rb | 38 ++++++++-
app/views/admin/reserved_domains/_form.haml | 23 ++++++
app/views/admin/reserved_domains/index.haml | 82 ++++++++++++++++---
app/views/admin/reserved_domains/new.haml | 3 +
4 files changed, 132 insertions(+), 14 deletions(-)
create mode 100644 app/views/admin/reserved_domains/_form.haml
create mode 100644 app/views/admin/reserved_domains/new.haml
diff --git a/app/controllers/admin/reserved_domains_controller.rb b/app/controllers/admin/reserved_domains_controller.rb
index 402d33022..48677bea2 100644
--- a/app/controllers/admin/reserved_domains_controller.rb
+++ b/app/controllers/admin/reserved_domains_controller.rb
@@ -2,11 +2,43 @@ class Admin::ReservedDomainsController < AdminController
load_and_authorize_resource
def index
- names = ReservedDomain.pluck(:name, :password).each_with_object({}){|domain, hash| hash[domain[0]] = domain[1]}
- names.names = nil if names.blank?
- @reserved_domains = names.to_yaml.gsub(/---.?\n/, '').gsub(/\.\.\..?\n/, '')
+
+ params[:q] ||= {}
+ domains = ReservedDomain.all
+ @q = domains.search(params[:q])
+ @domains = @q.result.page(params[:page])
+ @domains = @domains.per(params[:results_per_page]) if params[:results_per_page].to_i > 0
+
end
+ def new
+ @domain = ReservedDomain.new
+ end
+
+ def edit
+ authorize! :update, Depp::Domain
+ @data = @domain.info(params[:domain_name])
+ @domain_params = Depp::Domain.construct_params_from_server_data(@data)
+ end
+
+ def update
+ authorize! :update, Depp::Domain
+ @domain_params = params[:domain]
+ @data = @domain.update(@domain_params)
+
+ if response_ok?
+ redirect_to info_registrar_domains_url(domain_name: @domain_params[:name])
+ else
+ params[:domain_name] = @domain_params[:name]
+ render 'new'
+ end
+ end
+
+ def delete
+ authorize! :delete, Depp::Domain
+ end
+
+
def create
@reserved_domains = params[:reserved_domains]
diff --git a/app/views/admin/reserved_domains/_form.haml b/app/views/admin/reserved_domains/_form.haml
new file mode 100644
index 000000000..bfbacbfd9
--- /dev/null
+++ b/app/views/admin/reserved_domains/_form.haml
@@ -0,0 +1,23 @@
+= form_for([:admin, @domain], html: {class: 'form-horizontal'}) do |f|
+ = render 'shared/full_errors', object: @domain
+
+ .row
+ .col-md-8
+ .panel.panel-default
+ .panel-heading.clearfix
+ .pull-left= t(:general)
+ .panel-body
+ .form-group
+ .col-md-4.control-label
+ = f.label :name
+ .col-md-7
+ = f.text_field(:name, class: 'form-control')
+ .form-group
+ .col-md-4.control-label
+ = f.label :password
+ .col-md-7
+ = f.text_field(:password, class: 'form-control')
+%hr
+ .row
+ .col-md-8.text-right
+ = button_tag(t(:save), class: 'btn btn-primary')
diff --git a/app/views/admin/reserved_domains/index.haml b/app/views/admin/reserved_domains/index.haml
index 15840ff93..808ad1480 100644
--- a/app/views/admin/reserved_domains/index.haml
+++ b/app/views/admin/reserved_domains/index.haml
@@ -1,14 +1,74 @@
- content_for :actions do
- = link_to('#', class: 'btn btn-default', "data-container": "body", "data-title": t('list_format_is_in_yaml'), "data-content": "domain.ee: authinfopw
seconddomain.ee:
thirddomain.ee: authinfo3
#{t('if_auth_info_is_left_empty_it_will_be_auto_generated')}
#{t('each_domain_name_must_end_with_colon_sign')}", "data-placement": "left", "data-toggle": "popover", "data-html" => "true") do
- %span.glyphicon.glyphicon-info-sign{"aria-hidden" => "true"}
-
+ = link_to(t(:new), new_admin_reserved_domain_path, class: 'btn btn-primary')
= render 'shared/title', name: t(:reserved_domains)
-= form_tag([:admin, :reserved_domains]) do |f|
- .row
- .col-md-12
- = text_area_tag :reserved_domains, @reserved_domains, class: 'form-control', rows: 30
- %hr
- .row
- .col-md-12.text-right
- %button.btn.btn-warning=t(:save)
+.row
+ .col-md-12
+ = search_form_for [:admin, @q], html: { style: 'margin-bottom: 0;', class: 'js-form', autocomplete: 'off' } do |f|
+ .row
+ .col-md-3
+ .form-group
+ = f.label :name
+ = f.search_field :name_matches, value: params[:q][:name_matches], class: 'form-control', placeholder: t(:name)
+ .col-md-3
+ .form-group
+ = f.label t(:created_at_from)
+ = f.search_field :created_at_gteq, value: params[:q][:created_at_gteq], class: 'form-control datepicker', placeholder: t(:created_at_from)
+ .col-md-3
+ .form-group
+ = f.label t(:created_at_until)
+ = f.search_field :created_at_lteq, value: params[:q][:created_at_lteq], class: 'form-control datepicker', placeholder: t(:created_at_until)
+ .row
+ .col-md-3
+ .form-group
+ = label_tag t(:results_per_page)
+ = text_field_tag :results_per_page, params[:results_per_page], class: 'form-control', placeholder: t(:results_per_page)
+ .col-md-3{style: 'padding-top: 25px;'}
+ %button.btn.btn-primary
+
+ %span.glyphicon.glyphicon-search
+
+ %button.btn.btn-default.js-reset-form
+ = t(:clear_fields)
+%hr
+.row
+ .col-md-12
+ .table-responsive
+ %table.table.table-hover.table-bordered.table-condensed
+ %thead
+ %tr
+ %th{class: 'col-xs-2'}
+ = sort_link(@q, 'name')
+ %th{class: 'col-xs-2'}
+ = sort_link(@q, 'password')
+ %th{class: 'col-xs-2'}
+ = sort_link(@q, 'created_at', t(:created_at))
+ %th{class: 'col-xs-2'}
+ = sort_link(@q, 'updated_at', t(:updated_at))
+ %th{class: 'col-xs-2'}
+ = t(:actions)
+ %tbody
+ - @domains.each do |x|
+ %tr
+ %td= x.name
+ %td= x.password
+ %td= l(x.created_at, format: :short)
+ %td= l(x.updated_at, format: :short)
+ %td
+ = link_to(t(:edit), edit_admin_reserved_domains_path(name: x.name),
+ class: 'btn btn-primary btn-xs')
+ = link_to(t(:renew), renew_admin_reserved_domains_path(name: x.name),
+ class: 'btn btn-default btn-xs')
+ = link_to(t(:delete), delete_admin_reserved_domains_path(name: x.name),
+ class: 'btn btn-default btn-xs')
+.row
+ .col-md-6
+ = paginate @domains
+ .col-md-6.text-right
+ .pagination
+ = t(:result_count, count: @domains.total_count)
+
+:coffee
+ $(".js-reset-form").on "click", (e) ->
+ e.preventDefault();
+ window.location = "#{admin_reserved_domains_path}"
diff --git a/app/views/admin/reserved_domains/new.haml b/app/views/admin/reserved_domains/new.haml
new file mode 100644
index 000000000..937fdebde
--- /dev/null
+++ b/app/views/admin/reserved_domains/new.haml
@@ -0,0 +1,3 @@
+= render 'shared/title', name: t(:new_reserved_domain)
+
+= render 'form'
From 975dd523689658c5fc78ddaceaf3a04b73a70d81 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Mon, 18 Jan 2016 20:26:03 +0200
Subject: [PATCH 37/69] Story#105852786 - Sales agent is set by config
---
app/models/directo.rb | 2 +-
app/views/admin/settings/index.haml | 1 +
config/initializers/initial_settings.rb | 1 +
3 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/app/models/directo.rb b/app/models/directo.rb
index 73b88e0ae..e51313b5b 100644
--- a/app/models/directo.rb
+++ b/app/models/directo.rb
@@ -13,7 +13,7 @@ class Directo < ActiveRecord::Base
mappers[num] = transaction
xml.invoice(
- "SalesAgent" => transaction.invoice.seller_name,
+ "SalesAgent" => Setting.directo_sales_agent,
"Number" => num,
"InvoiceDate" => (transaction.paid_at||transaction.created_at).strftime("%Y-%m-%dT%H:%M:%S"),
"PaymentTerm" => Setting.directo_receipt_payment_term,
diff --git a/app/views/admin/settings/index.haml b/app/views/admin/settings/index.haml
index 52430eb2a..e09e48396 100644
--- a/app/views/admin/settings/index.haml
+++ b/app/views/admin/settings/index.haml
@@ -73,6 +73,7 @@
= render 'setting_row', var: :minimum_deposit
= render 'setting_row', var: :directo_receipt_payment_term
= render 'setting_row', var: :directo_receipt_product_name
+ = render 'setting_row', var: :directo_sales_agent
= render 'setting_row', var: :registry_billing_email
= render 'setting_row', var: :registry_invoice_contact
= render 'setting_row', var: :registry_vat_no
diff --git a/config/initializers/initial_settings.rb b/config/initializers/initial_settings.rb
index 8309d299a..1b25ddeb3 100644
--- a/config/initializers/initial_settings.rb
+++ b/config/initializers/initial_settings.rb
@@ -35,6 +35,7 @@ if con.present? && con.table_exists?('settings')
Setting.save_default(:minimum_deposit, 0.0)
Setting.save_default(:directo_receipt_payment_term, "R")
Setting.save_default(:directo_receipt_product_name, "ETTEM06")
+ Setting.save_default(:directo_sales_agent, "JAANA")
Setting.save_default(:days_to_renew_domain_before_expire, 90)
Setting.save_default(:expire_warning_period, 15)
From 51c54f77c7a4d728e7dd09c903950032c4c6633d Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Mon, 18 Jan 2016 21:29:16 +0200
Subject: [PATCH 38/69] Story#105852786 - Directo transaction sum is taken from
invoice
---
app/models/directo.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/models/directo.rb b/app/models/directo.rb
index e51313b5b..2a1ec118c 100644
--- a/app/models/directo.rb
+++ b/app/models/directo.rb
@@ -23,7 +23,7 @@ class Directo < ActiveRecord::Base
xml.line(
"ProductID"=> Setting.directo_receipt_product_name,
"Quantity" => 1,
- "UnitPriceWoVAT" =>ActionController::Base.helpers.number_with_precision(transaction.sum.to_f/1.2, precision: 2, separator: "."),
+ "UnitPriceWoVAT" =>ActionController::Base.helpers.number_with_precision(transaction.invoice.sum_without_vat, precision: 2, separator: "."),
"ProductName" => transaction.description
)
}
From bc640c63fe2116a59cffa6cf70b11a3045e30d1b Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Tue, 19 Jan 2016 09:38:46 +0200
Subject: [PATCH 39/69] Story#105852786 - cleaner code
---
app/models/directo.rb | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/app/models/directo.rb b/app/models/directo.rb
index 2a1ec118c..3ca40eaf1 100644
--- a/app/models/directo.rb
+++ b/app/models/directo.rb
@@ -8,8 +8,9 @@ class Directo < ActiveRecord::Base
builder = Nokogiri::XML::Builder.new(encoding: "UTF-8") do |xml|
xml.invoices {
group.each do |transaction|
- next unless transaction.invoice
- num = transaction.invoice_num
+ invoice = transaction.invoice
+ next unless invoice
+ num = transaction.invoice_num
mappers[num] = transaction
xml.invoice(
@@ -18,12 +19,12 @@ class Directo < ActiveRecord::Base
"InvoiceDate" => (transaction.paid_at||transaction.created_at).strftime("%Y-%m-%dT%H:%M:%S"),
"PaymentTerm" => Setting.directo_receipt_payment_term,
"Currency" => transaction.currency,
- "CustomerCode"=> transaction.invoice.try(:buyer).try(:directo_handle)
+ "CustomerCode"=> invoice.buyer.try(:directo_handle)
){
xml.line(
"ProductID"=> Setting.directo_receipt_product_name,
"Quantity" => 1,
- "UnitPriceWoVAT" =>ActionController::Base.helpers.number_with_precision(transaction.invoice.sum_without_vat, precision: 2, separator: "."),
+ "UnitPriceWoVAT" =>ActionController::Base.helpers.number_with_precision(invoice.sum_cache/(1+invoice.vat_prc), precision: 2, separator: "."),
"ProductName" => transaction.description
)
}
From 72bd54dc7cac8814c3cf0f827bc80b3516001870 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Tue, 19 Jan 2016 12:39:42 +0200
Subject: [PATCH 40/69] Story#105852786 - Directo invoices are calculated based
on invoices
---
app/models/bank_link.rb | 3 ++-
app/models/bank_transaction.rb | 2 +-
app/models/directo.rb | 19 ++++++++-----------
app/models/invoice.rb | 7 ++++++-
...2453_add_in_directo_to_bank_transaction.rb | 5 -----
...0160118092454_add_in_directo_to_invoice.rb | 5 +++++
6 files changed, 22 insertions(+), 19 deletions(-)
delete mode 100644 db/migrate/20160118092453_add_in_directo_to_bank_transaction.rb
create mode 100644 db/migrate/20160118092454_add_in_directo_to_invoice.rb
diff --git a/app/models/bank_link.rb b/app/models/bank_link.rb
index 31be3e222..29857951f 100644
--- a/app/models/bank_link.rb
+++ b/app/models/bank_link.rb
@@ -32,7 +32,7 @@ class BankLink
hash["VK_AMOUNT"] = number_with_precision(invoice.sum_cache, :precision => 2, :separator => ".")
hash["VK_CURR"] = invoice.currency
hash["VK_REF"] = ""
- hash["VK_MSG"] = "Order nr. #{invoice.number}"
+ hash["VK_MSG"] = invoice.description
hash["VK_RETURN"] = controller.registrar_return_payment_with_url(type)
hash["VK_CANCEL"] = controller.registrar_return_payment_with_url(type)
hash["VK_DATETIME"] = Time.now.strftime("%Y-%m-%dT%H:%M:%S%z")
@@ -101,6 +101,7 @@ class BankLink
transaction.buyer_iban = params["VK_SND_ACC"]
transaction.buyer_name = params["VK_SND_NAME"]
transaction.paid_at = Time.parse(params["VK_T_DATETIME"])
+ transaction.save!
transaction.autobind_invoice
end
diff --git a/app/models/bank_transaction.rb b/app/models/bank_transaction.rb
index b827670c4..1a34965bf 100644
--- a/app/models/bank_transaction.rb
+++ b/app/models/bank_transaction.rb
@@ -2,7 +2,7 @@ class BankTransaction < ActiveRecord::Base
include Versions
belongs_to :bank_statement
has_one :account_activity
- has_many :directo_records, as: :item, class_name: 'Directo'
+ has_many :directo_records, as: :item, class_name: 'Directo'# Deprecated
scope :unbinded, lambda {
where('id NOT IN (SELECT bank_transaction_id FROM account_activities where bank_transaction_id IS NOT NULL)')
diff --git a/app/models/directo.rb b/app/models/directo.rb
index 3ca40eaf1..4116e2985 100644
--- a/app/models/directo.rb
+++ b/app/models/directo.rb
@@ -2,30 +2,27 @@ class Directo < ActiveRecord::Base
belongs_to :item, polymorphic: true
def self.send_receipts
- new_trans = BankTransaction.where(in_directo: false)
+ new_trans = Invoice.where(invoice_type: "DEB", in_directo: false)
new_trans.find_in_batches(batch_size: 10).each do |group|
- mappers = {} # need them as no direct connection between transaction and invoice
+ mappers = {} # need them as no direct connection between invoice
builder = Nokogiri::XML::Builder.new(encoding: "UTF-8") do |xml|
xml.invoices {
- group.each do |transaction|
- invoice = transaction.invoice
- next unless invoice
- num = transaction.invoice_num
- mappers[num] = transaction
-
+ group.each do |invoice|
+ num = invoice.number
+ mappers[num] = invoice
xml.invoice(
"SalesAgent" => Setting.directo_sales_agent,
"Number" => num,
- "InvoiceDate" => (transaction.paid_at||transaction.created_at).strftime("%Y-%m-%dT%H:%M:%S"),
+ "InvoiceDate" => (invoice.account_activity.try(:bank_transaction).try(:paid_at) || invoice.updated_at).strftime("%Y-%m-%dT%H:%M:%S"),
"PaymentTerm" => Setting.directo_receipt_payment_term,
- "Currency" => transaction.currency,
+ "Currency" => invoice.currency,
"CustomerCode"=> invoice.buyer.try(:directo_handle)
){
xml.line(
"ProductID"=> Setting.directo_receipt_product_name,
"Quantity" => 1,
"UnitPriceWoVAT" =>ActionController::Base.helpers.number_with_precision(invoice.sum_cache/(1+invoice.vat_prc), precision: 2, separator: "."),
- "ProductName" => transaction.description
+ "ProductName" => invoice.description
)
}
end
diff --git a/app/models/invoice.rb b/app/models/invoice.rb
index fdcb3cf61..5c7dafe85 100644
--- a/app/models/invoice.rb
+++ b/app/models/invoice.rb
@@ -2,8 +2,9 @@ class Invoice < ActiveRecord::Base
include Versions
belongs_to :seller, class_name: 'Registrar'
belongs_to :buyer, class_name: 'Registrar'
+ has_one :account_activity
has_many :invoice_items
- has_one :account_activity
+ has_many :directo_records, as: :item, class_name: 'Directo'
accepts_nested_attributes_for :invoice_items
@@ -99,6 +100,10 @@ class Invoice < ActiveRecord::Base
kit.to_pdf
end
+ def description
+ "Order nr. #{number}"
+ end
+
def pdf_name
"invoice-#{number}.pdf"
end
diff --git a/db/migrate/20160118092453_add_in_directo_to_bank_transaction.rb b/db/migrate/20160118092453_add_in_directo_to_bank_transaction.rb
deleted file mode 100644
index 14433b341..000000000
--- a/db/migrate/20160118092453_add_in_directo_to_bank_transaction.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-class AddInDirectoToBankTransaction < ActiveRecord::Migration
- def change
- add_column :bank_transactions, :in_directo, :boolean, default: false
- end
-end
diff --git a/db/migrate/20160118092454_add_in_directo_to_invoice.rb b/db/migrate/20160118092454_add_in_directo_to_invoice.rb
new file mode 100644
index 000000000..0e93c3835
--- /dev/null
+++ b/db/migrate/20160118092454_add_in_directo_to_invoice.rb
@@ -0,0 +1,5 @@
+class AddInDirectoToInvoice < ActiveRecord::Migration
+ def change
+ add_column :invoices, :in_directo, :boolean, default: false
+ end
+end
From 67fb02d7c498e653634d0cc5e8ed88fdc73efcf3 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Tue, 19 Jan 2016 14:50:08 +0200
Subject: [PATCH 41/69] Story#105852786 - Directo skip if bank_transaction is
not set
---
app/models/directo.rb | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/app/models/directo.rb b/app/models/directo.rb
index 4116e2985..502dfe089 100644
--- a/app/models/directo.rb
+++ b/app/models/directo.rb
@@ -8,12 +8,14 @@ class Directo < ActiveRecord::Base
builder = Nokogiri::XML::Builder.new(encoding: "UTF-8") do |xml|
xml.invoices {
group.each do |invoice|
+ next if invoice.account_activity.nil? || invoice.account_activity.bank_transaction.nil?
+
num = invoice.number
mappers[num] = invoice
xml.invoice(
"SalesAgent" => Setting.directo_sales_agent,
"Number" => num,
- "InvoiceDate" => (invoice.account_activity.try(:bank_transaction).try(:paid_at) || invoice.updated_at).strftime("%Y-%m-%dT%H:%M:%S"),
+ "InvoiceDate" => invoice.created_at.strftime("%Y-%m-%dT%H:%M:%S"),
"PaymentTerm" => Setting.directo_receipt_payment_term,
"Currency" => invoice.currency,
"CustomerCode"=> invoice.buyer.try(:directo_handle)
From 6c8bab56bf08d0853810c4edb97ff28155257448 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Tue, 19 Jan 2016 15:02:29 +0200
Subject: [PATCH 42/69] Story#105852786 - add Directo.send_receipts into
whenever to generate cron jobs
---
config/schedule.rb | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/config/schedule.rb b/config/schedule.rb
index 5524f10ab..f3bbad764 100644
--- a/config/schedule.rb
+++ b/config/schedule.rb
@@ -53,6 +53,10 @@ if @cron_group == 'registry'
every 52.minutes do
runner 'Domain.start_redemption_grace_period'
end
+
+ every :day, at: '19:00pm' do
+ runner 'Directo.send_receipts'
+ end if @environment == 'production'
end
every 10.minutes do
From 63fcbd9515684e7f5e39a925cbaf482041b99f6f Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Tue, 19 Jan 2016 15:17:33 +0200
Subject: [PATCH 43/69] Story#105852786 - Invoice' bank transaction should have
sum in order to mean that invoice payment finished
---
app/models/directo.rb | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/app/models/directo.rb b/app/models/directo.rb
index 502dfe089..bf5bc9043 100644
--- a/app/models/directo.rb
+++ b/app/models/directo.rb
@@ -8,7 +8,7 @@ class Directo < ActiveRecord::Base
builder = Nokogiri::XML::Builder.new(encoding: "UTF-8") do |xml|
xml.invoices {
group.each do |invoice|
- next if invoice.account_activity.nil? || invoice.account_activity.bank_transaction.nil?
+ next if invoice.account_activity.nil? || invoice.account_activity.bank_transaction.nil? || invoice.account_activity.bank_transaction.sum.nil?
num = invoice.number
mappers[num] = invoice
@@ -32,8 +32,9 @@ class Directo < ActiveRecord::Base
end
data = builder.to_xml.gsub("\n",'')
- response = RestClient::Request.execute(url: ENV['directo_invoice_url'], method: :post, payload: {put: "1", what: "invoice", xmldata: data}, verify_ssl: false).to_s
- dump_result_to_db(mappers, response)
+ # response = RestClient::Request.execute(url: ENV['directo_invoice_url'], method: :post, payload: {put: "1", what: "invoice", xmldata: data}, verify_ssl: false).to_s
+ # dump_result_to_db(mappers, response)
+ binding.pry
end
end
From c3db50b5cdd2f650cc495684b1276ab5a08ef253 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Tue, 19 Jan 2016 15:27:17 +0200
Subject: [PATCH 44/69] Story#105852786 - Invoice' bank transaction should have
sum in order to mean that invoice payment finished
---
app/models/directo.rb | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/app/models/directo.rb b/app/models/directo.rb
index bf5bc9043..ae8c2b48c 100644
--- a/app/models/directo.rb
+++ b/app/models/directo.rb
@@ -8,7 +8,8 @@ class Directo < ActiveRecord::Base
builder = Nokogiri::XML::Builder.new(encoding: "UTF-8") do |xml|
xml.invoices {
group.each do |invoice|
- next if invoice.account_activity.nil? || invoice.account_activity.bank_transaction.nil? || invoice.account_activity.bank_transaction.sum.nil?
+ next if invoice.account_activity.nil? || invoice.account_activity.bank_transaction.nil?
+ next if invoice.account_activity.bank_transaction.sum.nil?
num = invoice.number
mappers[num] = invoice
@@ -32,9 +33,8 @@ class Directo < ActiveRecord::Base
end
data = builder.to_xml.gsub("\n",'')
- # response = RestClient::Request.execute(url: ENV['directo_invoice_url'], method: :post, payload: {put: "1", what: "invoice", xmldata: data}, verify_ssl: false).to_s
- # dump_result_to_db(mappers, response)
- binding.pry
+ response = RestClient::Request.execute(url: ENV['directo_invoice_url'], method: :post, payload: {put: "1", what: "invoice", xmldata: data}, verify_ssl: false).to_s
+ dump_result_to_db(mappers, response)
end
end
From 66bdc5146b9f1d94e8378697395aa81c4f0ca9bc Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Tue, 19 Jan 2016 15:36:50 +0200
Subject: [PATCH 45/69] Story#105852786 - Do not send invoice to directo if sum
is not matching with bank transaction
---
app/models/directo.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/models/directo.rb b/app/models/directo.rb
index ae8c2b48c..af62d21a2 100644
--- a/app/models/directo.rb
+++ b/app/models/directo.rb
@@ -9,7 +9,7 @@ class Directo < ActiveRecord::Base
xml.invoices {
group.each do |invoice|
next if invoice.account_activity.nil? || invoice.account_activity.bank_transaction.nil?
- next if invoice.account_activity.bank_transaction.sum.nil?
+ next if invoice.account_activity.bank_transaction.sum.nil? || invoice.account_activity.bank_transaction.sum != invoice.sum_cache
num = invoice.number
mappers[num] = invoice
From d3295e349cd5f08859444ce7daa05e633a1a24fb Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Tue, 19 Jan 2016 17:00:00 +0200
Subject: [PATCH 46/69] Story#105852786 - Do not check for now bank
transactions sum
---
app/models/directo.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/models/directo.rb b/app/models/directo.rb
index af62d21a2..07b02e625 100644
--- a/app/models/directo.rb
+++ b/app/models/directo.rb
@@ -9,7 +9,7 @@ class Directo < ActiveRecord::Base
xml.invoices {
group.each do |invoice|
next if invoice.account_activity.nil? || invoice.account_activity.bank_transaction.nil?
- next if invoice.account_activity.bank_transaction.sum.nil? || invoice.account_activity.bank_transaction.sum != invoice.sum_cache
+ # next if invoice.account_activity.bank_transaction.sum.nil? || invoice.account_activity.bank_transaction.sum != invoice.sum_cache
num = invoice.number
mappers[num] = invoice
From e99dbe9a18ceeaeb66e89439a58f43431617defb Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Wed, 20 Jan 2016 13:30:34 +0200
Subject: [PATCH 47/69] Story#105852786 - each time invoice is being sent to
Directo, record is saved to DB
---
app/models/directo.rb | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/app/models/directo.rb b/app/models/directo.rb
index 07b02e625..2b82ee289 100644
--- a/app/models/directo.rb
+++ b/app/models/directo.rb
@@ -22,10 +22,10 @@ class Directo < ActiveRecord::Base
"CustomerCode"=> invoice.buyer.try(:directo_handle)
){
xml.line(
- "ProductID"=> Setting.directo_receipt_product_name,
- "Quantity" => 1,
- "UnitPriceWoVAT" =>ActionController::Base.helpers.number_with_precision(invoice.sum_cache/(1+invoice.vat_prc), precision: 2, separator: "."),
- "ProductName" => invoice.description
+ "ProductID" => Setting.directo_receipt_product_name,
+ "Quantity" => 1,
+ "UnitPriceWoVAT" => ActionController::Base.helpers.number_with_precision(invoice.sum_cache/(1+invoice.vat_prc), precision: 2, separator: "."),
+ "ProductName" => invoice.description
)
}
end
@@ -41,7 +41,7 @@ class Directo < ActiveRecord::Base
def self.dump_result_to_db mappers, xml
Nokogiri::XML(xml).css("Result").each do |res|
obj = mappers[res.attributes["docid"].value.to_i]
- obj.directo_records.first_or_create!(response: res.as_json.to_h)
+ obj.directo_records.create!(response: res.as_json.to_h)
obj.update_columns(in_directo: true)
end
end
From f86453fa0b9ef79f192b610b9a68bfadc9684d22 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Wed, 20 Jan 2016 13:49:44 +0200
Subject: [PATCH 48/69] Story#105852786 - skip cancelled invoices to be sent to
directo
---
app/models/directo.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/models/directo.rb b/app/models/directo.rb
index 2b82ee289..83eaf1a29 100644
--- a/app/models/directo.rb
+++ b/app/models/directo.rb
@@ -2,7 +2,7 @@ class Directo < ActiveRecord::Base
belongs_to :item, polymorphic: true
def self.send_receipts
- new_trans = Invoice.where(invoice_type: "DEB", in_directo: false)
+ new_trans = Invoice.where(invoice_type: "DEB", in_directo: false).where.not(cancelled_at: nil)
new_trans.find_in_batches(batch_size: 10).each do |group|
mappers = {} # need them as no direct connection between invoice
builder = Nokogiri::XML::Builder.new(encoding: "UTF-8") do |xml|
From 793bc359ea013d2a1f650bc8af54f12100288704 Mon Sep 17 00:00:00 2001
From: Stas
Date: Wed, 20 Jan 2016 15:44:55 +0200
Subject: [PATCH 49/69] 111396946-methods
---
.../admin/reserved_domains_controller.rb | 60 +------------------
app/views/admin/reserved_domains/index.haml | 8 +--
2 files changed, 5 insertions(+), 63 deletions(-)
diff --git a/app/controllers/admin/reserved_domains_controller.rb b/app/controllers/admin/reserved_domains_controller.rb
index 48677bea2..4cb7ba51f 100644
--- a/app/controllers/admin/reserved_domains_controller.rb
+++ b/app/controllers/admin/reserved_domains_controller.rb
@@ -16,66 +16,10 @@ class Admin::ReservedDomainsController < AdminController
end
def edit
- authorize! :update, Depp::Domain
- @data = @domain.info(params[:domain_name])
- @domain_params = Depp::Domain.construct_params_from_server_data(@data)
- end
-
- def update
- authorize! :update, Depp::Domain
- @domain_params = params[:domain]
- @data = @domain.update(@domain_params)
-
- if response_ok?
- redirect_to info_registrar_domains_url(domain_name: @domain_params[:name])
- else
- params[:domain_name] = @domain_params[:name]
- render 'new'
- end
+ authorize! :update, ReservedDomain
end
def delete
- authorize! :delete, Depp::Domain
- end
-
-
- def create
- @reserved_domains = params[:reserved_domains]
-
- begin
- params[:reserved_domains] = "---\n" if params[:reserved_domains].blank?
- names = YAML.load(params[:reserved_domains])
- fail if names == false
- rescue
- flash.now[:alert] = I18n.t('invalid_yaml')
- logger.warn 'Invalid YAML'
- render :index and return
- end
-
- result = true
- ReservedDomain.transaction do
- # removing old ones
- existing = ReservedDomain.any_of_domains(names.keys).pluck(:id)
- ReservedDomain.where.not(id: existing).destroy_all
-
- #updating and adding
- names.each do |name, psw|
- rec = ReservedDomain.find_or_initialize_by(name: name)
- rec.password = psw
-
- unless rec.save
- result = false
- raise ActiveRecord::Rollback
- end
- end
- end
-
- if result
- flash[:notice] = I18n.t('record_updated')
- redirect_to :back
- else
- flash.now[:alert] = I18n.t('failed_to_update_record')
- render :index
- end
+ authorize! :delete, ReservedDomain
end
end
diff --git a/app/views/admin/reserved_domains/index.haml b/app/views/admin/reserved_domains/index.haml
index 808ad1480..6ac65d14b 100644
--- a/app/views/admin/reserved_domains/index.haml
+++ b/app/views/admin/reserved_domains/index.haml
@@ -55,12 +55,10 @@
%td= l(x.created_at, format: :short)
%td= l(x.updated_at, format: :short)
%td
- = link_to(t(:edit), edit_admin_reserved_domains_path(name: x.name),
+ = link_to(t(:edit), edit_admin_reserved_domain_path(id: x.id),
+ class: 'btn btn-primary btn-xs')
+ = link_to(t(:delete), delete_admin_reserved_domain_path(id: x.id),
class: 'btn btn-primary btn-xs')
- = link_to(t(:renew), renew_admin_reserved_domains_path(name: x.name),
- class: 'btn btn-default btn-xs')
- = link_to(t(:delete), delete_admin_reserved_domains_path(name: x.name),
- class: 'btn btn-default btn-xs')
.row
.col-md-6
= paginate @domains
From 3b515ab2dd7afeebfc115588a9953d1b07c56fad Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Wed, 20 Jan 2016 16:41:55 +0200
Subject: [PATCH 50/69] Story#112054829 - Use casting
---
app/models/domain.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/models/domain.rb b/app/models/domain.rb
index e4882473a..c57d742e1 100644
--- a/app/models/domain.rb
+++ b/app/models/domain.rb
@@ -264,7 +264,7 @@ class Domain < ActiveRecord::Base
domains.each do |domain|
next unless domain.expirable?
domain.set_graceful_expired
- DomainMailer.expiration_reminder(domain.id).deliver_in(Setting.expiration_reminder_mail.days)
+ DomainMailer.expiration_reminder(domain.id).deliver_in(Setting.expiration_reminder_mail.to_i.days)
STDOUT << "#{Time.zone.now.utc} Domain.start_expire_period: ##{domain.id} (#{domain.name}) #{domain.changes}\n" unless Rails.env.test?
domain.save
end
From 762aff6bc0caad95c94a1651ed940c267ec6609f Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Mon, 25 Jan 2016 11:19:23 +0200
Subject: [PATCH 51/69] Story#112043941 - Add syslog to directo
---
app/models/directo.rb | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/models/directo.rb b/app/models/directo.rb
index 83eaf1a29..5a719d0a7 100644
--- a/app/models/directo.rb
+++ b/app/models/directo.rb
@@ -43,6 +43,7 @@ class Directo < ActiveRecord::Base
obj = mappers[res.attributes["docid"].value.to_i]
obj.directo_records.create!(response: res.as_json.to_h)
obj.update_columns(in_directo: true)
+ Rails.logger.info("[DIRECTO] Invoice #{res.attributes["docid"].value} was pushed and return is #{res.as_json.to_h.inspect}")
end
end
end
From b2787a21bad33d6d3b3ea85d0e6d6df47d5a077c Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Mon, 25 Jan 2016 11:37:12 +0200
Subject: [PATCH 52/69] Story#112127475 - server set statuses were not applied
on broken domains
---
app/models/domain.rb | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/app/models/domain.rb b/app/models/domain.rb
index c57d742e1..138afa66e 100644
--- a/app/models/domain.rb
+++ b/app/models/domain.rb
@@ -266,7 +266,7 @@ class Domain < ActiveRecord::Base
domain.set_graceful_expired
DomainMailer.expiration_reminder(domain.id).deliver_in(Setting.expiration_reminder_mail.to_i.days)
STDOUT << "#{Time.zone.now.utc} Domain.start_expire_period: ##{domain.id} (#{domain.name}) #{domain.changes}\n" unless Rails.env.test?
- domain.save
+ domain.save(validate: false)
end
STDOUT << "#{Time.zone.now.utc} - Successfully expired #{domains.count} domains\n" unless Rails.env.test?
@@ -280,7 +280,7 @@ class Domain < ActiveRecord::Base
next unless domain.server_holdable?
domain.statuses << DomainStatus::SERVER_HOLD
STDOUT << "#{Time.zone.now.utc} Domain.start_redemption_grace_period: ##{domain.id} (#{domain.name}) #{domain.changes}\n" unless Rails.env.test?
- domain.save
+ domain.save(validate: false)
end
STDOUT << "#{Time.zone.now.utc} - Successfully set server_hold to #{d.count} domains\n" unless Rails.env.test?
@@ -294,7 +294,7 @@ class Domain < ActiveRecord::Base
next unless domain.delete_candidateable?
domain.statuses << DomainStatus::DELETE_CANDIDATE
STDOUT << "#{Time.zone.now.utc} Domain.start_delete_period: ##{domain.id} (#{domain.name}) #{domain.changes}\n" unless Rails.env.test?
- domain.save
+ domain.save(validate: false)
end
return if Rails.env.test?
From df68b705ff58f134968e3466a3479a4328afb454 Mon Sep 17 00:00:00 2001
From: Stas
Date: Mon, 25 Jan 2016 11:58:13 +0200
Subject: [PATCH 53/69] 110152326-distinct_added
---
app/controllers/registrar/contacts_controller.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/controllers/registrar/contacts_controller.rb b/app/controllers/registrar/contacts_controller.rb
index c0b814993..0581a3cfc 100644
--- a/app/controllers/registrar/contacts_controller.rb
+++ b/app/controllers/registrar/contacts_controller.rb
@@ -27,7 +27,7 @@ class Registrar::ContactsController < Registrar::DeppController # EPP controller
normalize_search_parameters do
@q = contacts.search(search_params)
- @contacts = @q.result.page(params[:page])
+ @contacts = @q.result(distinct: :true).page(params[:page])
end
@contacts = @contacts.per(params[:results_per_page]) if params[:results_per_page].to_i > 0
From 8ed8a46046def125e48aa90b1f4bf343237a208f Mon Sep 17 00:00:00 2001
From: Stas
Date: Mon, 25 Jan 2016 16:56:04 +0200
Subject: [PATCH 54/69] 111297422-que_jobs
---
app/jobs/update_whois_record_job.rb | 10 ++++++++++
app/models/whois_record.rb | 2 +-
lib/tasks/whois.rake | 4 ++++
3 files changed, 15 insertions(+), 1 deletion(-)
create mode 100644 app/jobs/update_whois_record_job.rb
diff --git a/app/jobs/update_whois_record_job.rb b/app/jobs/update_whois_record_job.rb
new file mode 100644
index 000000000..39abeeb9c
--- /dev/null
+++ b/app/jobs/update_whois_record_job.rb
@@ -0,0 +1,10 @@
+class UpdateWhoisRecordJob < Que::Job
+ def run(ids, type)
+ ids.each do |id|
+ record = WhoisRecord.find_by(id: id)
+ return unless record
+
+ record.save
+ end
+ end
+end
\ No newline at end of file
diff --git a/app/models/whois_record.rb b/app/models/whois_record.rb
index 08d1cdf14..c16e5ce73 100644
--- a/app/models/whois_record.rb
+++ b/app/models/whois_record.rb
@@ -106,7 +106,7 @@ class WhoisRecord < ActiveRecord::Base
self.json = generated_json
self.body = generated_body
self.name = json['name']
- self.registrar_id = domain.registrar_id # for faster registrar updates
+ self.registrar_id = domain.registrar_id if domain # for faster registrar updates
end
def update_whois_server
diff --git a/lib/tasks/whois.rake b/lib/tasks/whois.rake
index fd905e383..afd4cd62e 100644
--- a/lib/tasks/whois.rake
+++ b/lib/tasks/whois.rake
@@ -12,6 +12,10 @@ namespace :whois do
puts(@i += 10000)
GC.start
end
+
+ GC.start
+ UpdateWhoisRecordJob.enqueue WhoisRecord.find_each.map(&:id), 'domain'
+
end
puts "\n-----> all done in #{(Time.zone.now.to_f - start).round(2)} seconds"
end
From a0fcd8be8bbb857f1cb608e0226a51fa6fad6929 Mon Sep 17 00:00:00 2001
From: Stas
Date: Tue, 26 Jan 2016 14:36:09 +0200
Subject: [PATCH 55/69] 111297422-job_and_method_update
---
app/jobs/update_whois_record_job.rb | 16 +++++++++++-----
app/models/blocked_domain.rb | 2 ++
app/models/reserved_domain.rb | 2 ++
lib/tasks/whois.rake | 21 +++++++++++++--------
4 files changed, 28 insertions(+), 13 deletions(-)
diff --git a/app/jobs/update_whois_record_job.rb b/app/jobs/update_whois_record_job.rb
index 39abeeb9c..b7edb1fdd 100644
--- a/app/jobs/update_whois_record_job.rb
+++ b/app/jobs/update_whois_record_job.rb
@@ -1,10 +1,16 @@
class UpdateWhoisRecordJob < Que::Job
- def run(ids, type)
- ids.each do |id|
- record = WhoisRecord.find_by(id: id)
- return unless record
- record.save
+ def run(ids, type)
+ klass = case type
+ when 'reserved'then ReservedDomain
+ when 'blocked' then BlockedDomain
+ else Domain
+ end
+
+ ids.each do |id|
+ record = klass.find_by(id: id)
+ next unless record
+ record.update_whois_record
end
end
end
\ No newline at end of file
diff --git a/app/models/blocked_domain.rb b/app/models/blocked_domain.rb
index a25e1ff6a..079926512 100644
--- a/app/models/blocked_domain.rb
+++ b/app/models/blocked_domain.rb
@@ -24,6 +24,8 @@ class BlockedDomain < ActiveRecord::Base
update_whois_server
end
+ alias_method :update_whois_record, :generate_data
+
def update_whois_server
wr = Whois::Record.find_or_initialize_by(name: name)
wr.body = @body
diff --git a/app/models/reserved_domain.rb b/app/models/reserved_domain.rb
index 141fd7263..d477f2524 100644
--- a/app/models/reserved_domain.rb
+++ b/app/models/reserved_domain.rb
@@ -35,6 +35,8 @@ class ReservedDomain < ActiveRecord::Base
update_whois_server
end
+ alias_method :update_whois_record, :generate_data
+
def update_whois_server
wr = Whois::Record.find_or_initialize_by(name: name)
wr.body = @body
diff --git a/lib/tasks/whois.rake b/lib/tasks/whois.rake
index afd4cd62e..c8c3ba2a1 100644
--- a/lib/tasks/whois.rake
+++ b/lib/tasks/whois.rake
@@ -3,18 +3,23 @@ namespace :whois do
task regenerate: :environment do
start = Time.zone.now.to_f
- @i = 0
print "-----> Regenerate Registry whois_records table and sync with whois server..."
ActiveRecord::Base.uncached do
- puts "\n#{@i}"
- Domain.included.find_in_batches(batch_size: 10000) do |batch|
- batch.map(&:update_whois_record)
- puts(@i += 10000)
- GC.start
+
+ print "\n-----> Update domains whois_records"
+ Domain.find_in_batches.each do |group|
+ UpdateWhoisRecordJob.enqueue group.map(&:id), 'domain'
end
- GC.start
- UpdateWhoisRecordJob.enqueue WhoisRecord.find_each.map(&:id), 'domain'
+ print "\n-----> Update blocked domains whois_records"
+ BlockedDomain.find_in_batches.each do |group|
+ UpdateWhoisRecordJob.enqueue group.map(&:id), 'blocked'
+ end
+
+ print "\n-----> Update reserved domains whois_records"
+ ReservedDomain.find_in_batches.each do |group|
+ UpdateWhoisRecordJob.enqueue group.map(&:id), 'reserved'
+ end
end
puts "\n-----> all done in #{(Time.zone.now.to_f - start).round(2)} seconds"
From da2f30f8a9c95c6254798452ff8461d783353d37 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Thu, 28 Jan 2016 13:10:32 +0200
Subject: [PATCH 56/69] Story#109590460 - fix ruby bug in comparing with regexp
---
app/models/epp/contact.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/models/epp/contact.rb b/app/models/epp/contact.rb
index 5f0a7b209..3526cd463 100644
--- a/app/models/epp/contact.rb
+++ b/app/models/epp/contact.rb
@@ -165,7 +165,7 @@ class Epp::Contact < Contact
org_priv = %w(org priv).freeze
if ident_country_code.blank? && org_priv.include?(ident_type) && org_priv.include?(ident_frame.attr('type'))
at.merge!(ident_country_code: ident_frame.attr('cc'), ident_type: ident_frame.attr('type'))
- elsif ident_type == "birthday" && ident !=~ /\d{4}-\d{2}-\d{2}/ && (Date.parse(ident) rescue false)
+ elsif ident_type == "birthday" && ident[/\A\d{4}-\d{2}-\d{2}\z/] && (Date.parse(ident) rescue false)
at.merge!(ident: ident_frame.text)
at.merge!(ident_country_code: ident_frame.attr('cc')) if ident_frame.attr('cc').present?
elsif ident_type.blank? && ident_country_code.blank?
From f1d4d1f5522d69e2efdfa8059728b05485932d2a Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Thu, 28 Jan 2016 14:39:39 +0200
Subject: [PATCH 57/69] Story#109590460 - fix
---
app/models/epp/contact.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/models/epp/contact.rb b/app/models/epp/contact.rb
index 3526cd463..54806b88d 100644
--- a/app/models/epp/contact.rb
+++ b/app/models/epp/contact.rb
@@ -165,7 +165,7 @@ class Epp::Contact < Contact
org_priv = %w(org priv).freeze
if ident_country_code.blank? && org_priv.include?(ident_type) && org_priv.include?(ident_frame.attr('type'))
at.merge!(ident_country_code: ident_frame.attr('cc'), ident_type: ident_frame.attr('type'))
- elsif ident_type == "birthday" && ident[/\A\d{4}-\d{2}-\d{2}\z/] && (Date.parse(ident) rescue false)
+ elsif ident_type == "birthday" && !ident[/\A\d{4}-\d{2}-\d{2}\z/] && (Date.parse(ident) rescue false)
at.merge!(ident: ident_frame.text)
at.merge!(ident_country_code: ident_frame.attr('cc')) if ident_frame.attr('cc').present?
elsif ident_type.blank? && ident_country_code.blank?
From 205b837121066c85c7e77cadc0dff9b83285a7ad Mon Sep 17 00:00:00 2001
From: Stas
Date: Sat, 30 Jan 2016 15:32:14 +0200
Subject: [PATCH 58/69] 111237776-delete_update_prohibited_in_renew
---
app/models/epp/domain.rb | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/models/epp/domain.rb b/app/models/epp/domain.rb
index 15e16163a..596289bf1 100644
--- a/app/models/epp/domain.rb
+++ b/app/models/epp/domain.rb
@@ -590,6 +590,7 @@ class Epp::Domain < Domain
statuses.delete(DomainStatus::SERVER_HOLD)
statuses.delete(DomainStatus::EXPIRED)
+ statuses.delete(DomainStatus::SERVER_UPDATE_PROHIBITED)
save
end
From dd881c45684bf36d7af19bea1890d0ffc5fbe0d6 Mon Sep 17 00:00:00 2001
From: Stas
Date: Mon, 1 Feb 2016 14:48:51 +0200
Subject: [PATCH 59/69] 111237776-condition_added
---
app/models/epp/domain.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/models/epp/domain.rb b/app/models/epp/domain.rb
index 596289bf1..3f32ce6d5 100644
--- a/app/models/epp/domain.rb
+++ b/app/models/epp/domain.rb
@@ -8,7 +8,7 @@ class Epp::Domain < Domain
before_validation :manage_permissions
def manage_permissions
return if is_admin # this bad hack for 109086524, refactor later
- return true if is_transfer
+ return true if is_transfer || is_renewal
return unless update_prohibited? || delete_prohibited?
add_epp_error('2304', nil, nil, I18n.t(:object_status_prohibits_operation))
false
From 3e929a895c73818d6a0052ffe9ce4f4c17f9be58 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Wed, 3 Feb 2016 11:26:55 +0200
Subject: [PATCH 60/69] Story#112965483 - skip generating whoises for reserved
and blocked domains if domain exists
---
app/models/blocked_domain.rb | 2 ++
app/models/reserved_domain.rb | 2 ++
2 files changed, 4 insertions(+)
diff --git a/app/models/blocked_domain.rb b/app/models/blocked_domain.rb
index 079926512..9f2b62aee 100644
--- a/app/models/blocked_domain.rb
+++ b/app/models/blocked_domain.rb
@@ -19,6 +19,8 @@ class BlockedDomain < ActiveRecord::Base
end
def generate_data
+ next if Domain.where(name: name).any?
+
@json = generate_json
@body = generate_body
update_whois_server
diff --git a/app/models/reserved_domain.rb b/app/models/reserved_domain.rb
index d477f2524..4695b0bcd 100644
--- a/app/models/reserved_domain.rb
+++ b/app/models/reserved_domain.rb
@@ -30,6 +30,8 @@ class ReservedDomain < ActiveRecord::Base
end
def generate_data
+ next if Domain.where(name: name).any?
+
@json = generate_json
@body = generate_body
update_whois_server
From 2fea2975f6c778071634b5103dffc1f6c13c1892 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Wed, 3 Feb 2016 11:35:26 +0200
Subject: [PATCH 61/69] Story#112965483 - skip removing whoises for reserved
and blocked domains if domain exists
---
app/models/blocked_domain.rb | 2 ++
app/models/reserved_domain.rb | 2 ++
2 files changed, 4 insertions(+)
diff --git a/app/models/blocked_domain.rb b/app/models/blocked_domain.rb
index 9f2b62aee..a52f80248 100644
--- a/app/models/blocked_domain.rb
+++ b/app/models/blocked_domain.rb
@@ -48,6 +48,8 @@ class BlockedDomain < ActiveRecord::Base
end
def remove_data
+ next if Domain.where(name: name).any?
+
Whois::Record.where(name: name).delete_all
end
end
diff --git a/app/models/reserved_domain.rb b/app/models/reserved_domain.rb
index 4695b0bcd..070d9fca8 100644
--- a/app/models/reserved_domain.rb
+++ b/app/models/reserved_domain.rb
@@ -59,6 +59,8 @@ class ReservedDomain < ActiveRecord::Base
end
def remove_data
+ next if Domain.where(name: name).any?
+
Whois::Record.where(name: name).delete_all
end
From 54c86e15a32c14eb8a1bac70c264ca462efc4e7d Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Wed, 3 Feb 2016 12:20:42 +0200
Subject: [PATCH 62/69] Story#112965483 - we need to return from method, no
iteration here
---
app/models/blocked_domain.rb | 4 ++--
app/models/reserved_domain.rb | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/app/models/blocked_domain.rb b/app/models/blocked_domain.rb
index a52f80248..f5ca0371c 100644
--- a/app/models/blocked_domain.rb
+++ b/app/models/blocked_domain.rb
@@ -19,7 +19,7 @@ class BlockedDomain < ActiveRecord::Base
end
def generate_data
- next if Domain.where(name: name).any?
+ return if Domain.where(name: name).any?
@json = generate_json
@body = generate_body
@@ -48,7 +48,7 @@ class BlockedDomain < ActiveRecord::Base
end
def remove_data
- next if Domain.where(name: name).any?
+ return if Domain.where(name: name).any?
Whois::Record.where(name: name).delete_all
end
diff --git a/app/models/reserved_domain.rb b/app/models/reserved_domain.rb
index 070d9fca8..c5d0cf9f2 100644
--- a/app/models/reserved_domain.rb
+++ b/app/models/reserved_domain.rb
@@ -30,7 +30,7 @@ class ReservedDomain < ActiveRecord::Base
end
def generate_data
- next if Domain.where(name: name).any?
+ return if Domain.where(name: name).any?
@json = generate_json
@body = generate_body
@@ -59,7 +59,7 @@ class ReservedDomain < ActiveRecord::Base
end
def remove_data
- next if Domain.where(name: name).any?
+ return if Domain.where(name: name).any?
Whois::Record.where(name: name).delete_all
end
From 2ab5d8500a75b755de77037cd0c3fa574df168de Mon Sep 17 00:00:00 2001
From: Stas
Date: Wed, 3 Feb 2016 15:55:39 +0200
Subject: [PATCH 63/69] 111396946-views_methods
---
.../admin/blocked_domains_controller.rb | 46 +++++++++---
.../admin/reserved_domains_controller.rb | 47 +++++++++++-
app/models/reserved_domain.rb | 7 +-
app/views/admin/blocked_domains/_form.haml | 17 +++++
app/views/admin/blocked_domains/edit.haml | 3 +
app/views/admin/blocked_domains/index.haml | 73 +++++++++++++++++--
app/views/admin/blocked_domains/new.haml | 3 +
app/views/admin/reserved_domains/_form.haml | 3 +-
app/views/admin/reserved_domains/edit.haml | 3 +
app/views/admin/reserved_domains/index.haml | 4 +-
app/views/admin/reserved_domains/new.haml | 2 +-
config/locales/en.yml | 3 +
config/routes.rb | 12 ++-
13 files changed, 194 insertions(+), 29 deletions(-)
create mode 100644 app/views/admin/blocked_domains/_form.haml
create mode 100644 app/views/admin/blocked_domains/edit.haml
create mode 100644 app/views/admin/blocked_domains/new.haml
create mode 100644 app/views/admin/reserved_domains/edit.haml
diff --git a/app/controllers/admin/blocked_domains_controller.rb b/app/controllers/admin/blocked_domains_controller.rb
index 2df3f90d9..c30b2dfb8 100644
--- a/app/controllers/admin/blocked_domains_controller.rb
+++ b/app/controllers/admin/blocked_domains_controller.rb
@@ -2,22 +2,46 @@ class Admin::BlockedDomainsController < AdminController
load_and_authorize_resource
def index
- bd = BlockedDomain.first_or_initialize
- @blocked_domains = bd.names.join("\n")
+
+ params[:q] ||= {}
+ domains = BlockedDomain.all
+ @q = domains.search(params[:q])
+ @domains = @q.result.page(params[:page])
+ @domains = @domains.per(params[:results_per_page]) if params[:results_per_page].to_i > 0
+
+ end
+
+ def new
+
+ @domain = BlockedDomain.new
+
end
def create
- names = params[:blocked_domains].split("\r\n").map(&:strip)
- bd = BlockedDomain.first_or_create
+ abort
- if bd.update(names: names)
- flash[:notice] = I18n.t('record_updated')
- redirect_to :back
+ end
+
+ def delete
+
+ if BlockedDomain.find(params[:id]).destroy
+ flash[:notice] = I18n.t('domain_deleted')
+ redirect_to admin_blocked_domains_path
else
- @blocked_domains = params[:blocked_domains]
- flash.now[:alert] = I18n.t('failed_to_update_record')
- render :index
+ flash.now[:alert] = I18n.t('failed_to_delete_domain')
+ redirect_to admin_blocked_domains_path
end
end
-end
+
+
+ def blocked_params
+ params.require(:blocked_domain).permit(:name)
+ end
+
+ private
+
+ def set_domain
+ @domain = BlockedDomain.find(params[:id])
+ end
+end
\ No newline at end of file
diff --git a/app/controllers/admin/reserved_domains_controller.rb b/app/controllers/admin/reserved_domains_controller.rb
index 4cb7ba51f..b0af2fb9f 100644
--- a/app/controllers/admin/reserved_domains_controller.rb
+++ b/app/controllers/admin/reserved_domains_controller.rb
@@ -1,5 +1,6 @@
class Admin::ReservedDomainsController < AdminController
load_and_authorize_resource
+ before_action :set_domain, only: [:edit, :update]
def index
@@ -16,10 +17,52 @@ class Admin::ReservedDomainsController < AdminController
end
def edit
- authorize! :update, ReservedDomain
+ end
+
+ def create
+
+ @domain = ReservedDomain.new(reserved_params)
+
+ if @domain.save
+ flash[:notice] = I18n.t('domain_added')
+ redirect_to admin_reserved_domains_path
+ else
+ flash.now[:alert] = I18n.t('failed_to_add_domain')
+ render 'new'
+ end
+
+ end
+
+ def update
+
+ if @domain.update(reserved_params)
+ flash[:notice] = I18n.t('domain_updated')
+ else
+ flash.now[:alert] = I18n.t('failed_to_update_domain')
+ end
+ render 'edit'
+
end
def delete
- authorize! :delete, ReservedDomain
+
+ if ReservedDomain.find(params[:id]).destroy
+ flash[:notice] = I18n.t('domain_deleted')
+ redirect_to admin_reserved_domains_path
+ else
+ flash.now[:alert] = I18n.t('failed_to_delete_domain')
+ redirect_to admin_reserved_domains_path
+ end
+
+ end
+
+ private
+
+ def reserved_params
+ params.require(:reserved_domain).permit(:name, :password)
+ end
+
+ def set_domain
+ @domain = ReservedDomain.find(params[:id])
end
end
diff --git a/app/models/reserved_domain.rb b/app/models/reserved_domain.rb
index 141fd7263..e141ab7ee 100644
--- a/app/models/reserved_domain.rb
+++ b/app/models/reserved_domain.rb
@@ -22,7 +22,12 @@ class ReservedDomain < ActiveRecord::Base
def fill_empty_passwords
- self.password = SecureRandom.hex unless self.password
+
+ if self.password.empty?
+
+ self.password = SecureRandom.hex
+
+ end
end
def name= val
diff --git a/app/views/admin/blocked_domains/_form.haml b/app/views/admin/blocked_domains/_form.haml
new file mode 100644
index 000000000..996d52843
--- /dev/null
+++ b/app/views/admin/blocked_domains/_form.haml
@@ -0,0 +1,17 @@
+= form_for([:admin, @domain], html: {class: 'form-horizontal'}) do |f|
+ = render 'shared/full_errors', object: @domain
+
+ .row
+ .col-md-8
+ .panel.panel-default
+ .panel-heading.clearfix
+ .pull-left= t(:general)
+ .panel-body
+ .form-group
+ .col-md-4.control-label
+ = f.label :name
+ .col-md-7
+ = f.text_field(:name, class: 'form-control')
+ .row
+ .col-md-8.text-right
+ = button_tag(t(:save), class: 'btn btn-primary')
diff --git a/app/views/admin/blocked_domains/edit.haml b/app/views/admin/blocked_domains/edit.haml
new file mode 100644
index 000000000..51d77f0cc
--- /dev/null
+++ b/app/views/admin/blocked_domains/edit.haml
@@ -0,0 +1,3 @@
+= render 'shared/title', name: t(:edit_pw)
+
+= render 'form'
diff --git a/app/views/admin/blocked_domains/index.haml b/app/views/admin/blocked_domains/index.haml
index bd5660193..5accae030 100644
--- a/app/views/admin/blocked_domains/index.haml
+++ b/app/views/admin/blocked_domains/index.haml
@@ -1,10 +1,67 @@
+- content_for :actions do
+ = link_to(t(:new), new_admin_blocked_domain_path, class: 'btn btn-primary')
= render 'shared/title', name: t(:blocked_domains)
-= form_tag([:admin, :blocked_domains]) do |f|
- .row
- .col-md-12
- = text_area_tag :blocked_domains, @blocked_domains, class: 'form-control', rows: 30
- %hr
- .row
- .col-md-12.text-right
- %button.btn.btn-warning=t(:save)
+.row
+ .col-md-12
+ = search_form_for [:admin, @q], html: { style: 'margin-bottom: 0;', class: 'js-form', autocomplete: 'off' } do |f|
+ .row
+ .col-md-3
+ .form-group
+ = f.label :name
+ = f.search_field :name_matches, value: params[:q][:name_matches], class: 'form-control', placeholder: t(:name)
+ .col-md-3
+ .form-group
+ = f.label t(:created_at_from)
+ = f.search_field :created_at_gteq, value: params[:q][:created_at_gteq], class: 'form-control datepicker', placeholder: t(:created_at_from)
+ .col-md-3
+ .form-group
+ = f.label t(:created_at_until)
+ = f.search_field :created_at_lteq, value: params[:q][:created_at_lteq], class: 'form-control datepicker', placeholder: t(:created_at_until)
+ .row
+ .col-md-3
+ .form-group
+ = label_tag t(:results_per_page)
+ = text_field_tag :results_per_page, params[:results_per_page], class: 'form-control', placeholder: t(:results_per_page)
+ .col-md-3{style: 'padding-top: 25px;'}
+ %button.btn.btn-primary
+
+ %span.glyphicon.glyphicon-search
+
+ %button.btn.btn-default.js-reset-form
+ = t(:clear_fields)
+%hr
+.row
+ .col-md-12
+ .table-responsive
+ %table.table.table-hover.table-bordered.table-condensed
+ %thead
+ %tr
+ %th{class: 'col-xs-2'}
+ = sort_link(@q, 'name')
+ %th{class: 'col-xs-2'}
+ = sort_link(@q, 'created_at', t(:created_at))
+ %th{class: 'col-xs-2'}
+ = sort_link(@q, 'updated_at', t(:updated_at))
+ %th{class: 'col-xs-2'}
+ = t(:actions)
+ %tbody
+ - @domains.each do |x|
+ %tr
+ %td= x.name
+ %td= l(x.created_at, format: :short)
+ %td= l(x.updated_at, format: :short)
+ %td
+ = link_to(t(:delete), delete_admin_blocked_domain_path(id: x.id),
+ data: { confirm: t(:are_you_sure) }, class: 'btn btn-danger btn-xs')
+.row
+ .col-md-6
+ = paginate @domains
+ .col-md-6.text-right
+ .pagination
+ = t(:result_count, count: @domains.total_count)
+
+:coffee
+ $(".js-reset-form").on "click", (e) ->
+ e.preventDefault();
+ window.location = "#{admin_blocked_domains_path}"
diff --git a/app/views/admin/blocked_domains/new.haml b/app/views/admin/blocked_domains/new.haml
new file mode 100644
index 000000000..4461eea40
--- /dev/null
+++ b/app/views/admin/blocked_domains/new.haml
@@ -0,0 +1,3 @@
+= render 'shared/title', name: t(:add_blocked_domain)
+
+= render 'form'
diff --git a/app/views/admin/reserved_domains/_form.haml b/app/views/admin/reserved_domains/_form.haml
index bfbacbfd9..2ba2431e9 100644
--- a/app/views/admin/reserved_domains/_form.haml
+++ b/app/views/admin/reserved_domains/_form.haml
@@ -11,13 +11,12 @@
.col-md-4.control-label
= f.label :name
.col-md-7
- = f.text_field(:name, class: 'form-control')
+ = f.text_field(:name, class: 'form-control', disabled: !f.object.new_record?)
.form-group
.col-md-4.control-label
= f.label :password
.col-md-7
= f.text_field(:password, class: 'form-control')
-%hr
.row
.col-md-8.text-right
= button_tag(t(:save), class: 'btn btn-primary')
diff --git a/app/views/admin/reserved_domains/edit.haml b/app/views/admin/reserved_domains/edit.haml
new file mode 100644
index 000000000..51d77f0cc
--- /dev/null
+++ b/app/views/admin/reserved_domains/edit.haml
@@ -0,0 +1,3 @@
+= render 'shared/title', name: t(:edit_pw)
+
+= render 'form'
diff --git a/app/views/admin/reserved_domains/index.haml b/app/views/admin/reserved_domains/index.haml
index 6ac65d14b..06825b624 100644
--- a/app/views/admin/reserved_domains/index.haml
+++ b/app/views/admin/reserved_domains/index.haml
@@ -55,10 +55,10 @@
%td= l(x.created_at, format: :short)
%td= l(x.updated_at, format: :short)
%td
- = link_to(t(:edit), edit_admin_reserved_domain_path(id: x.id),
+ = link_to(t(:edit_pw), edit_admin_reserved_domain_path(id: x.id),
class: 'btn btn-primary btn-xs')
= link_to(t(:delete), delete_admin_reserved_domain_path(id: x.id),
- class: 'btn btn-primary btn-xs')
+ data: { confirm: t(:are_you_sure) }, class: 'btn btn-danger btn-xs')
.row
.col-md-6
= paginate @domains
diff --git a/app/views/admin/reserved_domains/new.haml b/app/views/admin/reserved_domains/new.haml
index 937fdebde..cd6e189f9 100644
--- a/app/views/admin/reserved_domains/new.haml
+++ b/app/views/admin/reserved_domains/new.haml
@@ -1,3 +1,3 @@
-= render 'shared/title', name: t(:new_reserved_domain)
+= render 'shared/title', name: t(:add_reserved_domain)
= render 'form'
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 2cc8b1387..bad2571e2 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -930,3 +930,6 @@ en:
if_auth_info_is_left_empty_it_will_be_auto_generated: 'If auth info is left empty, it will be auto generated.'
each_domain_name_must_end_with_colon_sign: 'Each domain name must end with colon (:) sign.'
expiration_remind_subject: 'The %{name} domain has expired'
+ add_reserved_domain: 'Add domain to reserved list'
+ add_blocked_domain: 'Add domain to blocked list'
+ edit_pw: 'Edit Pw'
\ No newline at end of file
diff --git a/config/routes.rb b/config/routes.rb
index 9dd7faf7d..86bdccaa9 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -204,8 +204,16 @@ Rails.application.routes.draw do
resources :settings
- resources :blocked_domains
- resources :reserved_domains
+ resources :blocked_domains do
+ member do
+ get 'delete'
+ end
+ end
+ resources :reserved_domains do
+ member do
+ get 'delete'
+ end
+ end
resources :registrars do
resources :api_users
From f31db65d2cd6562a671d7abe275d530a81e53b36 Mon Sep 17 00:00:00 2001
From: Stas
Date: Wed, 3 Feb 2016 17:17:38 +0200
Subject: [PATCH 64/69] 111396946-validates
---
app/controllers/admin/blocked_domains_controller.rb | 12 ++++++++++--
app/controllers/admin/reserved_domains_controller.rb | 6 +++---
app/models/blocked_domain.rb | 1 +
app/models/reserved_domain.rb | 3 +++
app/views/admin/reserved_domains/_form.haml | 2 +-
config/locales/en.yml | 3 ++-
6 files changed, 20 insertions(+), 7 deletions(-)
diff --git a/app/controllers/admin/blocked_domains_controller.rb b/app/controllers/admin/blocked_domains_controller.rb
index c30b2dfb8..a21e01fd1 100644
--- a/app/controllers/admin/blocked_domains_controller.rb
+++ b/app/controllers/admin/blocked_domains_controller.rb
@@ -19,7 +19,15 @@ class Admin::BlockedDomainsController < AdminController
def create
- abort
+ @domain = BlockedDomain.new(blocked_domain_params)
+
+ if @domain.save
+ flash[:notice] = I18n.t('domain_added')
+ redirect_to admin_blocked_domains_path
+ else
+ flash.now[:alert] = I18n.t('failed_to_add_domain')
+ render 'new'
+ end
end
@@ -35,7 +43,7 @@ class Admin::BlockedDomainsController < AdminController
end
- def blocked_params
+ def blocked_domain_params
params.require(:blocked_domain).permit(:name)
end
diff --git a/app/controllers/admin/reserved_domains_controller.rb b/app/controllers/admin/reserved_domains_controller.rb
index b0af2fb9f..319a6275c 100644
--- a/app/controllers/admin/reserved_domains_controller.rb
+++ b/app/controllers/admin/reserved_domains_controller.rb
@@ -21,7 +21,7 @@ class Admin::ReservedDomainsController < AdminController
def create
- @domain = ReservedDomain.new(reserved_params)
+ @domain = ReservedDomain.new(reserved_domain_params)
if @domain.save
flash[:notice] = I18n.t('domain_added')
@@ -35,7 +35,7 @@ class Admin::ReservedDomainsController < AdminController
def update
- if @domain.update(reserved_params)
+ if @domain.update(reserved_domain_params)
flash[:notice] = I18n.t('domain_updated')
else
flash.now[:alert] = I18n.t('failed_to_update_domain')
@@ -58,7 +58,7 @@ class Admin::ReservedDomainsController < AdminController
private
- def reserved_params
+ def reserved_domain_params
params.require(:reserved_domain).permit(:name, :password)
end
diff --git a/app/models/blocked_domain.rb b/app/models/blocked_domain.rb
index 2a646a74f..e433aae85 100644
--- a/app/models/blocked_domain.rb
+++ b/app/models/blocked_domain.rb
@@ -1,5 +1,6 @@
class BlockedDomain < ActiveRecord::Base
include Versions
+validates :name, domain_name: true, uniqueness: true
after_initialize -> { self.names = [] if names.nil? }
end
diff --git a/app/models/reserved_domain.rb b/app/models/reserved_domain.rb
index e141ab7ee..718d90bcf 100644
--- a/app/models/reserved_domain.rb
+++ b/app/models/reserved_domain.rb
@@ -3,6 +3,9 @@ class ReservedDomain < ActiveRecord::Base
before_save :fill_empty_passwords
before_save :generate_data
before_destroy :remove_data
+ validates :name, domain_name: true, uniqueness: true
+
+
class << self
diff --git a/app/views/admin/reserved_domains/_form.haml b/app/views/admin/reserved_domains/_form.haml
index 2ba2431e9..ec7492659 100644
--- a/app/views/admin/reserved_domains/_form.haml
+++ b/app/views/admin/reserved_domains/_form.haml
@@ -16,7 +16,7 @@
.col-md-4.control-label
= f.label :password
.col-md-7
- = f.text_field(:password, class: 'form-control')
+ = f.text_field(:password, placeholder: t(:optional), class: 'form-control')
.row
.col-md-8.text-right
= button_tag(t(:save), class: 'btn btn-primary')
diff --git a/config/locales/en.yml b/config/locales/en.yml
index bad2571e2..2e36ec69d 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -932,4 +932,5 @@ en:
expiration_remind_subject: 'The %{name} domain has expired'
add_reserved_domain: 'Add domain to reserved list'
add_blocked_domain: 'Add domain to blocked list'
- edit_pw: 'Edit Pw'
\ No newline at end of file
+ edit_pw: 'Edit Pw'
+ optional: 'Optional'
\ No newline at end of file
From 0ce6b84ddffa9063e78c17eb137324f28ee76fe6 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Thu, 4 Feb 2016 15:54:58 +0200
Subject: [PATCH 65/69] Story#112050051 - fix invoice sorting in admin
---
app/controllers/admin/invoices_controller.rb | 2 +-
app/views/admin/invoices/index.haml | 8 ++++----
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/app/controllers/admin/invoices_controller.rb b/app/controllers/admin/invoices_controller.rb
index 5aa6d4438..709dc866a 100644
--- a/app/controllers/admin/invoices_controller.rb
+++ b/app/controllers/admin/invoices_controller.rb
@@ -23,7 +23,7 @@ class Admin::InvoicesController < AdminController
def index
@q = Invoice.includes(:account_activity).search(params[:q])
- @q.sorts = 'id desc' if @q.sorts.empty?
+ @q.sorts = 'number desc' if @q.sorts.empty?
@invoices = @q.result.page(params[:page])
end
diff --git a/app/views/admin/invoices/index.haml b/app/views/admin/invoices/index.haml
index 75b6285a4..f2954f927 100644
--- a/app/views/admin/invoices/index.haml
+++ b/app/views/admin/invoices/index.haml
@@ -8,13 +8,13 @@
%thead
%tr
%th{class: 'col-xs-3'}
- = sort_link(@q, 'invoice')
+ = sort_link(@q, :number)
%th{class: 'col-xs-3'}
- = sort_link(@q, 'buyer')
+ = sort_link(@q, :buyer_name, "Buyer")
%th{class: 'col-xs-3'}
- = sort_link(@q, 'due_date')
+ = sort_link(@q, :due_date)
%th{class: 'col-xs-3'}
- = sort_link(@q, 'receipt_date')
+ = sort_link(@q, :account_activity_created_at, "Receipt date")
%tbody
- @invoices.each do |x|
%tr
From db819447c6829158ee773f1468f64756686a7391 Mon Sep 17 00:00:00 2001
From: Stas
Date: Thu, 4 Feb 2016 17:24:26 +0200
Subject: [PATCH 66/69] 111396946-order_and_style_changes
---
app/controllers/admin/blocked_domains_controller.rb | 2 +-
app/controllers/admin/reserved_domains_controller.rb | 2 +-
app/views/admin/blocked_domains/index.haml | 6 +++---
3 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/app/controllers/admin/blocked_domains_controller.rb b/app/controllers/admin/blocked_domains_controller.rb
index a21e01fd1..49cc65675 100644
--- a/app/controllers/admin/blocked_domains_controller.rb
+++ b/app/controllers/admin/blocked_domains_controller.rb
@@ -4,7 +4,7 @@ class Admin::BlockedDomainsController < AdminController
def index
params[:q] ||= {}
- domains = BlockedDomain.all
+ domains = BlockedDomain.all.order(:name)
@q = domains.search(params[:q])
@domains = @q.result.page(params[:page])
@domains = @domains.per(params[:results_per_page]) if params[:results_per_page].to_i > 0
diff --git a/app/controllers/admin/reserved_domains_controller.rb b/app/controllers/admin/reserved_domains_controller.rb
index 319a6275c..7de8d9891 100644
--- a/app/controllers/admin/reserved_domains_controller.rb
+++ b/app/controllers/admin/reserved_domains_controller.rb
@@ -5,7 +5,7 @@ class Admin::ReservedDomainsController < AdminController
def index
params[:q] ||= {}
- domains = ReservedDomain.all
+ domains = ReservedDomain.all.order(:name)
@q = domains.search(params[:q])
@domains = @q.result.page(params[:page])
@domains = @domains.per(params[:results_per_page]) if params[:results_per_page].to_i > 0
diff --git a/app/views/admin/blocked_domains/index.haml b/app/views/admin/blocked_domains/index.haml
index 5accae030..ab5f79bc7 100644
--- a/app/views/admin/blocked_domains/index.haml
+++ b/app/views/admin/blocked_domains/index.haml
@@ -43,7 +43,7 @@
= sort_link(@q, 'created_at', t(:created_at))
%th{class: 'col-xs-2'}
= sort_link(@q, 'updated_at', t(:updated_at))
- %th{class: 'col-xs-2'}
+ %th{class: 'col-xs-1'}
= t(:actions)
%tbody
- @domains.each do |x|
@@ -51,9 +51,9 @@
%td= x.name
%td= l(x.created_at, format: :short)
%td= l(x.updated_at, format: :short)
- %td
+ %td{class: 'col-xs-1'}
= link_to(t(:delete), delete_admin_blocked_domain_path(id: x.id),
- data: { confirm: t(:are_you_sure) }, class: 'btn btn-danger btn-xs')
+ data: { confirm: t(:are_you_sure) }, class: 'btn btn-danger btn-xs center-block')
.row
.col-md-6
= paginate @domains
From 6984bb9baed74f41b3887daba92e7acaf18cb283 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Thu, 4 Feb 2016 17:53:54 +0200
Subject: [PATCH 67/69] Story#112993395 - in reserved domains we are using
columns, not hash
---
app/models/domain.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/models/domain.rb b/app/models/domain.rb
index d0f8d6260..9da57e27a 100644
--- a/app/models/domain.rb
+++ b/app/models/domain.rb
@@ -93,7 +93,7 @@ class Domain < ActiveRecord::Base
def update_reserved_domains
return unless in_reserved_list?
rd = ReservedDomain.by_domain(name).first
- rd.names[name] = SecureRandom.hex
+ rd.password = SecureRandom.hex
rd.save
end
From 2650ca1922f77ebba9af91e3d622df3cd9855e78 Mon Sep 17 00:00:00 2001
From: Stas
Date: Thu, 4 Feb 2016 17:59:48 +0200
Subject: [PATCH 68/69] 111396946-style_change
---
app/views/admin/blocked_domains/index.haml | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/app/views/admin/blocked_domains/index.haml b/app/views/admin/blocked_domains/index.haml
index ab5f79bc7..5f6ac69d0 100644
--- a/app/views/admin/blocked_domains/index.haml
+++ b/app/views/admin/blocked_domains/index.haml
@@ -51,9 +51,10 @@
%td= x.name
%td= l(x.created_at, format: :short)
%td= l(x.updated_at, format: :short)
- %td{class: 'col-xs-1'}
- = link_to(t(:delete), delete_admin_blocked_domain_path(id: x.id),
- data: { confirm: t(:are_you_sure) }, class: 'btn btn-danger btn-xs center-block')
+ %td
+ %div{class: 'text-center'}
+ = link_to(t(:delete), delete_admin_blocked_domain_path(id: x.id),
+ data: { confirm: t(:are_you_sure) }, class: 'btn btn-danger btn-xs')
.row
.col-md-6
= paginate @domains
From db6f78ede42a4513f661f5b6a16881faf7b15b3c Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Mon, 8 Feb 2016 10:36:22 +0200
Subject: [PATCH 69/69] Story#112050051 - extend ransack to sort invoices by
custom scopes
---
app/models/invoice.rb | 12 +++++++++
app/views/admin/invoices/index.haml | 4 +--
config/initializers/eis_ransack.rb | 40 +++++++++++++++++++++++++++++
3 files changed, 54 insertions(+), 2 deletions(-)
create mode 100644 config/initializers/eis_ransack.rb
diff --git a/app/models/invoice.rb b/app/models/invoice.rb
index 5c7dafe85..425202a4c 100644
--- a/app/models/invoice.rb
+++ b/app/models/invoice.rb
@@ -11,6 +11,18 @@ class Invoice < ActiveRecord::Base
scope :unbinded, lambda {
where('id NOT IN (SELECT invoice_id FROM account_activities where invoice_id IS NOT NULL)')
}
+ scope :all_columns, ->{select("invoices.*")}
+ scope :sort_due_date_column, ->{all_columns.select("CASE WHEN invoices.cancelled_at is not null THEN
+ (invoices.cancelled_at + interval '100 year') ELSE
+ invoices.due_date END AS sort_due_date")}
+ scope :sort_by_sort_due_date_asc, ->{sort_due_date_column.order("sort_due_date ASC")}
+ scope :sort_by_sort_due_date_desc, ->{sort_due_date_column.order("sort_due_date DESC")}
+ scope :sort_receipt_date_column, ->{all_columns.includes(:account_activity).references(:account_activity).select(%Q{
+ CASE WHEN account_activities.created_at is not null THEN account_activities.created_at
+ WHEN invoices.cancelled_at is not null THEN invoices.cancelled_at + interval '100 year'
+ ELSE NULL END AS sort_receipt_date })}
+ scope :sort_by_sort_receipt_date_asc, ->{sort_receipt_date_column.order("sort_receipt_date ASC")}
+ scope :sort_by_sort_receipt_date_desc, ->{sort_receipt_date_column.order("sort_receipt_date DESC")}
attr_accessor :billing_email
validates :billing_email, email_format: { message: :invalid }, allow_blank: true
diff --git a/app/views/admin/invoices/index.haml b/app/views/admin/invoices/index.haml
index f2954f927..4b34dba94 100644
--- a/app/views/admin/invoices/index.haml
+++ b/app/views/admin/invoices/index.haml
@@ -12,9 +12,9 @@
%th{class: 'col-xs-3'}
= sort_link(@q, :buyer_name, "Buyer")
%th{class: 'col-xs-3'}
- = sort_link(@q, :due_date)
+ = sort_link(@q, :sort_due_date, "Due date")
%th{class: 'col-xs-3'}
- = sort_link(@q, :account_activity_created_at, "Receipt date")
+ = sort_link(@q, :sort_receipt_date, "Receipt date")
%tbody
- @invoices.each do |x|
%tr
diff --git a/config/initializers/eis_ransack.rb b/config/initializers/eis_ransack.rb
new file mode 100644
index 000000000..c23791ef7
--- /dev/null
+++ b/config/initializers/eis_ransack.rb
@@ -0,0 +1,40 @@
+# A custom initializer that enables sorting via custom scopes in Ransack (like the same feature in MetaSearch)
+
+module Ransack
+ module Adapters
+ module ActiveRecord
+ class Context < ::Ransack::Context
+
+ # Allows for sorting by custom scopes
+ #
+ #
+ # Define your custom scopes in your model, e. g. sort_by_title_asc and sort_by_title_desc
+ # (The scopes would sort by some calculated column or a column added via some crazy join, etc.)
+ #
+ # In your sort links refer to the scopes like to standard fields, e. g.
+ # <%= sort_link(@q, :title, 'Crazy calculated title') %>
+ def evaluate(search, opts = {})
+ viz = Visitor.new
+ relation = @object.where(viz.accept(search.base))
+ if search.sorts.any?
+ custom_scopes = search.sorts.select do |s|
+ custom_scope_name = :"sort_by_#{s.name}_#{s.dir}"
+ relation.respond_to?(custom_scope_name)
+ end
+ attribute_scopes = search.sorts - custom_scopes
+
+ relation = relation.except(:order)
+
+ custom_scopes.each do |s|
+ custom_scope_name = :"sort_by_#{s.name}_#{s.dir}"
+ relation = relation.public_send(custom_scope_name)
+ end
+
+ relation = relation.reorder(viz.accept(attribute_scopes)) if attribute_scopes.any?
+ end
+ opts[:distinct] ? relation.distinct : relation
+ end
+ end
+ end
+ end
+end
\ No newline at end of file