From 6077f6c36d67f0d5d93dd0611c966d47aad07435 Mon Sep 17 00:00:00 2001
From: Stas
Date: Tue, 1 Dec 2015 15:21:40 +0200
Subject: [PATCH 001/196] 105842700-portal
---
.../registrant/domains_controller.rb | 40 +++++++++++-
.../registrant/registrars_controller.rb | 64 +++++++++++++++++++
.../registrant/sessions_controller.rb | 2 +
.../registrant/whois_controller.rb | 4 ++
app/views/registrant/domains/index.haml | 61 ++++++++++++++----
.../domains/partials/_admin_contacts.haml | 22 +++++++
.../registrant/domains/partials/_dnskeys.haml | 25 ++++++++
.../registrant/domains/partials/_general.haml | 32 ++++++++++
.../domains/partials/_keyrelays.haml | 20 ++++++
.../domains/partials/_legal_documents.haml | 14 ++++
.../domains/partials/_nameservers.haml | 23 +++++++
.../registrant/domains/partials/_owner.haml | 19 ++++++
.../domains/partials/_statuses.haml | 18 ++++++
.../domains/partials/_tech_contacts.haml | 22 +++++++
app/views/registrant/domains/show.haml | 24 +++++++
app/views/registrant/whois/index.haml | 4 +-
16 files changed, 378 insertions(+), 16 deletions(-)
create mode 100644 app/controllers/registrant/registrars_controller.rb
create mode 100644 app/views/registrant/domains/partials/_admin_contacts.haml
create mode 100644 app/views/registrant/domains/partials/_dnskeys.haml
create mode 100644 app/views/registrant/domains/partials/_general.haml
create mode 100644 app/views/registrant/domains/partials/_keyrelays.haml
create mode 100644 app/views/registrant/domains/partials/_legal_documents.haml
create mode 100644 app/views/registrant/domains/partials/_nameservers.haml
create mode 100644 app/views/registrant/domains/partials/_owner.haml
create mode 100644 app/views/registrant/domains/partials/_statuses.haml
create mode 100644 app/views/registrant/domains/partials/_tech_contacts.haml
create mode 100644 app/views/registrant/domains/show.haml
diff --git a/app/controllers/registrant/domains_controller.rb b/app/controllers/registrant/domains_controller.rb
index 4bba945a8..81e99cd54 100644
--- a/app/controllers/registrant/domains_controller.rb
+++ b/app/controllers/registrant/domains_controller.rb
@@ -1,5 +1,41 @@
class Registrant::DomainsController < RegistrantController
+
def index
- authorize! :view, :registrant_domains
+
+ authorize! :view, :registrant_domains
+ params[:q] ||= {}
+
+ domains = Domain.includes(:registrar, :registrant).where(registrant_id: 76246)
+
+ normalize_search_parameters do
+ @q = domains.search(params[:q])
+ @domains = @q.result.page(params[:page])
end
-end
+ @domains = @domains.per(params[:results_per_page]) if params[:results_per_page].to_i > 0
+ end
+
+ def show
+ @domain = Domain.find(params[:id])
+ @domain.valid?
+ end
+
+ def set_domain
+ @domain = Domain.find(params[:id])
+ end
+
+ def normalize_search_parameters
+
+ ca_cache = params[:q][:valid_to_lteq]
+ begin
+ end_time = params[:q][:valid_to_lteq].try(:to_date)
+ params[:q][:valid_to_lteq] = end_time.try(:end_of_day)
+ rescue
+ logger.warn('Invalid date')
+ end
+
+ yield
+
+ params[:q][:valid_to_lteq] = ca_cache
+ end
+
+end
\ No newline at end of file
diff --git a/app/controllers/registrant/registrars_controller.rb b/app/controllers/registrant/registrars_controller.rb
new file mode 100644
index 000000000..ca34ed176
--- /dev/null
+++ b/app/controllers/registrant/registrars_controller.rb
@@ -0,0 +1,64 @@
+class Registrar::RegistrarsController < RegistrartController
+ load_and_authorize_resource
+
+
+ def search
+ render json: Registrar.search_by_query(params[:q])
+ end
+
+ def index
+ @q = Registrar.ordered.search(params[:q])
+ @registrars = @q.result.page(params[:page])
+ end
+
+ def new
+ @registrar = Registrar.new
+ end
+
+ def create
+ @registrar = Registrar.new(registrar_params)
+
+ if @registrar.save
+ flash[:notice] = I18n.t('registrar_added')
+ redirect_to [:admin, @registrar]
+ else
+ flash.now[:alert] = I18n.t('failed_to_add_registrar')
+ render 'new'
+ end
+ end
+
+ def edit; end
+
+ def update
+ if @registrar.update(registrar_params)
+ flash[:notice] = I18n.t('registrar_updated')
+ redirect_to [:admin, @registrar]
+ else
+ flash.now[:alert] = I18n.t('failed_to_update_registrar')
+ render 'edit'
+ end
+ end
+
+ def destroy
+ if @registrar.destroy
+ flash[:notice] = I18n.t('registrar_deleted')
+ redirect_to admin_registrars_path
+ else
+ flash.now[:alert] = I18n.t('failed_to_delete_registrar')
+ render 'show'
+ end
+ end
+
+ private
+
+ def set_registrar
+ @registrar = Registrar.find(params[:id])
+ end
+
+ def registrar_params
+ params.require(:registrar).permit(
+ :name, :reg_no, :vat_no, :street, :city, :state, :zip, :billing_address,
+ :country_code, :email, :phone, :billing_email, :code
+ )
+ end
+end
diff --git a/app/controllers/registrant/sessions_controller.rb b/app/controllers/registrant/sessions_controller.rb
index f0a292137..4acdbc613 100644
--- a/app/controllers/registrant/sessions_controller.rb
+++ b/app/controllers/registrant/sessions_controller.rb
@@ -2,6 +2,8 @@ class Registrant::SessionsController < Devise::SessionsController
layout 'registrant/application'
def login
+ @user = RegistrantUser.find_by_username('registrar1')
+ sign_in(@user, event: :authentication)
end
# rubocop: disable Metrics/AbcSize
diff --git a/app/controllers/registrant/whois_controller.rb b/app/controllers/registrant/whois_controller.rb
index 71d29dd76..b44a0bb67 100644
--- a/app/controllers/registrant/whois_controller.rb
+++ b/app/controllers/registrant/whois_controller.rb
@@ -1,5 +1,9 @@
class Registrant::WhoisController < RegistrantController
def index
authorize! :view, :registrant_whois
+
+ if params[:domain_name].present?
+ @domain = WhoisRecord.find_by(name: params[:domain_name]);
+ end
end
end
diff --git a/app/views/registrant/domains/index.haml b/app/views/registrant/domains/index.haml
index 8b71cefca..5ce325efe 100644
--- a/app/views/registrant/domains/index.haml
+++ b/app/views/registrant/domains/index.haml
@@ -1,5 +1,42 @@
= render 'shared/title', name: t(:domains)
+.row
+ .col-md-12
+ = search_form_for [:registrant, @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(:registrant_ident)
+ = f.search_field :registrant_ident_eq, class: 'form-control', placeholder: t(:registrant_ident)
+ .col-md-3
+ .form-group
+ = f.label t(:nameserver_hostname)
+ = f.search_field :nameservers_hostname_eq, class: 'form-control', placeholder: t(:nameserver_hostname)
+ .row
+ .col-md-3
+ .form-group
+ = f.label t(:valid_to_from)
+ = f.search_field :valid_to_gteq, value: params[:q][:valid_to_gteq], class: 'form-control datepicker', placeholder: t(:valid_to_from)
+ .col-md-3
+ .form-group
+ = f.label t(:valid_to_until)
+ = f.search_field :valid_to_lteq, value: params[:q][:valid_to_lteq], class: 'form-control datepicker', placeholder: t(:valid_to_until)
+ .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
@@ -8,20 +45,20 @@
%thead
%tr
%th{class: 'col-xs-2'}
- = t(:name)
+ = sort_link(@q, 'name')
%th{class: 'col-xs-2'}
- = t(:registrant)
+ = sort_link(@q, 'registrant_name', t(:registrant))
%th{class: 'col-xs-2'}
- = t(:valid_to)
+ = sort_link(@q, 'valid_to', t(:valid_to))
%th{class: 'col-xs-2'}
- = t(:registrar)
+ = sort_link(@q, 'registrar_name', t(:registrar))
%tbody
- -# - @domains.each do |x|
- -# %tr
- -# %td= link_to(x, admin_domain_path(x))
- -# %td
- -# - if x.registrant
- -# = link_to(x.registrant, [:admin, x.registrant])
+ - @domains.each do |x|
+ %tr
+ %td= link_to(x, registrant_domain_path(x))
+ %td
+ - if x.registrant
+ = link_to(x.registrant, [:admin, x.registrant])
- -# %td= l(x.valid_to, format: :short)
- -# %td= link_to(x.registrar, admin_registrar_path(x.registrar)) if x.registrar
+ %td= l(x.valid_to, format: :short)
+ %td= link_to(x.registrar, admin_registrar_path(x.registrar)) if x.registrar
diff --git a/app/views/registrant/domains/partials/_admin_contacts.haml b/app/views/registrant/domains/partials/_admin_contacts.haml
new file mode 100644
index 000000000..0db8f6e32
--- /dev/null
+++ b/app/views/registrant/domains/partials/_admin_contacts.haml
@@ -0,0 +1,22 @@
+- panel_class = @domain.errors.messages[:admin_contacts] ? 'panel-danger' : 'panel-default'
+.panel{class: panel_class}
+ .panel-heading.clearfix
+ = t(:admin_contacts)
+ .table-responsive
+ %table.table.table-hover.table-bordered.table-condensed
+ %thead
+ %tr
+ %th{class: 'col-xs-4'}= t(:name)
+ %th{class: 'col-xs-4'}= t(:id)
+ %th{class: 'col-xs-4'}= t(:email)
+ %tbody
+ - @domain.admin_contacts.each do |ac|
+ %tr
+ %td= link_to(ac, admin_contact_path(ac))
+ %td= ac.code
+ %td= ac.email
+ - if @domain.errors.messages[:admin_contacts]
+ %tfoot
+ - @domain.errors.messages[:admin_contacts].each do |x|
+ %tr
+ %td{colspan: 4}= x
diff --git a/app/views/registrant/domains/partials/_dnskeys.haml b/app/views/registrant/domains/partials/_dnskeys.haml
new file mode 100644
index 000000000..6d5759e65
--- /dev/null
+++ b/app/views/registrant/domains/partials/_dnskeys.haml
@@ -0,0 +1,25 @@
+- panel_class = @domain.errors.messages[:dnskeys] ? 'panel-danger' : 'panel-default'
+#dnskeys.panel{class: panel_class}
+ .panel-heading.clearfix
+ = t(:dnskeys)
+ .table-responsive
+ %table.table.table-hover.table-bordered.table-condensed
+ %thead
+ %tr
+ %th{class: 'col-xs-1'}= t(:flag)
+ %th{class: 'col-xs-1'}= t(:protocol)
+ %th{class: 'col-xs-1'}= t(:algorithm)
+ %th{class: 'col-xs-9'}= t(:public_key)
+ %tbody
+ - @domain.dnskeys.each do |x|
+ %tr
+ %td= x.flags
+ %td= x.protocol
+ %td= x.alg
+ %td= x.public_key
+ - if @domain.errors.messages[:dnskeys]
+ %tfoot
+ - @domain.errors.messages[:dnskeys].each do |x|
+ %tr
+ %td{colspan: 4}= x
+
diff --git a/app/views/registrant/domains/partials/_general.haml b/app/views/registrant/domains/partials/_general.haml
new file mode 100644
index 000000000..d433a1302
--- /dev/null
+++ b/app/views/registrant/domains/partials/_general.haml
@@ -0,0 +1,32 @@
+.panel.panel-default
+ .panel-heading
+ %h3.panel-title= t(:general)
+ .panel-body
+ %dl.dl-horizontal
+ %dt= t(:name)
+ %dd= @domain.name
+
+ %dt= t(:registered_at)
+ %dd= l(@domain.registered_at)
+
+ %dt= t(:registrar)
+ %dd= link_to(@domain.registrar, admin_registrar_path(@domain.registrar))
+
+ %dt= t(:password)
+ %dd
+ = text_field_tag :password, @domain.auth_info, readonly: true, class: 'partially-hidden'
+
+ %dt= t(:valid_from)
+ %dd= l(@domain.valid_from)
+
+ %dt= t(:valid_to)
+ %dd= l(@domain.valid_to)
+
+ %dt= t(:outzone_at)
+ %dd= l(@domain.outzone_at)
+
+ %dt= t(:delete_at)
+ %dd= l(@domain.delete_at)
+
+ %dt= t(:force_delete_at)
+ %dd= l(@domain.force_delete_at)
diff --git a/app/views/registrant/domains/partials/_keyrelays.haml b/app/views/registrant/domains/partials/_keyrelays.haml
new file mode 100644
index 000000000..43d099383
--- /dev/null
+++ b/app/views/registrant/domains/partials/_keyrelays.haml
@@ -0,0 +1,20 @@
+.panel{class: 'panel-default'}
+ .panel-heading.clearfix
+ = t(:keyrelays)
+ .table-responsive
+ %table.table.table-hover.table-bordered.table-condensed
+ %thead
+ %tr
+ %th{class: 'col-xs-4'}= t(:uploaded_at)
+ %th{class: 'col-xs-3'}= t(:expiry)
+ %th{class: 'col-xs-2'}= t(:requester)
+ %th{class: 'col-xs-2'}= t(:accepter)
+ %th{class: 'col-xs-1'}= t(:status)
+ %tbody
+ - @domain.keyrelays.includes([:requester, :accepter]).order(pa_date: :desc).each do |x|
+ %tr
+ %td= link_to(x.pa_date, [:admin, x])
+ %td= x.expiry
+ %td= link_to(x.requester, [:admin, x.requester])
+ %td= link_to(x.accepter, [:admin, x.accepter])
+ %td= x.status
diff --git a/app/views/registrant/domains/partials/_legal_documents.haml b/app/views/registrant/domains/partials/_legal_documents.haml
new file mode 100644
index 000000000..900a9784a
--- /dev/null
+++ b/app/views/registrant/domains/partials/_legal_documents.haml
@@ -0,0 +1,14 @@
+.panel.panel-default
+ .panel-heading.clearfix
+ = t(:legal_documents)
+ .table-responsive
+ %table.table.table-hover.table-bordered.table-condensed
+ %thead
+ %tr
+ %th{class: 'col-xs-8'}= t(:created_at)
+ %th{class: 'col-xs-4'}= t(:type)
+ %tbody
+ - legal_documents.each do |x|
+ %tr
+ %td= link_to(x.created_at, [:admin, x])
+ %td= x.document_type
diff --git a/app/views/registrant/domains/partials/_nameservers.haml b/app/views/registrant/domains/partials/_nameservers.haml
new file mode 100644
index 000000000..db3ca759a
--- /dev/null
+++ b/app/views/registrant/domains/partials/_nameservers.haml
@@ -0,0 +1,23 @@
+- panel_class = @domain.errors.messages[:nameservers] ? 'panel-danger' : 'panel-default'
+#nameservers.panel{class: panel_class}
+ .panel-heading.clearfix
+ = t(:nameservers)
+ .table-responsive
+ %table.table.table-hover.table-bordered.table-condensed
+ %thead
+ %tr
+ %th{class: 'col-xs-4'}= t(:hostname)
+ %th{class: 'col-xs-4'}= t(:ipv4)
+ %th{class: 'col-xs-4'}= t(:ipv6)
+ %tbody
+ - @domain.nameservers.each do |x|
+ %tr
+ %td= x
+ %td= x.ipv4
+ %td= x.ipv6
+ - if @domain.errors.messages[:nameservers]
+ %tfoot
+ - @domain.errors.messages[:nameservers].each do |x|
+ %tr
+ %td{colspan: 3}= x
+
diff --git a/app/views/registrant/domains/partials/_owner.haml b/app/views/registrant/domains/partials/_owner.haml
new file mode 100644
index 000000000..7f499f86b
--- /dev/null
+++ b/app/views/registrant/domains/partials/_owner.haml
@@ -0,0 +1,19 @@
+.panel.panel-default
+ .panel-heading
+ %h3.panel-title= t(:registrant)
+ .panel-body
+ %dl.dl-horizontal
+ %dt= t(:name)
+ %dd= link_to(@domain.registrant, [:admin, @domain.registrant])
+
+ %dt= t(:id)
+ %dd= @domain.registrant_code
+
+ %dt= t(:identity_code)
+ %dd= @domain.registrant_ident
+
+ %dt= t(:email)
+ %dd= @domain.registrant_email
+
+ %dt= t(:phone)
+ %dd= @domain.registrant_phone
diff --git a/app/views/registrant/domains/partials/_statuses.haml b/app/views/registrant/domains/partials/_statuses.haml
new file mode 100644
index 000000000..ab8e55e6c
--- /dev/null
+++ b/app/views/registrant/domains/partials/_statuses.haml
@@ -0,0 +1,18 @@
+#domain_statuses.panel.panel-default
+ .panel-heading.clearfix
+ = t(:statuses)
+ .table-responsive
+ %table.table.table-hover.table-bordered.table-condensed
+ %thead
+ %tr
+ %th{class: 'col-xs-6'}= t(:status)
+ %th{class: 'col-xs-6'}= t(:notes)
+ %tbody
+ - @domain.statuses.each do |status|
+ %tr
+ %td
+ - if @domain.pending_json.present? && [DomainStatus::PENDING_UPDATE, DomainStatus::PENDING_DELETE].include?(status)
+ = link_to status, admin_domain_domain_versions_path(@domain.id)
+ - else
+ = status
+ %td= @domain.status_notes[status]
diff --git a/app/views/registrant/domains/partials/_tech_contacts.haml b/app/views/registrant/domains/partials/_tech_contacts.haml
new file mode 100644
index 000000000..20badbea8
--- /dev/null
+++ b/app/views/registrant/domains/partials/_tech_contacts.haml
@@ -0,0 +1,22 @@
+- panel_class = @domain.errors.messages[:tech_contacts] ? 'panel-danger' : 'panel-default'
+#tech_contacts.panel{class: panel_class}
+ .panel-heading.clearfix
+ = t(:tech_contacts)
+ .table-responsive
+ %table.table.table-hover.table-bordered.table-condensed
+ %thead
+ %tr
+ %th{class: 'col-xs-4'}= t(:name)
+ %th{class: 'col-xs-4'}= t(:id)
+ %th{class: 'col-xs-4'}= t(:email)
+ %tbody
+ - @domain.tech_contacts.each do |tc|
+ %tr
+ %td= link_to(tc, admin_contact_path(tc))
+ %td= tc.code
+ %td= tc.email
+ - if @domain.errors.messages[:tech_contacts]
+ %tfoot
+ - @domain.errors.messages[:tech_contacts].each do |x|
+ %tr
+ %td{colspan: 4}= x
diff --git a/app/views/registrant/domains/show.haml b/app/views/registrant/domains/show.haml
new file mode 100644
index 000000000..17a85b841
--- /dev/null
+++ b/app/views/registrant/domains/show.haml
@@ -0,0 +1,24 @@
+- content_for :actions do
+ = link_to(t(:edit_statuses), edit_admin_domain_path(@domain), class: 'btn btn-primary')
+ = link_to(t(:history), admin_domain_domain_versions_path(@domain.id), method: :get, class: 'btn btn-primary')
+
+= render 'shared/title', name: @domain.name
+
+.row
+ .col-md-6= render 'admin/domains/partials/general'
+ .col-md-6= render 'admin/domains/partials/owner'
+.row
+ .col-md-12= render 'admin/domains/partials/tech_contacts'
+.row
+ .col-md-12= render 'admin/domains/partials/admin_contacts'
+.row
+ .col-md-12= render 'admin/domains/partials/statuses'
+.row
+ .col-md-12= render 'admin/domains/partials/nameservers'
+.row
+ .col-md-12= render 'admin/domains/partials/dnskeys'
+.row
+ .col-md-12= render 'admin/domains/partials/keyrelays'
+.row
+ .col-md-12
+ = render 'admin/domains/partials/legal_documents', legal_documents: @domain.legal_documents
diff --git a/app/views/registrant/whois/index.haml b/app/views/registrant/whois/index.haml
index 3e390eaf3..3d95af638 100644
--- a/app/views/registrant/whois/index.haml
+++ b/app/views/registrant/whois/index.haml
@@ -17,5 +17,5 @@
%span.glyphicon.glyphicon-search
%hr
- - if @results
- = @results
+ - if @domain
+ %pre= @domain.body
\ No newline at end of file
From da910bc6606967f65738a021e46941edec86922e Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Tue, 1 Dec 2015 18:15:27 +0200
Subject: [PATCH 002/196] Story#105842700 - Login user with ID card
---
app/controllers/registrant/domains_controller.rb | 2 +-
app/controllers/registrant/sessions_controller.rb | 13 +++----------
app/models/registrant_user.rb | 14 +++++++++++---
3 files changed, 15 insertions(+), 14 deletions(-)
diff --git a/app/controllers/registrant/domains_controller.rb b/app/controllers/registrant/domains_controller.rb
index 81e99cd54..cec5be34e 100644
--- a/app/controllers/registrant/domains_controller.rb
+++ b/app/controllers/registrant/domains_controller.rb
@@ -5,7 +5,7 @@ class Registrant::DomainsController < RegistrantController
authorize! :view, :registrant_domains
params[:q] ||= {}
- domains = Domain.includes(:registrar, :registrant).where(registrant_id: 76246)
+ domains = current_user.domains
normalize_search_parameters do
@q = domains.search(params[:q])
diff --git a/app/controllers/registrant/sessions_controller.rb b/app/controllers/registrant/sessions_controller.rb
index 4acdbc613..91589d510 100644
--- a/app/controllers/registrant/sessions_controller.rb
+++ b/app/controllers/registrant/sessions_controller.rb
@@ -2,21 +2,14 @@ class Registrant::SessionsController < Devise::SessionsController
layout 'registrant/application'
def login
- @user = RegistrantUser.find_by_username('registrar1')
- sign_in(@user, event: :authentication)
end
# rubocop: disable Metrics/AbcSize
def id
- if Rails.env.development?
- sign_in(RegistrantUser.find_or_create_by_idc_data('test'), event: :authentication)
- return redirect_to registrant_root_url
- end
+ id_code, id_issuer = request.env['SSL_CLIENT_S_DN'], request.env['SSL_CLIENT_I_DN_O']
+ id_code, id_issuer = 'test', RegistrantUser::ACCEPTED_ISSUER if Rails.env.development?
- logger.error request.env['SSL_CLIENT_S_DN']
- logger.error request.env['SSL_CLIENT_S_DN'].encoding
- logger.error request.env['SSL_CLIENT_I_DN_O']
- @user = RegistrantUser.find_or_create_by_idc_data(request.env['SSL_CLIENT_S_DN'], request.env['SSL_CLIENT_I_DN_O'])
+ @user = RegistrantUser.find_or_create_by_idc_data(id_code, id_issuer)
if @user
sign_in(@user, event: :authentication)
redirect_to registrant_root_url
diff --git a/app/models/registrant_user.rb b/app/models/registrant_user.rb
index 9a69e8acb..6fac517af 100644
--- a/app/models/registrant_user.rb
+++ b/app/models/registrant_user.rb
@@ -1,4 +1,5 @@
class RegistrantUser < User
+ ACCEPTED_ISSUER = 'AS Sertifitseerimiskeskus'
attr_accessor :idc_data
def ability
@@ -6,6 +7,15 @@ class RegistrantUser < User
end
delegate :can?, :cannot?, to: :ability
+ def ident
+ registrant_ident.to_s.split("-").last
+ end
+
+ def domains
+ Domain.includes(:registrar, :registrant).where(contacts: {ident: ident})
+ end
+
+
def to_s
username
end
@@ -13,11 +23,9 @@ class RegistrantUser < User
class << self
def find_or_create_by_idc_data(idc_data, issuer_organization)
return false if idc_data.blank?
- return false if issuer_organization != 'AS Sertifitseerimiskeskus'
+ return false if issuer_organization != ACCEPTED_ISSUER
idc_data.force_encoding('UTF-8')
- logger.error(idc_data)
- logger.error(idc_data.encoding)
identity_code = idc_data.scan(/serialNumber=(\d+)/).flatten.first
country = idc_data.scan(/^\/C=(.{2})/).flatten.first
first_name = idc_data.scan(%r{/GN=(.+)/serialNumber}).flatten.first
From 4f8f08ecc9c2354a45747837fade46b5957521dd Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Wed, 2 Dec 2015 13:49:44 +0200
Subject: [PATCH 003/196] Story #109086524 - force is_admin to skip validation
until validations can be fixed
---
app/controllers/admin/pending_updates_controller.rb | 2 ++
app/models/epp/domain.rb | 1 +
2 files changed, 3 insertions(+)
diff --git a/app/controllers/admin/pending_updates_controller.rb b/app/controllers/admin/pending_updates_controller.rb
index 4d08297d7..3a15fb3a5 100644
--- a/app/controllers/admin/pending_updates_controller.rb
+++ b/app/controllers/admin/pending_updates_controller.rb
@@ -6,6 +6,8 @@ class Admin::PendingUpdatesController < AdminController
authorize! :update, :pending
@epp_domain = Epp::Domain.find(params[:domain_id]) # only epp domain has apply pending
+ @epp_domain.is_admin = true
+
if @epp_domain.apply_pending_update!
redirect_to admin_domain_path(@domain.id), notice: t(:pending_applied)
else
diff --git a/app/models/epp/domain.rb b/app/models/epp/domain.rb
index 613c57115..4d86e7e15 100644
--- a/app/models/epp/domain.rb
+++ b/app/models/epp/domain.rb
@@ -4,6 +4,7 @@ class Epp::Domain < Domain
before_validation :manage_permissions
def manage_permissions
+ return if is_admin # this bad hack for 109086524, refactor later
return unless update_prohibited? || delete_prohibited?
add_epp_error('2304', nil, nil, I18n.t(:object_status_prohibits_operation))
false
From 7c469923a7cce318410ad7f916193d7ab63ff7cb Mon Sep 17 00:00:00 2001
From: Stas
Date: Wed, 2 Dec 2015 17:37:38 +0200
Subject: [PATCH 004/196] 109190528-condition_added
---
app/views/epp/domains/info.xml.builder | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/views/epp/domains/info.xml.builder b/app/views/epp/domains/info.xml.builder
index 9e1779921..d3ffd22d5 100644
--- a/app/views/epp/domains/info.xml.builder
+++ b/app/views/epp/domains/info.xml.builder
@@ -38,7 +38,7 @@ xml.epp_head do
xml.tag!('domain:clID', @domain.registrar_name)
- xml.tag!('domain:crID', @domain.creator.try(:registrar)) if @domain.creator
+ xml.tag!('domain:crID', @domain.creator.try(:registrar) || @domain.creator) if @domain.creator
xml.tag!('domain:crDate', @domain.created_at.try(:iso8601))
From 8944ec5bf0034f44b635b5178a6f320b31f1b2d5 Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Thu, 3 Dec 2015 16:53:05 +0200
Subject: [PATCH 005/196] Story #109367018 - send mail about with old
registrant name when pending update
---
app/models/domain.rb | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/app/models/domain.rb b/app/models/domain.rb
index cc35807d5..b05a4327a 100644
--- a/app/models/domain.rb
+++ b/app/models/domain.rb
@@ -438,7 +438,6 @@ class Domain < ActiveRecord::Base
end
def pending_update!
- old_registrant_id = registrant_id
return true if pending_update?
self.epp_pending_update = true # for epp
@@ -450,8 +449,8 @@ class Domain < ActiveRecord::Base
new_registrant_email = registrant.email
new_registrant_name = registrant.name
- DomainMailer.pending_update_request_for_old_registrant(id, old_registrant_id, deliver_emails).deliver
- DomainMailer.pending_update_notification_for_new_registrant(id, old_registrant_id, deliver_emails).deliver
+ DomainMailer.pending_update_request_for_old_registrant(id, registrant_id_was, deliver_emails).deliver
+ DomainMailer.pending_update_notification_for_new_registrant(id, registrant_id_was, deliver_emails).deliver
reload # revert back to original
From 2748f3be5527d061c5dabebf438ed16a738e2cd5 Mon Sep 17 00:00:00 2001
From: Stas
Date: Sun, 6 Dec 2015 20:47:34 +0200
Subject: [PATCH 006/196] 105842700-download_list_added
---
.../registrant/domains_controller.rb | 27 +++++---
.../registrant/registrars_controller.rb | 64 ++-----------------
app/models/ability.rb | 4 +-
app/models/domain.rb | 9 +++
.../registrant/domains/download_list.haml | 0
app/views/registrant/domains/index.haml | 35 ++++++++--
app/views/registrant/domains/show.haml | 21 +++---
app/views/registrant/registrars/index.haml | 22 +++++++
app/views/registrant/registrars/show.haml | 53 +++++++++++++++
config/application.rb | 2 +
config/routes.rb | 14 ++++
11 files changed, 163 insertions(+), 88 deletions(-)
create mode 100644 app/views/registrant/domains/download_list.haml
create mode 100644 app/views/registrant/registrars/index.haml
create mode 100644 app/views/registrant/registrars/show.haml
diff --git a/app/controllers/registrant/domains_controller.rb b/app/controllers/registrant/domains_controller.rb
index cec5be34e..4fab83787 100644
--- a/app/controllers/registrant/domains_controller.rb
+++ b/app/controllers/registrant/domains_controller.rb
@@ -1,12 +1,9 @@
class Registrant::DomainsController < RegistrantController
def index
-
authorize! :view, :registrant_domains
params[:q] ||= {}
-
domains = current_user.domains
-
normalize_search_parameters do
@q = domains.search(params[:q])
@domains = @q.result.page(params[:page])
@@ -16,15 +13,32 @@ class Registrant::DomainsController < RegistrantController
def show
@domain = Domain.find(params[:id])
- @domain.valid?
+ if !(current_user.domains.include?(@domain) || @domain.valid?)
+ redirect_to registrant_domains_path
+ end
+ authorize! :read, @domain
end
def set_domain
@domain = Domain.find(params[:id])
end
- def normalize_search_parameters
+ def download_list
+ authorize! :view, :registrant_domains
+ params[:q] ||= {}
+ domains = current_user.domains
+ normalize_search_parameters do
+ @q = domains.search(params[:q])
+ @domains = @q
+ end
+ respond_to do |format|
+ format.html
+ format.csv { render text: @domains.to_csv }
+ end
+ end
+
+ def normalize_search_parameters
ca_cache = params[:q][:valid_to_lteq]
begin
end_time = params[:q][:valid_to_lteq].try(:to_date)
@@ -32,10 +46,7 @@ class Registrant::DomainsController < RegistrantController
rescue
logger.warn('Invalid date')
end
-
yield
-
params[:q][:valid_to_lteq] = ca_cache
end
-
end
\ No newline at end of file
diff --git a/app/controllers/registrant/registrars_controller.rb b/app/controllers/registrant/registrars_controller.rb
index ca34ed176..36ab9bb2a 100644
--- a/app/controllers/registrant/registrars_controller.rb
+++ b/app/controllers/registrant/registrars_controller.rb
@@ -1,64 +1,8 @@
-class Registrar::RegistrarsController < RegistrartController
- load_and_authorize_resource
+class Registrant::RegistrarsController < RegistrantController
-
- def search
- render json: Registrar.search_by_query(params[:q])
- end
-
- def index
- @q = Registrar.ordered.search(params[:q])
- @registrars = @q.result.page(params[:page])
- end
-
- def new
- @registrar = Registrar.new
- end
-
- def create
- @registrar = Registrar.new(registrar_params)
-
- if @registrar.save
- flash[:notice] = I18n.t('registrar_added')
- redirect_to [:admin, @registrar]
- else
- flash.now[:alert] = I18n.t('failed_to_add_registrar')
- render 'new'
- end
- end
-
- def edit; end
-
- def update
- if @registrar.update(registrar_params)
- flash[:notice] = I18n.t('registrar_updated')
- redirect_to [:admin, @registrar]
- else
- flash.now[:alert] = I18n.t('failed_to_update_registrar')
- render 'edit'
- end
- end
-
- def destroy
- if @registrar.destroy
- flash[:notice] = I18n.t('registrar_deleted')
- redirect_to admin_registrars_path
- else
- flash.now[:alert] = I18n.t('failed_to_delete_registrar')
- render 'show'
- end
- end
-
- private
-
- def set_registrar
+ def show
@registrar = Registrar.find(params[:id])
- end
-
- def registrar_params
- params.require(:registrar).permit(
- :name, :reg_no, :vat_no, :street, :city, :state, :zip, :billing_address,
- :country_code, :email, :phone, :billing_email, :code
- )
+ authorize! :read, @registrar
+ @registrar.valid?
end
end
diff --git a/app/models/ability.rb b/app/models/ability.rb
index cf98cb704..61f1edb2e 100644
--- a/app/models/ability.rb
+++ b/app/models/ability.rb
@@ -16,7 +16,7 @@ class Ability
@user.roles.each { |role| send(role) } if @user.roles
when 'ApiUser'
@user.roles.each { |role| send(role) } if @user.roles
- when 'RegistrantUser'
+ when 'RegistrantUser'
static_registrant
end
@@ -117,9 +117,11 @@ class Ability
end
def static_registrant
+ customer_service
can :manage, :registrant_domains
can :manage, :registrant_whois
can :manage, Depp::Domain
+ can :manage, Domain
end
def user
diff --git a/app/models/domain.rb b/app/models/domain.rb
index 9845e8ac8..ca988dc4d 100644
--- a/app/models/domain.rb
+++ b/app/models/domain.rb
@@ -774,5 +774,14 @@ class Domain < ActiveRecord::Base
status_notes[status] = notes[i]
end
end
+
+ def self.to_csv
+ CSV.generate do |csv|
+ csv << column_names
+ all.each do |domain|
+ csv << domain.attributes.values_at(*column_names)
+ end
+ end
+ end
end
# rubocop: enable Metrics/ClassLength
diff --git a/app/views/registrant/domains/download_list.haml b/app/views/registrant/domains/download_list.haml
new file mode 100644
index 000000000..e69de29bb
diff --git a/app/views/registrant/domains/index.haml b/app/views/registrant/domains/index.haml
index 5ce325efe..b79b921bd 100644
--- a/app/views/registrant/domains/index.haml
+++ b/app/views/registrant/domains/index.haml
@@ -12,10 +12,6 @@
.form-group
= f.label t(:registrant_ident)
= f.search_field :registrant_ident_eq, class: 'form-control', placeholder: t(:registrant_ident)
- .col-md-3
- .form-group
- = f.label t(:nameserver_hostname)
- = f.search_field :nameservers_hostname_eq, class: 'form-control', placeholder: t(:nameserver_hostname)
.row
.col-md-3
.form-group
@@ -36,6 +32,20 @@
%button.btn.btn-default.js-reset-form
= t(:clear_fields)
+ .row
+ .col-md-3
+ .btn-group{:role => "group"}
+ %button.btn.btn-default.dropdown-toggle{"aria-expanded" => "false", "aria-haspopup" => "true", "data-toggle" => "dropdown", :type => "button"}
+ Download
+ %span.caret
+ %ul.dropdown-menu
+ %li= link_to 'PDF', download_list_registrant_domain_path(params[:q], format: "pdf")
+ %li= link_to 'CSV', download_list_registrant_domain_path(params[:q], format: "csv")
+ .col-md-3
+ .col-md-3
+ .col-md-3
+
+
%hr
.row
@@ -58,7 +68,20 @@
%td= link_to(x, registrant_domain_path(x))
%td
- if x.registrant
- = link_to(x.registrant, [:admin, x.registrant])
+ = link_to(x.registrant, [:registrant, x.registrant]) if x.registrant
%td= l(x.valid_to, format: :short)
- %td= link_to(x.registrar, admin_registrar_path(x.registrar)) if x.registrar
+ %td= link_to(x.registrar, registrant_registrar_path(x.registrar)) if x.registrar
+
+ .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 = "#{registrant_domains_path}"
+
diff --git a/app/views/registrant/domains/show.haml b/app/views/registrant/domains/show.haml
index 17a85b841..50c0409b2 100644
--- a/app/views/registrant/domains/show.haml
+++ b/app/views/registrant/domains/show.haml
@@ -1,24 +1,19 @@
- content_for :actions do
- = link_to(t(:edit_statuses), edit_admin_domain_path(@domain), class: 'btn btn-primary')
- = link_to(t(:history), admin_domain_domain_versions_path(@domain.id), method: :get, class: 'btn btn-primary')
+ -#= link_to(t(:history), admin_domain_domain_versions_path(@domain.id), method: :get, class: 'btn btn-primary')
= render 'shared/title', name: @domain.name
.row
- .col-md-6= render 'admin/domains/partials/general'
- .col-md-6= render 'admin/domains/partials/owner'
+ .col-md-6= render 'registrant/domains/partials/general'
.row
- .col-md-12= render 'admin/domains/partials/tech_contacts'
+ .col-md-12= render 'registrant/domains/partials/tech_contacts'
.row
- .col-md-12= render 'admin/domains/partials/admin_contacts'
+ .col-md-12= render 'registrant/domains/partials/admin_contacts'
.row
- .col-md-12= render 'admin/domains/partials/statuses'
+ .col-md-12= render 'registrant/domains/partials/statuses'
.row
- .col-md-12= render 'admin/domains/partials/nameservers'
+ .col-md-12= render 'registrant/domains/partials/nameservers'
.row
- .col-md-12= render 'admin/domains/partials/dnskeys'
+ .col-md-12= render 'registrant/domains/partials/dnskeys'
.row
- .col-md-12= render 'admin/domains/partials/keyrelays'
-.row
- .col-md-12
- = render 'admin/domains/partials/legal_documents', legal_documents: @domain.legal_documents
+ .col-md-12= render 'registrant/domains/partials/keyrelays'
diff --git a/app/views/registrant/registrars/index.haml b/app/views/registrant/registrars/index.haml
new file mode 100644
index 000000000..a2604dbec
--- /dev/null
+++ b/app/views/registrant/registrars/index.haml
@@ -0,0 +1,22 @@
+- content_for :actions do
+ = link_to(t(:new), new_admin_registrar_path, class: 'btn btn-primary')
+= render 'shared/title', name: t(:registrars)
+
+.row
+ .col-md-12
+ .table-responsive
+ %table.table.table-hover.table-bordered.table-condensed
+ %thead
+ %tr
+ %th{class: 'col-xs-6'}
+ = sort_link(@q, 'name')
+ %th{class: 'col-xs-6'}
+ = sort_link(@q, 'reg_no', t(:reg_no))
+ %tbody
+ - @registrars.each do |x|
+ %tr
+ %td= link_to(x, [:admin, x])
+ %td= x.reg_no
+.row
+ .col-md-12
+ = paginate @registrars
diff --git a/app/views/registrant/registrars/show.haml b/app/views/registrant/registrars/show.haml
new file mode 100644
index 000000000..ed5c72b29
--- /dev/null
+++ b/app/views/registrant/registrars/show.haml
@@ -0,0 +1,53 @@
+= render 'shared/title', name: @registrar.name
+
+- if @registrar.errors.any?
+ - @registrar.errors.each do |attr, err|
+ = err
+ %br
+- if @registrar.errors.any?
+ %hr
+.row
+ .col-md-6
+ .panel.panel-default
+ .panel-heading
+ %h3.panel-title= t(:general)
+ .panel-body
+ %dl.dl-horizontal
+ %dt= t(:name)
+ %dd= @registrar.name
+
+ %dt= t(:reg_no)
+ %dd= @registrar.reg_no
+
+ %dt= t(:vat_no)
+ %dd= @registrar.vat_no
+
+ %dt= t(:reference_no)
+ %dd= @registrar.reference_no
+
+ %dt= t(:id)
+ %dd= @registrar.code
+
+ .col-md-6
+ .panel.panel-default
+ .panel-heading
+ %h3.panel-title= t(:contact)
+ .panel-body
+ %dl.dl-horizontal
+ %dt= t(:country)
+ %dd= @registrar.country
+
+ %dt= t(:address)
+ %dd= @registrar.address
+
+ %dt= t(:contact_phone)
+ %dd= @registrar.phone
+
+ %dt= t(:contact_email)
+ %dd= @registrar.email
+
+ %dt= t(:billing_address)
+ %dd= @registrar.billing_address
+
+ %dt= t(:billing_email)
+ %dd= @registrar.billing_email
diff --git a/config/application.rb b/config/application.rb
index 7734cc6e9..2121039dc 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -7,6 +7,8 @@ require 'action_controller/railtie'
require 'action_mailer/railtie'
require 'action_view/railtie'
require 'sprockets/railtie'
+require 'csv'
+require 'rails/all'
# require "rails/test_unit/railtie"
# Require the gems listed in Gemfile, including any gems
diff --git a/config/routes.rb b/config/routes.rb
index f5b81e8b5..8abef6c2c 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -102,6 +102,12 @@ Rails.application.routes.draw do
namespace :registrant do
root 'domains#index'
+ resources :domains do
+ member do
+ get :download_list
+ end
+ end
+
# resources :invoices do
# member do
# get 'download_pdf'
@@ -140,6 +146,14 @@ Rails.application.routes.draw do
end
end
+ resources :registrars do
+ resources :api_users
+ resources :white_ips
+ collection do
+ get :search
+ end
+ end
+
resources :whois
# resources :contacts do
# member do
From 4980bc591db45ff80e07a245a44fe73c0c9d1e9e Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Mon, 7 Dec 2015 17:15:23 +0200
Subject: [PATCH 007/196] Story#109623634 - No after-validate contacts callback
for transfer
---
app/models/epp/domain.rb | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/app/models/epp/domain.rb b/app/models/epp/domain.rb
index 739c55bec..0ec24c60b 100644
--- a/app/models/epp/domain.rb
+++ b/app/models/epp/domain.rb
@@ -3,7 +3,7 @@ class Epp::Domain < Domain
include EppErrors
# TODO: remove this spagetti once data in production is correct.
- attr_accessor :is_renewal
+ attr_accessor :is_renewal, :is_transfer
before_validation :manage_permissions
def manage_permissions
@@ -14,7 +14,7 @@ class Epp::Domain < Domain
after_validation :validate_contacts
def validate_contacts
- return true if is_renewal
+ return true if is_renewal || is_transfer
ok = true
active_admins = admin_domain_contacts.select { |x| !x.marked_for_destruction? }
@@ -592,6 +592,8 @@ class Epp::Domain < Domain
# rubocop: disable Metrics/CyclomaticComplexity
def transfer(frame, action, current_user)
+ @is_transfer = true
+
case action
when 'query'
return domain_transfers.last if domain_transfers.any?
From 668cbdac06d6fcdf549dd05191eb5fb2df27c515 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Mon, 7 Dec 2015 17:25:24 +0200
Subject: [PATCH 008/196] Story#109623634 - No after-validate contacts callback
for transfer
---
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 0ec24c60b..7ab57781e 100644
--- a/app/models/epp/domain.rb
+++ b/app/models/epp/domain.rb
@@ -7,6 +7,7 @@ class Epp::Domain < Domain
before_validation :manage_permissions
def manage_permissions
+ return true if is_transfer
return unless update_prohibited? || delete_prohibited?
add_epp_error('2304', nil, nil, I18n.t(:object_status_prohibits_operation))
false
From cd8feaf55300e49e32244e40696218a9b4e2163b Mon Sep 17 00:00:00 2001
From: Stas
Date: Mon, 7 Dec 2015 17:29:57 +0200
Subject: [PATCH 009/196] 105842700-file_generation_changed
---
app/controllers/registrant/domains_controller.rb | 11 +++++++----
app/models/domain.rb | 5 +++++
app/views/registrant/domains/index.haml | 4 ++--
config/routes.rb | 2 +-
4 files changed, 15 insertions(+), 7 deletions(-)
diff --git a/app/controllers/registrant/domains_controller.rb b/app/controllers/registrant/domains_controller.rb
index 4fab83787..2e17f9039 100644
--- a/app/controllers/registrant/domains_controller.rb
+++ b/app/controllers/registrant/domains_controller.rb
@@ -32,11 +32,14 @@ class Registrant::DomainsController < RegistrantController
@domains = @q
end
- respond_to do |format|
- format.html
- format.csv { render text: @domains.to_csv }
+ respond_to do |format|
+ format.csv { render text: @domains.result.to_csv }
+ format.pdf do
+ pdf = @domains.result.pdf(render_to_string('registrant/domains/download_list', layout: false))
+ send_data pdf, filename: 'domains'
+ end
+ end
end
- end
def normalize_search_parameters
ca_cache = params[:q][:valid_to_lteq]
diff --git a/app/models/domain.rb b/app/models/domain.rb
index ca988dc4d..4d29d4032 100644
--- a/app/models/domain.rb
+++ b/app/models/domain.rb
@@ -783,5 +783,10 @@ class Domain < ActiveRecord::Base
end
end
end
+
+ def self.pdf(html)
+ kit = PDFKit.new(html)
+ kit.to_pdf
+ end
end
# rubocop: enable Metrics/ClassLength
diff --git a/app/views/registrant/domains/index.haml b/app/views/registrant/domains/index.haml
index b79b921bd..efc399ebf 100644
--- a/app/views/registrant/domains/index.haml
+++ b/app/views/registrant/domains/index.haml
@@ -39,8 +39,8 @@
Download
%span.caret
%ul.dropdown-menu
- %li= link_to 'PDF', download_list_registrant_domain_path(params[:q], format: "pdf")
- %li= link_to 'CSV', download_list_registrant_domain_path(params[:q], format: "csv")
+ %li= link_to 'PDF', download_list_registrant_domains_path(params[:q], format: "pdf")
+ %li= link_to 'CSV', download_list_registrant_domains_path(params[:q], format: "csv")
.col-md-3
.col-md-3
.col-md-3
diff --git a/config/routes.rb b/config/routes.rb
index 8abef6c2c..69e6c9680 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -103,7 +103,7 @@ Rails.application.routes.draw do
root 'domains#index'
resources :domains do
- member do
+ collection do
get :download_list
end
end
From 58bc4cc13b456b774418f06de7d68b40c85fd743 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Tue, 8 Dec 2015 10:40:52 +0200
Subject: [PATCH 010/196] Story#109623634 - contacts ident data can be changed
if ident_cc is not set or birthday is in wrong format
---
app/models/epp/contact.rb | 20 +++++++-------------
1 file changed, 7 insertions(+), 13 deletions(-)
diff --git a/app/models/epp/contact.rb b/app/models/epp/contact.rb
index ec5673b06..99f559041 100644
--- a/app/models/epp/contact.rb
+++ b/app/models/epp/contact.rb
@@ -160,20 +160,14 @@ class Epp::Contact < Contact
self.ident_updated_at ||= Time.zone.now # not in use
ident_frame = frame.css('ident').first
- if ident_frame && ident_attr_valid?(ident_frame) && ident_country_code.blank? && ident_type.in?(%w(org priv).freeze)
- at.merge!(ident_country_code: ident_frame.attr('cc'))
+ if ident_frame && ident_attr_valid?(ident_frame)
+ if ident_country_code.blank? && ident_type.in?(%w(org priv).freeze)
+ at.merge!(ident_country_code: ident_frame.attr('cc'))
+ end
+ if ident_type == "birthday" && ident !=~ /\d{4}-\d{2}-\d{2}/
+ at.merge!(ident: ident_frame.text)
+ end
end
-
- # Deprecated
- # if ident_updated_at.present?
- # throw :epp_error, {
- # code: '2306',
- # msg: I18n.t(:ident_update_error)
- # }
- # else
- # at.merge!(self.class.ident_attrs(frame.css('ident').first))
- # self.ident_updated_at = Time.zone.now
- # end
end
super(at)
From 0fd682c6b94f4269939784ecad5281fc8ad1b0cc Mon Sep 17 00:00:00 2001
From: Stas
Date: Wed, 9 Dec 2015 14:00:31 +0200
Subject: [PATCH 011/196] 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 ce209b317d04347e16dbbd53b59b1bf3bf084d65 Mon Sep 17 00:00:00 2001
From: Stas
Date: Wed, 9 Dec 2015 15:29:28 +0200
Subject: [PATCH 012/196] 105842700-redirect_fix_and template
---
app/controllers/application_controller.rb | 2 +-
.../registrant/domains_controller.rb | 2 +-
.../registrant/domains/download_list.haml | 22 +++++++++++++++++++
3 files changed, 24 insertions(+), 2 deletions(-)
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 318923e3d..a79be9aca 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -32,7 +32,7 @@ class ApplicationController < ActionController::Base
if registrar_request?
registrar_root_url
elsif registrant_request?
- registrant_root_url
+ registrant_login_url
elsif admin_request?
admin_root_url
end
diff --git a/app/controllers/registrant/domains_controller.rb b/app/controllers/registrant/domains_controller.rb
index 2e17f9039..eb5388662 100644
--- a/app/controllers/registrant/domains_controller.rb
+++ b/app/controllers/registrant/domains_controller.rb
@@ -36,7 +36,7 @@ class Registrant::DomainsController < RegistrantController
format.csv { render text: @domains.result.to_csv }
format.pdf do
pdf = @domains.result.pdf(render_to_string('registrant/domains/download_list', layout: false))
- send_data pdf, filename: 'domains'
+ send_data pdf, filename: 'domains.pdf'
end
end
end
diff --git a/app/views/registrant/domains/download_list.haml b/app/views/registrant/domains/download_list.haml
index e69de29bb..f8fc70fd9 100644
--- a/app/views/registrant/domains/download_list.haml
+++ b/app/views/registrant/domains/download_list.haml
@@ -0,0 +1,22 @@
+.col-md-12
+ .table-responsive
+ %table.table.table-hover.table-bordered.table-condensed
+ %thead
+ %tr
+ %th{class: 'col-xs-2'}
+ =t(:name)
+ %th{class: 'col-xs-2'}
+ =t(:registrant)
+ %th{class: 'col-xs-2'}
+ =t(:valid_to)
+ %th{class: 'col-xs-2'}
+ =t(:registrar)
+ %tbody
+ - @domains.result.each do |x|
+ %tr
+ %td= x.name
+ %td= x.registrant
+ %td= l(x.valid_to, format: :short)
+ %td= x.registrar
+ .row
+ .col-md-6
From c315c1717809c67082a97223fdc512545163d849 Mon Sep 17 00:00:00 2001
From: Stas
Date: Thu, 10 Dec 2015 15:56:29 +0200
Subject: [PATCH 013/196] 105842700-encoding_fix
---
.../registrant/domains/download_list.haml | 48 +++++++++++--------
app/views/registrant/domains/index.haml | 4 +-
2 files changed, 29 insertions(+), 23 deletions(-)
diff --git a/app/views/registrant/domains/download_list.haml b/app/views/registrant/domains/download_list.haml
index f8fc70fd9..40212812c 100644
--- a/app/views/registrant/domains/download_list.haml
+++ b/app/views/registrant/domains/download_list.haml
@@ -1,22 +1,28 @@
-.col-md-12
- .table-responsive
- %table.table.table-hover.table-bordered.table-condensed
- %thead
- %tr
- %th{class: 'col-xs-2'}
- =t(:name)
- %th{class: 'col-xs-2'}
- =t(:registrant)
- %th{class: 'col-xs-2'}
- =t(:valid_to)
- %th{class: 'col-xs-2'}
- =t(:registrar)
- %tbody
- - @domains.result.each do |x|
+!!!
+%html
+ %head
+ %meta{:content => "text/html; charset=utf-8", "http-equiv" => "Content-Type"}
+ %title Contacts
+ %body
+ .col-md-12
+ .table-responsive
+ %table.table.table-hover.table-bordered.table-condensed
+ %thead
%tr
- %td= x.name
- %td= x.registrant
- %td= l(x.valid_to, format: :short)
- %td= x.registrar
- .row
- .col-md-6
+ %th{class: 'col-xs-2'}
+ =t(:name)
+ %th{class: 'col-xs-2'}
+ =t(:registrant)
+ %th{class: 'col-xs-2'}
+ =t(:valid_to)
+ %th{class: 'col-xs-2'}
+ =t(:registrar)
+ %tbody
+ - @domains.result.each do |x|
+ %tr
+ %td= x.name
+ %td= x.registrant
+ %td= l(x.valid_to, format: :short)
+ %td= x.registrar
+ .row
+ .col-md-6
diff --git a/app/views/registrant/domains/index.haml b/app/views/registrant/domains/index.haml
index efc399ebf..776b7878d 100644
--- a/app/views/registrant/domains/index.haml
+++ b/app/views/registrant/domains/index.haml
@@ -39,8 +39,8 @@
Download
%span.caret
%ul.dropdown-menu
- %li= link_to 'PDF', download_list_registrant_domains_path(params[:q], format: "pdf")
- %li= link_to 'CSV', download_list_registrant_domains_path(params[:q], format: "csv")
+ %li= link_to 'PDF', download_list_registrant_domains_path(q: params[:q], format: "pdf")
+ %li= link_to 'CSV', download_list_registrant_domains_path(q: params[:q], format: "csv")
.col-md-3
.col-md-3
.col-md-3
From bbd90127af0ee33fdd2c2e072fc8ff4a2b605b8a Mon Sep 17 00:00:00 2001
From: Stas
Date: Fri, 11 Dec 2015 12:07:46 +0200
Subject: [PATCH 014/196] 109809872-template_changes
---
app/views/admin/contacts/partials/_general.haml | 2 +-
app/views/admin/domains/partials/_general.haml | 2 +-
app/views/admin/keyrelays/show.haml | 2 +-
app/views/registrar/domains/partials/_general.haml | 2 +-
app/views/registrar/polls/show.haml | 2 +-
config/locales/en.yml | 2 ++
6 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/app/views/admin/contacts/partials/_general.haml b/app/views/admin/contacts/partials/_general.haml
index 194c5feb5..64f17612e 100644
--- a/app/views/admin/contacts/partials/_general.haml
+++ b/app/views/admin/contacts/partials/_general.haml
@@ -6,7 +6,7 @@
%dt= t(:id)
%dd= @contact.code
- %dt= t(:password)
+ %dt= t(:authinfo_pw)
%dd
= text_field_tag :auth_info, @contact.auth_info, readonly: true, class: 'partially-hidden'
diff --git a/app/views/admin/domains/partials/_general.haml b/app/views/admin/domains/partials/_general.haml
index d433a1302..d1a17c1cc 100644
--- a/app/views/admin/domains/partials/_general.haml
+++ b/app/views/admin/domains/partials/_general.haml
@@ -12,7 +12,7 @@
%dt= t(:registrar)
%dd= link_to(@domain.registrar, admin_registrar_path(@domain.registrar))
- %dt= t(:password)
+ %dt= t(:authinfo_pw)
%dd
= text_field_tag :password, @domain.auth_info, readonly: true, class: 'partially-hidden'
diff --git a/app/views/admin/keyrelays/show.haml b/app/views/admin/keyrelays/show.haml
index 067cd4439..08f8b6f33 100644
--- a/app/views/admin/keyrelays/show.haml
+++ b/app/views/admin/keyrelays/show.haml
@@ -28,7 +28,7 @@
%dt= t(:public_key)
%dd= @keyrelay.key_data_public_key
- %dt= t(:password)
+ %dt= t(:authinfo_pw)
%dd= @keyrelay.auth_info_pw
%dt= t(:expiry_relative)
diff --git a/app/views/registrar/domains/partials/_general.haml b/app/views/registrar/domains/partials/_general.haml
index cd16079dd..4eb5285e7 100644
--- a/app/views/registrar/domains/partials/_general.haml
+++ b/app/views/registrar/domains/partials/_general.haml
@@ -3,7 +3,7 @@
%h3.panel-title= t(:general)
.panel-body
%dl.dl-horizontal
- %dt= t(:password)
+ %dt= t(:authinfo_pw)
%dd= @data.css('pw').text.present? ? @data.css('pw').text : t('hidden')
- if @data.css('pw').text.blank?
diff --git a/app/views/registrar/polls/show.haml b/app/views/registrar/polls/show.haml
index 90a5bb02a..e013bad7b 100644
--- a/app/views/registrar/polls/show.haml
+++ b/app/views/registrar/polls/show.haml
@@ -30,7 +30,7 @@
%dt= t(:domain_name)
%dd= @data.css('name').text
- %dt= t(:password)
+ %dt= t(:authinfo_pw)
%dd= @data.css('pw').text
- if @data.css('relative').text.present?
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 16e643b16..83f9ce16a 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -280,6 +280,7 @@ en:
domain_details: 'Domain details'
registered_at: 'Registered at'
password: 'Password'
+ authinfo_pw: 'AuthInfo pw'
valid_from: 'Valid from'
general: 'General'
contacts: 'Contacts'
@@ -554,6 +555,7 @@ en:
username: 'Username'
password: 'Password'
+ authinfo_pw: 'AuthInfo pw'
log_in: 'Log in'
domains: 'Domains'
register: 'Register'
From d9f97a5f6a4432dd1c3ba12edfbcf66e1ac32056 Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Thu, 10 Dec 2015 16:02:12 +0200
Subject: [PATCH 015/196] Story #105846070 - configure cache setting for
business data
---
app/controllers/admin/settings_controller.rb | 1 +
config/initializers/initial_settings.rb | 2 ++
2 files changed, 3 insertions(+)
diff --git a/app/controllers/admin/settings_controller.rb b/app/controllers/admin/settings_controller.rb
index 89ccd9ac6..cc49b3b61 100644
--- a/app/controllers/admin/settings_controller.rb
+++ b/app/controllers/admin/settings_controller.rb
@@ -59,6 +59,7 @@ class Admin::SettingsController < AdminController
:transfer_wait_time,
:invoice_number_min,
:invoice_number_max,
+ :days_to_keep_business_registry_cache,
:days_to_keep_invoices_active,
:days_to_keep_overdue_invoices_active,
:days_to_renew_domain_before_expire,
diff --git a/config/initializers/initial_settings.rb b/config/initializers/initial_settings.rb
index 812641a09..7c566db69 100644
--- a/config/initializers/initial_settings.rb
+++ b/config/initializers/initial_settings.rb
@@ -28,6 +28,8 @@ if con.present? && con.table_exists?('settings')
Setting.save_default(:client_side_status_editing_enabled, false)
+ Setting.save_default(:days_to_keep_business_registry_cache, 2)
+
Setting.save_default(:invoice_number_min, 131050)
Setting.save_default(:invoice_number_max, 149999)
Setting.save_default(:days_to_keep_invoices_active, 30)
From d012f282412a3b95631bba2909f88b2b09eede59 Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Thu, 10 Dec 2015 17:39:18 +0200
Subject: [PATCH 016/196] Story #105846070 - add configuration for Soap::Arireg
---
config/application-example.yml | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/config/application-example.yml b/config/application-example.yml
index b08a1b007..59411a739 100644
--- a/config/application-example.yml
+++ b/config/application-example.yml
@@ -86,6 +86,16 @@ repp_url: 'https://repp.gitlab.eu/repp/v1/'
#
restful_whois_url: 'https://restful-whois.example.com'
+#
+# Estonian Business Registry
+#
+# config/secrets.yml --- arireg: {username, password}
+arireg_username: 'kasutaja'
+arireg_password: 'parool'
+# config/environments/production.rb --- Soap::Arireg.wsdl, Soap::Arireg.host
+arireg_wsdl: 'lib/schemas/testariport.wsdl' # https://demo-ariregxml.rik.ee:447/testariport/?wsdl
+#arireg_wsdl: 'lib/schemas/ariport.wsdl' # https://ariregxml.rik.ee/ariport/?wsdl
+arireg_host: 'https://demo-ariregxml.rik.ee:447' # https://ariregxml.rik.ee/
#
# REGISTRAR AND REGISTRANT
From 1ae25d2fff2ddac7efa712214770d85c3c27a318 Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Thu, 10 Dec 2015 18:01:19 +0200
Subject: [PATCH 017/196] Story #105846070 - add Arireg class for Soap query of
business registry
---
app/models/soap/arireg.rb | 141 ++++++++++++++++++++++++++++++++++++++
1 file changed, 141 insertions(+)
create mode 100644 app/models/soap/arireg.rb
diff --git a/app/models/soap/arireg.rb b/app/models/soap/arireg.rb
new file mode 100644
index 000000000..1e53f0261
--- /dev/null
+++ b/app/models/soap/arireg.rb
@@ -0,0 +1,141 @@
+# coding: utf-8
+require 'savon'
+=begin
+
+Estonian Business registry provides information about registered companies via xml (SOAP over HTTPS).
+
+Note:
+ The SSL endpoint certificate is self signed.
+
+Documentation:
+ http://www.rik.ee/et/e-ariregister/xml-teenus
+ Specifications are in Eng and Est
+ User contract required
+
+Testing:
+ https://demo-ariregxml.rik.ee:447/testariport/?wsdl
+ http://demo-ariregxml.rik.ee:81
+ https://demo-ariregxml.rik.ee:447
+
+Live service:
+ https://ariregxml.rik.ee/ariport/?wsdl
+ https://ariregxml.rik.ee/
+
+Implements Soap::Arireg # associated_businesses
+ 8. arireg.paringesindus_v4
+ Rights of representation of all persons related to the company (newer)
+ http://www2.rik.ee/schemas/xtee/arireg/live/paringesindus_v4.xsd
+ expects personal id code, to fetch list of registered business id codes
+ returning {ident: person, ident_country_code: ... associated_businesses: [...id_codes...]}
+
+=end
+
+# do some SSL set up?
+# ssl_version
+# ssl_verify_mode
+# ssl_cert_key_file
+# ssl_cert_key
+# ssl_cert_key_password
+# ssl_cert_file
+# ssl_cert
+# ssl_ca_cert_file
+# ssl_ca_cert
+
+module Soap
+ class Arireg
+ class << self
+ attr_accessor :wsdl, :host, :username, :password
+ end
+
+ def initialize
+ if self.class.username.nil?
+ if Rails.application.secrets.key?(:arireg)
+ arireg = Rails.application.secrets[:arireg].with_indifferent_access
+ self.class.username = arireg[:username]
+ self.class.password = arireg[:password]
+ if self.class.wsdl.nil? # no override of config/environments/* ?
+ self.class.wsdl = arireg[:wsdl]
+ self.class.host = arireg[:host]
+ end
+ else
+ self.class.username = ENV['arireg_username']
+ self.class.password = ENV['arireg_password']
+ end
+ end
+ if self.class.wsdl.nil?
+ self.class.wsdl = ENV['arireg_wsdl']
+ self.class.host = ENV['arireg_host']
+ end
+
+ # note Savon has error if https w/non-standard port,
+ # use non-standard force to pre-set endpoint
+ @client = Savon.client(wsdl: self.class.wsdl,
+ host: self.class.host,
+ endpoint: "#{self.class.host}/cgi-bin/consumer_proxy")
+ @session = nil
+ end
+
+ # retrieve business id codes for business that a person has a legal role
+ def associated_businesses(ident, ident_cc = 'EST')
+ begin
+ response = @client.call :paringesindus_v4, message: body(
+ 'fyysilise_isiku_kood' => ident,
+ 'fyysilise_isiku_koodi_riik' => ident_cc
+ )
+ content = extract response, :paringesindus_v4_response
+ unless content.blank?
+ if content[:ettevotjad].key? :item
+ business_ident = items(content, :ettevotjad).map do |item|
+ #puts "#{item[:ariregistri_kood]}\t#{item[:arinimi]}\t#{item[:staatus]} #{item[:oiguslik_vorm]}\t"
+ item[:ariregistri_kood]
+ end
+ {
+ ident: ident,
+ ident_country_code: ident_cc,
+ # ident_type: 'priv',
+ retrieved_on: Time.now,
+ associated_businesses: business_ident
+ }
+ end
+ end
+ rescue Savon::SOAPFault => fault
+ Rails.logger.error "#{fault} Äriregister arireg #{self.class.username} at #{self.class.host }"
+ nil
+ rescue HTTPI::SSLError => ssl_error
+ Rails.logger.error "#{ssl_error} at #{self.class.host}"
+ nil
+ end
+ end
+
+ def debug
+ @client.globals.log_level :debug
+ @client.globals.log true
+ @client.globals.pretty_print_xml true
+ @client
+ end
+
+ private
+
+ # add required elements to request
+ def body(args)
+ if @session.nil?
+ args['ariregister_kasutajanimi'] = self.class.username
+ args['ariregister_parool'] = self.class.password
+ else
+ args['ariregister_sessioon'] = @session
+ end
+ {keha: args}
+ end
+
+ def extract(response, element)
+ # response envelope body has again header/body under element; header is user and password returned
+ response.hash[:envelope][:body][element][:keha]
+ end
+
+ def items(content, parent)
+ items = content[parent][:item]
+ items.is_a?(Array) ? items : [items]
+ end
+
+ end
+end
From 4c4908e5a64fc51ba33c1f76a392706a0ea87f2c Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Thu, 10 Dec 2015 18:07:14 +0200
Subject: [PATCH 018/196] Story #105846070 - Arireg just log sock error, and
give up
---
app/models/soap/arireg.rb | 3 +++
1 file changed, 3 insertions(+)
diff --git a/app/models/soap/arireg.rb b/app/models/soap/arireg.rb
index 1e53f0261..e0a842cf1 100644
--- a/app/models/soap/arireg.rb
+++ b/app/models/soap/arireg.rb
@@ -104,6 +104,9 @@ module Soap
rescue HTTPI::SSLError => ssl_error
Rails.logger.error "#{ssl_error} at #{self.class.host}"
nil
+ rescue SocketError => sock
+ Rails.logger.error "#{sock}"
+ nil
end
end
From 49dd053453241284acdf21184c8e5d289aa6d586 Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Thu, 10 Dec 2015 18:46:16 +0200
Subject: [PATCH 019/196] Story #105846070 - Arireg change error handling,
raise business logic error Soap::Arireg:NotAvailableError
---
app/models/soap/arireg.rb | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/app/models/soap/arireg.rb b/app/models/soap/arireg.rb
index e0a842cf1..d35a175d3 100644
--- a/app/models/soap/arireg.rb
+++ b/app/models/soap/arireg.rb
@@ -42,7 +42,16 @@ Implements Soap::Arireg # associated_businesses
# ssl_ca_cert
module Soap
+
class Arireg
+
+ class NotAvailableError < StandardError
+ def initialize(params)
+ params[:message] = "#{I18n.t(:business_registry_service_not_available)}" unless params.key? :message
+ super(params)
+ end
+ end
+
class << self
attr_accessor :wsdl, :host, :username, :password
end
@@ -100,13 +109,13 @@ module Soap
end
rescue Savon::SOAPFault => fault
Rails.logger.error "#{fault} Äriregister arireg #{self.class.username} at #{self.class.host }"
- nil
+ raise NotAvailableError.new(exception: fault)
rescue HTTPI::SSLError => ssl_error
Rails.logger.error "#{ssl_error} at #{self.class.host}"
- nil
+ raise NotAvailableError.new(exception: ssl_error)
rescue SocketError => sock
Rails.logger.error "#{sock}"
- nil
+ raise NotAvailableError.new(exception: sock)
end
end
From 310002f0066d4c41b27a057a28273be197d01129 Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Thu, 10 Dec 2015 18:54:55 +0200
Subject: [PATCH 020/196] Story #105846070 - add message text for
Soap::Arireg:NotAvailableError
---
config/locales/en.yml | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 16e643b16..9d8f25a44 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -533,7 +533,8 @@ en:
switch_to: Switch to
admin_menu: Admin
domain_transfer_was_approved: 'Domain transfer was approved, associated contacts were: %{contacts} and registrant was %{registrant}'
-
+ business_registry_service_not_available: "Business Registry service Ärireg is not available"
+
# DEPP
activemodel:
errors:
From 38c43d6279351326f9d5e08cfbc9ac0cf84c00c8 Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Thu, 10 Dec 2015 18:56:20 +0200
Subject: [PATCH 021/196] Story #105846070 - support for country code remapping
will be required
---
app/models/soap/arireg.rb | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/app/models/soap/arireg.rb b/app/models/soap/arireg.rb
index d35a175d3..3c3d6407a 100644
--- a/app/models/soap/arireg.rb
+++ b/app/models/soap/arireg.rb
@@ -89,7 +89,7 @@ module Soap
begin
response = @client.call :paringesindus_v4, message: body(
'fyysilise_isiku_kood' => ident,
- 'fyysilise_isiku_koodi_riik' => ident_cc
+ 'fyysilise_isiku_koodi_riik' => country_code_3(ident_cc)
)
content = extract response, :paringesindus_v4_response
unless content.blank?
@@ -138,7 +138,13 @@ module Soap
end
{keha: args}
end
-
+
+ # TLA --- three letter acronym required not two letter acronyms, transform
+ def country_code_3(code)
+ # FIXME: need service class for this data
+ code.length == 3 ? code : {'EE' => 'EST', 'SE' => 'SWE', 'FI' => 'FIN', 'DK' => 'DEN'}[code]
+ end
+
def extract(response, element)
# response envelope body has again header/body under element; header is user and password returned
response.hash[:envelope][:body][element][:keha]
From d60029d85ce5391d64e0fbd700abfd86d3bde69c Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Thu, 10 Dec 2015 19:08:04 +0200
Subject: [PATCH 022/196] Story #105846070 - BusinessRegistryCache to use
Arireg service
---
app/models/business_registry_cache.rb | 75 +++++++++++++++++++
...9122816_create_business_registry_caches.rb | 13 ++++
2 files changed, 88 insertions(+)
create mode 100644 app/models/business_registry_cache.rb
create mode 100644 db/migrate/20151209122816_create_business_registry_caches.rb
diff --git a/app/models/business_registry_cache.rb b/app/models/business_registry_cache.rb
new file mode 100644
index 000000000..b590853f5
--- /dev/null
+++ b/app/models/business_registry_cache.rb
@@ -0,0 +1,75 @@
+
+=begin
+The portal for registrants has to offer an overview of the domains the user is related to directly or through an organisation.
+Personal relation is defined by matching the personal identification code associated with a domain and the one acquired on
+authentication using electronic ID. Association through a business organisation requires a query to business registry.
+
+ * when user logs in the personal identification code is sent to business registry (using XML service)
+ * business registry returns the list of business registry codes the user is a board member of
+ * the list is cached for two days (configurable)
+ * during that time no new queries are made to business registry for that personal identification code
+ and the cached organisation code listing is used
+ * user sees the listing of domains that are associated with him/her directly or through registered organisation
+ * UI of the portal displays the list of organisation codes and names used to fetch additional domains for the user
+ (currently by clicking on a username in top right corner of the screen).
+ Also time and date of the query to the business registry is displayed with the list of organisations.
+ * if the query to the business registry fails for any reason the list of
+ domains associated directly with the user is still displayed with an error message indicating a problem
+ with receiving current list business entities. Outdated list of organisations cannot be used.
+=end
+
+class BusinessRegistryCache < ActiveRecord::Base
+
+ def associated_domains
+ domains = []
+ contact_ids = associated_businesses.map do |bic|
+ Contact.select(:id).where("ident = ? AND ident_type = 'org' AND ident_country_code = 'EE'", bic).pluck(:id)
+ end
+ contact_ids = Contact.select(:id).where("ident = ? AND ident_type = 'priv' AND ident_country_code = ?",
+ ident, ident_country_code).pluck(:id) + contact_ids
+ contact_ids.flatten!.compact! unless contact_ids.blank?
+ contact_ids.uniq! unless contact_ids.blank?
+ unless contact_ids.blank?
+ DomainContact.select(:domain_id).distinct.where("contact_id in (?)", contact_ids).pluck(:domain_id).try(:each) do |domain_id|
+ domains << Domain.find(domain_id)
+ end
+ end
+ domains
+ end
+
+ class << self
+
+ def fetch_associated_domains(ident_code, ident_cc)
+ cached = fetch_by_ident_and_cc(ident_code, ident_cc)
+ cached.associated_domains unless cached.blank?
+ end
+
+ def fetch_by_ident_and_cc(ident_code, ident_cc)
+ cache = BusinessRegistryCache.find_by(ident: ident_code, ident_country_code: ident_cc)
+ # fetch new data if cache is expired
+ return cache if cache.present? && cache.retrieved_on > (Time.zone.now - Setting.days_to_keep_business_registry_cache.days)
+ cache = nil # expired data is forbidden
+ data = business_registry.associated_businesses(ident_code, ident_cc)
+ unless data.nil?
+ cache = BusinessRegistryCache.new(data)
+ cache.save
+ end
+ cache
+ end
+
+ def business_registry
+ # TODO: can this be cached and shared?
+ Soap::Arireg.new
+ end
+
+ def purge
+ STDOUT << "#{Time.zone.now.utc} - Starting Purge of old BusinessRegistry data from cache\n" unless Rails.env.test?
+ purged = 0
+ BusinessRegistryCache.where('retrieved_on < ?',
+ Time.zone.now < Setting.days_to_keep_business_registry_cache.days).each do |br|
+ br.destroy and purged += 1
+ end
+ STDOUT << "#{Time.zone.now.utc} - Finished purging #{purged} old BusinessRegistry cache items\n" unless Rails.env.test?
+ end
+ end
+end
diff --git a/db/migrate/20151209122816_create_business_registry_caches.rb b/db/migrate/20151209122816_create_business_registry_caches.rb
new file mode 100644
index 000000000..3d7766a60
--- /dev/null
+++ b/db/migrate/20151209122816_create_business_registry_caches.rb
@@ -0,0 +1,13 @@
+class CreateBusinessRegistryCaches < ActiveRecord::Migration
+ def change
+ create_table :business_registry_caches do |t|
+ t.string :ident
+ t.string :ident_country_code
+ t.datetime :retrieved_on
+ t.string :associated_businesses, array: true
+ t.timestamps null: false
+ end
+
+ add_index :business_registry_caches, :ident
+ end
+end
From a5e3c95b35dc2f426c3c8b8bd6730f97962b0a50 Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Thu, 10 Dec 2015 19:19:15 +0200
Subject: [PATCH 023/196] Story #105846070 - save local copies of the schema
for Arireg ariport, to use in config
---
lib/schemas/ariport.wsdl | 510 +++++++++++++++++++++++++++++++++++
lib/schemas/testariport.wsdl | 510 +++++++++++++++++++++++++++++++++++
2 files changed, 1020 insertions(+)
create mode 100644 lib/schemas/ariport.wsdl
create mode 100644 lib/schemas/testariport.wsdl
diff --git a/lib/schemas/ariport.wsdl b/lib/schemas/ariport.wsdl
new file mode 100644
index 000000000..7525c9227
--- /dev/null
+++ b/lib/schemas/ariport.wsdl
@@ -0,0 +1,510 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Teenuste nimekiri
+
+
+
+
+
+
+ Adapteri test
+
+
+
+
+
+
+ Ettevõtjaga seotud dokumentide loetelu päring
+
+
+
+
+
+
+ Ettevõtja esmakannete päring
+
+
+
+
+
+
+ Ettevõtja muudatuste loetelu tasuline päring
+
+
+
+
+
+
+ Ettevotja rekvisiitide päring
+
+
+
+
+
+
+ Ettevotja rekvisiitide fail
+
+
+
+
+
+
+ Isikute otsing
+
+
+
+
+
+
+ Klassifikaatorite päring
+
+
+
+
+
+
+ Ettevõtja majandusaasta aruande päring
+
+
+
+
+
+
+ Ettevõtja majandusaasta aruande loetelu päring
+
+
+
+
+
+
+ Ettevõtja detailandmete päring v5
+
+
+
+
+
+
+ E-notar: toimiku dokumendi sisu
+
+
+
+
+
+
+ Ettevõtja lihtandmete päring v5
+
+
+
+
+
+
+ Ettevõtja lihtandmete päring tasuta
+
+
+
+
+
+
+ Esindusõiguste päring v3
+
+
+
+
+
+
+ Esindusõiguste päring v4
+
+
+
+
+
+
+ Visuaalse Äriregistri ettevõtete-isikute vaheliste seoste päring
+
+
+
+
+
+
+
+
+
+
+ v1
+
+
+
+
+
+
+
+ v1
+
+
+
+
+
+
+
+ v1
+
+
+
+
+
+
+
+ v1
+
+
+
+
+
+
+
+ v1
+
+
+
+
+
+
+
+ v1
+
+
+
+
+
+
+
+ v1
+
+
+
+
+
+
+
+ v1
+
+
+
+
+
+
+
+ v1
+
+
+
+
+
+
+
+ v1
+
+
+
+
+
+
+
+ v1
+
+
+
+
+
+
+
+ v1
+
+
+
+
+
+
+
+ v1
+
+
+
+
+
+
+
+ v1
+
+
+
+
+
+
+
+ v1
+
+
+
+
+
+
+
+ v1
+
+
+
+
+
+
+
+ v1
+
+
+
+
+
+
+
+ v1
+
+
+
+
+
+
+
+
+
+
+
+ Äriregister_uus
+
+
+
+
diff --git a/lib/schemas/testariport.wsdl b/lib/schemas/testariport.wsdl
new file mode 100644
index 000000000..25e3818b2
--- /dev/null
+++ b/lib/schemas/testariport.wsdl
@@ -0,0 +1,510 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Teenuste nimekiri
+
+
+
+
+
+
+ Adapteri test
+
+
+
+
+
+
+ Ettevõtjaga seotud dokumentide loetelu päring
+
+
+
+
+
+
+ Ettevõtja esmakannete päring
+
+
+
+
+
+
+ Ettevõtja muudatuste loetelu tasuline päring
+
+
+
+
+
+
+ Ettevotja rekvisiitide päring
+
+
+
+
+
+
+ Ettevotja rekvisiitide fail
+
+
+
+
+
+
+ Isikute otsing
+
+
+
+
+
+
+ Klassifikaatorite päring
+
+
+
+
+
+
+ Ettevõtja majandusaasta aruande päring
+
+
+
+
+
+
+ Ettevõtja majandusaasta aruande loetelu päring
+
+
+
+
+
+
+ Ettevõtja detailandmete päring v5
+
+
+
+
+
+
+ E-notar: toimiku dokumendi sisu
+
+
+
+
+
+
+ Ettevõtja lihtandmete päring v5
+
+
+
+
+
+
+ Ettevõtja lihtandmete päring tasuta
+
+
+
+
+
+
+ Esindusõiguste päring v3
+
+
+
+
+
+
+ Esindusõiguste päring v4
+
+
+
+
+
+
+ Visuaalse Äriregistri ettevõtete-isikute vaheliste seoste päring
+
+
+
+
+
+
+
+
+
+
+ v1
+
+
+
+
+
+
+
+ v1
+
+
+
+
+
+
+
+ v1
+
+
+
+
+
+
+
+ v1
+
+
+
+
+
+
+
+ v1
+
+
+
+
+
+
+
+ v1
+
+
+
+
+
+
+
+ v1
+
+
+
+
+
+
+
+ v1
+
+
+
+
+
+
+
+ v1
+
+
+
+
+
+
+
+ v1
+
+
+
+
+
+
+
+ v1
+
+
+
+
+
+
+
+ v1
+
+
+
+
+
+
+
+ v1
+
+
+
+
+
+
+
+ v1
+
+
+
+
+
+
+
+ v1
+
+
+
+
+
+
+
+ v1
+
+
+
+
+
+
+
+ v1
+
+
+
+
+
+
+
+ v1
+
+
+
+
+
+
+
+
+
+
+
+ Äriregister_uus
+
+
+
+
From cf1f9818b3ff9c4eae0d9f78d6f95d1538c1d41d Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Fri, 11 Dec 2015 14:41:57 +0200
Subject: [PATCH 024/196] Story #105846070 - enable user view, registrant shows
user domains
---
app/controllers/registrant/domains_controller.rb | 2 ++
app/views/registrant/domains/index.haml | 15 ++++++---------
2 files changed, 8 insertions(+), 9 deletions(-)
diff --git a/app/controllers/registrant/domains_controller.rb b/app/controllers/registrant/domains_controller.rb
index 4bba945a8..7a19eadd2 100644
--- a/app/controllers/registrant/domains_controller.rb
+++ b/app/controllers/registrant/domains_controller.rb
@@ -1,5 +1,7 @@
class Registrant::DomainsController < RegistrantController
def index
authorize! :view, :registrant_domains
+ ident_cc, ident = @current_user.registrant_ident.split '-'
+ @domains = BusinessRegistryCache.fetch_associated_domains ident, ident_cc
end
end
diff --git a/app/views/registrant/domains/index.haml b/app/views/registrant/domains/index.haml
index 8b71cefca..d9f1db882 100644
--- a/app/views/registrant/domains/index.haml
+++ b/app/views/registrant/domains/index.haml
@@ -16,12 +16,9 @@
%th{class: 'col-xs-2'}
= t(:registrar)
%tbody
- -# - @domains.each do |x|
- -# %tr
- -# %td= link_to(x, admin_domain_path(x))
- -# %td
- -# - if x.registrant
- -# = link_to(x.registrant, [:admin, x.registrant])
-
- -# %td= l(x.valid_to, format: :short)
- -# %td= link_to(x.registrar, admin_registrar_path(x.registrar)) if x.registrar
+ - @domains.each do |x|
+ %tr
+ %td= x
+ %td= x.registrant
+ %td= l(x.valid_to, format: :short)
+ %td= x.registrar
From c926aa41004ff6994af67df970ef13d0d7316321 Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Fri, 11 Dec 2015 15:28:22 +0200
Subject: [PATCH 025/196] Story #105846070 - update supported user countries
for Arireg
---
app/models/soap/arireg.rb | 61 ++++++++++++++++++++++++++++++++++++---
1 file changed, 57 insertions(+), 4 deletions(-)
diff --git a/app/models/soap/arireg.rb b/app/models/soap/arireg.rb
index 3c3d6407a..397159a36 100644
--- a/app/models/soap/arireg.rb
+++ b/app/models/soap/arireg.rb
@@ -139,10 +139,13 @@ module Soap
{keha: args}
end
- # TLA --- three letter acronym required not two letter acronyms, transform
+ # TLA --- three letter acronym required not two letter acronym, transform
def country_code_3(code)
- # FIXME: need service class for this data
- code.length == 3 ? code : {'EE' => 'EST', 'SE' => 'SWE', 'FI' => 'FIN', 'DK' => 'DEN'}[code]
+ if code.length == 2
+ code = CC2X3[code]
+ raise NotAvailableError.new(message: 'Unrecognized Country') if code.nil?
+ end
+ code
end
def extract(response, element)
@@ -154,6 +157,56 @@ module Soap
items = content[parent][:item]
items.is_a?(Array) ? items : [items]
end
-
+
+ CC2X3 = {"AF"=>"AFG", "AX"=>"ALA", "AL"=>"ALB", "DZ"=>"DZA", "AS"=>"ASM",
+ "AD"=>"AND", "AO"=>"AGO", "AI"=>"AIA", "AQ"=>"ATA", "AG"=>"ATG",
+ "AR"=>"ARG", "AM"=>"ARM", "AW"=>"ABW", "AU"=>"AUS", "AT"=>"AUT",
+ "AZ"=>"AZE", "BS"=>"BHS", "BH"=>"BHR", "BD"=>"BGD", "BB"=>"BRB",
+ "BY"=>"BLR", "BE"=>"BEL", "BZ"=>"BLZ", "BJ"=>"BEN", "BM"=>"BMU",
+ "BT"=>"BTN", "BO"=>"BOL", "BQ"=>"BES", "BA"=>"BIH", "BW"=>"BWA",
+ "BV"=>"BVT", "BR"=>"BRA", "IO"=>"IOT", "BN"=>"BRN", "BG"=>"BGR",
+ "BF"=>"BFA", "BI"=>"BDI", "CV"=>"CPV", "KH"=>"KHM", "CM"=>"CMR",
+ "CA"=>"CAN", "KY"=>"CYM", "CF"=>"CAF", "TD"=>"TCD", "CL"=>"CHL",
+ "CN"=>"CHN", "CX"=>"CXR", "CC"=>"CCK", "CO"=>"COL", "KM"=>"COM",
+ "CD"=>"COD", "CG"=>"COG", "CK"=>"COK", "CR"=>"CRI", "CI"=>"CIV",
+ "HR"=>"HRV", "CU"=>"CUB", "CW"=>"CUW", "CY"=>"CYP", "CZ"=>"CZE",
+ "DK"=>"DNK", "DJ"=>"DJI", "DM"=>"DMA", "DO"=>"DOM", "EC"=>"ECU",
+ "EG"=>"EGY", "SV"=>"SLV", "GQ"=>"GNQ", "ER"=>"ERI", "EE"=>"EST",
+ "ET"=>"ETH", "FK"=>"FLK", "FO"=>"FRO", "FJ"=>"FJI", "FI"=>"FIN",
+ "FR"=>"FRA", "GF"=>"GUF", "PF"=>"PYF", "TF"=>"ATF", "GA"=>"GAB",
+ "GM"=>"GMB", "GE"=>"GEO", "DE"=>"DEU", "GH"=>"GHA", "GI"=>"GIB",
+ "GR"=>"GRC", "GL"=>"GRL", "GD"=>"GRD", "GP"=>"GLP", "GU"=>"GUM",
+ "GT"=>"GTM", "GG"=>"GGY", "GN"=>"GIN", "GW"=>"GNB", "GY"=>"GUY",
+ "HT"=>"HTI", "HM"=>"HMD", "VA"=>"VAT", "HN"=>"HND", "HK"=>"HKG",
+ "HU"=>"HUN", "IS"=>"ISL", "IN"=>"IND", "ID"=>"IDN", "IR"=>"IRN",
+ "IQ"=>"IRQ", "IE"=>"IRL", "IM"=>"IMN", "IL"=>"ISR", "IT"=>"ITA",
+ "JM"=>"JAM", "JP"=>"JPN", "JE"=>"JEY", "JO"=>"JOR", "KZ"=>"KAZ",
+ "KE"=>"KEN", "KI"=>"KIR", "KP"=>"PRK", "KR"=>"KOR", "KW"=>"KWT",
+ "KG"=>"KGZ", "LA"=>"LAO", "LV"=>"LVA", "LB"=>"LBN", "LS"=>"LSO",
+ "LR"=>"LBR", "LY"=>"LBY", "LI"=>"LIE", "LT"=>"LTU", "LU"=>"LUX",
+ "MO"=>"MAC", "MK"=>"MKD", "MG"=>"MDG", "MW"=>"MWI", "MY"=>"MYS",
+ "MV"=>"MDV", "ML"=>"MLI", "MT"=>"MLT", "MH"=>"MHL", "MQ"=>"MTQ",
+ "MR"=>"MRT", "MU"=>"MUS", "YT"=>"MYT", "MX"=>"MEX", "FM"=>"FSM",
+ "MD"=>"MDA", "MC"=>"MCO", "MN"=>"MNG", "ME"=>"MNE", "MS"=>"MSR",
+ "MA"=>"MAR", "MZ"=>"MOZ", "MM"=>"MMR", "NA"=>"NAM", "NR"=>"NRU",
+ "NP"=>"NPL", "NL"=>"NLD", "NC"=>"NCL", "NZ"=>"NZL", "NI"=>"NIC",
+ "NE"=>"NER", "NG"=>"NGA", "NU"=>"NIU", "NF"=>"NFK", "MP"=>"MNP",
+ "NO"=>"NOR", "OM"=>"OMN", "PK"=>"PAK", "PW"=>"PLW", "PS"=>"PSE",
+ "PA"=>"PAN", "PG"=>"PNG", "PY"=>"PRY", "PE"=>"PER", "PH"=>"PHL",
+ "PN"=>"PCN", "PL"=>"POL", "PT"=>"PRT", "PR"=>"PRI", "QA"=>"QAT",
+ "RE"=>"REU", "RO"=>"ROU", "RU"=>"RUS", "RW"=>"RWA", "BL"=>"BLM",
+ "SH"=>"SHN", "KN"=>"KNA", "LC"=>"LCA", "MF"=>"MAF", "PM"=>"SPM",
+ "VC"=>"VCT", "WS"=>"WSM", "SM"=>"SMR", "ST"=>"STP", "SA"=>"SAU",
+ "SN"=>"SEN", "RS"=>"SRB", "SC"=>"SYC", "SL"=>"SLE", "SG"=>"SGP",
+ "SX"=>"SXM", "SK"=>"SVK", "SI"=>"SVN", "SB"=>"SLB", "SO"=>"SOM",
+ "ZA"=>"ZAF", "GS"=>"SGS", "SS"=>"SSD", "ES"=>"ESP", "LK"=>"LKA",
+ "SD"=>"SDN", "SR"=>"SUR", "SJ"=>"SJM", "SZ"=>"SWZ", "SE"=>"SWE",
+ "CH"=>"CHE", "SY"=>"SYR", "TW"=>"TWN", "TJ"=>"TJK", "TZ"=>"TZA",
+ "TH"=>"THA", "TL"=>"TLS", "TG"=>"TGO", "TK"=>"TKL", "TO"=>"TON",
+ "TT"=>"TTO", "TN"=>"TUN", "TR"=>"TUR", "TM"=>"TKM", "TC"=>"TCA",
+ "TV"=>"TUV", "UG"=>"UGA", "UA"=>"UKR", "AE"=>"ARE", "GB"=>"GBR",
+ "UM"=>"UMI", "US"=>"USA", "UY"=>"URY", "UZ"=>"UZB", "VU"=>"VUT",
+ "VE"=>"VEN", "VN"=>"VNM", "VG"=>"VGB", "VI"=>"VIR", "WF"=>"WLF",
+ "EH"=>"ESH", "YE"=>"YEM", "ZM"=>"ZMB", "ZW"=>"ZWE"}
end
end
From 352c748258be99b9c59b0d33817c1f1739dc5cfd Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Fri, 11 Dec 2015 15:46:29 +0200
Subject: [PATCH 026/196] Story #105846070 - show error message to user when
service not available
---
app/controllers/registrant/domains_controller.rb | 7 ++++++-
app/models/business_registry_cache.rb | 2 +-
app/views/registrant/domains/index.haml | 2 +-
3 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/app/controllers/registrant/domains_controller.rb b/app/controllers/registrant/domains_controller.rb
index 7a19eadd2..50aac75f3 100644
--- a/app/controllers/registrant/domains_controller.rb
+++ b/app/controllers/registrant/domains_controller.rb
@@ -2,6 +2,11 @@ class Registrant::DomainsController < RegistrantController
def index
authorize! :view, :registrant_domains
ident_cc, ident = @current_user.registrant_ident.split '-'
- @domains = BusinessRegistryCache.fetch_associated_domains ident, ident_cc
+ begin
+ @domains = BusinessRegistryCache.fetch_associated_domains ident, ident_cc
+ rescue Soap::Arireg::NotAvailableError => error
+ flash[:notice] = I18n.t(error.message[:message])
+ @domains = []
+ end
end
end
diff --git a/app/models/business_registry_cache.rb b/app/models/business_registry_cache.rb
index b590853f5..5d6010674 100644
--- a/app/models/business_registry_cache.rb
+++ b/app/models/business_registry_cache.rb
@@ -48,7 +48,7 @@ class BusinessRegistryCache < ActiveRecord::Base
cache = BusinessRegistryCache.find_by(ident: ident_code, ident_country_code: ident_cc)
# fetch new data if cache is expired
return cache if cache.present? && cache.retrieved_on > (Time.zone.now - Setting.days_to_keep_business_registry_cache.days)
- cache = nil # expired data is forbidden
+ cache = [] # expired data is forbidden
data = business_registry.associated_businesses(ident_code, ident_cc)
unless data.nil?
cache = BusinessRegistryCache.new(data)
diff --git a/app/views/registrant/domains/index.haml b/app/views/registrant/domains/index.haml
index d9f1db882..f8c03b8af 100644
--- a/app/views/registrant/domains/index.haml
+++ b/app/views/registrant/domains/index.haml
@@ -16,7 +16,7 @@
%th{class: 'col-xs-2'}
= t(:registrar)
%tbody
- - @domains.each do |x|
+ - @domains.try(:each) do |x|
%tr
%td= x
%td= x.registrant
From 2b186e9c933c0633950faa2d141b864adf9c1aac Mon Sep 17 00:00:00 2001
From: Stas
Date: Fri, 11 Dec 2015 17:33:28 +0200
Subject: [PATCH 027/196] 105842700-translation_and_link_fix
---
.../registrant/registrants_controller.rb | 8 ++
.../registrant/registrars_controller.rb | 1 -
.../registrant/domains/partials/_general.haml | 2 +-
app/views/registrant/registrants/index.haml | 112 ++++++++++++++++++
app/views/registrant/registrants/show.haml | 75 ++++++++++++
config/routes.rb | 2 +
6 files changed, 198 insertions(+), 2 deletions(-)
create mode 100644 app/controllers/registrant/registrants_controller.rb
create mode 100644 app/views/registrant/registrants/index.haml
create mode 100644 app/views/registrant/registrants/show.haml
diff --git a/app/controllers/registrant/registrants_controller.rb b/app/controllers/registrant/registrants_controller.rb
new file mode 100644
index 000000000..adc1e0b82
--- /dev/null
+++ b/app/controllers/registrant/registrants_controller.rb
@@ -0,0 +1,8 @@
+class Registrant::RegistrantsController < RegistrantController
+
+ def show
+ @contact = Registrant.find(params[:id])
+ authorize! :read, @contact
+ @contact.valid?
+ end
+end
diff --git a/app/controllers/registrant/registrars_controller.rb b/app/controllers/registrant/registrars_controller.rb
index 36ab9bb2a..d0630b73a 100644
--- a/app/controllers/registrant/registrars_controller.rb
+++ b/app/controllers/registrant/registrars_controller.rb
@@ -3,6 +3,5 @@ class Registrant::RegistrarsController < RegistrantController
def show
@registrar = Registrar.find(params[:id])
authorize! :read, @registrar
- @registrar.valid?
end
end
diff --git a/app/views/registrant/domains/partials/_general.haml b/app/views/registrant/domains/partials/_general.haml
index d433a1302..d1a17c1cc 100644
--- a/app/views/registrant/domains/partials/_general.haml
+++ b/app/views/registrant/domains/partials/_general.haml
@@ -12,7 +12,7 @@
%dt= t(:registrar)
%dd= link_to(@domain.registrar, admin_registrar_path(@domain.registrar))
- %dt= t(:password)
+ %dt= t(:authinfo_pw)
%dd
= text_field_tag :password, @domain.auth_info, readonly: true, class: 'partially-hidden'
diff --git a/app/views/registrant/registrants/index.haml b/app/views/registrant/registrants/index.haml
new file mode 100644
index 000000000..b8e7850e6
--- /dev/null
+++ b/app/views/registrant/registrants/index.haml
@@ -0,0 +1,112 @@
+= render 'shared/title', name: t(:contacts)
+
+.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(:id)
+ = f.search_field :code_eq, class: 'form-control', placeholder: t(:id)
+ .col-md-3
+ .form-group
+ = f.label t(:ident)
+ = f.search_field :ident_matches, class: 'form-control', placeholder: t(:ident)
+ .col-md-3
+ .form-group
+ = label_tag t(:ident_type)
+ = select_tag '[q][ident_type_eq]', options_for_select(Contact::IDENT_TYPES, params[:q][:ident_type_eq]), { include_blank: true, placeholder: t(:choose), class: 'form-control selectize' }
+ .row
+ .col-md-3
+ .form-group
+ = f.label t(:email)
+ = f.search_field :email_matches, class: 'form-control', placeholder: t(:email)
+ .col-md-3
+ .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
+ .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' }
+ .row
+ .col-md-3
+ .form-group
+ = f.label t(:registrar)
+ = f.select :registrar_id_eq, Registrar.all.map { |x| [x, x.id] }, { include_blank: true }, class: 'form-control selectize', placeholder: t(:choose)
+ .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)
+ .col-md-3
+ .form-group
+ = f.label t(:updated_at)
+ = f.search_field :updated_at_gteq, value: params[:q][:updated_at_gteq], class: 'form-control datepicker', placeholder: t(:updated_at)
+ .row
+ .col-md-6
+ .form-group
+ = label_tag t(:status)
+ = select_tag :statuses_contains, options_for_select(Contact::STATUSES, params[:statuses_contains]), { multiple: true, placeholder: t(:choose), class: 'form-control js-combobox' }
+ .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', t(:name))
+ %th{class: 'col-xs-2'}
+ = sort_link(@q, 'code', t(:id))
+ %th{class: 'col-xs-2'}
+ = sort_link(@q, 'ident', t(:ident))
+ %th{class: 'col-xs-2'}
+ = sort_link(@q, 'email', t(:created_at))
+ %th{class: 'col-xs-2'}
+ = sort_link(@q, 'registrar_name', t(:registrar))
+ %tbody
+ - @contacts.each do |contact|
+ %tr
+ %td= link_to(contact, admin_contact_path(contact))
+ %td= contact.code
+ %td= ident_for(contact)
+ %td= l(contact.created_at, format: :short)
+ %td
+ - if contact.registrar
+ = link_to(contact.registrar, admin_registrar_path(contact.registrar))
+
+.row
+ .col-md-6
+ = paginate @contacts
+ .col-md-6.text-right
+ .pagination
+ = t(:result_count, count: @contacts.total_count)
+
+:coffee
+ $(".js-reset-form").on "click", (e) ->
+ e.preventDefault();
+ window.location = "#{admin_contacts_path}"
diff --git a/app/views/registrant/registrants/show.haml b/app/views/registrant/registrants/show.haml
new file mode 100644
index 000000000..5b2a527ca
--- /dev/null
+++ b/app/views/registrant/registrants/show.haml
@@ -0,0 +1,75 @@
+= render 'shared/title', name: @contact.name
+
+.row
+ .col-md-6
+ .panel.panel-default
+ .panel-heading
+ %h3.panel-title= t(:general)
+ .panel-body
+ %dl.dl-horizontal
+ %dt= t(:id)
+ %dd= @contact.code
+
+ %dt= t(:authinfo_pw)
+ %dd
+ = text_field_tag :auth_info, @contact.auth_info, readonly: true, class: 'partially-hidden'
+
+ %br
+
+ %dt= t(:ident)
+ %dd= ident_for(@contact)
+
+ %dt= t(:email)
+ %dd= @contact.email
+
+ %dt= t(:phone)
+ %dd= @contact.phone
+
+ - if @contact.fax
+ %dt= t(:fax)
+ %dd= @contact.fax
+
+ %br
+
+ %dt= t(:created)
+ %dd
+ = l(@contact.created_at, format: :short)
+ by
+ = creator_link(@contact)
+
+ %dt= t(:updated)
+ %dd
+ = l(@contact.updated_at, format: :short)
+ by
+ = updator_link(@contact)
+
+ %dt= t(:registrar)
+ %dd
+ - if @contact.registrar.present?
+ = link_to(@contact.registrar, registrant_registrar_path(@contact.registrar)) if @contact.registrar
+
+ .col-md-6
+ .panel.panel-default
+ .panel-heading
+ %h3.panel-title= t(:contact)
+ .panel-body
+ %dl.dl-horizontal
+ %dl.dl-horizontal
+ - if @contact.org_name.present?
+ %dt= t(:org_name)
+ %dd= @contact.org_name
+
+ %dt= t(:street)
+ %dd= @contact.street.to_s.gsub("\n", ' ').html_safe
+
+ %dt= t(:city)
+ %dd= @contact.city
+
+ %dt= t(:zip)
+ %dd= @contact.zip
+
+ %dt= t(:state)
+ %dd= @contact.state
+
+ %dt= t(:country)
+ %dd= @contact.country
\ No newline at end of file
diff --git a/config/routes.rb b/config/routes.rb
index 69e6c9680..922dbeaa5 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -154,6 +154,8 @@ Rails.application.routes.draw do
end
end
+ resources :registrants
+
resources :whois
# resources :contacts do
# member do
From 80fe0428b213b24fa7844ef69327effd6e52c4fc Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Wed, 2 Dec 2015 13:49:44 +0200
Subject: [PATCH 028/196] Story #109086524 - force is_admin to skip validation
until validations can be fixed
---
app/controllers/admin/pending_updates_controller.rb | 2 ++
app/models/epp/domain.rb | 1 +
2 files changed, 3 insertions(+)
diff --git a/app/controllers/admin/pending_updates_controller.rb b/app/controllers/admin/pending_updates_controller.rb
index 4d08297d7..3a15fb3a5 100644
--- a/app/controllers/admin/pending_updates_controller.rb
+++ b/app/controllers/admin/pending_updates_controller.rb
@@ -6,6 +6,8 @@ class Admin::PendingUpdatesController < AdminController
authorize! :update, :pending
@epp_domain = Epp::Domain.find(params[:domain_id]) # only epp domain has apply pending
+ @epp_domain.is_admin = true
+
if @epp_domain.apply_pending_update!
redirect_to admin_domain_path(@domain.id), notice: t(:pending_applied)
else
diff --git a/app/models/epp/domain.rb b/app/models/epp/domain.rb
index 739c55bec..3471cf131 100644
--- a/app/models/epp/domain.rb
+++ b/app/models/epp/domain.rb
@@ -7,6 +7,7 @@ class Epp::Domain < Domain
before_validation :manage_permissions
def manage_permissions
+ return if is_admin # this bad hack for 109086524, refactor later
return unless update_prohibited? || delete_prohibited?
add_epp_error('2304', nil, nil, I18n.t(:object_status_prohibits_operation))
false
From 05b2408b430c0123c995ab90c59f7311cfd03c63 Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Sun, 13 Dec 2015 13:06:52 +0200
Subject: [PATCH 029/196] Story #109086524 - Save update with the user id that
requested update, when admin approves (I thought this change was already
committed, but where?)
---
app/models/epp/domain.rb | 2 ++
1 file changed, 2 insertions(+)
diff --git a/app/models/epp/domain.rb b/app/models/epp/domain.rb
index 3471cf131..5468f9678 100644
--- a/app/models/epp/domain.rb
+++ b/app/models/epp/domain.rb
@@ -507,7 +507,9 @@ class Epp::Domain < Domain
frame = Nokogiri::XML(pending_json['frame'])
statuses.delete(DomainStatus::PENDING_UPDATE)
yield(self) if block_given? # need to skip statuses check here
+ save
+ PaperTrail.whodunnit = user
return unless update(frame, user, false)
clean_pendings!
self.deliver_emails = true # turn on email delivery
From 32d0200a9f1887f757db5d6784c7ae4486796217 Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Sun, 13 Dec 2015 13:09:43 +0200
Subject: [PATCH 030/196] Story #109086524 - change execution path, admin will
now use same method as registrant to apply pending update This change now
include creating registrar message
---
.../admin/pending_updates_controller.rb | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/app/controllers/admin/pending_updates_controller.rb b/app/controllers/admin/pending_updates_controller.rb
index 3a15fb3a5..6e41a6c57 100644
--- a/app/controllers/admin/pending_updates_controller.rb
+++ b/app/controllers/admin/pending_updates_controller.rb
@@ -5,10 +5,7 @@ class Admin::PendingUpdatesController < AdminController
def update
authorize! :update, :pending
- @epp_domain = Epp::Domain.find(params[:domain_id]) # only epp domain has apply pending
- @epp_domain.is_admin = true
-
- if @epp_domain.apply_pending_update!
+ if registrant_verification.domain_registrant_change_confirm!
redirect_to admin_domain_path(@domain.id), notice: t(:pending_applied)
else
redirect_to edit_admin_domain_path(@domain.id), alert: t(:failure)
@@ -17,14 +14,21 @@ class Admin::PendingUpdatesController < AdminController
def destroy
authorize! :destroy, :pending
-
- if @domain.clean_pendings!
+ if registrant_verification.domain_registrant_change_reject!
redirect_to admin_domain_path(@domain.id), notice: t(:pending_removed)
else
redirect_to admin_domain_path(@domain.id), alert: t(:failure)
end
end
+ def registrant_verification
+ # steal token
+ token = @domain.registrant_verification_token
+ @registrant_verification = RegistrantVerification.new(domain_id: @domain.id,
+ domain_name: @domain.name,
+ verification_token: token)
+ end
+
private
def find_domain
From 176bd33ad585a1560a05b3edfbafbc2262c31836 Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Sun, 13 Dec 2015 13:13:27 +0200
Subject: [PATCH 031/196] Story #109086524 - remove excess method call
---
app/jobs/domain_update_confirm_job.rb | 1 -
1 file changed, 1 deletion(-)
diff --git a/app/jobs/domain_update_confirm_job.rb b/app/jobs/domain_update_confirm_job.rb
index 28294ef25..bc4beb541 100644
--- a/app/jobs/domain_update_confirm_job.rb
+++ b/app/jobs/domain_update_confirm_job.rb
@@ -9,7 +9,6 @@ class DomainUpdateConfirmJob < Que::Job
domain.apply_pending_update! do |e|
e.instance_variable_set("@changed_attributes", e.changed_attributes.merge("statuses"=>[]))
end
- domain.clean_pendings!
when RegistrantVerification::REJECTED
DomainMailer.pending_update_rejected_notification_for_new_registrant(domain_id).deliver
domain.poll_message!(:poll_pending_update_rejected_by_registrant)
From 6c90d5825b395783e4f61416fa30cf530d90bce5 Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Mon, 14 Dec 2015 11:45:54 +0200
Subject: [PATCH 032/196] Story #109086524 - revert to allow merge, changes
fixed on branch for story 109367694
---
app/models/epp/domain.rb | 3 ---
1 file changed, 3 deletions(-)
diff --git a/app/models/epp/domain.rb b/app/models/epp/domain.rb
index 5468f9678..739c55bec 100644
--- a/app/models/epp/domain.rb
+++ b/app/models/epp/domain.rb
@@ -7,7 +7,6 @@ class Epp::Domain < Domain
before_validation :manage_permissions
def manage_permissions
- return if is_admin # this bad hack for 109086524, refactor later
return unless update_prohibited? || delete_prohibited?
add_epp_error('2304', nil, nil, I18n.t(:object_status_prohibits_operation))
false
@@ -507,9 +506,7 @@ class Epp::Domain < Domain
frame = Nokogiri::XML(pending_json['frame'])
statuses.delete(DomainStatus::PENDING_UPDATE)
yield(self) if block_given? # need to skip statuses check here
- save
- PaperTrail.whodunnit = user
return unless update(frame, user, false)
clean_pendings!
self.deliver_emails = true # turn on email delivery
From 23d4547e2bb6072bfbf07d4c41e980cc8f1a58da Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Mon, 14 Dec 2015 13:04:46 +0200
Subject: [PATCH 033/196] Story #105846070 - update existing record if present
---
app/models/business_registry_cache.rb | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/app/models/business_registry_cache.rb b/app/models/business_registry_cache.rb
index 5d6010674..5defd4183 100644
--- a/app/models/business_registry_cache.rb
+++ b/app/models/business_registry_cache.rb
@@ -48,11 +48,16 @@ class BusinessRegistryCache < ActiveRecord::Base
cache = BusinessRegistryCache.find_by(ident: ident_code, ident_country_code: ident_cc)
# fetch new data if cache is expired
return cache if cache.present? && cache.retrieved_on > (Time.zone.now - Setting.days_to_keep_business_registry_cache.days)
- cache = [] # expired data is forbidden
- data = business_registry.associated_businesses(ident_code, ident_cc)
- unless data.nil?
- cache = BusinessRegistryCache.new(data)
+ businesses = business_registry.associated_businesses(ident_code, ident_cc)
+ unless businesses.nil?
+ if cache.blank?
+ cache = BusinessRegistryCache.new(businesses)
+ else
+ cache.update businesses
+ end
cache.save
+ else
+ cache = [] # expired data is forbidden
end
cache
end
From 3d71a01280cd62c7edca72b69254656319ebee4e Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Mon, 14 Dec 2015 13:13:55 +0200
Subject: [PATCH 034/196] Story #105846070 - revert domains_controller and
domains/index to allow merge
---
app/controllers/registrant/domains_controller.rb | 7 -------
app/views/registrant/domains/index.haml | 15 +++++++++------
2 files changed, 9 insertions(+), 13 deletions(-)
diff --git a/app/controllers/registrant/domains_controller.rb b/app/controllers/registrant/domains_controller.rb
index 50aac75f3..4bba945a8 100644
--- a/app/controllers/registrant/domains_controller.rb
+++ b/app/controllers/registrant/domains_controller.rb
@@ -1,12 +1,5 @@
class Registrant::DomainsController < RegistrantController
def index
authorize! :view, :registrant_domains
- ident_cc, ident = @current_user.registrant_ident.split '-'
- begin
- @domains = BusinessRegistryCache.fetch_associated_domains ident, ident_cc
- rescue Soap::Arireg::NotAvailableError => error
- flash[:notice] = I18n.t(error.message[:message])
- @domains = []
- end
end
end
diff --git a/app/views/registrant/domains/index.haml b/app/views/registrant/domains/index.haml
index f8c03b8af..8b71cefca 100644
--- a/app/views/registrant/domains/index.haml
+++ b/app/views/registrant/domains/index.haml
@@ -16,9 +16,12 @@
%th{class: 'col-xs-2'}
= t(:registrar)
%tbody
- - @domains.try(:each) do |x|
- %tr
- %td= x
- %td= x.registrant
- %td= l(x.valid_to, format: :short)
- %td= x.registrar
+ -# - @domains.each do |x|
+ -# %tr
+ -# %td= link_to(x, admin_domain_path(x))
+ -# %td
+ -# - if x.registrant
+ -# = link_to(x.registrant, [:admin, x.registrant])
+
+ -# %td= l(x.valid_to, format: :short)
+ -# %td= link_to(x.registrar, admin_registrar_path(x.registrar)) if x.registrar
From e266c2274104b30b5db99e0a42c0c23dcde8f1e5 Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Mon, 14 Dec 2015 13:43:26 +0200
Subject: [PATCH 035/196] Story #105846070 - refactor local value to method
---
app/controllers/registrant/domains_controller.rb | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/app/controllers/registrant/domains_controller.rb b/app/controllers/registrant/domains_controller.rb
index eb5388662..ea84a6aa3 100644
--- a/app/controllers/registrant/domains_controller.rb
+++ b/app/controllers/registrant/domains_controller.rb
@@ -3,7 +3,6 @@ class Registrant::DomainsController < RegistrantController
def index
authorize! :view, :registrant_domains
params[:q] ||= {}
- domains = current_user.domains
normalize_search_parameters do
@q = domains.search(params[:q])
@domains = @q.result.page(params[:page])
@@ -26,7 +25,6 @@ class Registrant::DomainsController < RegistrantController
def download_list
authorize! :view, :registrant_domains
params[:q] ||= {}
- domains = current_user.domains
normalize_search_parameters do
@q = domains.search(params[:q])
@domains = @q
@@ -39,7 +37,11 @@ class Registrant::DomainsController < RegistrantController
send_data pdf, filename: 'domains.pdf'
end
end
- end
+ end
+
+ def domains
+ current_user.domains
+ end
def normalize_search_parameters
ca_cache = params[:q][:valid_to_lteq]
From 908a033b73e0327dac9c00fc12f8cbf093e1599b Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Mon, 14 Dec 2015 13:46:14 +0200
Subject: [PATCH 036/196] Story#109590460 - set business id validation
---
app/models/contact.rb | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/app/models/contact.rb b/app/models/contact.rb
index fcebe8632..1b96b9876 100644
--- a/app/models/contact.rb
+++ b/app/models/contact.rb
@@ -212,12 +212,16 @@ class Contact < ActiveRecord::Base
end
def ident_valid_format?
- case ident_type
- when 'priv'
- case ident_country_code
- when 'EE'
- code = Isikukood.new(ident)
- errors.add(:ident, :invalid_EE_identity_format) unless code.valid?
+ case ident_country_code
+ when 'EE'.freeze
+ case ident_type
+ when 'priv'.freeze
+ errors.add(:ident, :invalid_EE_identity_format) unless Isikukood.new(ident).valid?
+ when 'org'.freeze
+ last_char = ident.last
+ if ident.size != 8 || !%(1 8 9).freeze.include?(last_char) || ident !=~/\A[12][0-9]{6}[189]\z/
+ errors.add(:ident, :invalid_EE_identity_format)
+ end
end
end
end
From 79b1125976f2cdaab260c92abfdc416d3efa4aa9 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Mon, 14 Dec 2015 13:47:01 +0200
Subject: [PATCH 037/196] Story#109590460 - update what contact ident
attributes can be changed through EPP
---
app/models/epp/contact.rb | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/app/models/epp/contact.rb b/app/models/epp/contact.rb
index 99f559041..91fbf23d1 100644
--- a/app/models/epp/contact.rb
+++ b/app/models/epp/contact.rb
@@ -162,10 +162,13 @@ class Epp::Contact < Contact
if ident_frame && ident_attr_valid?(ident_frame)
if ident_country_code.blank? && ident_type.in?(%w(org priv).freeze)
- at.merge!(ident_country_code: ident_frame.attr('cc'))
- end
- if ident_type == "birthday" && ident !=~ /\d{4}-\d{2}-\d{2}/
+ at.merge!(ident_country_code: ident_frame.attr('cc'), ident_type: ident_type)
+ elsif ident_type == "birthday" && ident !=~ /\d{4}-\d{2}-\d{2}/
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_type.blank?
+ at.merge!(ident_type: ident_type)
+ at.merge!(ident_country_code: ident_frame.attr('cc')) if ident_frame.attr('cc').present?
end
end
end
From 48ab1c7c7e6426b7c1da34e8b766ce97f1f6d421 Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Mon, 14 Dec 2015 13:50:11 +0200
Subject: [PATCH 038/196] Story #105846070 - include results from business
registry if found
---
app/controllers/registrant/domains_controller.rb | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/app/controllers/registrant/domains_controller.rb b/app/controllers/registrant/domains_controller.rb
index ea84a6aa3..addc157e3 100644
--- a/app/controllers/registrant/domains_controller.rb
+++ b/app/controllers/registrant/domains_controller.rb
@@ -40,7 +40,13 @@ class Registrant::DomainsController < RegistrantController
end
def domains
- current_user.domains
+ ident_cc, ident = @current_user.registrant_ident.split '-'
+ begin
+ BusinessRegistryCache.fetch_associated_domains ident, ident_cc
+ rescue Soap::Arireg::NotAvailableError => error
+ flash[:notice] = I18n.t(error.message[:message])
+ current_user.domains
+ end
end
def normalize_search_parameters
From 2b4de9a5c2260498caa586f18999c003e7ebc971 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Mon, 14 Dec 2015 14:07:45 +0200
Subject: [PATCH 039/196] Story#109590460 - typo
---
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 1b96b9876..6ac8de163 100644
--- a/app/models/contact.rb
+++ b/app/models/contact.rb
@@ -219,7 +219,7 @@ class Contact < ActiveRecord::Base
errors.add(:ident, :invalid_EE_identity_format) unless Isikukood.new(ident).valid?
when 'org'.freeze
last_char = ident.last
- if ident.size != 8 || !%(1 8 9).freeze.include?(last_char) || ident !=~/\A[12][0-9]{6}[189]\z/
+ if ident.size != 8 || !%w(1 8 9).freeze.include?(last_char) || ident !=~/\A[12][0-9]{6}[189]\z/
errors.add(:ident, :invalid_EE_identity_format)
end
end
From 9d2f23a71d16967696d7ee29eab874b30b8bc8ae Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Mon, 14 Dec 2015 14:08:52 +0200
Subject: [PATCH 040/196] Story #105846070 - use Domain.includes, replace
Domain.find; return Relation rather than array. white space changes
---
app/models/business_registry_cache.rb | 28 +++++++++++++--------------
1 file changed, 13 insertions(+), 15 deletions(-)
diff --git a/app/models/business_registry_cache.rb b/app/models/business_registry_cache.rb
index 5defd4183..9bc65d599 100644
--- a/app/models/business_registry_cache.rb
+++ b/app/models/business_registry_cache.rb
@@ -20,21 +20,19 @@ authentication using electronic ID. Association through a business organisation
class BusinessRegistryCache < ActiveRecord::Base
- def associated_domains
- domains = []
- contact_ids = associated_businesses.map do |bic|
- Contact.select(:id).where("ident = ? AND ident_type = 'org' AND ident_country_code = 'EE'", bic).pluck(:id)
- end
- contact_ids = Contact.select(:id).where("ident = ? AND ident_type = 'priv' AND ident_country_code = ?",
- ident, ident_country_code).pluck(:id) + contact_ids
- contact_ids.flatten!.compact! unless contact_ids.blank?
- contact_ids.uniq! unless contact_ids.blank?
- unless contact_ids.blank?
- DomainContact.select(:domain_id).distinct.where("contact_id in (?)", contact_ids).pluck(:domain_id).try(:each) do |domain_id|
- domains << Domain.find(domain_id)
- end
- end
- domains
+ def associated_domains
+ domains = []
+ contact_ids = associated_businesses.map do |bic|
+ Contact.select(:id).where("ident = ? AND ident_type = 'org' AND ident_country_code = 'EE'", bic).pluck(:id)
+ end
+ contact_ids = Contact.select(:id).where("ident = ? AND ident_type = 'priv' AND ident_country_code = ?",
+ ident, ident_country_code).pluck(:id) + contact_ids
+ contact_ids.flatten!.compact! unless contact_ids.blank?
+ unless contact_ids.blank?
+ contact_ids.uniq!
+ domains = DomainContact.select(:domain_id).distinct.where("contact_id in (?)", contact_ids).pluck(:domain_id)
+ end
+ Domain.includes(:registrar, :registrant).where('id in (?)', domains)
end
class << self
From ffb8bc61dd195b93c2bc94878f0a58aaa0320d0c Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Mon, 14 Dec 2015 14:21:06 +0200
Subject: [PATCH 041/196] Story#109590460 - update country code validation
---
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 6ac8de163..c1d2f0c96 100644
--- a/app/models/contact.rb
+++ b/app/models/contact.rb
@@ -218,8 +218,8 @@ class Contact < ActiveRecord::Base
when 'priv'.freeze
errors.add(:ident, :invalid_EE_identity_format) unless Isikukood.new(ident).valid?
when 'org'.freeze
- last_char = ident.last
- if ident.size != 8 || !%w(1 8 9).freeze.include?(last_char) || ident !=~/\A[12][0-9]{6}[189]\z/
+ # !%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)
end
end
From 342de9a9c9edfa1ee875e9e9103104e4a06c2582 Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Mon, 14 Dec 2015 14:24:12 +0200
Subject: [PATCH 042/196] Story #105846070 - also return relation when business
registry has no data
---
app/models/business_registry_cache.rb | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/app/models/business_registry_cache.rb b/app/models/business_registry_cache.rb
index 9bc65d599..18555b1a5 100644
--- a/app/models/business_registry_cache.rb
+++ b/app/models/business_registry_cache.rb
@@ -39,7 +39,11 @@ class BusinessRegistryCache < ActiveRecord::Base
def fetch_associated_domains(ident_code, ident_cc)
cached = fetch_by_ident_and_cc(ident_code, ident_cc)
- cached.associated_domains unless cached.blank?
+ if cached.blank?
+ Domain.includes(:registrar, :registrant).where(contacts: {ident: ident_code, ident_country_code: ident_cc})
+ else
+ cached.associated_domains
+ end
end
def fetch_by_ident_and_cc(ident_code, ident_cc)
From b5b0dc7f21c6d2e882193d8c009a5126c97394e9 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Mon, 14 Dec 2015 14:25:28 +0200
Subject: [PATCH 043/196] Story#109590460 - update country code validation
---
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 c1d2f0c96..1bf86b706 100644
--- a/app/models/contact.rb
+++ b/app/models/contact.rb
@@ -219,7 +219,7 @@ class Contact < ActiveRecord::Base
errors.add(:ident, :invalid_EE_identity_format) 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/
+ if ident.size != 8 || !(ident =~/\A[0-9]{8}\z/)
errors.add(:ident, :invalid_EE_identity_format)
end
end
From 47dcca06babd76599ec491949863bd1e70ccf5f0 Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Mon, 14 Dec 2015 14:40:01 +0200
Subject: [PATCH 044/196] Story #109818884 - set outzone_at when removing
serverManualInZone
---
app/models/domain.rb | 2 ++
1 file changed, 2 insertions(+)
diff --git a/app/models/domain.rb b/app/models/domain.rb
index 7858b3d36..57e4367b0 100644
--- a/app/models/domain.rb
+++ b/app/models/domain.rb
@@ -710,6 +710,8 @@ class Domain < ActiveRecord::Base
case s
when DomainStatus::PENDING_DELETE
self.delete_at = nil
+ when DomainStatus::SERVER_MANUAL_INZONE # removal causes server hold to set
+ self.outzone_at = Time.zone.now if self.force_delete_at.present?
# Handle any other special remove cases?
# when DomainStatus::FORCE_DELETE unset_force_delete
end
From 8f29a2f94ae450231f2fb9aef1789cd5b8535d86 Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Mon, 14 Dec 2015 15:01:06 +0200
Subject: [PATCH 045/196] Story #105846070 - ensure that person search is
limited to person contacts to avoid pollution
---
app/models/business_registry_cache.rb | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/app/models/business_registry_cache.rb b/app/models/business_registry_cache.rb
index 18555b1a5..6bd509101 100644
--- a/app/models/business_registry_cache.rb
+++ b/app/models/business_registry_cache.rb
@@ -40,7 +40,10 @@ class BusinessRegistryCache < ActiveRecord::Base
def fetch_associated_domains(ident_code, ident_cc)
cached = fetch_by_ident_and_cc(ident_code, ident_cc)
if cached.blank?
- Domain.includes(:registrar, :registrant).where(contacts: {ident: ident_code, ident_country_code: ident_cc})
+ Domain.includes(:registrar, :registrant).where(contacts: {
+ ident_type: 'priv',
+ ident: ident_code,
+ ident_country_code: ident_cc})
else
cached.associated_domains
end
From c8a1ec24ddb91b02c2ef3d6829b26553c9cd238d Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Mon, 14 Dec 2015 15:30:07 +0200
Subject: [PATCH 046/196] Story #105846070 - add more debug info for testers
---
app/models/soap/arireg.rb | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/app/models/soap/arireg.rb b/app/models/soap/arireg.rb
index 397159a36..35517c3ef 100644
--- a/app/models/soap/arireg.rb
+++ b/app/models/soap/arireg.rb
@@ -95,7 +95,8 @@ module Soap
unless content.blank?
if content[:ettevotjad].key? :item
business_ident = items(content, :ettevotjad).map do |item|
- #puts "#{item[:ariregistri_kood]}\t#{item[:arinimi]}\t#{item[:staatus]} #{item[:oiguslik_vorm]}\t"
+ # debug helps users gather data for testing
+ puts "#{item[:ariregistri_kood]}\t#{item[:arinimi]}\t#{item[:staatus]} #{item[:oiguslik_vorm]}\t" if @debug
item[:ariregistri_kood]
end
{
@@ -123,6 +124,7 @@ module Soap
@client.globals.log_level :debug
@client.globals.log true
@client.globals.pretty_print_xml true
+ @debug = true
@client
end
From 13f50dec8cfb402d45ac4e6ce653cc9a7f086a50 Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Mon, 14 Dec 2015 16:02:45 +0200
Subject: [PATCH 047/196] Story #105846070 - ensure that show can also see all
the users domains
---
app/controllers/registrant/domains_controller.rb | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/app/controllers/registrant/domains_controller.rb b/app/controllers/registrant/domains_controller.rb
index addc157e3..445cc5d42 100644
--- a/app/controllers/registrant/domains_controller.rb
+++ b/app/controllers/registrant/domains_controller.rb
@@ -12,7 +12,7 @@ class Registrant::DomainsController < RegistrantController
def show
@domain = Domain.find(params[:id])
- if !(current_user.domains.include?(@domain) || @domain.valid?)
+ if !(domains.include?(@domain) || @domain.valid?)
redirect_to registrant_domains_path
end
authorize! :read, @domain
@@ -30,13 +30,13 @@ class Registrant::DomainsController < RegistrantController
@domains = @q
end
- respond_to do |format|
- format.csv { render text: @domains.result.to_csv }
- format.pdf do
- pdf = @domains.result.pdf(render_to_string('registrant/domains/download_list', layout: false))
- send_data pdf, filename: 'domains.pdf'
- end
+ respond_to do |format|
+ format.csv { render text: @domains.result.to_csv }
+ format.pdf do
+ pdf = @domains.result.pdf(render_to_string('registrant/domains/download_list', layout: false))
+ send_data pdf, filename: 'domains.pdf'
end
+ end
end
def domains
From 06b37d1ce4835eb1fc5e7d9d6e2853dd36d37b33 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Mon, 14 Dec 2015 16:07:09 +0200
Subject: [PATCH 048/196] Story#109590460 - forgot to update ident_type from
XML
---
app/models/epp/contact.rb | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/models/epp/contact.rb b/app/models/epp/contact.rb
index 91fbf23d1..01787d046 100644
--- a/app/models/epp/contact.rb
+++ b/app/models/epp/contact.rb
@@ -162,12 +162,12 @@ class Epp::Contact < Contact
if ident_frame && ident_attr_valid?(ident_frame)
if ident_country_code.blank? && ident_type.in?(%w(org priv).freeze)
- at.merge!(ident_country_code: ident_frame.attr('cc'), ident_type: ident_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}/
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_type.blank?
- at.merge!(ident_type: ident_type)
+ at.merge!(ident_type: ident_frame.attr('type'))
at.merge!(ident_country_code: ident_frame.attr('cc')) if ident_frame.attr('cc').present?
end
end
From 05c4aaf3f19a13fed0ddd6d517cfccede03e941e Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Mon, 14 Dec 2015 16:55:22 +0200
Subject: [PATCH 049/196] Story #105846070 - do not allow user to see other
user's domains if their ident values have the same code
---
app/models/registrant_user.rb | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/app/models/registrant_user.rb b/app/models/registrant_user.rb
index 6fac517af..f0222b2a6 100644
--- a/app/models/registrant_user.rb
+++ b/app/models/registrant_user.rb
@@ -12,10 +12,15 @@ class RegistrantUser < User
end
def domains
- Domain.includes(:registrar, :registrant).where(contacts: {ident: ident})
+ # TODO: move data to normal columns and drop registrant_ident
+ ident_cc, ident = @current_user.registrant_ident.split '-'
+ Domain.includes(:registrar, :registrant).where(contacts: {
+ ident_type: 'priv',
+ ident: ident, #identity_code,
+ ident_country_code: ident_cc #country_code
+ })
end
-
def to_s
username
end
From 38d3459e27c66900c330ffef77585d060a3f0fa7 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Mon, 14 Dec 2015 17:01:16 +0200
Subject: [PATCH 050/196] Story#109590460 - Update Ident updatable attributes
---
app/models/epp/contact.rb | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/app/models/epp/contact.rb b/app/models/epp/contact.rb
index 01787d046..345f7ecee 100644
--- a/app/models/epp/contact.rb
+++ b/app/models/epp/contact.rb
@@ -161,14 +161,17 @@ class Epp::Contact < Contact
ident_frame = frame.css('ident').first
if ident_frame && ident_attr_valid?(ident_frame)
- if ident_country_code.blank? && ident_type.in?(%w(org priv).freeze)
+ org_priv = %w(org priv).freeze
+ if ident_country_code.blank? && org_priv.include?(ident_type) && org_priv.in?(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}/
+ elsif ident_type == "birthday" && ident !=~ /\d{4}-\d{2}-\d{2}/ && (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_type.blank?
+ elsif ident_type.blank? && ident_country_code.blank?
at.merge!(ident_type: ident_frame.attr('type'))
at.merge!(ident_country_code: ident_frame.attr('cc')) if ident_frame.attr('cc').present?
+ else
+ throw :epp_error, {code: '2306', msg: I18n.t(:ident_update_error)}
end
end
end
From 95454229ca0feb9783deaf8ee62bef7d49d744c2 Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Mon, 14 Dec 2015 17:43:24 +0200
Subject: [PATCH 051/196] Story #105745608 - handle missing price list with
error 2104
---
app/controllers/epp/domains_controller.rb | 24 +++++++++++------------
1 file changed, 11 insertions(+), 13 deletions(-)
diff --git a/app/controllers/epp/domains_controller.rb b/app/controllers/epp/domains_controller.rb
index f8cb2b752..91ddeb93d 100644
--- a/app/controllers/epp/domains_controller.rb
+++ b/app/controllers/epp/domains_controller.rb
@@ -29,11 +29,6 @@ class Epp::DomainsController < EppController
handle_errors(@domain) and return if @domain.errors.any?
handle_errors and return unless balance_ok?('create') # loads pricelist in this method
- if !@domain_pricelist.try(:price)#checking if pricelist is not found
- @domain.add_epp_error('2306', nil, nil, 'No price list for domain')
- handle_errors(@domain) and return if @domain.errors.any?
- end
-
ActiveRecord::Base.transaction do
if @domain.save # TODO: Maybe use validate: false here because we have already validated the domain?
current_user.registrar.debit!({
@@ -107,10 +102,6 @@ class Epp::DomainsController < EppController
period_unit = Epp::Domain.parse_period_unit_from_frame(params[:parsed_frame]) || 'y'
balance_ok?('renew', period, period_unit) # loading pricelist
- if !@domain_pricelist.try(:price)#checking if pricelist is not found
- @domain.add_epp_error('2306', nil, nil, 'No price list for domain')
- handle_errors(@domain) and return if @domain.errors.any?
- end
ActiveRecord::Base.transaction do
success = @domain.renew(
@@ -258,12 +249,19 @@ class Epp::DomainsController < EppController
def balance_ok?(operation, period = nil, unit = nil)
@domain_pricelist = @domain.pricelist(operation, period.try(:to_i), unit)
- if current_user.registrar.balance < @domain_pricelist.price.amount
+ if @domain_pricelist.try(:price) # checking if price list is not found
+ if current_user.registrar.balance < @domain_pricelist.price.amount
+ epp_errors << {
+ code: '2104',
+ msg: I18n.t('billing_failure_credit_balance_low')
+ }
+ return false
+ end
+ else
epp_errors << {
- code: '2104',
- msg: I18n.t('billing_failure_credit_balance_low')
+ code: '2104',
+ msg: I18n.t(:active_price_missing_for_this_operation)
}
-
return false
end
true
From c83fa049c7a61fcbdde4e6535573dc1fd6d3dced Mon Sep 17 00:00:00 2001
From: Stas
Date: Mon, 14 Dec 2015 18:09:38 +0200
Subject: [PATCH 052/196] 109818648-domains_destroy_change
---
app/models/domain.rb | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/models/domain.rb b/app/models/domain.rb
index 780ff3b7a..6d20574ce 100644
--- a/app/models/domain.rb
+++ b/app/models/domain.rb
@@ -307,7 +307,7 @@ class Domain < ActiveRecord::Base
c = 0
Domain.where("statuses @> '{deleteCandidate}'::varchar[]").each do |x|
- Whois::Record.where('domain_id = ?', x.id).try(':destroy')
+ Whois::Record.where(domain_id: x.id).destroy_all
destroy_with_message x
STDOUT << "#{Time.zone.now.utc} Domain.destroy_delete_candidates: by deleteCandidate ##{x.id} (#{x.name})\n" unless Rails.env.test?
@@ -315,7 +315,7 @@ class Domain < ActiveRecord::Base
end
Domain.where('force_delete_at <= ?', Time.zone.now).each do |x|
- Whois::Record.where('domain_id = ?', x.id).try(':destroy')
+ Whois::Record.where(domain_id: x.id).destroy_all
destroy_with_message x
STDOUT << "#{Time.zone.now.utc} Domain.destroy_delete_candidates: by force delete time ##{x.id} (#{x.name})\n" unless Rails.env.test?
c += 1
From 2802fcd0af8e8b255f4705f03b8a507087f09320 Mon Sep 17 00:00:00 2001
From: Stas
Date: Tue, 15 Dec 2015 16:55:02 +0200
Subject: [PATCH 053/196] 110067564-job type and registrar id changes
---
app/models/domain.rb | 2 +-
app/models/registrant_verification.rb | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/models/domain.rb b/app/models/domain.rb
index 7858b3d36..53badd3fd 100644
--- a/app/models/domain.rb
+++ b/app/models/domain.rb
@@ -439,7 +439,7 @@ class Domain < ActiveRecord::Base
end
def pending_update!
- old_registrant_id = registrant_id
+ old_registrant_id = registrant_id_was
return true if pending_update?
self.epp_pending_update = true # for epp
diff --git a/app/models/registrant_verification.rb b/app/models/registrant_verification.rb
index d0c015ecb..29bde4b70 100644
--- a/app/models/registrant_verification.rb
+++ b/app/models/registrant_verification.rb
@@ -23,7 +23,7 @@ class RegistrantVerification < ActiveRecord::Base
def domain_registrant_change_reject!
self.action_type = DOMAIN_REGISTRANT_CHANGE
self.action = REJECTED
- DomainUpdateConfirmJob.enqueue domain.id, REJECTED if save
+ DomainUpdateConfirmJob.run domain.id, REJECTED if save
end
def domain_registrant_delete_confirm!
From 6842fbccd64ff2fbbe7d6dd499604add402d0f42 Mon Sep 17 00:00:00 2001
From: Stas
Date: Wed, 16 Dec 2015 11:37:02 +0200
Subject: [PATCH 054/196] 109818648-whois_view_change
---
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 21db2bdc0..121677c4d 100644
--- a/app/models/whois_record.rb
+++ b/app/models/whois_record.rb
@@ -44,7 +44,7 @@ class WhoisRecord < ActiveRecord::Base
h[:changed] = domain.updated_at.try(:to_s, :iso8601)
h[:expire] = domain.valid_to.try(:to_date).try(:to_s)
h[:outzone] = domain.outzone_at.try(:to_date).try(:to_s)
- h[:delete] = domain.delete_at.try(:to_date).try(:to_s)
+ h[:delete] = [domain.delete_at, domain.force_delete_at].compact.min.try(:to_date).try(:to_s)
h[:registrant] = domain.registrant.name
From c54bc69936a45dc10756d3d0813452a8989e1ae5 Mon Sep 17 00:00:00 2001
From: Stas
Date: Wed, 16 Dec 2015 17:55:56 +0200
Subject: [PATCH 055/196] 108874730-depp_parsing changed
---
app/models/depp/domain.rb | 26 ++++++++++----------------
1 file changed, 10 insertions(+), 16 deletions(-)
diff --git a/app/models/depp/domain.rb b/app/models/depp/domain.rb
index fd0e71e9b..7b4630008 100644
--- a/app/models/depp/domain.rb
+++ b/app/models/depp/domain.rb
@@ -152,23 +152,17 @@ module Depp
}
end
- data.css('dsData').each_with_index do |x, i|
- ds = {
- ds_key_tag: x.css('keyTag').first.try(:text),
- ds_alg: x.css('alg').first.try(:text),
- ds_digest_type: x.css('digestType').first.try(:text),
- ds_digest: x.css('digest').first.try(:text)
+ data.css('keyData').each_with_index do |x, i|
+ ret[:dnskeys_attributes][i] = {
+ flags: x.css('flags').text,
+ protocol: x.css('protocol').text,
+ alg: x.css('alg').text,
+ public_key: x.css('pubKey').text,
+ ds_key_tag: x.css('keyTag').first.try(:text),
+ ds_alg: x.css('alg').first.try(:text),
+ ds_digest_type: x.css('digestType').first.try(:text),
+ ds_digest: x.css('digest').first.try(:text)
}
-
- kd = x.css('keyData').first
- ds.merge!({
- flags: kd.css('flags').first.try(:text),
- protocol: kd.css('protocol').first.try(:text),
- alg: kd.css('alg').first.try(:text),
- public_key: kd.css('pubKey').first.try(:text)
- }) if kd
-
- ret[:dnskeys_attributes][i] = ds
end
data.css('status').each_with_index do |x, i|
From 369c0507ebae8f4ebf3e266e1b823c68b0e8d171 Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Thu, 3 Dec 2015 16:53:05 +0200
Subject: [PATCH 056/196] Story #109367018 - send mail about with old
registrant name when pending update
---
app/models/domain.rb | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/app/models/domain.rb b/app/models/domain.rb
index 988cd43e3..842293842 100644
--- a/app/models/domain.rb
+++ b/app/models/domain.rb
@@ -440,7 +440,6 @@ class Domain < ActiveRecord::Base
end
def pending_update!
- old_registrant_id = registrant_id
return true if pending_update?
self.epp_pending_update = true # for epp
@@ -452,8 +451,8 @@ class Domain < ActiveRecord::Base
new_registrant_email = registrant.email
new_registrant_name = registrant.name
- DomainMailer.pending_update_request_for_old_registrant(id, old_registrant_id, deliver_emails).deliver
- DomainMailer.pending_update_notification_for_new_registrant(id, old_registrant_id, deliver_emails).deliver
+ DomainMailer.pending_update_request_for_old_registrant(id, registrant_id_was, deliver_emails).deliver
+ DomainMailer.pending_update_notification_for_new_registrant(id, registrant_id_was, deliver_emails).deliver
reload # revert back to original
From 2c916001ad2cf1707078e69be85c8704458287b5 Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Tue, 15 Dec 2015 09:24:41 +0200
Subject: [PATCH 057/196] Story #109367018 -
poll_pending_update_rejected_by_registrant typo
---
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 16e643b16..b441f8fd3 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -904,7 +904,7 @@ en:
edit_zone: 'Edit zone'
there_are_count_domains_in_this_zone: 'There are %{count} domains in this zone'
poll_pending_update_confirmed_by_registrant: 'Registrant confirmed domain update'
- poll_pending_update_rejected_by_registranti: 'Registrant rejected domain update'
+ poll_pending_update_rejected_by_registrant: 'Registrant rejected domain update'
poll_pending_delete_rejected_by_registrant: 'Registrant rejected domain deletion'
poll_pending_delete_confirmed_by_registrant: 'Registrant confirmed domain deletion'
manage: Manage
From 51a579891401964bf37f90d10f97deccda689566 Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Wed, 16 Dec 2015 16:14:05 +0200
Subject: [PATCH 058/196] Story #109367018 - add new model to handle domain
values are changing, and need to be captured now, not later New model will
provide data to DomainMailer customized as needed for the invocation reason
as passed via symbol to send_mail(). The mail templetes then required
modification to use the new data model. This should handle all the data
errors in the update process, including pendingUpdate, confirmed, rejected or
expired.
---
app/jobs/domain_update_confirm_job.rb | 24 +--
app/mailers/domain_mailer.rb | 128 +++----------
app/models/domain.rb | 11 +-
app/models/domain_mail_model.rb | 176 ++++++++++++++++++
app/models/epp/domain.rb | 5 +-
...d_notification_for_new_registrant.html.erb | 8 +-
...d_notification_for_new_registrant.text.erb | 8 +-
...e_notification_for_new_registrant.html.erb | 42 ++---
...e_notification_for_new_registrant.text.erb | 42 ++---
...d_notification_for_new_registrant.html.erb | 8 +-
...d_notification_for_new_registrant.text.erb | 8 +-
...update_request_for_old_registrant.html.erb | 36 ++--
...update_request_for_old_registrant.text.erb | 36 ++--
...d_notification_for_new_registrant.html.erb | 36 ++--
...d_notification_for_new_registrant.text.erb | 36 ++--
...d_notification_for_old_registrant.html.erb | 8 +-
...d_notification_for_old_registrant.text.erb | 8 +-
17 files changed, 366 insertions(+), 254 deletions(-)
create mode 100644 app/models/domain_mail_model.rb
diff --git a/app/jobs/domain_update_confirm_job.rb b/app/jobs/domain_update_confirm_job.rb
index 28294ef25..4f2c1e9ad 100644
--- a/app/jobs/domain_update_confirm_job.rb
+++ b/app/jobs/domain_update_confirm_job.rb
@@ -4,18 +4,18 @@ class DomainUpdateConfirmJob < Que::Job
ActiveRecord::Base.transaction do
domain = Epp::Domain.find(domain_id)
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.clean_pendings!
- when RegistrantVerification::REJECTED
- DomainMailer.pending_update_rejected_notification_for_new_registrant(domain_id).deliver
- 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
+ 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.clean_pendings!
+ 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
end
diff --git a/app/mailers/domain_mailer.rb b/app/mailers/domain_mailer.rb
index 3788dd510..4963cb02a 100644
--- a/app/mailers/domain_mailer.rb
+++ b/app/mailers/domain_mailer.rb
@@ -1,109 +1,41 @@
class DomainMailer < ApplicationMailer
include Que::Mailer
- def pending_update_request_for_old_registrant(domain_id, old_registrant_id, should_deliver)
- @domain = Domain.find_by(id: domain_id)
- @old_registrant = Registrant.find(old_registrant_id)
- return unless @domain
- return if delivery_off?(@domain, should_deliver)
-
- if @domain.registrant_verification_token.blank?
- logger.warn "EMAIL NOT DELIVERED: registrant_verification_token is missing for #{@domain.name}"
- return
- end
-
- if @domain.registrant_verification_asked_at.blank?
- logger.warn "EMAIL NOT DELIVERED: registrant_verification_asked_at is missing for #{@domain.name}"
- return
- end
-
- confirm_path = "#{ENV['registrant_url']}/registrant/domain_update_confirms"
- @verification_url = "#{confirm_path}/#{@domain.id}?token=#{@domain.registrant_verification_token}"
-
- return if whitelist_blocked?(@old_registrant.email)
- mail(to: format(@old_registrant.email),
- subject: "#{I18n.t(:pending_update_request_for_old_registrant_subject,
- name: @domain.name)} [#{@domain.name}]")
+ def pending_update_request_for_old_registrant(params)
+ compose_from(params)
end
- def pending_update_notification_for_new_registrant(domain_id, old_registrant_id, should_deliver)
- @domain = Domain.find_by(id: domain_id)
- @old_registrant = Registrant.find(old_registrant_id)
- return unless @domain
- return if delivery_off?(@domain, should_deliver)
+ def pending_update_notification_for_new_registrant(params)
+ compose_from(params)
+ end
- if @domain.registrant_verification_token.blank?
- logger.warn "EMAIL NOT DELIVERED: registrant_verification_token is missing for #{@domain.name}"
+ def registrant_updated_notification_for_new_registrant(params)
+ compose_from(params)
+ end
+
+ def registrant_updated_notification_for_old_registrant(params)
+ compose_from(params)
+ end
+
+ def pending_update_rejected_notification_for_new_registrant(params)
+ compose_from(params)
+ end
+
+ def pending_update_expired_notification_for_new_registrant(params)
+ compose_from(params)
+ end
+
+ # app/models/DomainMailModel provides the data for mail that can be composed_from
+ # which ensures that values of objects are captured when they are valid, not later when this method is executed
+ def compose_from(params)
+ @params = params
+ return if delivery_off?(params, params[:deliver_emails])
+ return if whitelist_blocked?(params[:recipient])
+ params[:errors].map do |error|
+ logger.warn error
return
end
-
- if @domain.registrant_verification_asked_at.blank?
- logger.warn "EMAIL NOT DELIVERED: registrant_verification_asked_at is missing for #{@domain.name}"
- return
- end
-
- @new_registrant = @domain.registrant # NB! new registrant at this point
-
- return if whitelist_blocked?(@new_registrant.email)
- mail(to: format(@new_registrant.email),
- subject: "#{I18n.t(:pending_update_notification_for_new_registrant_subject,
- name: @domain.name)} [#{@domain.name}]")
- end
-
- def registrant_updated_notification_for_new_registrant(domain_id, should_deliver)
- @domain = Domain.find_by(id: domain_id)
- return unless @domain
- return if delivery_off?(@domain, should_deliver)
-
- return if whitelist_blocked?(@domain.registrant_email)
- mail(to: format(@domain.registrant_email),
- subject: "#{I18n.t(:registrant_updated_notification_for_new_registrant_subject,
- name: @domain.name)} [#{@domain.name}]")
- end
-
- def registrant_updated_notification_for_old_registrant(domain_id, should_deliver)
- domain = Domain.find_by(id: domain_id)
- return unless domain
- return if delivery_off?(@domain, should_deliver)
-
- @old_registrant_email = domain.registrant_email # Nb! before applying pending updates
-
- return if whitelist_blocked?(@old_registrant_email)
- mail(to: format(@old_registrant_email),
- subject: "#{I18n.t(:registrant_updated_notification_for_old_registrant_subject,
- name: @domain.name)} [#{@domain.name}]")
- end
-
- def pending_update_rejected_notification_for_new_registrant(domain_id)
- @domain = Domain.find_by(id: domain_id)
- return unless @domain
- # no delivery off control, driggered by que, no epp request
-
- @new_registrant_email = @domain.pending_json['new_registrant_email']
- @new_registrant_name = @domain.pending_json['new_registrant_name']
-
- return if whitelist_blocked?(@new_registrant_email)
- mail(to: format(@new_registrant_email),
- subject: "#{I18n.t(:pending_update_rejected_notification_for_new_registrant_subject,
- name: @domain.name)} [#{@domain.name}]")
- end
-
- def pending_update_expired_notification_for_new_registrant(domain_id)
- @domain = Domain.find_by(id: domain_id)
- return unless @domain
- # no delivery off control, driggered by cron, no epp request
-
- @new_registrant_email = @domain.pending_json['new_registrant_email']
- @new_registrant_name = @domain.pending_json['new_registrant_name']
-
- return if whitelist_blocked?(@new_registrant_email)
- if @new_registrant_email.blank?
- logger.info "EMAIL NOT DELIVERED: no registrant email [pending_update_expired_notification_for_new_registrant]"
- return
- end
- mail(to: format(@new_registrant_email),
- subject: "#{I18n.t(:pending_update_expired_notification_for_new_registrant_subject,
- name: @domain.name)} [#{@domain.name}]")
+ mail(to: params[:recipient], subject: params[:subject])
end
def pending_deleted(domain_id, old_registrant_id, should_deliver)
diff --git a/app/models/domain.rb b/app/models/domain.rb
index 842293842..d74eaf9a3 100644
--- a/app/models/domain.rb
+++ b/app/models/domain.rb
@@ -239,7 +239,7 @@ class Domain < ActiveRecord::Base
end
count += 1
if domain.pending_update?
- DomainMailer.pending_update_expired_notification_for_new_registrant(domain.id).deliver
+ send_mail :pending_update_expired_notification_for_new_registrant
end
if domain.pending_delete? || domain.pending_delete_confirmation?
DomainMailer.pending_delete_expired_notification(domain.id, true).deliver
@@ -451,8 +451,8 @@ class Domain < ActiveRecord::Base
new_registrant_email = registrant.email
new_registrant_name = registrant.name
- DomainMailer.pending_update_request_for_old_registrant(id, registrant_id_was, deliver_emails).deliver
- DomainMailer.pending_update_notification_for_new_registrant(id, registrant_id_was, deliver_emails).deliver
+ send_mail :pending_update_request_for_old_registrant
+ send_mail :pending_update_notification_for_new_registrant
reload # revert back to original
@@ -818,5 +818,10 @@ class Domain < ActiveRecord::Base
status_notes[status] = notes[i]
end
end
+
+ def send_mail(action)
+ DomainMailer.send(action, DomainMailModel.new(self).send(action)).deliver
+ end
+
end
# rubocop: enable Metrics/ClassLength
diff --git a/app/models/domain_mail_model.rb b/app/models/domain_mail_model.rb
new file mode 100644
index 000000000..045ba4b3e
--- /dev/null
+++ b/app/models/domain_mail_model.rb
@@ -0,0 +1,176 @@
+class DomainMailModel
+ # Capture current values used in app/views/mailers/domain_mailer/* and app/mailers/domain_mailer will send later
+
+ def initialize(domain)
+ @domain = domain
+ @params = {errors: [], deliver_emails: domain.deliver_emails, id: domain.id}
+ end
+
+ def pending_update_request_for_old_registrant
+ registrant_old
+ subject(:pending_update_request_for_old_registrant_subject)
+ confirm_update
+ domain_info
+ compose
+ end
+
+ def pending_update_notification_for_new_registrant
+ # NB! new registrant at this point
+ registrant
+ subject(:pending_update_notification_for_new_registrant_subject)
+ domain_info
+ compose
+ end
+
+ def registrant_updated_notification_for_new_registrant
+ registrant
+ subject(:registrant_updated_notification_for_new_registrant_subject)
+ domain_info
+ compose
+ end
+
+ def registrant_updated_notification_for_old_registrant
+ registrant_old
+ subject(:registrant_updated_notification_for_old_registrant_subject)
+ registrant_name
+ compose
+ end
+
+ def pending_update_rejected_notification_for_new_registrant
+ registrant_pending
+ subject(:pending_update_rejected_notification_for_new_registrant_subject)
+ @params[:deliver_emails] = true # trigger from que
+ @params[:registrar_name] = @domain.registrar.name
+ compose
+ end
+
+ def pending_update_expired_notification_for_new_registrant
+ registrant_pending
+ subject(:pending_update_expired_notification_for_new_registrant_subject)
+ compose
+ end
+
+ def pending_deleted
+ registrant
+ subject(:domain_pending_deleted_subject)
+ confirm_delete
+ compose
+ end
+
+ def pending_delete_rejected_notification
+ registrant
+ subject(:pending_delete_rejected_notification_subject)
+ compose
+ end
+
+ def pending_delete_expired_notification
+ registrant
+ subject(:pending_delete_expired_notification_subject)
+ compose
+ end
+
+ def delete_confirmation
+ registrant
+ subject(:delete_confirmation_subject)
+ compose
+ end
+
+ def force_delete
+ admins
+ subject(:force_delete_subject)
+ compose
+ end
+
+ private
+
+ def registrant_old
+ @params[:recipient] = format Registrant.find(@domain.registrant_id_was).email
+ end
+
+ def registrant
+ @params[:recipient] = format @domain.registrant.email
+ end
+
+ def registrant_name
+ @params[:registrant_name] = @domain.registrant.name
+ end
+
+ def registrant_pending
+ @params[:new_registrant_emai] = @domain.pending_json['new_registrant_email']
+ @params[:new_registrant_name] = @domain.pending_json['new_registrant_name']
+ end
+
+ # registrant and domain admin contacts
+ def admins
+ emails = ([@domain.registrant.email] + @domain.admin_contacts.map { |x| format(x.email) })
+ @params[:recipient] = emails.uniq.map { |x| format(x) }
+ end
+
+ # puny internet domain name, TODO: username
+ def format(email)
+ user, host = email.split('@')
+ host = SimpleIDN.to_ascii(host)
+ "#{user}@#{host}"
+ end
+
+ def subject(subject)
+ @params[:name] = @domain.name
+ @params[:subject] = I18n.t(subject, name: @domain.name)
+ end
+
+ def confirm_update
+ verification_url('domain_update_confirms')
+ end
+
+ def confirm_delete
+ verification_url('domain_delete_confirms')
+ end
+
+ def compose
+ @params
+ end
+
+ #private
+
+ def verification_url(path)
+ token = verification_token or return
+ @params[:verification_url] = "#{ENV['registrant_url']}/registrant/#{path}/#{@domain.id}?token=#{token}"
+ end
+
+ def verification_token
+ return warn_missing(:registrant_verification_token) if @domain.registrant_verification_token.blank?
+ return warn_missing(:registrant_verification_asked_at) if @domain.registrant_verification_asked_at.blank?
+ @domain.registrant_verification_token
+ end
+
+ def domain_info
+ [:name, :registrar_name,
+ :registrant_name, :registrant_ident, :registrant_email,
+ :registrant_street,:registrant_city, :registrant_country
+ ].each do |attr|
+ @params.store attr, @domain.send(attr)
+ end
+ @params.store :registrant_priv, @domain.registrant.priv?
+ @params.store old_registrant_name, Registrant.find(@domain.registrant_id_was).name
+ @params
+ end
+
+ def warn_no_email(item)
+ #reason = "#{item.to_s} for #{@domain.name}"
+ warn_not_delivered item #reason
+ nil
+ end
+
+ def warn_missing(item)
+ warn_not_delivered "#{item.to_s} is missing for #{@domain.name}"
+ end
+
+ def warn_not_delivered(reason)
+ message = "EMAIL NOT DELIVERED: #{reason}"
+ @params[:errors] << message
+# Rails.logger.warn message
+ nil
+ end
+
+end
+
diff --git a/app/models/epp/domain.rb b/app/models/epp/domain.rb
index 40b374003..189b5aa1c 100644
--- a/app/models/epp/domain.rb
+++ b/app/models/epp/domain.rb
@@ -500,7 +500,6 @@ class Epp::Domain < Domain
# rubocop: enable Metrics/CyclomaticComplexity
def apply_pending_update!
- old_registrant_email = DomainMailer.registrant_updated_notification_for_old_registrant(id, deliver_emails)
preclean_pendings
user = ApiUser.find(pending_json['current_user_id'])
frame = Nokogiri::XML(pending_json['frame'])
@@ -512,8 +511,8 @@ class Epp::Domain < Domain
return unless update(frame, user, false)
clean_pendings!
self.deliver_emails = true # turn on email delivery
- DomainMailer.registrant_updated_notification_for_new_registrant(id, deliver_emails).deliver
- old_registrant_email.deliver
+ send_mail :registrant_updated_notification_for_old_registrant
+ send_mail :registrant_updated_notification_for_new_registrant
true
end
diff --git a/app/views/mailers/domain_mailer/pending_update_expired_notification_for_new_registrant.html.erb b/app/views/mailers/domain_mailer/pending_update_expired_notification_for_new_registrant.html.erb
index a8bf8723d..cfa539736 100644
--- a/app/views/mailers/domain_mailer/pending_update_expired_notification_for_new_registrant.html.erb
+++ b/app/views/mailers/domain_mailer/pending_update_expired_notification_for_new_registrant.html.erb
@@ -1,8 +1,8 @@
Tere,
-Domeeni <%= @domain.name %> registreerija <%= @domain.registrant_name %> ei kinnitanud tähtaegselt registreerija vahetuse taotlust. Domeeni <%= @domain.name %> registreerija vahetus on sellest tulenevalt tühistatud.
+Domeeni <%= @params[:name] %> registreerija <%= @params[:registrant_name] %> ei kinnitanud tähtaegselt registreerija vahetuse taotlust. Domeeni <%= @params[:name] %> registreerija vahetus on sellest tulenevalt tühistatud.
-Küsimuste korral palun võtke ühendust registripidajaga <%= @domain.registrar_name %>, kelle kontaktid leiate http://internet.ee/registripidajad/akrediteeritud-registripidajad
+Küsimuste korral palun võtke ühendust registripidajaga <%= @params[:registrar_name] %>, kelle kontaktid leiate http://internet.ee/registripidajad/akrediteeritud-registripidajad
Lugupidamisega
Eesti Interneti SA
@@ -11,9 +11,9 @@ Eesti Interneti SA
Hi,
-Domain registrant change has been expired for the domain <%= @domain.name %>.
+Domain registrant change has been expired for the domain <%= @params[:name] %>.
-Please contact to your registrar <%= @domain.registrar_name %> if you have any questions.
+Please contact to your registrar <%= @params[:registrar_name] %> if you have any questions.
Best Regards,
Estonian Internet Foundation
diff --git a/app/views/mailers/domain_mailer/pending_update_expired_notification_for_new_registrant.text.erb b/app/views/mailers/domain_mailer/pending_update_expired_notification_for_new_registrant.text.erb
index 020a9da65..626583562 100644
--- a/app/views/mailers/domain_mailer/pending_update_expired_notification_for_new_registrant.text.erb
+++ b/app/views/mailers/domain_mailer/pending_update_expired_notification_for_new_registrant.text.erb
@@ -1,8 +1,8 @@
Tere,
-Domeeni <%= @domain.name %> registreerija <%= @domain.registrant_name %> ei kinnitanud tähtaegselt registreerija vahetuse taotlust. Domeeni <%= @domain.name %> registreerija vahetus on sellest tulenevalt tühistatud.
+Domeeni <%= @params[:name] %> registreerija <%= @params[:registrant_name] %> ei kinnitanud tähtaegselt registreerija vahetuse taotlust. Domeeni <%= @params[:name] %> registreerija vahetus on sellest tulenevalt tühistatud.
-Küsimuste korral palun võtke ühendust registripidajaga <%= @domain.registrar_name %>, kelle kontaktid leiate http://internet.ee/registripidajad/akrediteeritud-registripidajad
+Küsimuste korral palun võtke ühendust registripidajaga <%= @params[:registrar_name] %>, kelle kontaktid leiate http://internet.ee/registripidajad/akrediteeritud-registripidajad
Lugupidamisega
Eesti Interneti SA
@@ -11,9 +11,9 @@ Eesti Interneti SA
Hi,
-Domain registrant change has been expired for the domain <%= @domain.name %>.
+Domain registrant change has been expired for the domain <%= @params[:name] %>.
-Please contact to your registrar <%= @domain.registrar_name %> if you have any questions.
+Please contact to your registrar <%= @params[:registrar_name] %> if you have any questions.
Best Regards,
Estonian Internet Foundation
diff --git a/app/views/mailers/domain_mailer/pending_update_notification_for_new_registrant.html.erb b/app/views/mailers/domain_mailer/pending_update_notification_for_new_registrant.html.erb
index df31c9139..9f33535ea 100644
--- a/app/views/mailers/domain_mailer/pending_update_notification_for_new_registrant.html.erb
+++ b/app/views/mailers/domain_mailer/pending_update_notification_for_new_registrant.html.erb
@@ -1,25 +1,25 @@
Tere,
-Registripidaja <%= @domain.registrar_name %> vahendusel on algatatud <%= @domain.name %> domeeni omanikuvahetuse protseduur.
+Registripidaja <%= @params[:registrar_name] %> vahendusel on algatatud <%= @params[:name] %> domeeni omanikuvahetuse protseduur.
-Palun veenduge, et muudatus on korrektne ning probleemide korral pöörduge oma registripidaja poole. Teie registripidaja on <%= @domain.registrar_name %>
+Palun veenduge, et muudatus on korrektne ning probleemide korral pöörduge oma registripidaja poole. Teie registripidaja on <%= @params[:registrar_name] %>
-Juhime Teie tähelepanu asjaolule, et omanikuvahetuse protseduur viiaks lõpule vaid juhul, kui domeeni hetkel kehtiv registreerija <%= @old_registrant.name %> omanikuvahetuse tähtaegselt kinnitab.
+Juhime Teie tähelepanu asjaolule, et omanikuvahetuse protseduur viiaks lõpule vaid juhul, kui domeeni hetkel kehtiv registreerija <%= @params[:old_registrant_name] %> omanikuvahetuse tähtaegselt kinnitab.
-Juhul kui <%= @old_registrant.name %> lükkab omanikuvahtuse taotluse tagasi või ei anna kinnitust enne <%= Setting.expire_pending_confirmation %> tundi, omanikuvahetuse protseduur tühistatakse.
+Juhul kui <%= @params[:old_registrant_name] %> lükkab omanikuvahtuse taotluse tagasi või ei anna kinnitust enne <%= Setting.expire_pending_confirmation %> tundi, omanikuvahetuse protseduur tühistatakse.
-Küsimuste korral palun võtke ühendust registripidajaga <%= @domain.registrar_name %>, kelle kontaktid leiate http://internet.ee/registripidajad/akrediteeritud-registripidajad
+Küsimuste korral palun võtke ühendust registripidajaga <%= @params[:registrar_name] %>, kelle kontaktid leiate http://internet.ee/registripidajad/akrediteeritud-registripidajad
Lugupidamisega
Eesti Interneti SA
@@ -28,20 +28,20 @@ Eesti Interneti SA
Hi,
-Registrant change process for the domain <%= @domain.name %> has been started.
+Registrant change process for the domain <%= @params[:name] %> has been started.
-Please contact to your registrar <%= @domain.registrar_name %> if you have any questions.
+Please contact to your registrar <%= @params[:registrar_name] %> if you have any questions.
Best Regards,
Estonian Internet Foundation
diff --git a/app/views/mailers/domain_mailer/pending_update_notification_for_new_registrant.text.erb b/app/views/mailers/domain_mailer/pending_update_notification_for_new_registrant.text.erb
index 80265c05f..1aa2d998d 100644
--- a/app/views/mailers/domain_mailer/pending_update_notification_for_new_registrant.text.erb
+++ b/app/views/mailers/domain_mailer/pending_update_notification_for_new_registrant.text.erb
@@ -1,25 +1,25 @@
Tere,
-Registripidaja <%= @domain.registrar_name %> vahendusel on algatatud <%= @domain.name %> domeeni omanikuvahetuse protseduur.
+Registripidaja <%= @params[:registrar_name] %> vahendusel on algatatud <%= @params[:name] %> domeeni omanikuvahetuse protseduur.
-Palun veenduge, et muudatus on korrektne ning probleemide korral pöörduge oma registripidaja poole. Teie registripidaja on <%= @domain.registrar_name %>
+Palun veenduge, et muudatus on korrektne ning probleemide korral pöörduge oma registripidaja poole. Teie registripidaja on <%= @params[:registrar_name] %>
Uued registreerija andmed:
-Nimi: <%= @domain.registrant_name %>
-<% if @domain.registrant.priv? %>
-Isikukood: <%= @domain.registrant_ident %>
+Nimi: <%= @params[:registrant_name] %>
+<% if @params[:registrant_priv] %>
+Isikukood: <%= @params[:registrant_ident] %>
<% else %>
-Äriregistrikood: <%= @domain.registrant_ident %>
+Äriregistrikood: <%= @params[:registrant_ident] %>
<% end %>
-Tänav: <%= @domain.registrant_street %>
-Linn: <%= @domain.registrant_city %>
-Riik: <%= @domain.registrant_country %>
+Tänav: <%= @params[:registrant_street] %>
+Linn: <%= @params[:registrant_city] %>
+Riik: <%= @params[:registrant_country] %>
-Juhime Teie tähelepanu asjaolule, et omanikuvahetuse protseduur viiaks lõpule vaid juhul, kui domeeni hetkel kehtiv registreerija <%= @old_registrant.name %> omanikuvahetuse tähtaegselt kinnitab.
+Juhime Teie tähelepanu asjaolule, et omanikuvahetuse protseduur viiaks lõpule vaid juhul, kui domeeni hetkel kehtiv registreerija <%= @params[:old_registrant_name] %> omanikuvahetuse tähtaegselt kinnitab.
-Juhul kui <%= @old_registrant.name %> lükkab omanikuvahtuse taotluse tagasi või ei anna kinnitust enne <%= Setting.expire_pending_confirmation %> tundi, omanikuvahetuse protseduur tühistatakse.
+Juhul kui <%= @params[:old_registrant_name] %> lükkab omanikuvahtuse taotluse tagasi või ei anna kinnitust enne <%= Setting.expire_pending_confirmation %> tundi, omanikuvahetuse protseduur tühistatakse.
-Küsimuste korral palun võtke ühendust registripidajaga <%= @domain.registrar_name %>, kelle kontaktid leiate http://internet.ee/registripidajad/akrediteeritud-registripidajad
+Küsimuste korral palun võtke ühendust registripidajaga <%= @params[:registrar_name] %>, kelle kontaktid leiate http://internet.ee/registripidajad/akrediteeritud-registripidajad
Lugupidamisega
Eesti Interneti SA
@@ -28,20 +28,20 @@ Eesti Interneti SA
Hi,
-Registrant change process for the domain <%= @domain.name %> has been started.
+Registrant change process for the domain <%= @params[:name] %> has been started.
New registrant:
-Name: <%= @domain.registrant_name %>
-<% if @domain.registrant.priv? %>
-Personal code: <%= @domain.registrant_ident %>
+Name: <%= @params[:registrant_name] %>
+<% if @params[:registrant.priv?] %>
+Personal code: <%= @params[:registrant_ident] %>
<% else %>
-Business Registry code: <%= @domain.registrant_ident %>
+Business Registry code: <%= @params[:registrant_ident] %>
<% end %>
-Street: <%= @domain.registrant_street %>
-City: <%= @domain.registrant_city %>
-Country: <%= @domain.registrant_country %>
+Street: <%= @params[:registrant_street] %>
+City: <%= @params[:registrant_city] %>
+Country: <%= @params[:registrant_country] %>
-Please contact to your registrar <%= @domain.registrar_name %> if you have any questions.
+Please contact to your registrar <%= @params[:registrar_name] %> if you have any questions.
Best Regards,
Estonian Internet Foundation
diff --git a/app/views/mailers/domain_mailer/pending_update_rejected_notification_for_new_registrant.html.erb b/app/views/mailers/domain_mailer/pending_update_rejected_notification_for_new_registrant.html.erb
index 94672f176..830b28b5b 100644
--- a/app/views/mailers/domain_mailer/pending_update_rejected_notification_for_new_registrant.html.erb
+++ b/app/views/mailers/domain_mailer/pending_update_rejected_notification_for_new_registrant.html.erb
@@ -1,8 +1,8 @@
Tere,
-Domeeni <%= @domain.name %> registreerija <%= @new_registrant_name %> on domeeni registreerija vahetamise taotluse tagasi lükanud.
+Domeeni <%= @params[:name] %> registreerija <%= @params[:new_registrant_name] %> on domeeni registreerija vahetamise taotluse tagasi lükanud.
-Küsimuste korral palun võtke ühendust registripidajaga <%= @domain.registrar_name %>, kelle kontaktid leiate http://internet.ee/registripidajad/akrediteeritud-registripidajad
+Küsimuste korral palun võtke ühendust registripidajaga <%= @params[:registrar_name] %>, kelle kontaktid leiate http://internet.ee/registripidajad/akrediteeritud-registripidajad
Lugupidamisega,
Eesti Interneti SA
@@ -11,9 +11,9 @@ Eesti Interneti SA
Hi,
-Registrant change was declined for the domain <%= @domain.name %>.
+Registrant change was declined for the domain <%= @params[:name] %>.
-Please contact to your registrar <%= @domain.registrar_name %> if you have any questions.
+Please contact to your registrar <%= @params[:registrar_name] %> if you have any questions.
Best Regards,
Estonian Internet Foundation
diff --git a/app/views/mailers/domain_mailer/pending_update_rejected_notification_for_new_registrant.text.erb b/app/views/mailers/domain_mailer/pending_update_rejected_notification_for_new_registrant.text.erb
index afdf06325..13cd089f2 100644
--- a/app/views/mailers/domain_mailer/pending_update_rejected_notification_for_new_registrant.text.erb
+++ b/app/views/mailers/domain_mailer/pending_update_rejected_notification_for_new_registrant.text.erb
@@ -1,8 +1,8 @@
Tere,
-Domeeni <%= @domain.name %> registreerija <%= @new_registrant_name %> on domeeni registreerija vahetamise taotluse tagasi lükanud.
+Domeeni <%= @params[:name] %> registreerija <%= @params[:new_registrant_name] %> on domeeni registreerija vahetamise taotluse tagasi lükanud.
-Küsimuste korral palun võtke ühendust registripidajaga <%= @domain.registrar_name %>, kelle kontaktid leiate http://internet.ee/registripidajad/akrediteeritud-registripidajad
+Küsimuste korral palun võtke ühendust registripidajaga <%= @params[:registrar_name] %>, kelle kontaktid leiate http://internet.ee/registripidajad/akrediteeritud-registripidajad
Lugupidamisega
Eesti Interneti SA
@@ -11,9 +11,9 @@ Eesti Interneti SA
Hi,
-Registrant change was declined for the domain <%= @domain.name %>.
+Registrant change was declined for the domain <%= @params[:name] %>.
-Please contact to your registrar <%= @domain.registrar_name %> if you have any questions.
+Please contact to your registrar <%= @params[:registrar_name] %> if you have any questions.
Best Regards,
Estonian Internet Foundation
diff --git a/app/views/mailers/domain_mailer/pending_update_request_for_old_registrant.html.erb b/app/views/mailers/domain_mailer/pending_update_request_for_old_registrant.html.erb
index c62cb5561..5da14d96d 100644
--- a/app/views/mailers/domain_mailer/pending_update_request_for_old_registrant.html.erb
+++ b/app/views/mailers/domain_mailer/pending_update_request_for_old_registrant.html.erb
@@ -1,23 +1,23 @@
Tere,
-Registrisse laekus taotlus domeeni <%= @domain.name %> registreerija vahetuseks. Palun veenduge, et muudatus on korrektne ning probleemide korral pöörduge oma registripidaja poole. Teie registripidaja on <%= @domain.registrar_name %>
+Registrisse laekus taotlus domeeni <%= @params[:name] %> registreerija vahetuseks. Palun veenduge, et muudatus on korrektne ning probleemide korral pöörduge oma registripidaja poole. Teie registripidaja on <%= @params[:registrar_name] %>
Taotlus on aktiivne <%= Setting.expire_pending_confirmation %> tundi ja lükatakse automaatselt tagasi kui te seda enne ise ei kinnita või tagasi lükka.
Muudatuse kinnitamiseks külastage palun allolevat võrgulehekülge, kontrollige uuesti üle muudatuse andmed ning vajutage nuppu kinnitan:
-<%= link_to @verification_url, @verification_url %>
+<%= link_to @params[:verification_url], @params[:verification_url] %>
Lugupidamisega
Eesti Interneti SA
@@ -26,23 +26,23 @@ Eesti Interneti SA
Hi,
-Application for changing registrant of your domain <%= @domain.name %> has been filed. Please make sure that the update and information are correct. Incase of problems please turn to your registrar. Your registrar is <%= @domain.registrar_name %>
+Application for changing registrant of your domain <%= @params[:name] %> has been filed. Please make sure that the update and information are correct. Incase of problems please turn to your registrar. Your registrar is <%= @params[:registrar_name] %>
The application will remain in pending status for <%= Setting.expire_pending_confirmation %> hrs and will be automaticcally rejected if it is not approved nor rejected before.
To confirm the update please visit this website, once again review the data and press approve:
-<%= link_to @verification_url, @verification_url %>
+<%= link_to @params[:verification_url], @params[:verification_url] %>
Best Regards,
Estonian Internet Foundation
diff --git a/app/views/mailers/domain_mailer/pending_update_request_for_old_registrant.text.erb b/app/views/mailers/domain_mailer/pending_update_request_for_old_registrant.text.erb
index 04a85bf5e..27e394b87 100644
--- a/app/views/mailers/domain_mailer/pending_update_request_for_old_registrant.text.erb
+++ b/app/views/mailers/domain_mailer/pending_update_request_for_old_registrant.text.erb
@@ -1,21 +1,21 @@
Tere,
-Registrisse laekus taotlus domeeni <%= @domain.name %> registreerija vahetuseks. Palun veenduge, et muudatus on korrektne ning probleemide korral pöörduge oma registripidaja poole. Teie registripidaja on <%= @domain.registrar_name %>
+Registrisse laekus taotlus domeeni <%= @params[:name] %> registreerija vahetuseks. Palun veenduge, et muudatus on korrektne ning probleemide korral pöörduge oma registripidaja poole. Teie registripidaja on <%= @params[:registrar_name] %>
Uued registreerija andmed:
-Nimi: <%= @domain.registrant_name %>
-<% if @domain.registrant.priv? %>
-Isikukood: <%= @domain.registrant_ident %>
+Nimi: <%= @params[:registrant_name] %>
+<% if @params[:registrant_priv] %>
+Isikukood: <%= @params[:registrant_ident] %>
<% else %>
-Äriregistrikood: <%= @domain.registrant_ident %>
+Äriregistrikood: <%= @params[:registrant_ident] %>
<% end %>
-Tänav: <%= @domain.registrant_street %>
-Linn: <%= @domain.registrant_city %>
-Riik: <%= @domain.registrant_country %>
+Tänav: <%= @params[:registrant_street] %>
+Linn: <%= @params[:registrant_city] %>
+Riik: <%= @params[:registrant_country] %>
Taotlus on aktiivne <%= Setting.expire_pending_confirmation %> tundi ja lükatakse automaatselt tagasi kui te seda enne ise ei kinnita või tagasi lükka.
Muudatuse kinnitamiseks külastage palun allolevat võrgulehekülge, kontrollige uuesti üle muudatuse andmed ning vajutage nuppu kinnitan:
-<%= @verification_url %>
+<%= @params[:verification_url] %>
Lugupidamisega
Eesti Interneti SA
@@ -24,22 +24,22 @@ Eesti Interneti SA
Hi,
-Application for changing registrant of your domain <%= @domain.name %> has been filed. Please make sure that the update and information are correct. Incase of problems please turn to your registrar. Your registrar is <%= @domain.registrar_name %>
+Application for changing registrant of your domain <%= @params[:name] %> has been filed. Please make sure that the update and information are correct. Incase of problems please turn to your registrar. Your registrar is <%= @params[:registrar_name] %>
New registrant:
-Name: <%= @domain.registrant_name %>
-<% if @domain.registrant.priv? %>
-Personal code: <%= @domain.registrant_ident %>
+Name: <%= @params[:registrant_name] %>
+<% if @params[:registrant_priv] %>
+Personal code: <%= @params[:registrant_ident] %>
<% else %>
-Business Registry code: <%= @domain.registrant_ident %>
+Business Registry code: <%= @params[:registrant_ident] %>
<% end %>
-Street: <%= @domain.registrant_street %>
-City: <%= @domain.registrant_city %>
-Country: <%= @domain.registrant_country %>
+Street: <%= @params[:registrant_street] %>
+City: <%= @params[:registrant_city] %>
+Country: <%= @params[:registrant_country] %>
The application will remain in pending status for <%= Setting.expire_pending_confirmation %> hrs and will be automaticcally rejected if it is not approved nor rejected before.
To confirm the update please visit this website, once again review the data and press approve:
-<%= @verification_url %>
+<%= @params[:verification_url] %>
Best Regards,
Estonian Internet Foundation
diff --git a/app/views/mailers/domain_mailer/registrant_updated_notification_for_new_registrant.html.erb b/app/views/mailers/domain_mailer/registrant_updated_notification_for_new_registrant.html.erb
index eb8352b8e..74021a489 100644
--- a/app/views/mailers/domain_mailer/registrant_updated_notification_for_new_registrant.html.erb
+++ b/app/views/mailers/domain_mailer/registrant_updated_notification_for_new_registrant.html.erb
@@ -1,18 +1,18 @@
Tere,
-Domeeni <%= @domain.name %> registreerija vahetuse taotlus on kinnitatud ning andmed registris uuendatud.
+Domeeni <%= @params[:name] %> registreerija vahetuse taotlus on kinnitatud ning andmed registris uuendatud.
Lugupidamisega
Eesti Interneti SA
@@ -21,19 +21,19 @@ Eesti Interneti SA
Hi,
-Process for changing registrant of the domain <%= @domain.name %> has been approved and the data in the registry is updated.
+Process for changing registrant of the domain <%= @params[:name] %> has been approved and the data in the registry is updated.
Best Regards,
Estonian Internet Foundation
diff --git a/app/views/mailers/domain_mailer/registrant_updated_notification_for_new_registrant.text.erb b/app/views/mailers/domain_mailer/registrant_updated_notification_for_new_registrant.text.erb
index 503c111f6..279afa2b5 100644
--- a/app/views/mailers/domain_mailer/registrant_updated_notification_for_new_registrant.text.erb
+++ b/app/views/mailers/domain_mailer/registrant_updated_notification_for_new_registrant.text.erb
@@ -1,18 +1,18 @@
Tere,
-Domeeni <%= @domain.name %> registreerija vahetuse taotlus on kinnitatud ning andmed registris uuendatud.
+Domeeni <%= @params[:name] %> registreerija vahetuse taotlus on kinnitatud ning andmed registris uuendatud.
Uued registreerija andmed:
-Nimi: <%= @domain.registrant_name %>
-<% if @domain.registrant.priv? %>
-Isikukood: <%= @domain.registrant_ident %>
+Nimi: <%= @params[:registrant_name] %>
+<% if @params[:registrant_priv] %>
+Isikukood: <%= @params[:registrant_ident] %>
<% else %>
-Äriregistrikood: <%= @domain.registrant_ident %>
+Äriregistrikood: <%= @params[:registrant_ident] %>
<% end %>
-Epost: <%= @domain.registrant_email %>
-Tänav: <%= @domain.registrant_street %>
-Linn: <%= @domain.registrant_city %>
-Riik: <%= @domain.registrant_country %>
+Epost: <%= @params[:registrant_email] %>
+Tänav: <%= @params[:registrant_street] %>
+Linn: <%= @params[:registrant_city] %>
+Riik: <%= @params[:registrant_country] %>
Lugupidamisega
Eesti Interneti SA
@@ -21,19 +21,19 @@ Eesti Interneti SA
Hi,
-Process for changing registrant of the domain <%= @domain.name %> has been approved and the data in the registry is updated.
+Process for changing registrant of the domain <%= @params[:name] %> has been approved and the data in the registry is updated.
New registrant:
-Name: <%= @domain.registrant_name %>
-<% if @domain.registrant.priv? %>
-Personal code: <%= @domain.registrant_ident %>
+Name: <%= @params[:registrant_name] %>
+<% if @params[:registrant_priv] %>
+Personal code: <%= @params[:registrant_ident] %>
<% else %>
-Business Registry code: <%= @domain.registrant_ident %>
+Business Registry code: <%= @params[:registrant_ident] %>
<% end %>
-E-mail: <%= @domain.registrant_email %>
-Street: <%= @domain.registrant_street %>
-City: <%= @domain.registrant_city %>
-Country: <%= @domain.registrant_country %>
+E-mail: <%= @params[:registrant_email] %>
+Street: <%= @params[:registrant_street] %>
+City: <%= @params[:registrant_city] %>
+Country: <%= @params[:registrant_country] %>
Best Regards,
Estonian Internet Foundation
diff --git a/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.html.erb b/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.html.erb
index bdfda76dc..1ad338816 100644
--- a/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.html.erb
+++ b/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.html.erb
@@ -1,9 +1,9 @@
Tere,
-Domeeni <%= @domain.name %> registreerija vahetuse taotlus on kinnitatud ning andmed registris uuendatud.
+Domeeni <%= @params[:name] %> registreerija vahetuse taotlus on kinnitatud ning andmed registris uuendatud.
Uued registreerija:
-Nimi: <%= @domain.registrant_name %>
+Nimi: <%= @params[:registrant_name] %>
Lugupidamisega
Eesti Interneti SA
@@ -12,10 +12,10 @@ Eesti Interneti SA
Hi,
-Process for changing registrant of the domain <%= @domain.name %> has been approved and the data in the registry is updated.
+Process for changing registrant of the domain <%= @params[:name] %> has been approved and the data in the registry is updated.
New registrant:
-Name: <%= @domain.registrant_name %>
+Name: <%= @params[:registrant_name] %>
Best Regards,
Estonian Internet Foundation
diff --git a/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.text.erb b/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.text.erb
index 08fb37fe0..beae5cfd8 100644
--- a/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.text.erb
+++ b/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.text.erb
@@ -1,9 +1,9 @@
Tere,
-Domeeni <%= @domain.name %> registreerija vahetuse taotlus on kinnitatud ning andmed registris uuendatud.
+Domeeni <%= @params[:name] %> registreerija vahetuse taotlus on kinnitatud ning andmed registris uuendatud.
Uued registreerija:
-Nimi: <%= @domain.registrant_name %>
+Nimi: <%= @params[:registrant_name] %>
Lugupidamisega
Eesti Interneti SA
@@ -12,10 +12,10 @@ Eesti Interneti SA
Hi,
-Process for changing registrant of the domain <%= @domain.name %> has been approved and the data in the registry is updated.
+Process for changing registrant of the domain <%= @params[:name] %> has been approved and the data in the registry is updated.
New registrant:
-Name: <%= @domain.registrant_name %>
+Name: <%= @params[:registrant_name] %>
Best Regards,
Estonian Internet Foundation
From 504c4454c5fd05fc772c63c0a4a727da76db55c7 Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Wed, 16 Dec 2015 17:53:08 +0200
Subject: [PATCH 059/196] Story #109367018 - minor bug fixes, missing
punctuation, wrong symbol
---
app/models/domain_mail_model.rb | 7 +++----
...pending_update_notification_for_new_registrant.text.erb | 2 +-
2 files changed, 4 insertions(+), 5 deletions(-)
diff --git a/app/models/domain_mail_model.rb b/app/models/domain_mail_model.rb
index 045ba4b3e..01d01a6dc 100644
--- a/app/models/domain_mail_model.rb
+++ b/app/models/domain_mail_model.rb
@@ -47,6 +47,7 @@ class DomainMailModel
def pending_update_expired_notification_for_new_registrant
registrant_pending
subject(:pending_update_expired_notification_for_new_registrant_subject)
+ domain_info
compose
end
@@ -96,7 +97,7 @@ class DomainMailModel
end
def registrant_pending
- @params[:new_registrant_emai] = @domain.pending_json['new_registrant_email']
+ @params[:recipient] = @domain.pending_json['new_registrant_email']
@params[:new_registrant_name] = @domain.pending_json['new_registrant_name']
end
@@ -130,8 +131,6 @@ class DomainMailModel
@params
end
- #private
-
def verification_url(path)
token = verification_token or return
@params[:verification_url] = "#{ENV['registrant_url']}/registrant/#{path}/#{@domain.id}?token=#{token}"
@@ -151,7 +150,7 @@ class DomainMailModel
@params.store attr, @domain.send(attr)
end
@params.store :registrant_priv, @domain.registrant.priv?
- @params.store old_registrant_name, Registrant.find(@domain.registrant_id_was).name
+ @params.store :old_registrant_name, Registrant.find(@domain.registrant_id_was).name
@params
end
diff --git a/app/views/mailers/domain_mailer/pending_update_notification_for_new_registrant.text.erb b/app/views/mailers/domain_mailer/pending_update_notification_for_new_registrant.text.erb
index 1aa2d998d..d7f2d7f9c 100644
--- a/app/views/mailers/domain_mailer/pending_update_notification_for_new_registrant.text.erb
+++ b/app/views/mailers/domain_mailer/pending_update_notification_for_new_registrant.text.erb
@@ -32,7 +32,7 @@ Registrant change process for the domain <%= @params[:name] %> has been started.
New registrant:
Name: <%= @params[:registrant_name] %>
-<% if @params[:registrant.priv?] %>
+<% if @params[:registrant_priv] %>
Personal code: <%= @params[:registrant_ident] %>
<% else %>
Business Registry code: <%= @params[:registrant_ident] %>
From 496bb8738d059cbdd3fc697f772f92f3862cb9c3 Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Wed, 16 Dec 2015 18:15:14 +0200
Subject: [PATCH 060/196] Story #109367018 - warn if email missing, and format
pending email
---
app/models/domain_mail_model.rb | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/app/models/domain_mail_model.rb b/app/models/domain_mail_model.rb
index 01d01a6dc..45c550f2d 100644
--- a/app/models/domain_mail_model.rb
+++ b/app/models/domain_mail_model.rb
@@ -97,7 +97,7 @@ class DomainMailModel
end
def registrant_pending
- @params[:recipient] = @domain.pending_json['new_registrant_email']
+ @params[:recipient] = format @domain.pending_json['new_registrant_email']
@params[:new_registrant_name] = @domain.pending_json['new_registrant_name']
end
@@ -109,6 +109,7 @@ class DomainMailModel
# puny internet domain name, TODO: username
def format(email)
+ return warn_no_email if email.nil?
user, host = email.split('@')
host = SimpleIDN.to_ascii(host)
"#{user}@#{host}"
@@ -154,9 +155,8 @@ class DomainMailModel
@params
end
- def warn_no_email(item)
- #reason = "#{item.to_s} for #{@domain.name}"
- warn_not_delivered item #reason
+ def warn_no_email(item = 'email')
+ warn_missing item
nil
end
From 515226042c82ae453aa13b579a9aa86982afe591 Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Wed, 16 Dec 2015 18:25:48 +0200
Subject: [PATCH 061/196] Story #109367018 - seems that
pending_update_rejected_notification_for_new_registrant should name old
registrant rejected change
---
app/models/domain_mail_model.rb | 1 +
...ing_update_rejected_notification_for_new_registrant.html.erb | 2 +-
...ing_update_rejected_notification_for_new_registrant.text.erb | 2 +-
3 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/app/models/domain_mail_model.rb b/app/models/domain_mail_model.rb
index 45c550f2d..fcb8ed6ca 100644
--- a/app/models/domain_mail_model.rb
+++ b/app/models/domain_mail_model.rb
@@ -99,6 +99,7 @@ class DomainMailModel
def registrant_pending
@params[:recipient] = format @domain.pending_json['new_registrant_email']
@params[:new_registrant_name] = @domain.pending_json['new_registrant_name']
+ @params[:old_registrant_name] = @domain.registrant.name
end
# registrant and domain admin contacts
diff --git a/app/views/mailers/domain_mailer/pending_update_rejected_notification_for_new_registrant.html.erb b/app/views/mailers/domain_mailer/pending_update_rejected_notification_for_new_registrant.html.erb
index 830b28b5b..1f9acf666 100644
--- a/app/views/mailers/domain_mailer/pending_update_rejected_notification_for_new_registrant.html.erb
+++ b/app/views/mailers/domain_mailer/pending_update_rejected_notification_for_new_registrant.html.erb
@@ -1,6 +1,6 @@
Tere,
-Domeeni <%= @params[:name] %> registreerija <%= @params[:new_registrant_name] %> on domeeni registreerija vahetamise taotluse tagasi lükanud.
+Domeeni <%= @params[:name] %> registreerija <%= @params[:old_registrant_name] %> on domeeni registreerija vahetamise taotluse tagasi lükanud.
Küsimuste korral palun võtke ühendust registripidajaga <%= @params[:registrar_name] %>, kelle kontaktid leiate http://internet.ee/registripidajad/akrediteeritud-registripidajad
diff --git a/app/views/mailers/domain_mailer/pending_update_rejected_notification_for_new_registrant.text.erb b/app/views/mailers/domain_mailer/pending_update_rejected_notification_for_new_registrant.text.erb
index 13cd089f2..38a83e1b3 100644
--- a/app/views/mailers/domain_mailer/pending_update_rejected_notification_for_new_registrant.text.erb
+++ b/app/views/mailers/domain_mailer/pending_update_rejected_notification_for_new_registrant.text.erb
@@ -1,6 +1,6 @@
Tere,
-Domeeni <%= @params[:name] %> registreerija <%= @params[:new_registrant_name] %> on domeeni registreerija vahetamise taotluse tagasi lükanud.
+Domeeni <%= @params[:name] %> registreerija <%= @params[:old_registrant_name] %> on domeeni registreerija vahetamise taotluse tagasi lükanud.
Küsimuste korral palun võtke ühendust registripidajaga <%= @params[:registrar_name] %>, kelle kontaktid leiate http://internet.ee/registripidajad/akrediteeritud-registripidajad
From 783b792acf6f6ec684aa9f846f534eebf607a911 Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Wed, 16 Dec 2015 20:20:32 +0200
Subject: [PATCH 062/196] Story #109367018 - ensure that updated notice goes to
old registrant, but names new registrant
---
app/models/domain_mail_model.rb | 11 +++--------
app/models/epp/domain.rb | 7 +++++--
...t_updated_notification_for_old_registrant.html.erb | 4 ++--
...t_updated_notification_for_old_registrant.text.erb | 4 ++--
4 files changed, 12 insertions(+), 14 deletions(-)
diff --git a/app/models/domain_mail_model.rb b/app/models/domain_mail_model.rb
index fcb8ed6ca..96a7e2350 100644
--- a/app/models/domain_mail_model.rb
+++ b/app/models/domain_mail_model.rb
@@ -15,8 +15,7 @@ class DomainMailModel
end
def pending_update_notification_for_new_registrant
- # NB! new registrant at this point
- registrant
+ registrant # new registrant at this point
subject(:pending_update_notification_for_new_registrant_subject)
domain_info
compose
@@ -30,16 +29,16 @@ class DomainMailModel
end
def registrant_updated_notification_for_old_registrant
+ registrant_pending
registrant_old
subject(:registrant_updated_notification_for_old_registrant_subject)
- registrant_name
compose
end
def pending_update_rejected_notification_for_new_registrant
registrant_pending
subject(:pending_update_rejected_notification_for_new_registrant_subject)
- @params[:deliver_emails] = true # trigger from que
+ @params[:deliver_emails] = true # triggered from que
@params[:registrar_name] = @domain.registrar.name
compose
end
@@ -92,10 +91,6 @@ class DomainMailModel
@params[:recipient] = format @domain.registrant.email
end
- def registrant_name
- @params[:registrant_name] = @domain.registrant.name
- end
-
def registrant_pending
@params[:recipient] = format @domain.pending_json['new_registrant_email']
@params[:new_registrant_name] = @domain.pending_json['new_registrant_name']
diff --git a/app/models/epp/domain.rb b/app/models/epp/domain.rb
index 189b5aa1c..c95e98e7e 100644
--- a/app/models/epp/domain.rb
+++ b/app/models/epp/domain.rb
@@ -503,6 +503,10 @@ class Epp::Domain < Domain
preclean_pendings
user = ApiUser.find(pending_json['current_user_id'])
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
@@ -510,8 +514,7 @@ class Epp::Domain < Domain
::PaperTrail.whodunnit = user.id_role_username # updator str should be the request originator not the approval user
return unless update(frame, user, false)
clean_pendings!
- self.deliver_emails = true # turn on email delivery
- send_mail :registrant_updated_notification_for_old_registrant
+
send_mail :registrant_updated_notification_for_new_registrant
true
end
diff --git a/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.html.erb b/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.html.erb
index 1ad338816..f4312da44 100644
--- a/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.html.erb
+++ b/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.html.erb
@@ -3,7 +3,7 @@ Tere,
Domeeni <%= @params[:name] %> registreerija vahetuse taotlus on kinnitatud ning andmed registris uuendatud.
Uued registreerija:
-Nimi: <%= @params[:registrant_name] %>
+Nimi: <%= @params[:new_registrant_name] %>
Lugupidamisega
Eesti Interneti SA
@@ -15,7 +15,7 @@ Hi,
Process for changing registrant of the domain <%= @params[:name] %> has been approved and the data in the registry is updated.
New registrant:
-Name: <%= @params[:registrant_name] %>
+Name: <%= @params[:new_registrant_name] %>
Best Regards,
Estonian Internet Foundation
diff --git a/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.text.erb b/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.text.erb
index beae5cfd8..f17ba0bce 100644
--- a/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.text.erb
+++ b/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.text.erb
@@ -3,7 +3,7 @@ Tere,
Domeeni <%= @params[:name] %> registreerija vahetuse taotlus on kinnitatud ning andmed registris uuendatud.
Uued registreerija:
-Nimi: <%= @params[:registrant_name] %>
+Nimi: <%= @params[:new_registrant_name] %>
Lugupidamisega
Eesti Interneti SA
@@ -15,7 +15,7 @@ Hi,
Process for changing registrant of the domain <%= @params[:name] %> has been approved and the data in the registry is updated.
New registrant:
-Name: <%= @params[:registrant_name] %>
+Name: <%= @params[:new_registrant_name] %>
Best Regards,
Estonian Internet Foundation
From ba659cd444d7f612208fc735765e586ae31fdf4b Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Thu, 17 Dec 2015 11:09:46 +0200
Subject: [PATCH 063/196] Story #109367018 - restore [domain] to subject line
---
app/models/domain_mail_model.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/models/domain_mail_model.rb b/app/models/domain_mail_model.rb
index 96a7e2350..36154bc64 100644
--- a/app/models/domain_mail_model.rb
+++ b/app/models/domain_mail_model.rb
@@ -113,7 +113,7 @@ class DomainMailModel
def subject(subject)
@params[:name] = @domain.name
- @params[:subject] = I18n.t(subject, name: @domain.name)
+ @params[:subject] = "#{I18n.t(subject, name: @domain.name)}, [#{@domain.name}]"
end
def confirm_update
From 9ac1e8c933b95cb7f638365d09512ab22137e678 Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Thu, 17 Dec 2015 11:27:06 +0200
Subject: [PATCH 064/196] 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 702206b9c00c14a70e4cacc388080f14cc0d1e34 Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Thu, 17 Dec 2015 11:51:36 +0200
Subject: [PATCH 065/196] Story #109367018 - ensure that country is passed only
as name
---
app/models/domain_mail_model.rb | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/app/models/domain_mail_model.rb b/app/models/domain_mail_model.rb
index 36154bc64..b0d81e410 100644
--- a/app/models/domain_mail_model.rb
+++ b/app/models/domain_mail_model.rb
@@ -142,10 +142,11 @@ class DomainMailModel
def domain_info
[:name, :registrar_name,
:registrant_name, :registrant_ident, :registrant_email,
- :registrant_street,:registrant_city, :registrant_country
+ :registrant_street,:registrant_city
].each do |attr|
@params.store attr, @domain.send(attr)
end
+ @params.store :registrant_country, @domain.registrant_country.name
@params.store :registrant_priv, @domain.registrant.priv?
@params.store :old_registrant_name, Registrant.find(@domain.registrant_id_was).name
@params
From 375d8a7b9659141c11d8fc8aa9413137dd43467b Mon Sep 17 00:00:00 2001
From: Stas
Date: Thu, 17 Dec 2015 14:00:01 +0200
Subject: [PATCH 066/196] 109818648-model_changed
---
app/models/domain.rb | 4 ++--
app/models/whois_record.rb | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/app/models/domain.rb b/app/models/domain.rb
index 6d20574ce..07ba09dc4 100644
--- a/app/models/domain.rb
+++ b/app/models/domain.rb
@@ -307,7 +307,7 @@ class Domain < ActiveRecord::Base
c = 0
Domain.where("statuses @> '{deleteCandidate}'::varchar[]").each do |x|
- Whois::Record.where(domain_id: x.id).destroy_all
+ WhoisRecord.where(domain_id: x.id).destroy_all
destroy_with_message x
STDOUT << "#{Time.zone.now.utc} Domain.destroy_delete_candidates: by deleteCandidate ##{x.id} (#{x.name})\n" unless Rails.env.test?
@@ -315,7 +315,7 @@ class Domain < ActiveRecord::Base
end
Domain.where('force_delete_at <= ?', Time.zone.now).each do |x|
- Whois::Record.where(domain_id: x.id).destroy_all
+ WhoisRecord.where(domain_id: x.id).destroy_all
destroy_with_message x
STDOUT << "#{Time.zone.now.utc} Domain.destroy_delete_candidates: by force delete time ##{x.id} (#{x.name})\n" unless Rails.env.test?
c += 1
diff --git a/app/models/whois_record.rb b/app/models/whois_record.rb
index 121677c4d..55cc997da 100644
--- a/app/models/whois_record.rb
+++ b/app/models/whois_record.rb
@@ -113,6 +113,6 @@ class WhoisRecord < ActiveRecord::Base
end
def destroy_whois_record
- Whois::Record.where(name: name).delete_all()
+ Whois::Record.where(name: name).delete_all
end
end
From 057ec6a757ed78d5c7d71f4174fa3d4adb185eb6 Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Thu, 17 Dec 2015 14:39:12 +0200
Subject: [PATCH 067/196] Story #109367018 - privatize the work method
---
app/mailers/domain_mailer.rb | 27 ++++++++++++++-------------
1 file changed, 14 insertions(+), 13 deletions(-)
diff --git a/app/mailers/domain_mailer.rb b/app/mailers/domain_mailer.rb
index 4963cb02a..66533e316 100644
--- a/app/mailers/domain_mailer.rb
+++ b/app/mailers/domain_mailer.rb
@@ -25,19 +25,6 @@ class DomainMailer < ApplicationMailer
compose_from(params)
end
- # app/models/DomainMailModel provides the data for mail that can be composed_from
- # which ensures that values of objects are captured when they are valid, not later when this method is executed
- def compose_from(params)
- @params = params
- return if delivery_off?(params, params[:deliver_emails])
- return if whitelist_blocked?(params[:recipient])
- params[:errors].map do |error|
- logger.warn error
- return
- end
- mail(to: params[:recipient], subject: params[:subject])
- end
-
def pending_deleted(domain_id, old_registrant_id, should_deliver)
@domain = Domain.find_by(id: domain_id)
@old_registrant = Registrant.find(old_registrant_id)
@@ -129,4 +116,18 @@ class DomainMailer < ApplicationMailer
subject: "#{I18n.t(:force_delete_subject)}"
)
end
+
+ private
+ # app/models/DomainMailModel provides the data for mail that can be composed_from
+ # which ensures that values of objects are captured when they are valid, not later when this method is executed
+ def compose_from(params)
+ @params = params
+ return if delivery_off?(params, params[:deliver_emails])
+ return if whitelist_blocked?(params[:recipient])
+ params[:errors].map do |error|
+ logger.warn error
+ return
+ end
+ mail(to: params[:recipient], subject: params[:subject])
+ end
end
From 79dfb426c7827e881ee0e05c02365b5d63fa00fe Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Thu, 17 Dec 2015 15:28:33 +0200
Subject: [PATCH 068/196] Story #109367018 - add data for old registrant notice
---
...ed_notification_for_old_registrant.html.erb | 18 ++++++++++++++++++
...ed_notification_for_old_registrant.text.erb | 18 ++++++++++++++++++
2 files changed, 36 insertions(+)
diff --git a/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.html.erb b/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.html.erb
index f4312da44..2c0693fa7 100644
--- a/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.html.erb
+++ b/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.html.erb
@@ -4,6 +4,15 @@ Domeeni <%= @params[:name] %> registreerija vahetuse taotlus on kinnitatud ning
Best Regards,
Estonian Internet Foundation
diff --git a/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.text.erb b/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.text.erb
index f17ba0bce..37bfcade5 100644
--- a/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.text.erb
+++ b/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.text.erb
@@ -4,6 +4,15 @@ Domeeni <%= @params[:name] %> registreerija vahetuse taotlus on kinnitatud ning
Uued registreerija:
Nimi: <%= @params[:new_registrant_name] %>
+<% if @params[:registrant_priv] %>
+Isikukood: <%= @params[:registrant_ident] %>
+<% else %>
+Äriregistrikood: <%= @params[:registrant_ident] %>
+<% end %>
+Epost: <%= @params[:registrant_email] %>
+Tänav: <%= @params[:registrant_street] %>
+Linn: <%= @params[:registrant_city] %>
+Riik: <%= @params[:registrant_country] %>
Lugupidamisega
Eesti Interneti SA
@@ -16,6 +25,15 @@ Process for changing registrant of the domain <%= @params[:name] %> has been app
New registrant:
Name: <%= @params[:new_registrant_name] %>
+<% if @params[:registrant_priv] %>
+Personal code: <%= @params[:registrant_ident] %>
+<% else %>
+Business Registry code: <%= @params[:registrant_ident] %>
+<% end %>
+E-mail: <%= @params[:registrant_email] %>
+Street: <%= @params[:registrant_street] %>
+City: <%= @params[:registrant_city] %>
+Country: <%= @params[:registrant_country] %>
Best Regards,
Estonian Internet Foundation
From 086b82e5407bffd71af1fce792befd5bb908551e Mon Sep 17 00:00:00 2001
From: Stas
Date: Thu, 17 Dec 2015 16:20:50 +0200
Subject: [PATCH 069/196] 109809872-term_change
---
app/views/registrar/contacts/partials/_general.haml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/views/registrar/contacts/partials/_general.haml b/app/views/registrar/contacts/partials/_general.haml
index 37bd87555..462bf35a0 100644
--- a/app/views/registrar/contacts/partials/_general.haml
+++ b/app/views/registrar/contacts/partials/_general.haml
@@ -6,7 +6,7 @@
%dt= t(:id)
%dd= @contact.id
- %dt= t(:password)
+ %dt= t(:authinfo_pw)
%dd
= text_field_tag :password, @contact.password, readonly: true, class: 'partially-hidden'
From eec8bd90ad7efbf686c9bb35be9081bff348c11e Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Thu, 17 Dec 2015 16:28:20 +0200
Subject: [PATCH 070/196] Story #109367018 - add data for template update
---
app/models/domain_mail_model.rb | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/models/domain_mail_model.rb b/app/models/domain_mail_model.rb
index b0d81e410..71cc2155d 100644
--- a/app/models/domain_mail_model.rb
+++ b/app/models/domain_mail_model.rb
@@ -32,6 +32,7 @@ class DomainMailModel
registrant_pending
registrant_old
subject(:registrant_updated_notification_for_old_registrant_subject)
+ domain_info
compose
end
From db870574c2b853729ab5caaba66f697510d52b5b Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Wed, 2 Dec 2015 13:49:44 +0200
Subject: [PATCH 071/196] Story #109086524 - force is_admin to skip validation
until validations can be fixed
---
app/controllers/admin/pending_updates_controller.rb | 2 ++
app/models/epp/domain.rb | 1 +
2 files changed, 3 insertions(+)
diff --git a/app/controllers/admin/pending_updates_controller.rb b/app/controllers/admin/pending_updates_controller.rb
index 4d08297d7..3a15fb3a5 100644
--- a/app/controllers/admin/pending_updates_controller.rb
+++ b/app/controllers/admin/pending_updates_controller.rb
@@ -6,6 +6,8 @@ class Admin::PendingUpdatesController < AdminController
authorize! :update, :pending
@epp_domain = Epp::Domain.find(params[:domain_id]) # only epp domain has apply pending
+ @epp_domain.is_admin = true
+
if @epp_domain.apply_pending_update!
redirect_to admin_domain_path(@domain.id), notice: t(:pending_applied)
else
diff --git a/app/models/epp/domain.rb b/app/models/epp/domain.rb
index 40b374003..3e5b842b2 100644
--- a/app/models/epp/domain.rb
+++ b/app/models/epp/domain.rb
@@ -7,6 +7,7 @@ class Epp::Domain < Domain
before_validation :manage_permissions
def manage_permissions
+ return if is_admin # this bad hack for 109086524, refactor later
return unless update_prohibited? || delete_prohibited?
add_epp_error('2304', nil, nil, I18n.t(:object_status_prohibits_operation))
false
From 226e82c71a6e15ca0cdb9375853a44695d93edd8 Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Sun, 13 Dec 2015 13:09:43 +0200
Subject: [PATCH 072/196] Story #109086524 - change execution path, admin will
now use same method as registrant to apply pending update This change now
include creating registrar message
---
.../admin/pending_updates_controller.rb | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/app/controllers/admin/pending_updates_controller.rb b/app/controllers/admin/pending_updates_controller.rb
index 3a15fb3a5..6e41a6c57 100644
--- a/app/controllers/admin/pending_updates_controller.rb
+++ b/app/controllers/admin/pending_updates_controller.rb
@@ -5,10 +5,7 @@ class Admin::PendingUpdatesController < AdminController
def update
authorize! :update, :pending
- @epp_domain = Epp::Domain.find(params[:domain_id]) # only epp domain has apply pending
- @epp_domain.is_admin = true
-
- if @epp_domain.apply_pending_update!
+ if registrant_verification.domain_registrant_change_confirm!
redirect_to admin_domain_path(@domain.id), notice: t(:pending_applied)
else
redirect_to edit_admin_domain_path(@domain.id), alert: t(:failure)
@@ -17,14 +14,21 @@ class Admin::PendingUpdatesController < AdminController
def destroy
authorize! :destroy, :pending
-
- if @domain.clean_pendings!
+ if registrant_verification.domain_registrant_change_reject!
redirect_to admin_domain_path(@domain.id), notice: t(:pending_removed)
else
redirect_to admin_domain_path(@domain.id), alert: t(:failure)
end
end
+ def registrant_verification
+ # steal token
+ token = @domain.registrant_verification_token
+ @registrant_verification = RegistrantVerification.new(domain_id: @domain.id,
+ domain_name: @domain.name,
+ verification_token: token)
+ end
+
private
def find_domain
From 611151317c92ed0648c92a9fe9592e112a3ce5e1 Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Sun, 13 Dec 2015 13:13:27 +0200
Subject: [PATCH 073/196] Story #109086524 - remove excess method call
---
app/jobs/domain_update_confirm_job.rb | 1 -
1 file changed, 1 deletion(-)
diff --git a/app/jobs/domain_update_confirm_job.rb b/app/jobs/domain_update_confirm_job.rb
index 28294ef25..bc4beb541 100644
--- a/app/jobs/domain_update_confirm_job.rb
+++ b/app/jobs/domain_update_confirm_job.rb
@@ -9,7 +9,6 @@ class DomainUpdateConfirmJob < Que::Job
domain.apply_pending_update! do |e|
e.instance_variable_set("@changed_attributes", e.changed_attributes.merge("statuses"=>[]))
end
- domain.clean_pendings!
when RegistrantVerification::REJECTED
DomainMailer.pending_update_rejected_notification_for_new_registrant(domain_id).deliver
domain.poll_message!(:poll_pending_update_rejected_by_registrant)
From 674fa9f76b8bee9ab3770ac981a34ad888f2f9f2 Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Mon, 14 Dec 2015 11:45:54 +0200
Subject: [PATCH 074/196] Story #109086524 - revert to allow merge, changes
fixed on branch for story 109367694
---
app/models/epp/domain.rb | 1 -
1 file changed, 1 deletion(-)
diff --git a/app/models/epp/domain.rb b/app/models/epp/domain.rb
index 3e5b842b2..40b374003 100644
--- a/app/models/epp/domain.rb
+++ b/app/models/epp/domain.rb
@@ -7,7 +7,6 @@ class Epp::Domain < Domain
before_validation :manage_permissions
def manage_permissions
- return if is_admin # this bad hack for 109086524, refactor later
return unless update_prohibited? || delete_prohibited?
add_epp_error('2304', nil, nil, I18n.t(:object_status_prohibits_operation))
false
From 250cda0923a5edece645cd5936bc325f0207c5eb Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Thu, 17 Dec 2015 17:12:13 +0200
Subject: [PATCH 075/196] Story #109086524 - change code path for pendingDelete
to send registrar method
---
.../admin/pending_deletes_controller.rb | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/app/controllers/admin/pending_deletes_controller.rb b/app/controllers/admin/pending_deletes_controller.rb
index a64a34714..2eda703bd 100644
--- a/app/controllers/admin/pending_deletes_controller.rb
+++ b/app/controllers/admin/pending_deletes_controller.rb
@@ -5,9 +5,7 @@ class Admin::PendingDeletesController < AdminController
def update
authorize! :update, :pending
- @epp_domain = Epp::Domain.find(params[:domain_id]) # only epp domain has apply pending
- @epp_domain.is_admin= true
- if @epp_domain.apply_pending_delete!
+ if registrant_verification.domain_registrant_delete_confirm!
redirect_to admin_domain_path(@domain.id), notice: t(:pending_applied)
else
redirect_to admin_edit_domain_path(@domain.id), alert: t(:failure)
@@ -17,7 +15,7 @@ class Admin::PendingDeletesController < AdminController
def destroy
authorize! :destroy, :pending
- if @domain.clean_pendings!
+ if registrant_verification.domain_registrant_delete_reject!
redirect_to admin_domain_path(@domain.id), notice: t(:pending_removed)
else
redirect_to admin_domain_path(@domain.id), alert: t(:failure)
@@ -26,6 +24,14 @@ class Admin::PendingDeletesController < AdminController
private
+ def registrant_verification
+ # steal token
+ token = @domain.registrant_verification_token
+ @registrant_verification = RegistrantVerification.new(domain_id: @domain.id,
+ domain_name: @domain.name,
+ verification_token: token)
+ end
+
def find_domain
@domain = Domain.find(params[:domain_id])
end
From 98f8a2b4404156867bad6c629e642d5a22bcd3fe Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Thu, 17 Dec 2015 18:08:10 +0200
Subject: [PATCH 076/196] Story #109367018 - add white space lines to email
template
---
...egistrant_updated_notification_for_old_registrant.html.erb | 4 ++--
...egistrant_updated_notification_for_old_registrant.text.erb | 2 ++
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.html.erb b/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.html.erb
index 2c0693fa7..390482155 100644
--- a/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.html.erb
+++ b/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.html.erb
@@ -3,7 +3,7 @@ Tere,
Domeeni <%= @params[:name] %> registreerija vahetuse taotlus on kinnitatud ning andmed registris uuendatud.
Uued registreerija:
-Nimi: <%= @params[:new_registrant_name] %>
+Nimi: <%= @params[:new_registrant_name] %>
<% if @params[:registrant_priv] %>
Isikukood: <%= @params[:registrant_ident] %>
<% else %>
@@ -24,7 +24,7 @@ Hi,
Process for changing registrant of the domain <%= @params[:name] %> has been approved and the data in the registry is updated.
New registrant:
-Name: <%= @params[:new_registrant_name] %>
+Name: <%= @params[:new_registrant_name] %>
<% if @params[:registrant_priv] %>
Personal code: <%= @params[:registrant_ident] %>
<% else %>
diff --git a/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.text.erb b/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.text.erb
index 37bfcade5..5065d2d9f 100644
--- a/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.text.erb
+++ b/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.text.erb
@@ -4,6 +4,7 @@ Domeeni <%= @params[:name] %> registreerija vahetuse taotlus on kinnitatud ning
Uued registreerija:
Nimi: <%= @params[:new_registrant_name] %>
+
<% if @params[:registrant_priv] %>
Isikukood: <%= @params[:registrant_ident] %>
<% else %>
@@ -25,6 +26,7 @@ Process for changing registrant of the domain <%= @params[:name] %> has been app
New registrant:
Name: <%= @params[:new_registrant_name] %>
+
<% if @params[:registrant_priv] %>
Personal code: <%= @params[:registrant_ident] %>
<% else %>
From eb6c1d607ba1339ee77a3c26cd8a21a410d8770a Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Thu, 17 Dec 2015 18:08:52 +0200
Subject: [PATCH 077/196] Story #109367018 - add domain info for new registrant
---
app/models/domain_mail_model.rb | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/app/models/domain_mail_model.rb b/app/models/domain_mail_model.rb
index 71cc2155d..4ba55e117 100644
--- a/app/models/domain_mail_model.rb
+++ b/app/models/domain_mail_model.rb
@@ -32,7 +32,13 @@ class DomainMailModel
registrant_pending
registrant_old
subject(:registrant_updated_notification_for_old_registrant_subject)
- domain_info
+ new_registrant = Registrant.find @domain.pending_json['new_registrant_id']
+ @params[:registrant_name] = new_registrant.name
+ @params[:registrant_ident] = new_registrant.ident
+ @params[:registrant_priv] = new_registrant.priv?
+ @params[:registrant_email] = new_registrant.email
+ @params[:registrant_street] = new_registrant.street
+ @params[:registrant_city] = new_registrant.city
compose
end
From 688071bf46bdf3615cb48440f5a7c74d335be0b6 Mon Sep 17 00:00:00 2001
From: Georg Kahest
Date: Thu, 17 Dec 2015 19:36:57 +0200
Subject: [PATCH 078/196] missing new registrant country name
---
app/models/domain_mail_model.rb | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/models/domain_mail_model.rb b/app/models/domain_mail_model.rb
index 4ba55e117..46309ad52 100644
--- a/app/models/domain_mail_model.rb
+++ b/app/models/domain_mail_model.rb
@@ -39,6 +39,7 @@ class DomainMailModel
@params[:registrant_email] = new_registrant.email
@params[:registrant_street] = new_registrant.street
@params[:registrant_city] = new_registrant.city
+ @params[:registrant_country] = new_registrant.country.name
compose
end
From 39c4fafdd61fb96945d56ac14c01611694613aa4 Mon Sep 17 00:00:00 2001
From: Georg Kahest
Date: Thu, 17 Dec 2015 19:42:42 +0200
Subject: [PATCH 079/196] standardise template
---
.../registrant_updated_notification_for_old_registrant.html.erb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.html.erb b/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.html.erb
index 390482155..a1820e7ad 100644
--- a/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.html.erb
+++ b/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.html.erb
@@ -2,7 +2,7 @@ Tere,
Domeeni <%= @params[:name] %> registreerija vahetuse taotlus on kinnitatud ning andmed registris uuendatud.
-Uued registreerija:
+Uued registreerija andmed:
Nimi: <%= @params[:new_registrant_name] %>
<% if @params[:registrant_priv] %>
Isikukood: <%= @params[:registrant_ident] %>
From a3b55543f2f7a2f806e9188da80066c0559efb93 Mon Sep 17 00:00:00 2001
From: Georg Kahest
Date: Thu, 17 Dec 2015 19:47:38 +0200
Subject: [PATCH 080/196] Uued to Uue
---
.../pending_update_notification_for_new_registrant.html.erb | 2 +-
.../pending_update_notification_for_new_registrant.text.erb | 2 +-
.../registrant_updated_notification_for_new_registrant.html.erb | 2 +-
.../registrant_updated_notification_for_new_registrant.text.erb | 2 +-
.../registrant_updated_notification_for_old_registrant.html.erb | 2 +-
.../registrant_updated_notification_for_old_registrant.text.erb | 2 +-
6 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/app/views/mailers/domain_mailer/pending_update_notification_for_new_registrant.html.erb b/app/views/mailers/domain_mailer/pending_update_notification_for_new_registrant.html.erb
index 9f33535ea..07de23117 100644
--- a/app/views/mailers/domain_mailer/pending_update_notification_for_new_registrant.html.erb
+++ b/app/views/mailers/domain_mailer/pending_update_notification_for_new_registrant.html.erb
@@ -4,7 +4,7 @@ Registripidaja <%= @params[:registrar_name] %> vahendusel on algatatud <%= @para
Palun veenduge, et muudatus on korrektne ning probleemide korral pöörduge oma registripidaja poole. Teie registripidaja on <%= @params[:registrar_name] %>
-Uued registreerija andmed:
+Uue registreerija andmed:
Nimi: <%= @params[:registrant_name] %>
<% if @params[:registrant_priv] %>
Isikukood: <%= @params[:registrant_ident] %>
diff --git a/app/views/mailers/domain_mailer/pending_update_notification_for_new_registrant.text.erb b/app/views/mailers/domain_mailer/pending_update_notification_for_new_registrant.text.erb
index d7f2d7f9c..24005a58a 100644
--- a/app/views/mailers/domain_mailer/pending_update_notification_for_new_registrant.text.erb
+++ b/app/views/mailers/domain_mailer/pending_update_notification_for_new_registrant.text.erb
@@ -4,7 +4,7 @@ Registripidaja <%= @params[:registrar_name] %> vahendusel on algatatud <%= @para
Palun veenduge, et muudatus on korrektne ning probleemide korral pöörduge oma registripidaja poole. Teie registripidaja on <%= @params[:registrar_name] %>
-Uued registreerija andmed:
+Uue registreerija andmed:
Nimi: <%= @params[:registrant_name] %>
<% if @params[:registrant_priv] %>
Isikukood: <%= @params[:registrant_ident] %>
diff --git a/app/views/mailers/domain_mailer/registrant_updated_notification_for_new_registrant.html.erb b/app/views/mailers/domain_mailer/registrant_updated_notification_for_new_registrant.html.erb
index 74021a489..c7d464f43 100644
--- a/app/views/mailers/domain_mailer/registrant_updated_notification_for_new_registrant.html.erb
+++ b/app/views/mailers/domain_mailer/registrant_updated_notification_for_new_registrant.html.erb
@@ -2,7 +2,7 @@ Tere,
Domeeni <%= @params[:name] %> registreerija vahetuse taotlus on kinnitatud ning andmed registris uuendatud.
Domeeni <%= @params[:name] %> registreerija vahetuse taotlus on kinnitatud ning andmed registris uuendatud.
-Uued registreerija andmed:
+Uue registreerija andmed:
Nimi: <%= @params[:new_registrant_name] %>
<% if @params[:registrant_priv] %>
Isikukood: <%= @params[:registrant_ident] %>
diff --git a/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.text.erb b/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.text.erb
index 5065d2d9f..c2efa5af9 100644
--- a/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.text.erb
+++ b/app/views/mailers/domain_mailer/registrant_updated_notification_for_old_registrant.text.erb
@@ -2,7 +2,7 @@ Tere,
Domeeni <%= @params[:name] %> registreerija vahetuse taotlus on kinnitatud ning andmed registris uuendatud.
-Uued registreerija:
+Uue registreerija andmed:
Nimi: <%= @params[:new_registrant_name] %>
<% if @params[:registrant_priv] %>
From da410aaa1f93590eb80ea9b1a179237d52ac44c1 Mon Sep 17 00:00:00 2001
From: Matt Farnsworth
Date: Thu, 17 Dec 2015 19:55:09 +0200
Subject: [PATCH 081/196] Story #109367018 - remove validation that token
domain and token are unique, prevents required action for delete reject
---
app/models/registrant_verification.rb | 1 -
1 file changed, 1 deletion(-)
diff --git a/app/models/registrant_verification.rb b/app/models/registrant_verification.rb
index d0c015ecb..a33751413 100644
--- a/app/models/registrant_verification.rb
+++ b/app/models/registrant_verification.rb
@@ -12,7 +12,6 @@ class RegistrantVerification < ActiveRecord::Base
belongs_to :domain
validates :verification_token, :domain_name, :domain, :action, :action_type, presence: true
- validates :domain, uniqueness: { scope: [:domain_id, :verification_token] }
def domain_registrant_change_confirm!
self.action_type = DOMAIN_REGISTRANT_CHANGE
From b63884eac1288d99f5bc864132fa47ae03520d21 Mon Sep 17 00:00:00 2001
From: Georg Kahest
Date: Thu, 17 Dec 2015 19:57:36 +0200
Subject: [PATCH 082/196] Missed one
---
.../pending_update_request_for_old_registrant.html.erb | 2 +-
.../pending_update_request_for_old_registrant.text.erb | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/views/mailers/domain_mailer/pending_update_request_for_old_registrant.html.erb b/app/views/mailers/domain_mailer/pending_update_request_for_old_registrant.html.erb
index 5da14d96d..dc26a9c1c 100644
--- a/app/views/mailers/domain_mailer/pending_update_request_for_old_registrant.html.erb
+++ b/app/views/mailers/domain_mailer/pending_update_request_for_old_registrant.html.erb
@@ -2,7 +2,7 @@ Tere,
Registrisse laekus taotlus domeeni <%= @params[:name] %> registreerija vahetuseks. Palun veenduge, et muudatus on korrektne ning probleemide korral pöörduge oma registripidaja poole. Teie registripidaja on <%= @params[:registrar_name] %>
-Uued registreerija andmed:
+Uue registreerija andmed:
Nimi: <%= @params[:registrant_name] %>
<% if @params[:registrant_priv] %>
Isikukood: <%= @params[:registrant_ident] %>
diff --git a/app/views/mailers/domain_mailer/pending_update_request_for_old_registrant.text.erb b/app/views/mailers/domain_mailer/pending_update_request_for_old_registrant.text.erb
index 27e394b87..142004bb6 100644
--- a/app/views/mailers/domain_mailer/pending_update_request_for_old_registrant.text.erb
+++ b/app/views/mailers/domain_mailer/pending_update_request_for_old_registrant.text.erb
@@ -2,7 +2,7 @@ Tere,
Registrisse laekus taotlus domeeni <%= @params[:name] %> registreerija vahetuseks. Palun veenduge, et muudatus on korrektne ning probleemide korral pöörduge oma registripidaja poole. Teie registripidaja on <%= @params[:registrar_name] %>
-Uued registreerija andmed:
+Uue registreerija andmed:
Nimi: <%= @params[:registrant_name] %>
<% if @params[:registrant_priv] %>
Isikukood: <%= @params[:registrant_ident] %>
From b514b5c94d941af140fa88c2baf81dbb4982bade Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Thu, 17 Dec 2015 20:48:05 +0200
Subject: [PATCH 083/196] Story#109367018 Set hardcoded to reindex whois record
---
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 c95e98e7e..656d5f645 100644
--- a/app/models/epp/domain.rb
+++ b/app/models/epp/domain.rb
@@ -516,6 +516,7 @@ class Epp::Domain < Domain
clean_pendings!
send_mail :registrant_updated_notification_for_new_registrant
+ update_whois_record
true
end
From 33d141e74b0820939d8898714470731830159de8 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Thu, 17 Dec 2015 21:01:17 +0200
Subject: [PATCH 084/196] Story#109367018 Set hardcoded to reindex whois record
---
app/jobs/domain_update_confirm_job.rb | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/jobs/domain_update_confirm_job.rb b/app/jobs/domain_update_confirm_job.rb
index 4f2c1e9ad..8e9fd4708 100644
--- a/app/jobs/domain_update_confirm_job.rb
+++ b/app/jobs/domain_update_confirm_job.rb
@@ -10,6 +10,7 @@ class DomainUpdateConfirmJob < Que::Job
e.instance_variable_set("@changed_attributes", e.changed_attributes.merge("statuses"=>[]))
end
domain.clean_pendings!
+ domain.update_whois_record
when RegistrantVerification::REJECTED
domain.send_mail :pending_update_rejected_notification_for_new_registrant
domain.poll_message!(:poll_pending_update_rejected_by_registrant)
From eff9a076ae2a6c571fd8c9c9d2d928df73f27fef Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Thu, 17 Dec 2015 21:17:11 +0200
Subject: [PATCH 085/196] Story#109367018 reset all domains data
---
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 8e9fd4708..42209d205 100644
--- a/app/jobs/domain_update_confirm_job.rb
+++ b/app/jobs/domain_update_confirm_job.rb
@@ -10,7 +10,7 @@ class DomainUpdateConfirmJob < Que::Job
e.instance_variable_set("@changed_attributes", e.changed_attributes.merge("statuses"=>[]))
end
domain.clean_pendings!
- domain.update_whois_record
+ 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)
From e7eb45c3249f6b960f505fd31c2bc0f67f9e4df7 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Fri, 18 Dec 2015 10:54:36 +0200
Subject: [PATCH 086/196] Story#110391728 - Asking instance, not class to send
email
---
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 7a4aae870..05ffafc4d 100644
--- a/app/models/domain.rb
+++ b/app/models/domain.rb
@@ -239,7 +239,7 @@ class Domain < ActiveRecord::Base
end
count += 1
if domain.pending_update?
- send_mail :pending_update_expired_notification_for_new_registrant
+ domain.send_mail :pending_update_expired_notification_for_new_registrant
end
if domain.pending_delete? || domain.pending_delete_confirmation?
DomainMailer.pending_delete_expired_notification(domain.id, true).deliver
From 6ed9a290e18ef4110267c7873e5e4b00309a02cc Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Fri, 18 Dec 2015 11:11:50 +0200
Subject: [PATCH 087/196] Story#110391728 - do not update domain whois record
if only relation left
---
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 96365d056..ecf399731 100644
--- a/app/models/contact.rb
+++ b/app/models/contact.rb
@@ -488,7 +488,7 @@ class Contact < ActiveRecord::Base
end
def update_related_whois_records
- related_domain_descriptions.each{ |x, y| WhoisRecord.find_by(name: x).save}
+ related_domain_descriptions.each{ |x, y| WhoisRecord.find_by(name: x).try(:save) }
end
end
From 6909f3d0ef19be4a05cbd26476a4b0d838536404 Mon Sep 17 00:00:00 2001
From: Stas
Date: Fri, 18 Dec 2015 13:30:51 +0200
Subject: [PATCH 088/196] 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 9027f5007c14134067dad7ffe61a74498138851a Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Fri, 18 Dec 2015 14:00:41 +0200
Subject: [PATCH 089/196] Story#109623634 - after contact transferring new one
should have state linked
---
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 7ab57781e..26f0c3153 100644
--- a/app/models/epp/domain.rb
+++ b/app/models/epp/domain.rb
@@ -622,6 +622,7 @@ class Epp::Domain < Domain
oc.registrar_id = registrar_id
oc.copy_from_id = c.id
oc.prefix_code
+ oc.domains_present = true
oc.save!(validate: false)
oc
end
From a790693f3e615197713c13186802898ce67fca89 Mon Sep 17 00:00:00 2001
From: Stas
Date: Fri, 18 Dec 2015 14:46:38 +0200
Subject: [PATCH 090/196] 110245112-find_by_overwrite
---
app/models/whois_record.rb | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/app/models/whois_record.rb b/app/models/whois_record.rb
index 55cc997da..528f84816 100644
--- a/app/models/whois_record.rb
+++ b/app/models/whois_record.rb
@@ -23,6 +23,10 @@ class WhoisRecord < ActiveRecord::Base
end
end
+ def self.find_by_name(name)
+ WhoisRecord.where("lower(name) = ?", name.downcase)
+ end
+
def generated_json
@generated_json ||= generate_json
end
From e4c00e6bcee25144c726ea3fe3ce7fdbb1245da5 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Fri, 18 Dec 2015 15:48:00 +0200
Subject: [PATCH 091/196] Story#109623634 - after contact transferring it
should be linked and ok
---
app/models/contact.rb | 6 ++++++
app/models/epp/domain.rb | 2 +-
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/app/models/contact.rb b/app/models/contact.rb
index fcebe8632..bcd359ca9 100644
--- a/app/models/contact.rb
+++ b/app/models/contact.rb
@@ -57,6 +57,11 @@ class Contact < ActiveRecord::Base
before_save :manage_statuses
def manage_statuses
+ if domain_transfer # very ugly but need better workflow
+ self.statuses = [OK, LINKED]
+ return
+ end
+
manage_linked
manage_ok
end
@@ -78,6 +83,7 @@ class Contact < ActiveRecord::Base
]
attr_accessor :deliver_emails
+ attr_accessor :domain_transfer # hack but solves problem faster
#
# STATUSES
diff --git a/app/models/epp/domain.rb b/app/models/epp/domain.rb
index 26f0c3153..fac09705d 100644
--- a/app/models/epp/domain.rb
+++ b/app/models/epp/domain.rb
@@ -622,7 +622,7 @@ class Epp::Domain < Domain
oc.registrar_id = registrar_id
oc.copy_from_id = c.id
oc.prefix_code
- oc.domains_present = true
+ oc.domain_transfer = true
oc.save!(validate: false)
oc
end
From fd186901a483dd659e92f9a2dd60277146889082 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Fri, 18 Dec 2015 16:45:13 +0200
Subject: [PATCH 092/196] Story#109623634 - save old states.
---
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 bcd359ca9..2375090da 100644
--- a/app/models/contact.rb
+++ b/app/models/contact.rb
@@ -58,7 +58,7 @@ class Contact < ActiveRecord::Base
before_save :manage_statuses
def manage_statuses
if domain_transfer # very ugly but need better workflow
- self.statuses = [OK, LINKED]
+ self.statuses = statuses | [OK, LINKED]
return
end
From 5e05aee1c8d0f1091b6ddcd8d76712080a7229f2 Mon Sep 17 00:00:00 2001
From: Stas
Date: Fri, 18 Dec 2015 16:53:55 +0200
Subject: [PATCH 093/196] 110145900-date_conflict_fixed
---
app/models/pricelist.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/models/pricelist.rb b/app/models/pricelist.rb
index 42cca0126..17420dfa1 100644
--- a/app/models/pricelist.rb
+++ b/app/models/pricelist.rb
@@ -31,7 +31,7 @@ class Pricelist < ActiveRecord::Base
def pricelist_for(zone, operation, period)
lists = valid.where(category: zone, operation_category: operation, duration: period)
return lists.first if lists.count == 1
- lists.where('valid_to IS NOT NULL').order(valid_from: :desc).first
+ lists.order(valid_from: :desc).first
end
end
end
From 52d1f79df045d63f96f4ed994336e5473c687af8 Mon Sep 17 00:00:00 2001
From: Stas
Date: Fri, 18 Dec 2015 17:39:41 +0200
Subject: [PATCH 094/196] 110245542-callback_for_vat_percent
---
app/models/invoice.rb | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/app/models/invoice.rb b/app/models/invoice.rb
index 8bc5137d5..aaddbd77b 100644
--- a/app/models/invoice.rb
+++ b/app/models/invoice.rb
@@ -18,6 +18,8 @@ class Invoice < ActiveRecord::Base
:seller_iban, :buyer_name, :invoice_items, :vat_prc, presence: true
before_create :set_invoice_number
+ before_create :check_vat
+
def set_invoice_number
last_no = Invoice.order(number: :desc).where('number IS NOT NULL').limit(1).pluck(:number).first
@@ -34,6 +36,12 @@ class Invoice < ActiveRecord::Base
false
end
+ def check_vat
+ if buyer.country_code = 'EE' && buyer.vat_no.present?
+ self.vat_prc = 0
+ end
+ end
+
before_save -> { self.sum_cache = sum }
class << self
From 074d59031ce9505ccc3ae0bc7133c83e3cfe2eb2 Mon Sep 17 00:00:00 2001
From: Stas
Date: Mon, 4 Jan 2016 12:33:46 +0200
Subject: [PATCH 095/196] 110946256-logic_fix
---
app/models/invoice.rb | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/app/models/invoice.rb b/app/models/invoice.rb
index aaddbd77b..2f54e2287 100644
--- a/app/models/invoice.rb
+++ b/app/models/invoice.rb
@@ -17,8 +17,7 @@ class Invoice < ActiveRecord::Base
validates :invoice_type, :due_date, :currency, :seller_name,
:seller_iban, :buyer_name, :invoice_items, :vat_prc, presence: true
- before_create :set_invoice_number
- before_create :check_vat
+ before_create :set_invoice_number, :check_vat
def set_invoice_number
last_no = Invoice.order(number: :desc).where('number IS NOT NULL').limit(1).pluck(:number).first
@@ -37,7 +36,7 @@ class Invoice < ActiveRecord::Base
end
def check_vat
- if buyer.country_code = 'EE' && buyer.vat_no.present?
+ if buyer.country_code != 'EE' && buyer.vat_no.present?
self.vat_prc = 0
end
end
From f46c7f554397584b12b4d97fa07865891ddfdc7a Mon Sep 17 00:00:00 2001
From: Stas
Date: Mon, 4 Jan 2016 16:35:02 +0200
Subject: [PATCH 096/196] 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 097/196] 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 098/196] 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 399ea93a232e03f71349e09a85b3c4afc19a5e8f Mon Sep 17 00:00:00 2001
From: Georg Kahest
Date: Tue, 5 Jan 2016 14:53:04 +0200
Subject: [PATCH 099/196] 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 6be09329d76ac410a1c66f0c5d6c272baa45c5c0 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Tue, 5 Jan 2016 15:03:29 +0200
Subject: [PATCH 100/196] 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 101/196] 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 102/196] 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 103/196] 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 104/196] 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 2f10e8d6a48209d33d990c3818ad19ef5aaccadd Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Wed, 6 Jan 2016 09:58:51 +0200
Subject: [PATCH 105/196] Story#109590460 - typo
---
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 345f7ecee..f4773f732 100644
--- a/app/models/epp/contact.rb
+++ b/app/models/epp/contact.rb
@@ -162,7 +162,7 @@ class Epp::Contact < Contact
if ident_frame && ident_attr_valid?(ident_frame)
org_priv = %w(org priv).freeze
- if ident_country_code.blank? && org_priv.include?(ident_type) && org_priv.in?(ident_frame.attr('type'))
+ 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)
at.merge!(ident: ident_frame.text)
From 2d35556f2b8c9c05685cd734ff2b2fc1f931a731 Mon Sep 17 00:00:00 2001
From: Georg Kahest
Date: Tue, 5 Jan 2016 14:53:04 +0200
Subject: [PATCH 106/196] 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 107/196] 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 108/196] 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 678852091b36f4563ac22b38d97f4964ec661e7a Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Thu, 7 Jan 2016 15:29:25 +0200
Subject: [PATCH 109/196] Stroy#110392672 - Contact domains update should be
async
---
app/jobs/regenerate_registrar_whoises_job.rb | 2 +-
app/jobs/regenerate_whois_record_job.rb | 4 ++--
app/models/contact.rb | 2 +-
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/app/jobs/regenerate_registrar_whoises_job.rb b/app/jobs/regenerate_registrar_whoises_job.rb
index 10e13a038..68a76c8d3 100644
--- a/app/jobs/regenerate_registrar_whoises_job.rb
+++ b/app/jobs/regenerate_registrar_whoises_job.rb
@@ -4,7 +4,7 @@ class RegenerateRegistrarWhoisesJob < Que::Job
registrar = Registrar.find(registrar_id)
registrar.whois_records.select(:id).find_in_batches(batch_size: 20) do |group|
- RegenerateWhoisRecordJob.enqueue group.map(&:id)
+ RegenerateWhoisRecordJob.enqueue group.map(&:id), :id
end
end
end
\ No newline at end of file
diff --git a/app/jobs/regenerate_whois_record_job.rb b/app/jobs/regenerate_whois_record_job.rb
index 6d79e2ea5..051247b7f 100644
--- a/app/jobs/regenerate_whois_record_job.rb
+++ b/app/jobs/regenerate_whois_record_job.rb
@@ -1,7 +1,7 @@
class RegenerateWhoisRecordJob < Que::Job
- def run(ids)
+ def run(ids, attr = :id)
ids.each do |id|
- record = WhoisRecord.find_by(id: id)
+ record = WhoisRecord.find_by(attr => id)
return unless record
record.save
diff --git a/app/models/contact.rb b/app/models/contact.rb
index ccc44851d..39672e2c4 100644
--- a/app/models/contact.rb
+++ b/app/models/contact.rb
@@ -498,7 +498,7 @@ class Contact < ActiveRecord::Base
end
def update_related_whois_records
- related_domain_descriptions.each{ |x, y| WhoisRecord.find_by(name: x).try(:save) }
+ RegenerateWhoisRecordJob.enqueue related_domain_descriptions.keys, :name
end
end
From 6b3bfe01d2e8bd6ec8049c1b3e13fbc53c7e0df8 Mon Sep 17 00:00:00 2001
From: Stas
Date: Thu, 7 Jan 2016 18:06:43 +0200
Subject: [PATCH 110/196] 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 111/196] 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/.
-Доменное имя <%= @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
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/
Согласно пункту 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 112/196] 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 113/196] 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 114/196] 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 115/196] 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 116/196] 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 117/196] 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 118/196] 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 119/196] 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 bd65eb64948fcd08c352db2fdbd6bb610d9d2e10 Mon Sep 17 00:00:00 2001
From: Stas
Date: Tue, 12 Jan 2016 13:05:12 +0200
Subject: [PATCH 120/196] 110395650-separated_class_for_cron_jobs
---
app/models/domain.rb | 128 ++++++++-----------------------------
app/models/domain_cron.rb | 98 ++++++++++++++++++++++++++++
config/schedule.rb | 10 +--
spec/models/domain_spec.rb | 30 ++++-----
4 files changed, 143 insertions(+), 123 deletions(-)
create mode 100644 app/models/domain_cron.rb
diff --git a/app/models/domain.rb b/app/models/domain.rb
index a9defdf50..5b3a6cd65 100644
--- a/app/models/domain.rb
+++ b/app/models/domain.rb
@@ -203,6 +203,31 @@ class Domain < ActiveRecord::Base
statuses.include? DomainStatus::SERVER_TECH_CHANGE_PROHIBITED
end
+ def self.clean_expired_pendings
+ DomainCron.send(__method__)
+ ActiveSupport::Deprecation.deprecate_methods(DomainCron, __method__)
+ end
+
+ def self.start_expire_period
+ DomainCron.send(__method__)
+ ActiveSupport::Deprecation.deprecate_methods(DomainCron, __method__)
+ end
+
+ def self.start_redemption_grace_period
+ DomainCron.send(__method__)
+ ActiveSupport::Deprecation.deprecate_methods(DomainCron, __method__)
+ end
+
+ def self.start_delete_period
+ DomainCron.send(__method__)
+ ActiveSupport::Deprecation.deprecate_methods(DomainCron, __method__)
+ end
+
+ def self.destroy_delete_candidates
+ DomainCron.send(__method__)
+ ActiveSupport::Deprecation.deprecate_methods(DomainCron, __method__)
+ end
+
class << self
def convert_period_to_time(period, unit)
return (period.to_i / 365).years if unit == 'd'
@@ -221,109 +246,6 @@ class Domain < ActiveRecord::Base
)
end
- # rubocop: disable Metrics/AbcSize
- # rubocop: disable Metrics/CyclomaticComplexity
- # rubocop: disable Metrics/PerceivedComplexity
- def clean_expired_pendings
- STDOUT << "#{Time.zone.now.utc} - Clean expired domain pendings\n" unless Rails.env.test?
-
- expire_at = Setting.expire_pending_confirmation.hours.ago
- count = 0
- expired_pending_domains = Domain.where('registrant_verification_asked_at <= ?', expire_at)
- expired_pending_domains.each do |domain|
- unless domain.pending_update? || domain.pending_delete? || domain.pending_delete_confirmation?
- msg = "#{Time.zone.now.utc} - ISSUE: DOMAIN #{domain.id}: #{domain.name} IS IN EXPIRED PENDING LIST, " \
- "but no pendingDelete/pendingUpdate state present!\n"
- STDOUT << msg unless Rails.env.test?
- next
- end
- count += 1
- if domain.pending_update?
- domain.send_mail :pending_update_expired_notification_for_new_registrant
- end
- if domain.pending_delete? || domain.pending_delete_confirmation?
- DomainMailer.pending_delete_expired_notification(domain.id, true).deliver
- end
- domain.clean_pendings!
- unless Rails.env.test?
- STDOUT << "#{Time.zone.now.utc} Domain.clean_expired_pendings: ##{domain.id} (#{domain.name})\n"
- end
- end
- STDOUT << "#{Time.zone.now.utc} - Successfully cancelled #{count} domain pendings\n" unless Rails.env.test?
- count
- end
- # rubocop: enable Metrics/PerceivedComplexity
- # rubocop: enable Metrics/AbcSize
- # rubocop: enable Metrics/CyclomaticComplexity
-
- # rubocop: disable Metrics/LineLength
- def start_expire_period
- STDOUT << "#{Time.zone.now.utc} - Expiring domains\n" unless Rails.env.test?
-
- domains = Domain.where('valid_to <= ?', Time.zone.now)
- domains.each do |domain|
- next unless domain.expirable?
- domain.set_graceful_expired
- DomainMailer.expiration_reminder(domain.id).deliver
- STDOUT << "#{Time.zone.now.utc} Domain.start_expire_period: ##{domain.id} (#{domain.name}) #{domain.changes}\n" unless Rails.env.test?
- domain.save
- end
-
- STDOUT << "#{Time.zone.now.utc} - Successfully expired #{domains.count} domains\n" unless Rails.env.test?
- end
-
- def start_redemption_grace_period
- STDOUT << "#{Time.zone.now.utc} - Setting server_hold to domains\n" unless Rails.env.test?
-
- d = Domain.where('outzone_at <= ?', Time.zone.now)
- d.each do |domain|
- 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
- end
-
- STDOUT << "#{Time.zone.now.utc} - Successfully set server_hold to #{d.count} domains\n" unless Rails.env.test?
- end
-
- def start_delete_period
- STDOUT << "#{Time.zone.now.utc} - Setting delete_candidate to domains\n" unless Rails.env.test?
-
- d = Domain.where('delete_at <= ?', Time.zone.now)
- d.each do |domain|
- 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
- end
-
- return if Rails.env.test?
- STDOUT << "#{Time.zone.now.utc} - Successfully set delete_candidate to #{d.count} domains\n"
- end
-
- # rubocop:disable Rails/FindEach
- # rubocop:disable Metrics/AbcSize
- def destroy_delete_candidates
- STDOUT << "#{Time.zone.now.utc} - Destroying domains\n" unless Rails.env.test?
-
- c = 0
- Domain.where("statuses @> '{deleteCandidate}'::varchar[]").each do |x|
- WhoisRecord.where(domain_id: x.id).destroy_all
- destroy_with_message x
- STDOUT << "#{Time.zone.now.utc} Domain.destroy_delete_candidates: by deleteCandidate ##{x.id} (#{x.name})\n" unless Rails.env.test?
-
- c += 1
- end
-
- Domain.where('force_delete_at <= ?', Time.zone.now).each do |x|
- WhoisRecord.where(domain_id: x.id).destroy_all
- destroy_with_message x
- STDOUT << "#{Time.zone.now.utc} Domain.destroy_delete_candidates: by force delete time ##{x.id} (#{x.name})\n" unless Rails.env.test?
- c += 1
- end
-
- STDOUT << "#{Time.zone.now.utc} - Successfully destroyed #{c} domains\n" unless Rails.env.test?
- end
# rubocop: enable Metrics/AbcSize
# rubocop:enable Rails/FindEach
# rubocop: enable Metrics/LineLength
diff --git a/app/models/domain_cron.rb b/app/models/domain_cron.rb
new file mode 100644
index 000000000..3fd09dc1f
--- /dev/null
+++ b/app/models/domain_cron.rb
@@ -0,0 +1,98 @@
+class DomainCron
+
+ def self.clean_expired_pendings
+ STDOUT << "#{Time.zone.now.utc} - Clean expired domain pendings\n" unless Rails.env.test?
+
+ expire_at = Setting.expire_pending_confirmation.hours.ago
+ count = 0
+ expired_pending_domains = Domain.where('registrant_verification_asked_at <= ?', expire_at)
+ expired_pending_domains.each do |domain|
+ unless domain.pending_update? || domain.pending_delete? || domain.pending_delete_confirmation?
+ msg = "#{Time.zone.now.utc} - ISSUE: DOMAIN #{domain.id}: #{domain.name} IS IN EXPIRED PENDING LIST, " \
+ "but no pendingDelete/pendingUpdate state present!\n"
+ STDOUT << msg unless Rails.env.test?
+ next
+ end
+ count += 1
+ if domain.pending_update?
+ domain.send_mail :pending_update_expired_notification_for_new_registrant
+ end
+ if domain.pending_delete? || domain.pending_delete_confirmation?
+ DomainMailer.pending_delete_expired_notification(domain.id, true).deliver
+ end
+ domain.clean_pendings!
+ unless Rails.env.test?
+ STDOUT << "#{Time.zone.now.utc} Domain.clean_expired_pendings: ##{domain.id} (#{domain.name})\n"
+ end
+ end
+ STDOUT << "#{Time.zone.now.utc} - Successfully cancelled #{count} domain pendings\n" unless Rails.env.test?
+ count
+ end
+
+ def self.start_expire_period
+ STDOUT << "#{Time.zone.now.utc} - Expiring domains\n" unless Rails.env.test?
+
+ domains = Domain.where('valid_to <= ?', Time.zone.now)
+ domains.each do |domain|
+ next unless domain.expirable?
+ domain.set_graceful_expired
+ DomainMailer.expiration_reminder(domain.id).deliver
+ STDOUT << "#{Time.zone.now.utc} Domain.start_expire_period: ##{domain.id} (#{domain.name}) #{domain.changes}\n" unless Rails.env.test?
+ domain.save
+ end
+
+ STDOUT << "#{Time.zone.now.utc} - Successfully expired #{domains.count} domains\n" unless Rails.env.test?
+ end
+
+ def self.start_redemption_grace_period
+ STDOUT << "#{Time.zone.now.utc} - Setting server_hold to domains\n" unless Rails.env.test?
+
+ d = Domain.where('outzone_at <= ?', Time.zone.now)
+ d.each do |domain|
+ 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
+ end
+
+ STDOUT << "#{Time.zone.now.utc} - Successfully set server_hold to #{d.count} domains\n" unless Rails.env.test?
+ end
+
+ def self.start_delete_period
+ STDOUT << "#{Time.zone.now.utc} - Setting delete_candidate to domains\n" unless Rails.env.test?
+
+ d = Domain.where('delete_at <= ?', Time.zone.now)
+ d.each do |domain|
+ 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
+ end
+
+ return if Rails.env.test?
+ STDOUT << "#{Time.zone.now.utc} - Successfully set delete_candidate to #{d.count} domains\n"
+ end
+
+ def self.destroy_delete_candidates
+ STDOUT << "#{Time.zone.now.utc} - Destroying domains\n" unless Rails.env.test?
+
+ c = 0
+ Domain.where("statuses @> '{deleteCandidate}'::varchar[]").each do |x|
+ WhoisRecord.where(domain_id: x.id).destroy_all
+ destroy_with_message x
+ STDOUT << "#{Time.zone.now.utc} Domain.destroy_delete_candidates: by deleteCandidate ##{x.id} (#{x.name})\n" unless Rails.env.test?
+
+ c += 1
+ end
+
+ Domain.where('force_delete_at <= ?', Time.zone.now).each do |x|
+ WhoisRecord.where(domain_id: x.id).destroy_all
+ destroy_with_message x
+ STDOUT << "#{Time.zone.now.utc} Domain.destroy_delete_candidates: by force delete time ##{x.id} (#{x.name})\n" unless Rails.env.test?
+ c += 1
+ end
+
+ STDOUT << "#{Time.zone.now.utc} - Successfully destroyed #{c} domains\n" unless Rails.env.test?
+ end
+
+end
diff --git a/config/schedule.rb b/config/schedule.rb
index 5524f10ab..81f11c341 100644
--- a/config/schedule.rb
+++ b/config/schedule.rb
@@ -31,7 +31,7 @@ if @cron_group == 'registry'
# end
every :day, at: '12:20am' do
- runner 'Domain.clean_expired_pendings'
+ runner 'DomainCron.clean_expired_pendings'
end
every 3.hours do
@@ -39,19 +39,19 @@ if @cron_group == 'registry'
end
every 42.minutes do
- runner 'Domain.destroy_delete_candidates'
+ runner 'DomainCron.destroy_delete_candidates'
end
every 45.minutes do
- runner 'Domain.start_expire_period'
+ runner 'DomainCron.start_expire_period'
end
every 50.minutes do
- runner 'Domain.start_delete_period'
+ runner 'DomainCron.start_delete_period'
end
every 52.minutes do
- runner 'Domain.start_redemption_grace_period'
+ runner 'DomainCron.start_redemption_grace_period'
end
end
diff --git a/spec/models/domain_spec.rb b/spec/models/domain_spec.rb
index 9dd0f1a48..cddb9141b 100644
--- a/spec/models/domain_spec.rb
+++ b/spec/models/domain_spec.rb
@@ -140,20 +140,20 @@ describe Domain do
domain.registrant_verification_asked_at = 30.days.ago
domain.pending_delete!
- Domain.clean_expired_pendings.should == 1
+ DomainCron.clean_expired_pendings.should == 1
domain.reload.pending_delete?.should == false
domain.pending_json.should == {}
end
it 'should expire domains' do
- Domain.start_expire_period
+ DomainCron.start_expire_period
@domain.statuses.include?(DomainStatus::EXPIRED).should == false
old_valid_to = Time.zone.now - 10.days
@domain.valid_to = old_valid_to
@domain.save
- Domain.start_expire_period
+ DomainCron.start_expire_period
@domain.reload
@domain.statuses.include?(DomainStatus::EXPIRED).should == true
@domain.outzone_at.should be_within(5).of(old_valid_to + Setting.expire_warning_period.days)
@@ -161,7 +161,7 @@ describe Domain do
old_valid_to + Setting.expire_warning_period.days + Setting.redemption_grace_period.days
)
- Domain.start_expire_period
+ DomainCron.start_expire_period
@domain.reload
@domain.statuses.include?(DomainStatus::EXPIRED).should == true
end
@@ -173,7 +173,7 @@ describe Domain do
@domain.outzone_at, @domain.delete_at = nil, nil
@domain.save
- Domain.start_expire_period
+ DomainCron.start_expire_period
@domain.reload
@domain.statuses.include?(DomainStatus::EXPIRED).should == true
@domain.outzone_at.should be_within(5).of(old_valid_to + Setting.expire_warning_period.days)
@@ -183,7 +183,7 @@ describe Domain do
end
it 'should start redemption grace period' do
- Domain.start_redemption_grace_period
+ DomainCron.start_redemption_grace_period
@domain.reload
@domain.statuses.include?(DomainStatus::SERVER_HOLD).should == false
@@ -191,20 +191,20 @@ describe Domain do
@domain.statuses << DomainStatus::SERVER_MANUAL_INZONE # this prohibits server_hold
@domain.save
- Domain.start_redemption_grace_period
+ DomainCron.start_redemption_grace_period
@domain.reload
@domain.statuses.include?(DomainStatus::SERVER_HOLD).should == false
@domain.statuses = []
@domain.save
- Domain.start_redemption_grace_period
+ DomainCron.start_redemption_grace_period
@domain.reload
@domain.statuses.include?(DomainStatus::SERVER_HOLD).should == true
end
it 'should start delete period' do
- Domain.start_delete_period
+ DomainCron.start_delete_period
@domain.reload
@domain.statuses.include?(DomainStatus::DELETE_CANDIDATE).should == false
@@ -212,13 +212,13 @@ describe Domain do
@domain.statuses << DomainStatus::SERVER_DELETE_PROHIBITED # this prohibits delete_candidate
@domain.save
- Domain.start_delete_period
+ DomainCron.start_delete_period
@domain.reload
@domain.statuses.include?(DomainStatus::DELETE_CANDIDATE).should == false
@domain.statuses = []
@domain.save
- Domain.start_delete_period
+ DomainCron.start_delete_period
@domain.reload
@domain.statuses.include?(DomainStatus::DELETE_CANDIDATE).should == true
@@ -234,7 +234,7 @@ describe Domain do
Domain.count.should == 2
- Domain.start_delete_period
+ DomainCron.start_delete_period
Domain.destroy_delete_candidates
Domain.count.should == 0
@@ -391,7 +391,7 @@ describe Domain do
end
it 'should start redemption grace period' do
- Domain.start_redemption_grace_period
+ DomainCron.start_redemption_grace_period
@domain.reload
@domain.statuses.include?(DomainStatus::SERVER_HOLD).should == false
@@ -399,14 +399,14 @@ describe Domain do
@domain.statuses << DomainStatus::SERVER_MANUAL_INZONE # this prohibits server_hold
@domain.save
- Domain.start_redemption_grace_period
+ DomainCron.start_redemption_grace_period
@domain.reload
@domain.statuses.include?(DomainStatus::SERVER_HOLD).should == false
@domain.statuses = []
@domain.save
- Domain.start_redemption_grace_period
+ DomainCron.start_redemption_grace_period
@domain.reload
@domain.statuses.include?(DomainStatus::SERVER_HOLD).should == true
end
From b28748d667c76ef73e69ae69f2a303d4c195a49d Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Tue, 12 Jan 2016 14:06:32 +0200
Subject: [PATCH 121/196] 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 122/196] 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 123/196] 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 124/196] 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 125/196] 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 126/196] 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 127/196] 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 128/196] 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 fe771af0aee0ad111abf11130024a892bfb6f72d Mon Sep 17 00:00:00 2001
From: Stas
Date: Wed, 13 Jan 2016 18:32:35 +0200
Subject: [PATCH 129/196] 1098188884-outzone_clear
---
app/models/domain.rb | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/app/models/domain.rb b/app/models/domain.rb
index 57e4367b0..0a223520a 100644
--- a/app/models/domain.rb
+++ b/app/models/domain.rb
@@ -704,6 +704,18 @@ class Domain < ActiveRecord::Base
# special handling for admin changing status
def admin_status_update(update)
+ #check for hold status
+ if self.statuses.include?(
+ DomainStatus::SERVER_HOLD) &&
+ !update.include?(DomainStatus::SERVER_HOLD)
+
+ if self.statuses.include?(DomainStatus::EXPIRED)
+ self.outzone_at = Time.zone.now
+ else
+ self.outzone_at = nil
+ end
+ end
+
# check for deleted status
statuses.each do |s|
unless update.include? s
From 0b5fdcf3c2fe12d4f515494692d7ef20f1413541 Mon Sep 17 00:00:00 2001
From: Stas
Date: Wed, 13 Jan 2016 19:08:10 +0200
Subject: [PATCH 130/196] 110395650-method_changes
---
app/models/domain_cron.rb | 45 ++++++++++++++++++++++++---------------
1 file changed, 28 insertions(+), 17 deletions(-)
diff --git a/app/models/domain_cron.rb b/app/models/domain_cron.rb
index 3fd09dc1f..9e2540c9c 100644
--- a/app/models/domain_cron.rb
+++ b/app/models/domain_cron.rb
@@ -15,10 +15,10 @@ class DomainCron
end
count += 1
if domain.pending_update?
- domain.send_mail :pending_update_expired_notification_for_new_registrant
+ DomainMailer.pending_update_expired_notification_for_new_registrant(domain.id).deliver
end
if domain.pending_delete? || domain.pending_delete_confirmation?
- DomainMailer.pending_delete_expired_notification(domain.id, true).deliver
+ DomainMailer.pending_delete_expired_notification(domain.id, deliver_emails).deliver
end
domain.clean_pendings!
unless Rails.env.test?
@@ -33,44 +33,55 @@ class DomainCron
STDOUT << "#{Time.zone.now.utc} - Expiring domains\n" unless Rails.env.test?
domains = Domain.where('valid_to <= ?', Time.zone.now)
+ marked = 0
+ real = 0
domains.each do |domain|
next unless domain.expirable?
+ real += 1
domain.set_graceful_expired
- DomainMailer.expiration_reminder(domain.id).deliver
STDOUT << "#{Time.zone.now.utc} Domain.start_expire_period: ##{domain.id} (#{domain.name}) #{domain.changes}\n" unless Rails.env.test?
- domain.save
+ domain.save and marked += 1
end
- STDOUT << "#{Time.zone.now.utc} - Successfully expired #{domains.count} domains\n" unless Rails.env.test?
+ STDOUT << "#{Time.zone.now.utc} - Successfully expired #{marked} of #{real} domains\n" unless Rails.env.test?
end
def self.start_redemption_grace_period
STDOUT << "#{Time.zone.now.utc} - Setting server_hold to domains\n" unless Rails.env.test?
d = Domain.where('outzone_at <= ?', Time.zone.now)
+ marked = 0
+ real = 0
d.each do |domain|
next unless domain.server_holdable?
+ real += 1
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 and marked += 1
end
- STDOUT << "#{Time.zone.now.utc} - Successfully set server_hold to #{d.count} domains\n" unless Rails.env.test?
+ STDOUT << "#{Time.zone.now.utc} - Successfully set server_hold to #{marked} of #{real} domains\n" unless Rails.env.test?
+ marked
end
def self.start_delete_period
- STDOUT << "#{Time.zone.now.utc} - Setting delete_candidate to domains\n" unless Rails.env.test?
+ begin
+ STDOUT << "#{Time.zone.now.utc} - Setting delete_candidate to domains\n" unless Rails.env.test?
- d = Domain.where('delete_at <= ?', Time.zone.now)
- d.each do |domain|
- 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
+ d = Domain.where('delete_at <= ?', Time.zone.now)
+ marked = 0
+ real = 0
+ d.each do |domain|
+ next unless domain.delete_candidateable?
+ real += 1
+ 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 and marked += 1
+ end
+ ensure # the operator should see what was accomplished
+ STDOUT << "#{Time.zone.now.utc} - Finished setting delete_candidate - #{marked} out of #{real} successfully set\n" unless Rails.env.test?
end
-
- return if Rails.env.test?
- STDOUT << "#{Time.zone.now.utc} - Successfully set delete_candidate to #{d.count} domains\n"
+ marked
end
def self.destroy_delete_candidates
From 86bc1e81a0a54708a0be7c95ee20e4d01571ee92 Mon Sep 17 00:00:00 2001
From: Stas
Date: Thu, 14 Jan 2016 15:11:15 +0200
Subject: [PATCH 131/196] 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 132/196] 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 133/196] 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 134/196] 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 135/196] 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 136/196] 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 137/196] 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 138/196] 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 139/196] 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 140/196] 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 141/196] 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 142/196] 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 143/196] 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 144/196] 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 145/196] 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 146/196] 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 147/196] 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 148/196] 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 149/196] 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 150/196] 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 151/196] 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 9bc34ed9ef4da159ae0bd9e499810f67385f03a5 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Mon, 25 Jan 2016 14:37:43 +0200
Subject: [PATCH 152/196] Story#105846070 - save error to json obj
---
app/controllers/registrant/domains_controller.rb | 3 ++-
app/models/soap/arireg.rb | 3 +++
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/app/controllers/registrant/domains_controller.rb b/app/controllers/registrant/domains_controller.rb
index 445cc5d42..c2c406de7 100644
--- a/app/controllers/registrant/domains_controller.rb
+++ b/app/controllers/registrant/domains_controller.rb
@@ -44,7 +44,8 @@ class Registrant::DomainsController < RegistrantController
begin
BusinessRegistryCache.fetch_associated_domains ident, ident_cc
rescue Soap::Arireg::NotAvailableError => error
- flash[:notice] = I18n.t(error.message[:message])
+ flash[:notice] = I18n.t(error.json[:message])
+ Rails.error.fatal("[EXCEPTION] #{error.to_s}")
current_user.domains
end
end
diff --git a/app/models/soap/arireg.rb b/app/models/soap/arireg.rb
index 35517c3ef..5c8db3475 100644
--- a/app/models/soap/arireg.rb
+++ b/app/models/soap/arireg.rb
@@ -46,8 +46,11 @@ module Soap
class Arireg
class NotAvailableError < StandardError
+ attr_accessor :json
def initialize(params)
params[:message] = "#{I18n.t(:business_registry_service_not_available)}" unless params.key? :message
+ @json = params
+
super(params)
end
end
From a6fdb5289a939ed24c89bac150e0cdd8ba1e985e Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Mon, 25 Jan 2016 14:55:39 +0200
Subject: [PATCH 153/196] Story#105846070 - save error to json obj
---
app/controllers/registrant/domains_controller.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/controllers/registrant/domains_controller.rb b/app/controllers/registrant/domains_controller.rb
index c2c406de7..cc6f8742d 100644
--- a/app/controllers/registrant/domains_controller.rb
+++ b/app/controllers/registrant/domains_controller.rb
@@ -45,7 +45,7 @@ class Registrant::DomainsController < RegistrantController
BusinessRegistryCache.fetch_associated_domains ident, ident_cc
rescue Soap::Arireg::NotAvailableError => error
flash[:notice] = I18n.t(error.json[:message])
- Rails.error.fatal("[EXCEPTION] #{error.to_s}")
+ Rails.logger.error.fatal("[EXCEPTION] #{error.to_s}")
current_user.domains
end
end
From 9b64989038da6a1a4ff9afdd155195e5bf4ae6f1 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Mon, 25 Jan 2016 14:57:23 +0200
Subject: [PATCH 154/196] Story#105846070 - save error to json obj
---
app/controllers/registrant/domains_controller.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/controllers/registrant/domains_controller.rb b/app/controllers/registrant/domains_controller.rb
index cc6f8742d..bf7ce37bb 100644
--- a/app/controllers/registrant/domains_controller.rb
+++ b/app/controllers/registrant/domains_controller.rb
@@ -45,7 +45,7 @@ class Registrant::DomainsController < RegistrantController
BusinessRegistryCache.fetch_associated_domains ident, ident_cc
rescue Soap::Arireg::NotAvailableError => error
flash[:notice] = I18n.t(error.json[:message])
- Rails.logger.error.fatal("[EXCEPTION] #{error.to_s}")
+ Rails.logger.fatal("[EXCEPTION] #{error.to_s}")
current_user.domains
end
end
From 79b435cef250983447d4885278817343c91c7dae Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Mon, 25 Jan 2016 15:09:33 +0200
Subject: [PATCH 155/196] Story#105846070 - load domains by registrant_ident
---
app/models/registrant_user.rb | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/app/models/registrant_user.rb b/app/models/registrant_user.rb
index f0222b2a6..413ff1202 100644
--- a/app/models/registrant_user.rb
+++ b/app/models/registrant_user.rb
@@ -12,8 +12,7 @@ class RegistrantUser < User
end
def domains
- # TODO: move data to normal columns and drop registrant_ident
- ident_cc, ident = @current_user.registrant_ident.split '-'
+ ident_cc, ident = registrant_ident.to_s.split '-'
Domain.includes(:registrar, :registrant).where(contacts: {
ident_type: 'priv',
ident: ident, #identity_code,
From 8ed8a46046def125e48aa90b1f4bf343237a208f Mon Sep 17 00:00:00 2001
From: Stas
Date: Mon, 25 Jan 2016 16:56:04 +0200
Subject: [PATCH 156/196] 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 216c4e9fa0fff907b57bca9c95eba017828877f6 Mon Sep 17 00:00:00 2001
From: Stas
Date: Mon, 25 Jan 2016 17:53:38 +0200
Subject: [PATCH 157/196] 105842700-routes_fix
---
.../registrant/contacts_controller.rb | 8 ++++
.../contacts/partials/_address.haml | 23 ++++++++++
.../contacts/partials/_domains.haml | 30 +++++++++++++
.../contacts/partials/_general.haml | 45 +++++++++++++++++++
.../registrant/contacts/partials/_search.haml | 6 +++
.../contacts/partials/_statuses.haml | 21 +++++++++
app/views/registrant/contacts/show.haml | 12 +++++
.../domains/partials/_admin_contacts.haml | 2 +-
.../registrant/domains/partials/_general.haml | 2 +-
.../domains/partials/_keyrelays.haml | 6 +--
.../domains/partials/_legal_documents.haml | 2 +-
.../registrant/domains/partials/_owner.haml | 2 +-
.../domains/partials/_tech_contacts.haml | 2 +-
app/views/registrant/domains/show.haml | 4 +-
app/views/registrant/registrants/index.haml | 8 ++--
app/views/registrant/registrars/index.haml | 5 +--
config/routes.rb | 1 +
17 files changed, 161 insertions(+), 18 deletions(-)
create mode 100644 app/controllers/registrant/contacts_controller.rb
create mode 100644 app/views/registrant/contacts/partials/_address.haml
create mode 100644 app/views/registrant/contacts/partials/_domains.haml
create mode 100644 app/views/registrant/contacts/partials/_general.haml
create mode 100644 app/views/registrant/contacts/partials/_search.haml
create mode 100644 app/views/registrant/contacts/partials/_statuses.haml
create mode 100644 app/views/registrant/contacts/show.haml
diff --git a/app/controllers/registrant/contacts_controller.rb b/app/controllers/registrant/contacts_controller.rb
new file mode 100644
index 000000000..d3a0ddff8
--- /dev/null
+++ b/app/controllers/registrant/contacts_controller.rb
@@ -0,0 +1,8 @@
+class Registrant::ContactsController < RegistrantController
+
+ def show
+ @contact = Contact.find(params[:id])
+ authorize! :read, @contact
+ @contact.valid?
+ end
+end
\ No newline at end of file
diff --git a/app/views/registrant/contacts/partials/_address.haml b/app/views/registrant/contacts/partials/_address.haml
new file mode 100644
index 000000000..9c0f548e3
--- /dev/null
+++ b/app/views/registrant/contacts/partials/_address.haml
@@ -0,0 +1,23 @@
+.panel.panel-default
+ .panel-heading
+ %h3.panel-title= t(:address)
+ .panel-body
+ %dl.dl-horizontal
+ - if @contact.org_name.present?
+ %dt= t(:org_name)
+ %dd= @contact.org_name
+
+ %dt= t(:street)
+ %dd= @contact.street.to_s.gsub("\n", ' ').html_safe
+
+ %dt= t(:city)
+ %dd= @contact.city
+
+ %dt= t(:zip)
+ %dd= @contact.zip
+
+ %dt= t(:state)
+ %dd= @contact.state
+
+ %dt= t(:country)
+ %dd= @contact.country
diff --git a/app/views/registrant/contacts/partials/_domains.haml b/app/views/registrant/contacts/partials/_domains.haml
new file mode 100644
index 000000000..d0180532d
--- /dev/null
+++ b/app/views/registrant/contacts/partials/_domains.haml
@@ -0,0 +1,30 @@
+- domains = contact.all_domains(page: params[:domain_page], per: 20, params: params)
+#contacts.panel.panel-default
+ .panel-heading
+ .pull-left
+ = t(:domains)
+ .pull-right
+ = form_tag request.path, method: :get do
+ = select_tag :domain_filter, options_for_select(%w(Registrant AdminDomainContact TechDomainContact), selected: params[:domain_filter]),
+ include_blank: true, class: 'form-control2 selectize2'
+ %button.btn.btn-primary
+ %span.glyphicon.glyphicon-search
+ .clearfix
+
+ .table-responsive
+ %table.table.table-hover.table-bordered.table-condensed
+ %thead
+ %tr
+ %th{class: 'col-xs-3'}=custom_sort_link t(:domain_name), :name
+ %th{class: 'col-xs-3'}=custom_sort_link t(:registrar), :registrar_name
+ %th{class: 'col-xs-3'}=custom_sort_link t(:valid_to), :valid_to
+ %th{class: 'col-xs-3'}= t(:roles)
+ %tbody
+ - domains.each do |x|
+ %tr
+ %td= link_to(x.name, [:registrant, x])
+ %td= link_to(x.registrar, [:registrant, x.registrar])
+ %td= l(x.valid_to, format: :short)
+ %td= x.roles.join(", ")
+
+= paginate domains, param_name: :domain_page
\ No newline at end of file
diff --git a/app/views/registrant/contacts/partials/_general.haml b/app/views/registrant/contacts/partials/_general.haml
new file mode 100644
index 000000000..36192cb2c
--- /dev/null
+++ b/app/views/registrant/contacts/partials/_general.haml
@@ -0,0 +1,45 @@
+.panel.panel-default
+ .panel-heading
+ %h3.panel-title= t(:general)
+ .panel-body
+ %dl.dl-horizontal
+ %dt= t(:id)
+ %dd= @contact.code
+
+ %dt= t(:password)
+ %dd
+ = text_field_tag :auth_info, @contact.auth_info, readonly: true, class: 'partially-hidden'
+
+ %br
+
+ %dt= t(:ident)
+ %dd= ident_for(@contact)
+
+ %dt= t(:email)
+ %dd= @contact.email
+
+ %dt= t(:phone)
+ %dd= @contact.phone
+
+ - if @contact.fax
+ %dt= t(:fax)
+ %dd= @contact.fax
+
+ %br
+
+ %dt= t(:created)
+ %dd
+ = l(@contact.created_at, format: :short)
+ by
+ = creator_link(@contact)
+
+ %dt= t(:updated)
+ %dd
+ = l(@contact.updated_at, format: :short)
+ by
+ = updator_link(@contact)
+
+ %dt= t(:registrar)
+ %dd
+ - if @contact.registrar.present?
+ = link_to(@contact.registrar, registrant_registrar_path(@contact.registrar))
diff --git a/app/views/registrant/contacts/partials/_search.haml b/app/views/registrant/contacts/partials/_search.haml
new file mode 100644
index 000000000..4a723bf6b
--- /dev/null
+++ b/app/views/registrant/contacts/partials/_search.haml
@@ -0,0 +1,6 @@
+= search_form_for [:registrant, @q] do |f|
+ = f.search_field :name_cont
+ = f.submit do
+ %span.glyphicon.glyphicon-search
+
+
diff --git a/app/views/registrant/contacts/partials/_statuses.haml b/app/views/registrant/contacts/partials/_statuses.haml
new file mode 100644
index 000000000..c39075754
--- /dev/null
+++ b/app/views/registrant/contacts/partials/_statuses.haml
@@ -0,0 +1,21 @@
+- panel_class = contact.errors.messages[:statuses] ? 'panel-danger' : 'panel-default'
+#contact_statuses.panel{class: panel_class}
+ .panel-heading.clearfix
+ = t(:statuses)
+ .table-responsive
+ %table.table.table-hover.table-bordered.table-condensed
+ %thead
+ %tr
+ %th{class: 'col-xs-6'}= t(:status)
+ %th{class: 'col-xs-6'}= t(:notes)
+ %tbody
+ - contact.statuses.each do |status|
+ %tr
+ %td= status
+ %td= contact.status_notes[status]
+
+ - if contact.errors.messages[:statuses]
+ %tfoot
+ - @domain.errors.messages[:statuses].each do |s|
+ %tr
+ %td{colspan: 4}= s
diff --git a/app/views/registrant/contacts/show.haml b/app/views/registrant/contacts/show.haml
new file mode 100644
index 000000000..57915e9ff
--- /dev/null
+++ b/app/views/registrant/contacts/show.haml
@@ -0,0 +1,12 @@
+- content_for :actions do
+ = render 'shared/title', name: @contact.name
+
+.row
+ .col-md-6= render 'registrant/contacts/partials/general'
+ .col-md-6= render 'registrant/contacts/partials/address'
+.row
+ .col-md-12= render 'registrant/contacts/partials/statuses', contact: @contact
+.row
+ .col-md-12= render 'registrant/contacts/partials/domains', contact: @contact
+
+
diff --git a/app/views/registrant/domains/partials/_admin_contacts.haml b/app/views/registrant/domains/partials/_admin_contacts.haml
index 0db8f6e32..5e49d3fbc 100644
--- a/app/views/registrant/domains/partials/_admin_contacts.haml
+++ b/app/views/registrant/domains/partials/_admin_contacts.haml
@@ -12,7 +12,7 @@
%tbody
- @domain.admin_contacts.each do |ac|
%tr
- %td= link_to(ac, admin_contact_path(ac))
+ %td= link_to(ac, registrant_contact_path(ac))
%td= ac.code
%td= ac.email
- if @domain.errors.messages[:admin_contacts]
diff --git a/app/views/registrant/domains/partials/_general.haml b/app/views/registrant/domains/partials/_general.haml
index d1a17c1cc..d80c1ce6a 100644
--- a/app/views/registrant/domains/partials/_general.haml
+++ b/app/views/registrant/domains/partials/_general.haml
@@ -10,7 +10,7 @@
%dd= l(@domain.registered_at)
%dt= t(:registrar)
- %dd= link_to(@domain.registrar, admin_registrar_path(@domain.registrar))
+ %dd= link_to(@domain.registrar, registrant_registrar_path(@domain.registrar))
%dt= t(:authinfo_pw)
%dd
diff --git a/app/views/registrant/domains/partials/_keyrelays.haml b/app/views/registrant/domains/partials/_keyrelays.haml
index 43d099383..d2d39f6ba 100644
--- a/app/views/registrant/domains/partials/_keyrelays.haml
+++ b/app/views/registrant/domains/partials/_keyrelays.haml
@@ -13,8 +13,8 @@
%tbody
- @domain.keyrelays.includes([:requester, :accepter]).order(pa_date: :desc).each do |x|
%tr
- %td= link_to(x.pa_date, [:admin, x])
+ %td= link_to(x.pa_date, [:registrar, x])
%td= x.expiry
- %td= link_to(x.requester, [:admin, x.requester])
- %td= link_to(x.accepter, [:admin, x.accepter])
+ %td= link_to(x.requester, [:registrar, x.requester])
+ %td= link_to(x.accepter, [:registrar, x.accepter])
%td= x.status
diff --git a/app/views/registrant/domains/partials/_legal_documents.haml b/app/views/registrant/domains/partials/_legal_documents.haml
index 900a9784a..7d740977b 100644
--- a/app/views/registrant/domains/partials/_legal_documents.haml
+++ b/app/views/registrant/domains/partials/_legal_documents.haml
@@ -10,5 +10,5 @@
%tbody
- legal_documents.each do |x|
%tr
- %td= link_to(x.created_at, [:admin, x])
+ %td= link_to(x.created_at, [:registrar, x])
%td= x.document_type
diff --git a/app/views/registrant/domains/partials/_owner.haml b/app/views/registrant/domains/partials/_owner.haml
index 7f499f86b..a7c678d56 100644
--- a/app/views/registrant/domains/partials/_owner.haml
+++ b/app/views/registrant/domains/partials/_owner.haml
@@ -4,7 +4,7 @@
.panel-body
%dl.dl-horizontal
%dt= t(:name)
- %dd= link_to(@domain.registrant, [:admin, @domain.registrant])
+ %dd= link_to(@domain.registrant, [:registrar, @domain.registrant])
%dt= t(:id)
%dd= @domain.registrant_code
diff --git a/app/views/registrant/domains/partials/_tech_contacts.haml b/app/views/registrant/domains/partials/_tech_contacts.haml
index 20badbea8..12844a41e 100644
--- a/app/views/registrant/domains/partials/_tech_contacts.haml
+++ b/app/views/registrant/domains/partials/_tech_contacts.haml
@@ -12,7 +12,7 @@
%tbody
- @domain.tech_contacts.each do |tc|
%tr
- %td= link_to(tc, admin_contact_path(tc))
+ %td= link_to(tc, registrant_contact_path(tc))
%td= tc.code
%td= tc.email
- if @domain.errors.messages[:tech_contacts]
diff --git a/app/views/registrant/domains/show.haml b/app/views/registrant/domains/show.haml
index 50c0409b2..0c1ceb48e 100644
--- a/app/views/registrant/domains/show.haml
+++ b/app/views/registrant/domains/show.haml
@@ -1,7 +1,5 @@
- content_for :actions do
- -#= link_to(t(:history), admin_domain_domain_versions_path(@domain.id), method: :get, class: 'btn btn-primary')
-
-= render 'shared/title', name: @domain.name
+ = render 'shared/title', name: @domain.name
.row
.col-md-6= render 'registrant/domains/partials/general'
diff --git a/app/views/registrant/registrants/index.haml b/app/views/registrant/registrants/index.haml
index b8e7850e6..11838d1b2 100644
--- a/app/views/registrant/registrants/index.haml
+++ b/app/views/registrant/registrants/index.haml
@@ -2,7 +2,7 @@
.row
.col-md-12
- = search_form_for [:admin, @q], html: { style: 'margin-bottom: 0;', class: 'js-form', autocomplete: 'off' } do |f|
+ = search_form_for [:registrar, @q], html: { style: 'margin-bottom: 0;', class: 'js-form', autocomplete: 'off' } do |f|
.row
.col-md-3
.form-group
@@ -91,13 +91,13 @@
%tbody
- @contacts.each do |contact|
%tr
- %td= link_to(contact, admin_contact_path(contact))
+ %td= link_to(contact, registrar_contact_path(contact))
%td= contact.code
%td= ident_for(contact)
%td= l(contact.created_at, format: :short)
%td
- if contact.registrar
- = link_to(contact.registrar, admin_registrar_path(contact.registrar))
+ = link_to(contact.registrar, registrar_registrar_path(contact.registrar))
.row
.col-md-6
@@ -109,4 +109,4 @@
:coffee
$(".js-reset-form").on "click", (e) ->
e.preventDefault();
- window.location = "#{admin_contacts_path}"
+ window.location = "#{registrar_contacts_path}"
diff --git a/app/views/registrant/registrars/index.haml b/app/views/registrant/registrars/index.haml
index a2604dbec..0489bcf52 100644
--- a/app/views/registrant/registrars/index.haml
+++ b/app/views/registrant/registrars/index.haml
@@ -1,6 +1,5 @@
- content_for :actions do
- = link_to(t(:new), new_admin_registrar_path, class: 'btn btn-primary')
-= render 'shared/title', name: t(:registrars)
+ = render 'shared/title', name: t(:registrars)
.row
.col-md-12
@@ -15,7 +14,7 @@
%tbody
- @registrars.each do |x|
%tr
- %td= link_to(x, [:admin, x])
+ %td= link_to(x, [:registrar, x])
%td= x.reg_no
.row
.col-md-12
diff --git a/config/routes.rb b/config/routes.rb
index 9a91027cc..6b3cbe00a 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -155,6 +155,7 @@ Rails.application.routes.draw do
end
resources :registrants
+ resources :contacts
resources :whois
# resources :contacts do
From addf9638d27f55c6aa04f8f0de50ef1d1eb5f6ff Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Mon, 25 Jan 2016 17:59:13 +0200
Subject: [PATCH 158/196] Story#105846070 - if I don't have orgs in
Ariregister, then cache that answer as well
---
app/models/business_registry_cache.rb | 40 +++++++++++++--------------
app/models/soap/arireg.rb | 27 ++++++++----------
2 files changed, 31 insertions(+), 36 deletions(-)
diff --git a/app/models/business_registry_cache.rb b/app/models/business_registry_cache.rb
index 6bd509101..e287358b6 100644
--- a/app/models/business_registry_cache.rb
+++ b/app/models/business_registry_cache.rb
@@ -23,16 +23,16 @@ class BusinessRegistryCache < ActiveRecord::Base
def associated_domains
domains = []
contact_ids = associated_businesses.map do |bic|
- Contact.select(:id).where("ident = ? AND ident_type = 'org' AND ident_country_code = 'EE'", bic).pluck(:id)
- end
- contact_ids = Contact.select(:id).where("ident = ? AND ident_type = 'priv' AND ident_country_code = ?",
- ident, ident_country_code).pluck(:id) + contact_ids
- contact_ids.flatten!.compact! unless contact_ids.blank?
+ Contact.where("ident = ? AND ident_type = 'org' AND ident_country_code = 'EE'", bic).pluck(:id)
+ end.flatten
+ contact_ids += Contact.where("ident = ? AND ident_type = 'priv' AND ident_country_code = ?",
+ ident, ident_country_code).pluck(:id)
+
unless contact_ids.blank?
- contact_ids.uniq!
- domains = DomainContact.select(:domain_id).distinct.where("contact_id in (?)", contact_ids).pluck(:domain_id)
+ domains = DomainContact.select(:domain_id).distinct.where(contact_id: contact_ids).pluck(:domain_id)
end
- Domain.includes(:registrar, :registrant).where('id in (?)', domains)
+
+ Domain.includes(:registrar, :registrant).where(id: domains)
end
class << self
@@ -50,25 +50,23 @@ class BusinessRegistryCache < ActiveRecord::Base
end
def fetch_by_ident_and_cc(ident_code, ident_cc)
- cache = BusinessRegistryCache.find_by(ident: ident_code, ident_country_code: ident_cc)
+ cache = BusinessRegistryCache.first_or_initialize(ident: ident_code, ident_country_code: ident_cc)
+ msg_start = "[Ariregister] #{ident_cc}-#{ident_code}:"
+
# fetch new data if cache is expired
- return cache if cache.present? && cache.retrieved_on > (Time.zone.now - Setting.days_to_keep_business_registry_cache.days)
- businesses = business_registry.associated_businesses(ident_code, ident_cc)
- unless businesses.nil?
- if cache.blank?
- cache = BusinessRegistryCache.new(businesses)
- else
- cache.update businesses
- end
- cache.save
- else
- cache = [] # expired data is forbidden
+ if cache.retrieved_on && cache.retrieved_on > (Time.zone.now - Setting.days_to_keep_business_registry_cache.days)
+ Rails.logger.info("#{msg_start} Info loaded from cache")
+ return cache
end
+
+ cache.attributes = business_registry.associated_businesses(ident_code, ident_cc)
+ Rails.logger.info("#{msg_start} Info loaded from server")
+
+ cache.save
cache
end
def business_registry
- # TODO: can this be cached and shared?
Soap::Arireg.new
end
diff --git a/app/models/soap/arireg.rb b/app/models/soap/arireg.rb
index 5c8db3475..cd8e446b4 100644
--- a/app/models/soap/arireg.rb
+++ b/app/models/soap/arireg.rb
@@ -95,22 +95,19 @@ module Soap
'fyysilise_isiku_koodi_riik' => country_code_3(ident_cc)
)
content = extract response, :paringesindus_v4_response
- unless content.blank?
- if content[:ettevotjad].key? :item
- business_ident = items(content, :ettevotjad).map do |item|
- # debug helps users gather data for testing
- puts "#{item[:ariregistri_kood]}\t#{item[:arinimi]}\t#{item[:staatus]} #{item[:oiguslik_vorm]}\t" if @debug
- item[:ariregistri_kood]
- end
- {
- ident: ident,
- ident_country_code: ident_cc,
- # ident_type: 'priv',
- retrieved_on: Time.now,
- associated_businesses: business_ident
- }
- end
+ if content.present? && content[:ettevotjad].key?(:item)
+ business_ident = items(content, :ettevotjad).map{|item| item[:ariregistri_kood]}
+ else
+ business_ident = []
end
+
+ {
+ ident: ident,
+ ident_country_code: ident_cc,
+ # ident_type: 'priv',
+ retrieved_on: Time.now,
+ associated_businesses: business_ident
+ }
rescue Savon::SOAPFault => fault
Rails.logger.error "#{fault} Äriregister arireg #{self.class.username} at #{self.class.host }"
raise NotAvailableError.new(exception: fault)
From f0558ae0bfb66b4a680a851882a500bc1fc203b7 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Mon, 25 Jan 2016 18:15:18 +0200
Subject: [PATCH 159/196] Story#105846070 - more rails way how to load
relations
---
app/models/business_registry_cache.rb | 25 ++++++++-----------------
1 file changed, 8 insertions(+), 17 deletions(-)
diff --git a/app/models/business_registry_cache.rb b/app/models/business_registry_cache.rb
index e287358b6..5ca1e002c 100644
--- a/app/models/business_registry_cache.rb
+++ b/app/models/business_registry_cache.rb
@@ -20,37 +20,28 @@ authentication using electronic ID. Association through a business organisation
class BusinessRegistryCache < ActiveRecord::Base
+ # 1. load domains by business
+ # 2. load domains by person
def associated_domains
domains = []
- contact_ids = associated_businesses.map do |bic|
- Contact.where("ident = ? AND ident_type = 'org' AND ident_country_code = 'EE'", bic).pluck(:id)
- end.flatten
- contact_ids += Contact.where("ident = ? AND ident_type = 'priv' AND ident_country_code = ?",
- ident, ident_country_code).pluck(:id)
+
+ contact_ids = Contact.where(ident_type: 'org', ident: associated_businesses, ident_country_code: 'EE').pluck(:id)
+ contact_ids += Contact.where(ident_type: 'priv', ident: ident, ident_country_code: ident_country_code).pluck(:id)
unless contact_ids.blank?
- domains = DomainContact.select(:domain_id).distinct.where(contact_id: contact_ids).pluck(:domain_id)
+ domains = DomainContact.distinct.where(contact_id: contact_ids).pluck(:domain_id)
end
Domain.includes(:registrar, :registrant).where(id: domains)
end
class << self
-
def fetch_associated_domains(ident_code, ident_cc)
- cached = fetch_by_ident_and_cc(ident_code, ident_cc)
- if cached.blank?
- Domain.includes(:registrar, :registrant).where(contacts: {
- ident_type: 'priv',
- ident: ident_code,
- ident_country_code: ident_cc})
- else
- cached.associated_domains
- end
+ fetch_by_ident_and_cc(ident_code, ident_cc).associated_domains
end
def fetch_by_ident_and_cc(ident_code, ident_cc)
- cache = BusinessRegistryCache.first_or_initialize(ident: ident_code, ident_country_code: ident_cc)
+ cache = BusinessRegistryCache.where(ident: ident_code, ident_country_code: ident_cc).first_or_initialize
msg_start = "[Ariregister] #{ident_cc}-#{ident_code}:"
# fetch new data if cache is expired
From 0b3079b8b5fed07630228429e38a3a0175ca5f80 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Mon, 25 Jan 2016 18:22:34 +0200
Subject: [PATCH 160/196] Story#105846070 - Admin can edit setting
days_to_keep_business_registry_cache
---
app/views/admin/settings/index.haml | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/views/admin/settings/index.haml b/app/views/admin/settings/index.haml
index ede30e979..855c29d23 100644
--- a/app/views/admin/settings/index.haml
+++ b/app/views/admin/settings/index.haml
@@ -50,6 +50,7 @@
= render 'setting_row', var: :transfer_wait_time
= render 'setting_row', var: :ds_digest_type
= render 'setting_row', var: :client_side_status_editing_enabled
+ = render 'setting_row', var: :days_to_keep_business_registry_cache
= render 'setting_row', var: :api_ip_whitelist_enabled
= render 'setting_row', var: :registrar_ip_whitelist_enabled
= render 'setting_row', var: :request_confrimation_on_registrant_change_enabled
From a0fcd8be8bbb857f1cb608e0226a51fa6fad6929 Mon Sep 17 00:00:00 2001
From: Stas
Date: Tue, 26 Jan 2016 14:36:09 +0200
Subject: [PATCH 161/196] 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 a4adb0fec0dd95d35b2442f2dd5d2e27d361d647 Mon Sep 17 00:00:00 2001
From: Stas
Date: Tue, 26 Jan 2016 16:28:29 +0200
Subject: [PATCH 162/196] 109818884-outzone_date_change
---
app/models/domain.rb | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/app/models/domain.rb b/app/models/domain.rb
index 0a223520a..42a65bcde 100644
--- a/app/models/domain.rb
+++ b/app/models/domain.rb
@@ -710,7 +710,8 @@ class Domain < ActiveRecord::Base
!update.include?(DomainStatus::SERVER_HOLD)
if self.statuses.include?(DomainStatus::EXPIRED)
- self.outzone_at = Time.zone.now
+ #self.outzone_at = Time.zone.now + 1.day
+ self.outzone_at = self.valid_to
else
self.outzone_at = nil
end
From da2f30f8a9c95c6254798452ff8461d783353d37 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Thu, 28 Jan 2016 13:10:32 +0200
Subject: [PATCH 163/196] 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 1aa9123aa284348c19ce9550e07cc7016781e309 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Thu, 28 Jan 2016 14:13:06 +0200
Subject: [PATCH 164/196] Story#105846070 - add Ariregister's info messages
---
app/models/soap/arireg.rb | 19 ++++++++++++-------
1 file changed, 12 insertions(+), 7 deletions(-)
diff --git a/app/models/soap/arireg.rb b/app/models/soap/arireg.rb
index cd8e446b4..e040c24ad 100644
--- a/app/models/soap/arireg.rb
+++ b/app/models/soap/arireg.rb
@@ -90,11 +90,16 @@ module Soap
# retrieve business id codes for business that a person has a legal role
def associated_businesses(ident, ident_cc = 'EST')
begin
- response = @client.call :paringesindus_v4, message: body(
- 'fyysilise_isiku_kood' => ident,
- 'fyysilise_isiku_koodi_riik' => country_code_3(ident_cc)
- )
+ msg = body(
+ 'fyysilise_isiku_kood' => ident,
+ 'fyysilise_isiku_koodi_riik' => country_code_3(ident_cc)
+ )
+ Rails.logger.info "[Ariregister] Request sent with data: #{msg.inspect}"
+
+ response = @client.call :paringesindus_v4, message: msg
content = extract response, :paringesindus_v4_response
+ Rails.logger.info "[Ariregister] Got response with data: #{content.inspect}"
+
if content.present? && content[:ettevotjad].key?(:item)
business_ident = items(content, :ettevotjad).map{|item| item[:ariregistri_kood]}
else
@@ -109,13 +114,13 @@ module Soap
associated_businesses: business_ident
}
rescue Savon::SOAPFault => fault
- Rails.logger.error "#{fault} Äriregister arireg #{self.class.username} at #{self.class.host }"
+ Rails.logger.error "[Ariregister] #{fault} Äriregister arireg #{self.class.username} at #{self.class.host }"
raise NotAvailableError.new(exception: fault)
rescue HTTPI::SSLError => ssl_error
- Rails.logger.error "#{ssl_error} at #{self.class.host}"
+ Rails.logger.error "[Ariregister] #{ssl_error} at #{self.class.host}"
raise NotAvailableError.new(exception: ssl_error)
rescue SocketError => sock
- Rails.logger.error "#{sock}"
+ Rails.logger.error "[Ariregister] #{sock}"
raise NotAvailableError.new(exception: sock)
end
end
From f1d4d1f5522d69e2efdfa8059728b05485932d2a Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Thu, 28 Jan 2016 14:39:39 +0200
Subject: [PATCH 165/196] 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 72478dbb437523a689fe6f26a3c06266d568d4d3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20V=C3=B5hmar?=
Date: Thu, 28 Jan 2016 15:05:53 +0200
Subject: [PATCH 166/196] Restored bank transaction sum check for Directo
integration
---
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 5a719d0a7..11506331e 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 4c8da0bb7ad1642d36afe1035ace94955c283f57 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Thu, 28 Jan 2016 16:16:38 +0200
Subject: [PATCH 167/196] Story#105846070 - remove password from Ariregister
log
---
app/models/soap/arireg.rb | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/app/models/soap/arireg.rb b/app/models/soap/arireg.rb
index e040c24ad..422a72dd9 100644
--- a/app/models/soap/arireg.rb
+++ b/app/models/soap/arireg.rb
@@ -90,13 +90,13 @@ module Soap
# retrieve business id codes for business that a person has a legal role
def associated_businesses(ident, ident_cc = 'EST')
begin
- msg = body(
- 'fyysilise_isiku_kood' => ident,
+ msg = {
+ 'fyysilise_isiku_kood' => ident,
'fyysilise_isiku_koodi_riik' => country_code_3(ident_cc)
- )
+ }
Rails.logger.info "[Ariregister] Request sent with data: #{msg.inspect}"
- response = @client.call :paringesindus_v4, message: msg
+ response = @client.call :paringesindus_v4, message: body(msg)
content = extract response, :paringesindus_v4_response
Rails.logger.info "[Ariregister] Got response with data: #{content.inspect}"
From 205b837121066c85c7e77cadc0dff9b83285a7ad Mon Sep 17 00:00:00 2001
From: Stas
Date: Sat, 30 Jan 2016 15:32:14 +0200
Subject: [PATCH 168/196] 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 d70c4b5d12a6d6d9ea1a55ef95f4e236be881d01 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Mon, 1 Feb 2016 12:03:47 +0200
Subject: [PATCH 169/196] Story#110395650 - destroy_with_message is also
extracted to class as it's used only for cron job
---
app/models/domain.rb | 13 -------------
app/models/domain_cron.rb | 21 +++++++++++++++++----
2 files changed, 17 insertions(+), 17 deletions(-)
diff --git a/app/models/domain.rb b/app/models/domain.rb
index da56741ae..513a40718 100644
--- a/app/models/domain.rb
+++ b/app/models/domain.rb
@@ -245,19 +245,6 @@ class Domain < ActiveRecord::Base
{ admin_contacts: :registrar }
)
end
-
- # rubocop: enable Metrics/AbcSize
- # rubocop:enable Rails/FindEach
- # rubocop: enable Metrics/LineLength
- def destroy_with_message(domain)
- domain.destroy
- bye_bye = domain.versions.last
- domain.registrar.messages.create!(
- body: "#{I18n.t(:domain_deleted)}: #{domain.name}",
- attached_obj_id: bye_bye.id,
- attached_obj_type: bye_bye.class.to_s # DomainVersion
- )
- end
end
def name=(value)
diff --git a/app/models/domain_cron.rb b/app/models/domain_cron.rb
index 9e2540c9c..65e50a59c 100644
--- a/app/models/domain_cron.rb
+++ b/app/models/domain_cron.rb
@@ -20,7 +20,7 @@ class DomainCron
if domain.pending_delete? || domain.pending_delete_confirmation?
DomainMailer.pending_delete_expired_notification(domain.id, deliver_emails).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
@@ -40,7 +40,7 @@ class DomainCron
real += 1
domain.set_graceful_expired
STDOUT << "#{Time.zone.now.utc} Domain.start_expire_period: ##{domain.id} (#{domain.name}) #{domain.changes}\n" unless Rails.env.test?
- domain.save and marked += 1
+ domain.save(validate: false) and marked += 1
end
STDOUT << "#{Time.zone.now.utc} - Successfully expired #{marked} of #{real} domains\n" unless Rails.env.test?
@@ -57,7 +57,7 @@ class DomainCron
real += 1
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 and marked += 1
+ domain.save(validate: false) and marked += 1
end
STDOUT << "#{Time.zone.now.utc} - Successfully set server_hold to #{marked} of #{real} domains\n" unless Rails.env.test?
@@ -76,7 +76,7 @@ class DomainCron
real += 1
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 and marked += 1
+ domain.save(validate: false) and marked += 1
end
ensure # the operator should see what was accomplished
STDOUT << "#{Time.zone.now.utc} - Finished setting delete_candidate - #{marked} out of #{real} successfully set\n" unless Rails.env.test?
@@ -106,4 +106,17 @@ class DomainCron
STDOUT << "#{Time.zone.now.utc} - Successfully destroyed #{c} domains\n" unless Rails.env.test?
end
+ # rubocop: enable Metrics/AbcSize
+ # rubocop:enable Rails/FindEach
+ # rubocop: enable Metrics/LineLength
+ def self.destroy_with_message(domain)
+ domain.destroy
+ bye_bye = domain.versions.last
+ domain.registrar.messages.create!(
+ body: "#{I18n.t(:domain_deleted)}: #{domain.name}",
+ attached_obj_id: bye_bye.id,
+ attached_obj_type: bye_bye.class.to_s # DomainVersion
+ )
+ end
+
end
From dd881c45684bf36d7af19bea1890d0ffc5fbe0d6 Mon Sep 17 00:00:00 2001
From: Stas
Date: Mon, 1 Feb 2016 14:48:51 +0200
Subject: [PATCH 170/196] 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 c38986adc3ab5d8e55b951f3ba78d3ece8c178ba Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Tue, 2 Feb 2016 12:00:14 +0200
Subject: [PATCH 171/196] Story#110395650 - messages are updated
---
app/models/domain_cron.rb | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/app/models/domain_cron.rb b/app/models/domain_cron.rb
index 65e50a59c..74c09740e 100644
--- a/app/models/domain_cron.rb
+++ b/app/models/domain_cron.rb
@@ -22,7 +22,7 @@ class DomainCron
end
domain.clean_pendings_lowlevel
unless Rails.env.test?
- STDOUT << "#{Time.zone.now.utc} Domain.clean_expired_pendings: ##{domain.id} (#{domain.name})\n"
+ STDOUT << "#{Time.zone.now.utc} DomainCron.clean_expired_pendings: ##{domain.id} (#{domain.name})\n"
end
end
STDOUT << "#{Time.zone.now.utc} - Successfully cancelled #{count} domain pendings\n" unless Rails.env.test?
@@ -39,7 +39,7 @@ class DomainCron
next unless domain.expirable?
real += 1
domain.set_graceful_expired
- STDOUT << "#{Time.zone.now.utc} Domain.start_expire_period: ##{domain.id} (#{domain.name}) #{domain.changes}\n" unless Rails.env.test?
+ STDOUT << "#{Time.zone.now.utc} DomainCron.start_expire_period: ##{domain.id} (#{domain.name}) #{domain.changes}\n" unless Rails.env.test?
domain.save(validate: false) and marked += 1
end
@@ -56,7 +56,7 @@ class DomainCron
next unless domain.server_holdable?
real += 1
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?
+ STDOUT << "#{Time.zone.now.utc} DomainCron.start_redemption_grace_period: ##{domain.id} (#{domain.name}) #{domain.changes}\n" unless Rails.env.test?
domain.save(validate: false) and marked += 1
end
@@ -75,7 +75,7 @@ class DomainCron
next unless domain.delete_candidateable?
real += 1
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?
+ STDOUT << "#{Time.zone.now.utc} DomainCron.start_delete_period: ##{domain.id} (#{domain.name}) #{domain.changes}\n" unless Rails.env.test?
domain.save(validate: false) and marked += 1
end
ensure # the operator should see what was accomplished
@@ -99,7 +99,7 @@ class DomainCron
Domain.where('force_delete_at <= ?', Time.zone.now).each do |x|
WhoisRecord.where(domain_id: x.id).destroy_all
destroy_with_message x
- STDOUT << "#{Time.zone.now.utc} Domain.destroy_delete_candidates: by force delete time ##{x.id} (#{x.name})\n" unless Rails.env.test?
+ STDOUT << "#{Time.zone.now.utc} DomainCron.destroy_delete_candidates: by force delete time ##{x.id} (#{x.name})\n" unless Rails.env.test?
c += 1
end
From 996e56c5cdf8ce7d64dd02c3e9cec641eb52cfc7 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Tue, 2 Feb 2016 12:41:34 +0200
Subject: [PATCH 172/196] Story#110395650 - calling instance, not class methods
---
app/models/domain.rb | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/app/models/domain.rb b/app/models/domain.rb
index 513a40718..87f10bea5 100644
--- a/app/models/domain.rb
+++ b/app/models/domain.rb
@@ -204,28 +204,28 @@ class Domain < ActiveRecord::Base
end
def self.clean_expired_pendings
+ ActiveSupport::Deprecation.instance.deprecation_warning(DomainCron, __method__)
DomainCron.send(__method__)
- ActiveSupport::Deprecation.deprecate_methods(DomainCron, __method__)
end
def self.start_expire_period
+ ActiveSupport::Deprecation.instance.deprecation_warning(DomainCron, __method__)
DomainCron.send(__method__)
- ActiveSupport::Deprecation.deprecate_methods(DomainCron, __method__)
end
def self.start_redemption_grace_period
+ ActiveSupport::Deprecation.instance.deprecation_warning(DomainCron, __method__)
DomainCron.send(__method__)
- ActiveSupport::Deprecation.deprecate_methods(DomainCron, __method__)
end
def self.start_delete_period
+ ActiveSupport::Deprecation.instance.deprecation_warning(DomainCron, __method__)
DomainCron.send(__method__)
- ActiveSupport::Deprecation.deprecate_methods(DomainCron, __method__)
end
def self.destroy_delete_candidates
+ ActiveSupport::Deprecation.instance.deprecation_warning(DomainCron, __method__)
DomainCron.send(__method__)
- ActiveSupport::Deprecation.deprecate_methods(DomainCron, __method__)
end
class << self
From 6a63feb5dd922c0d0a34da0604c34bda29d522e7 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Tue, 2 Feb 2016 13:37:08 +0200
Subject: [PATCH 173/196] Story#112043941 - adding more logs to find out when
invoices are not sent
---
app/models/directo.rb | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/app/models/directo.rb b/app/models/directo.rb
index 11506331e..591f450c0 100644
--- a/app/models/directo.rb
+++ b/app/models/directo.rb
@@ -3,13 +3,19 @@ class Directo < ActiveRecord::Base
def self.send_receipts
new_trans = Invoice.where(invoice_type: "DEB", in_directo: false).where.not(cancelled_at: nil)
+ Rails.logger.info("[DIRECTO] Will try to send #{new_trans.count} invoices")
+
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|
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
+
+ if invoice.account_activity.nil? || invoice.account_activity.bank_transaction.nil? ||
+ invoice.account_activity.bank_transaction.sum.nil? || invoice.account_activity.bank_transaction.sum != invoice.sum_cache
+ Rails.logger.info("[DIRECTO] Invoice #{invoice.number} has been skipped")
+ next
+ end
num = invoice.number
mappers[num] = invoice
From c24e27710346bf5fda66ebd6053334926c4537e4 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Tue, 2 Feb 2016 13:43:05 +0200
Subject: [PATCH 174/196] Story#110395650 - deprecation logs are shown in
staging and production now as well
---
config/environments/production.rb | 2 +-
config/environments/staging.rb | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/config/environments/production.rb b/config/environments/production.rb
index 58258e710..e47420a27 100644
--- a/config/environments/production.rb
+++ b/config/environments/production.rb
@@ -70,7 +70,7 @@ Rails.application.configure do
config.i18n.fallbacks = true
# Send deprecation notices to registered listeners.
- config.active_support.deprecation = :notify
+ config.active_support.deprecation = :log
# Disable automatic flushing of the log to improve performance.
# config.autoflush_log = false
diff --git a/config/environments/staging.rb b/config/environments/staging.rb
index 0a5e3ecae..7ffc82641 100644
--- a/config/environments/staging.rb
+++ b/config/environments/staging.rb
@@ -70,7 +70,7 @@ Rails.application.configure do
config.i18n.fallbacks = true
# Send deprecation notices to registered listeners.
- config.active_support.deprecation = :notify
+ config.active_support.deprecation = :log
# Disable automatic flushing of the log to improve performance.
# config.autoflush_log = false
From 3e929a895c73818d6a0052ffe9ce4f4c17f9be58 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Wed, 3 Feb 2016 11:26:55 +0200
Subject: [PATCH 175/196] 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 176/196] 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 177/196] 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 178/196] 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 179/196] 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 180/196] 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 181/196] 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 182/196] 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 183/196] 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 d5f4edbadec4f9928260ce02fe129d4c96d67d47 Mon Sep 17 00:00:00 2001
From: Stas
Date: Fri, 5 Feb 2016 15:38:53 +0200
Subject: [PATCH 184/196] 109818884-plus_15_days_added
---
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 42a65bcde..a816d5601 100644
--- a/app/models/domain.rb
+++ b/app/models/domain.rb
@@ -711,7 +711,7 @@ class Domain < ActiveRecord::Base
if self.statuses.include?(DomainStatus::EXPIRED)
#self.outzone_at = Time.zone.now + 1.day
- self.outzone_at = self.valid_to
+ self.outzone_at = self.valid_to + 15.day
else
self.outzone_at = nil
end
From db6f78ede42a4513f661f5b6a16881faf7b15b3c Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Mon, 8 Feb 2016 10:36:22 +0200
Subject: [PATCH 185/196] 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
From c3d76ab13fbc61845b836cf597c8e47d8d9de6ea Mon Sep 17 00:00:00 2001
From: Stas
Date: Mon, 8 Feb 2016 16:36:54 +0200
Subject: [PATCH 186/196] 110412166-validation_for_registrant_change
---
app/models/epp/domain.rb | 9 +++++++++
config/locales/en.yml | 1 +
2 files changed, 10 insertions(+)
diff --git a/app/models/epp/domain.rb b/app/models/epp/domain.rb
index 3f32ce6d5..3ac02c721 100644
--- a/app/models/epp/domain.rb
+++ b/app/models/epp/domain.rb
@@ -488,6 +488,15 @@ class Epp::Domain < Domain
# at[:statuses] += at_add[:domain_statuses_attributes]
+ if registrant_id && registrant.code == frame.css('registrant')
+
+ throw :epp_error, {
+ code: '2305',
+ msg: I18n.t(:contact_already_associated_with_the_domain)
+ }
+
+ end
+
if errors.empty? && verify &&
Setting.request_confrimation_on_registrant_change_enabled &&
frame.css('registrant').present? &&
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 8a79c45d7..ea1d90b5e 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -931,3 +931,4 @@ 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'
+ contact_already_associated_with_the_domain: 'Object association prohibits operation, contact already associated with the domain'
From 769e3f1a1f2db1e1e555b8dd5fc49184acf41791 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Mon, 15 Feb 2016 10:55:47 +0200
Subject: [PATCH 187/196] Story#110392672 - do not run RegenerateWhoisRecordJob
on empty domains
---
app/models/contact.rb | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/app/models/contact.rb b/app/models/contact.rb
index 3af8dcd0e..aa3819850 100644
--- a/app/models/contact.rb
+++ b/app/models/contact.rb
@@ -499,7 +499,8 @@ class Contact < ActiveRecord::Base
end
def update_related_whois_records
- RegenerateWhoisRecordJob.enqueue related_domain_descriptions.keys, :name
+ ids = related_domain_descriptions.keys
+ RegenerateWhoisRecordJob.enqueue(ids, :name) if ids.present?
end
end
From e963484277d26f377f52b4ae3effd806d3584577 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Mon, 15 Feb 2016 12:33:01 +0200
Subject: [PATCH 188/196] Story#105852786 - we should use when cancelled_at is
nil
---
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 591f450c0..60e1ed029 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).where.not(cancelled_at: nil)
+ new_trans = Invoice.where(invoice_type: "DEB", in_directo: false).where(cancelled_at: nil)
Rails.logger.info("[DIRECTO] Will try to send #{new_trans.count} invoices")
new_trans.find_in_batches(batch_size: 10).each do |group|
From 8013701580eb0a610802121b1afb3765c0b75590 Mon Sep 17 00:00:00 2001
From: Stas
Date: Mon, 15 Feb 2016 15:42:12 +0200
Subject: [PATCH 189/196] 109818884-rule_added_to_others
---
app/models/domain.rb | 19 ++++---------------
1 file changed, 4 insertions(+), 15 deletions(-)
diff --git a/app/models/domain.rb b/app/models/domain.rb
index a816d5601..beee1d125 100644
--- a/app/models/domain.rb
+++ b/app/models/domain.rb
@@ -704,19 +704,6 @@ class Domain < ActiveRecord::Base
# special handling for admin changing status
def admin_status_update(update)
- #check for hold status
- if self.statuses.include?(
- DomainStatus::SERVER_HOLD) &&
- !update.include?(DomainStatus::SERVER_HOLD)
-
- if self.statuses.include?(DomainStatus::EXPIRED)
- #self.outzone_at = Time.zone.now + 1.day
- self.outzone_at = self.valid_to + 15.day
- else
- self.outzone_at = nil
- end
- end
-
# check for deleted status
statuses.each do |s|
unless update.include? s
@@ -725,8 +712,10 @@ class Domain < ActiveRecord::Base
self.delete_at = nil
when DomainStatus::SERVER_MANUAL_INZONE # removal causes server hold to set
self.outzone_at = Time.zone.now if self.force_delete_at.present?
- # Handle any other special remove cases?
- # when DomainStatus::FORCE_DELETE unset_force_delete
+ when DomainStatus::DomainStatus::EXPIRED # removal causes server hold to set
+ self.outzone_at = self.valid_to + 15.day
+ when DomainStatus::DomainStatus::SERVER_HOLD # removal causes server hold to set
+ self.outzone_at = nil
end
end
end
From f9fe365e65c72adbb86a30e03895d196679c37e0 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Thu, 18 Feb 2016 12:26:21 +0200
Subject: [PATCH 190/196] Story#113066359 - add index to domain statuses
---
db/migrate/20160218102355_index_domain_statuses.rb | 5 +++++
1 file changed, 5 insertions(+)
create mode 100644 db/migrate/20160218102355_index_domain_statuses.rb
diff --git a/db/migrate/20160218102355_index_domain_statuses.rb b/db/migrate/20160218102355_index_domain_statuses.rb
new file mode 100644
index 000000000..d7bb787cb
--- /dev/null
+++ b/db/migrate/20160218102355_index_domain_statuses.rb
@@ -0,0 +1,5 @@
+class IndexDomainStatuses < ActiveRecord::Migration
+ def change
+ add_index :domains, :statuses, using: :gin
+ end
+end
From 88bf3f586b68e3d0dcc17c64b3081049f3433909 Mon Sep 17 00:00:00 2001
From: Stas
Date: Mon, 22 Feb 2016 13:20:36 +0200
Subject: [PATCH 191/196] 113146419-request_trim_for_epp
---
app/controllers/epp_controller.rb | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/app/controllers/epp_controller.rb b/app/controllers/epp_controller.rb
index a0e7d7dce..49be47848 100644
--- a/app/controllers/epp_controller.rb
+++ b/app/controllers/epp_controller.rb
@@ -361,9 +361,10 @@ class EppController < ApplicationController
if request_command == 'login' && frame.present?
frame.gsub!(/pw>.+<\//, 'pw>[FILTERED]')
end
+ trimmed_request = frame.gsub(/]+)>([^<])+<\/eis:legalDocument>/, "[FILTERED]")
ApiLog::EppLog.create({
- request: frame,
+ request: trimmed_request,
request_command: request_command,
request_successful: epp_errors.empty?,
request_object: params[:epp_object_type],
From 15a7b75e830b0115e96b095e33ef43e3b1442b57 Mon Sep 17 00:00:00 2001
From: Stas
Date: Thu, 25 Feb 2016 15:55:14 +0200
Subject: [PATCH 192/196] 1113146419-rake
---
lib/tasks/legal_documents.rake | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
create mode 100644 lib/tasks/legal_documents.rake
diff --git a/lib/tasks/legal_documents.rake b/lib/tasks/legal_documents.rake
new file mode 100644
index 000000000..49cfd1f5d
--- /dev/null
+++ b/lib/tasks/legal_documents.rake
@@ -0,0 +1,18 @@
+namespace :epp do
+
+ desc 'Import all'
+ task all: :environment do
+ Rake::Task['epp:trim_documents'].invoke
+ end
+
+ desc 'Import registrars'
+ task trim_documents: :environment do
+ puts '-----> Running query'
+ sql = <<-SQL
+ UPDATE epp_logs SET request = regexp_replace(request, '', '[FILTERED]<\eis:legalDocument>');
+ SQL
+ ActiveRecord::Base.establish_connection
+ ActiveRecord::Base.connection.execute(sql)
+ end
+end
+
From cf7b9bcacf5a0b4eebce28797fcadafd1f3b7931 Mon Sep 17 00:00:00 2001
From: Stas
Date: Thu, 25 Feb 2016 16:12:39 +0200
Subject: [PATCH 193/196] 113146419-rake
---
lib/tasks/{legal_documents.rake => epp.rake} | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
rename lib/tasks/{legal_documents.rake => epp.rake} (72%)
diff --git a/lib/tasks/legal_documents.rake b/lib/tasks/epp.rake
similarity index 72%
rename from lib/tasks/legal_documents.rake
rename to lib/tasks/epp.rake
index 49cfd1f5d..e03835dad 100644
--- a/lib/tasks/legal_documents.rake
+++ b/lib/tasks/epp.rake
@@ -1,18 +1,19 @@
namespace :epp do
- desc 'Import all'
+ desc 'EPP actions'
task all: :environment do
Rake::Task['epp:trim_documents'].invoke
end
- desc 'Import registrars'
+ desc 'Trim logs'
task trim_documents: :environment do
puts '-----> Running query'
sql = <<-SQL
UPDATE epp_logs SET request = regexp_replace(request, '', '[FILTERED]<\eis:legalDocument>');
SQL
- ActiveRecord::Base.establish_connection
- ActiveRecord::Base.connection.execute(sql)
+ ApiLog::EppLog.connection.execute(sql)
+
+ puts "-----> Query done"
end
end
From 55ffd229f91adf5f28b356aed3b4b9d193789dea Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Thu, 25 Feb 2016 16:25:43 +0200
Subject: [PATCH 194/196] Story#112043941 - show in cron STDOUT log that
Directo task has been finished
---
app/models/directo.rb | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/app/models/directo.rb b/app/models/directo.rb
index 60e1ed029..ac516cdf3 100644
--- a/app/models/directo.rb
+++ b/app/models/directo.rb
@@ -3,6 +3,7 @@ class Directo < ActiveRecord::Base
def self.send_receipts
new_trans = Invoice.where(invoice_type: "DEB", in_directo: false).where(cancelled_at: nil)
+ counter = 0
Rails.logger.info("[DIRECTO] Will try to send #{new_trans.count} invoices")
new_trans.find_in_batches(batch_size: 10).each do |group|
@@ -16,6 +17,7 @@ class Directo < ActiveRecord::Base
Rails.logger.info("[DIRECTO] Invoice #{invoice.number} has been skipped")
next
end
+ counter += 1
num = invoice.number
mappers[num] = invoice
@@ -42,6 +44,8 @@ class Directo < ActiveRecord::Base
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
+
+ STDOUT << "Directo receipts sending finished. #{counter} of #{new_trans.count} are sent"
end
def self.dump_result_to_db mappers, xml
From 4106492ed35d2346d80b2bfa7ee47f51e111e2e3 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Fri, 26 Feb 2016 15:23:34 +0200
Subject: [PATCH 195/196] Story#114552597 - name_in_wire_format uses puny code
---
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 3e0ff3e23..249f43fb2 100644
--- a/app/models/domain.rb
+++ b/app/models/domain.rb
@@ -501,7 +501,7 @@ class Domain < ActiveRecord::Base
def name_in_wire_format
res = ''
- parts = name.split('.')
+ parts = name_puny.split('.')
parts.each do |x|
res += format('%02X', x.length) # length of label in hex
res += x.each_byte.map { |b| format('%02X', b) }.join # label
From e21643bd72458e880a25285363937530cc809301 Mon Sep 17 00:00:00 2001
From: Vladimir Krylov
Date: Tue, 1 Mar 2016 15:45:55 +0200
Subject: [PATCH 196/196] Story#112043941 - calculate total in right place
---
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 ac516cdf3..66fada5d1 100644
--- a/app/models/directo.rb
+++ b/app/models/directo.rb
@@ -3,8 +3,9 @@ class Directo < ActiveRecord::Base
def self.send_receipts
new_trans = Invoice.where(invoice_type: "DEB", in_directo: false).where(cancelled_at: nil)
- counter = 0
- Rails.logger.info("[DIRECTO] Will try to send #{new_trans.count} invoices")
+ total = new_trans.count
+ counter = 0
+ Rails.logger.info("[DIRECTO] Will try to send #{total} invoices")
new_trans.find_in_batches(batch_size: 10).each do |group|
mappers = {} # need them as no direct connection between invoice
@@ -45,7 +46,7 @@ class Directo < ActiveRecord::Base
dump_result_to_db(mappers, response)
end
- STDOUT << "Directo receipts sending finished. #{counter} of #{new_trans.count} are sent"
+ STDOUT << "#{Time.zone.now.utc} - Directo receipts sending finished. #{counter} of #{total} are sent\n"
end
def self.dump_result_to_db mappers, xml