diff --git a/CHANGELOG.md b/CHANGELOG.md
index 68391b057..1d0aaac56 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,55 @@
+14.07.2016
+* Registry:
+ * whois records generation fix in contact.rb model (#117612931)
+ * english translation fix for pending_update_notification_for_new_registrant automated registrant message
+
+16.06.2016
+* EPP
+ * BUG: XML syntax error for poll and logout if optional clTRID is missing (#121580929)
+ * support for glue records with ipv6 addresses only (#120095555)
+
+15.06.2016
+* Portal for registrants
+ * Notice on login screen on limited access to Estonian electronic IDs (#120182999)
+* Admin interface:
+ * epp log view has now reference to the object name for better usability (#118912395)
+ * BUG: dnssec data missing from domain history view (#115762063)
+ * BUG: internal error in doamin history view in case some contact has been deleted (#118300251)
+* Registry:
+ * all values sent over epp are now trimmed of beginning and trailing spaces (#117690107)
+ * typo and form fixes for automated e-mail messages sent to domain contacts
+* EPP:
+ * BUG: error 2005 on adding IDN nameservers (#114677695)
+ * BUG: nameserver lable maximum 63 char length validation handled inproperly (#114677695) - support currently limited to Estonian IDN characters.
+ * BUG: validation passes out of range ident_type values - now limited to org, priv and birthday (#111601356)
+ * BUG: internal error on hello (#120828283)
+ * BUG: internal error broken incoming frame (#121580929)
+* Deploy:
+ * BUG: incorrect version in commit message on deploy - config/deploy-example.rb (#120259603)
+
+20.05.2016
+* Portal for registrars
+ * domain details view new displays contact name in addition to ID (#117226457)
+ * added an option to set veryfied = "yes" parameter to GUI for registrant change and domain delete opertions (#116209751)
+* Admin interface
+ * BUG: fixed number of sorting issues on different views (#117350717)
+ * BUG: internal error on filtered list sorting (#115043065)
+ * BUG: account activities csv export messes up registrars (#117702653)
+ * usability fixes to history view (#115762063)
+* Registry
+ * epp-xml gem reference updated to v 1.0.5 (#116209751)
+ * epp-xml gem is now taken from local repo https://github.com/internetee/epp-xml/blob/master, the version in RubyGems is not updated any more (#116209751)
+ * BUG: domains set to force delete were deleted a day ahead of time (#117131083)
+ * BUG: QUE - undefined method `code' for nil:NilClass - if contact is removed before Que gets to it (#117612061)
+ * BUG: Que - uninitialized constant RegenerateWhoisRecordJob (#117986917)
+* EPP
+ * BUG: poll message on domain delete does not validate against .ee xml schemas (#118827261)
+ * BUG: internal error on domain delete (#118159567)
+* RestWHOIS
+ * BUG: statuses not in array for not registered reserved and blocked domains (#118911315)
+
+...
+
21.09.2015
* eis-1.0.xsd schema file updated without a new version, please publish a new updated schema file to public.
diff --git a/Gemfile b/Gemfile
index d616cb534..06b82dce2 100644
--- a/Gemfile
+++ b/Gemfile
@@ -31,7 +31,7 @@ gem 'rails-settings-cached', '0.4.1' # for settings
# html-xml
gem 'haml-rails', '0.9.0' # haml for views
-gem 'nokogiri', '1.6.7.2' # For XML parsing
+gem 'nokogiri', '1.6.8' # For XML parsing
# style
gem 'sass-rails', '5.0.3' # sass style
@@ -88,7 +88,7 @@ gem 'digidoc_client', '0.2.1'
# epp
gem 'epp', '1.4.2', github: 'internetee/epp'
-gem 'epp-xml', '1.0.4' # EIS EPP XMLs
+gem 'epp-xml', '1.0.5', github: 'internetee/epp-xml' # EIS EPP XMLs
gem 'uuidtools', '2.1.5' # For unique IDs (used by the epp gem)
# que
diff --git a/Gemfile.lock b/Gemfile.lock
index dbc1e8e3c..d779fe3ff 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -16,6 +16,14 @@ GIT
data_migrate (1.3.0)
rails (>= 4.1.0)
+GIT
+ remote: https://github.com/internetee/epp-xml.git
+ revision: 475f650951f2cf5015e00d48f408a2194ecc1662
+ specs:
+ epp-xml (1.0.5)
+ activesupport (~> 4.1)
+ builder (~> 3.2)
+
GIT
remote: https://github.com/internetee/epp.git
revision: 505c3f2739eb1da918e54111aecfb138a822739d
@@ -191,9 +199,6 @@ GEM
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)
equalizer (0.0.11)
erubis (2.7.0)
execjs (2.6.0)
@@ -311,7 +316,7 @@ GEM
mina (0.3.1)
open4 (~> 1.3.4)
rake
- mini_portile2 (2.0.0)
+ mini_portile2 (2.1.0)
minitest (5.8.4)
monetize (1.1.0)
money (~> 6.5.0)
@@ -327,8 +332,9 @@ GEM
nenv (0.2.0)
netrc (0.11.0)
newrelic_rpm (3.12.0.288)
- nokogiri (1.6.7.2)
- mini_portile2 (~> 2.0.0.rc2)
+ nokogiri (1.6.8)
+ mini_portile2 (~> 2.1.0)
+ pkg-config (~> 1.1.7)
nori (2.6.0)
notiffany (0.0.7)
nenv (~> 0.1)
@@ -343,6 +349,7 @@ GEM
phantomjs (1.9.8.0)
phantomjs-binaries (1.9.2.4)
sys-uname (= 0.9.0)
+ pkg-config (1.1.7)
poltergeist (1.6.0)
capybara (~> 2.1)
cliver (~> 0.3.1)
@@ -589,7 +596,7 @@ DEPENDENCIES
devise (= 3.5.4)
digidoc_client (= 0.2.1)
epp (= 1.4.2)!
- epp-xml (= 1.0.4)
+ epp-xml (= 1.0.5)!
fabrication (= 2.13.2)
faker (= 1.4.3)
figaro (= 1.1.1)
@@ -614,7 +621,7 @@ DEPENDENCIES
mina (= 0.3.1)
money-rails (= 1.4.1)
newrelic_rpm (= 3.12.0.288)
- nokogiri (= 1.6.7.2)
+ nokogiri (= 1.6.8)
nprogress-rails (= 0.1.6.7)
paper_trail!
pdfkit (= 0.6.2)
diff --git a/app/api/repp/api.rb b/app/api/repp/api.rb
index 7a9ecd1e8..27d0322b0 100644
--- a/app/api/repp/api.rb
+++ b/app/api/repp/api.rb
@@ -49,7 +49,8 @@ module Repp
response_code: status,
api_user_name: current_user.try(:username),
api_user_registrar: current_user.try(:registrar).try(:to_s),
- ip: request.ip
+ ip: request.ip,
+ uuid: request.try(:uuid)
})
end
diff --git a/app/assets/javascripts/admin/application.coffee b/app/assets/javascripts/admin/application.coffee
index bdc1a74bb..1b3335d63 100644
--- a/app/assets/javascripts/admin/application.coffee
+++ b/app/assets/javascripts/admin/application.coffee
@@ -2,6 +2,9 @@ $(document).on 'page:change', ->
$('.selectize').selectize({
allowEmptyOption: true
})
+ $('.selectize_create').selectize({
+ allowEmptyOption: true, create: true
+ })
$('.js-datepicker').datepicker({
showAnim: "",
diff --git a/app/assets/javascripts/registrar/application.coffee b/app/assets/javascripts/registrar/application.coffee
index 943f14a23..a1a2084fe 100644
--- a/app/assets/javascripts/registrar/application.coffee
+++ b/app/assets/javascripts/registrar/application.coffee
@@ -29,13 +29,13 @@ $(document).on 'page:change', ->
$('.js-contact-form').trigger('restoreDefault')
$('[data-legal-document]').each (i, fileInput)->
- minSize = 8 * 1024 # 8kB
+ minSize = 3 * 1024 # 3kB
maxSize = 8 * 1024 * 1024; # 8 MB
$(fileInput).closest('form').submit (e) ->
if (files = fileInput.files).length
fileSize = files[0].size
if fileSize < minSize
- alert 'Document size should be more than 8kB'
+ alert 'Document size should be more than 3kB'
return false
else if fileSize > maxSize
alert 'Document size should be less than 8MB'
diff --git a/app/controllers/admin/account_activities_controller.rb b/app/controllers/admin/account_activities_controller.rb
index 1e1bf9196..4a4fe2307 100644
--- a/app/controllers/admin/account_activities_controller.rb
+++ b/app/controllers/admin/account_activities_controller.rb
@@ -1,8 +1,8 @@
class Admin::AccountActivitiesController < AdminController
load_and_authorize_resource
+ before_action :set_default_dates, only: [:index]
def index # rubocop: disable Metrics/AbcSize
- params[:q] ||= {}
ca_cache = params[:q][:created_at_lteq]
begin
@@ -41,4 +41,20 @@ class Admin::AccountActivitiesController < AdminController
params[:q][:created_at_lteq] = ca_cache
end
+
+ def set_default_dates
+ params[:q] ||= {}
+
+ if params[:q][:created_at_gteq].nil? && params[:q][:created_at_lteq].nil? && params[:created_after].present?
+
+ default_date = params[:created_after]
+
+ if !['today', 'tomorrow', 'yesterday'].include?(default_date)
+ default_date = 'today'
+ end
+
+ params[:q][:created_at_gteq] = Date.send(default_date).strftime("%Y-%m-%d")
+ end
+
+ end
end
diff --git a/app/controllers/admin/contacts_controller.rb b/app/controllers/admin/contacts_controller.rb
index 3a05bb759..5156578db 100644
--- a/app/controllers/admin/contacts_controller.rb
+++ b/app/controllers/admin/contacts_controller.rb
@@ -10,22 +10,22 @@ class Admin::ContactsController < AdminController
search_params[:registrant_domains_id_not_null] = 1
end
- @q = Contact.includes(:registrar).search(search_params)
+ @q = Contact.includes(:registrar).joins(:registrar).select('contacts.*, registrars.name').search(search_params)
@contacts = @q.result(distinct: :true).page(params[:page])
if params[:statuses_contains]
- contacts = Contact.includes(:registrar).where(
+ contacts = Contact.includes(:registrar).joins(:registrar).select('contacts.*, registrars.name').where(
"contacts.statuses @> ?::varchar[]", "{#{params[:statuses_contains].join(',')}}"
)
else
- contacts = Contact.includes(:registrar)
+ contacts = Contact.includes(:registrar).joins(:registrar).select('contacts.*, registrars.name')
end
contacts = contacts.where("ident_country_code is null or ident_country_code=''") if params[:only_no_country_code].eql?('1')
normalize_search_parameters do
- @q = contacts.search(search_params)
- @contacts = @q.result(distinct: :true).page(params[:page])
+ @q = contacts.includes(:registrar).joins(:registrar).select('contacts.*, registrars.name').search(search_params)
+ @contacts = @q.result.uniq.page(params[:page])
end
@contacts = @contacts.per(params[:results_per_page]) if params[:results_per_page].to_i > 0
diff --git a/app/controllers/admin/domains_controller.rb b/app/controllers/admin/domains_controller.rb
index 36bdefbff..f7914353e 100644
--- a/app/controllers/admin/domains_controller.rb
+++ b/app/controllers/admin/domains_controller.rb
@@ -9,7 +9,7 @@ class Admin::DomainsController < AdminController
params[:q] ||= {}
if params[:statuses_contains]
domains = Domain.includes(:registrar, :registrant).where(
- "statuses @> ?::varchar[]", "{#{params[:statuses_contains].join(',')}}"
+ "domains.statuses @> ?::varchar[]", "{#{params[:statuses_contains].join(',')}}"
)
else
domains = Domain.includes(:registrar, :registrant)
diff --git a/app/controllers/admin/epp_logs_controller.rb b/app/controllers/admin/epp_logs_controller.rb
index deb9ee8e7..46740a8d9 100644
--- a/app/controllers/admin/epp_logs_controller.rb
+++ b/app/controllers/admin/epp_logs_controller.rb
@@ -1,13 +1,33 @@
class Admin::EppLogsController < AdminController
load_and_authorize_resource class: ApiLog::EppLog
+ before_action :set_default_dates, only: [:index]
def index
@q = ApiLog::EppLog.search(params[:q])
@q.sorts = 'id desc' if @q.sorts.empty?
- @epp_logs = @q.result.page(params[:page])
+
+ @epp_logs = @q.result
+ @epp_logs = @epp_logs.where("extract(epoch from created_at) >= extract(epoch from ?::timestamp)", Time.parse(params[:q][:created_at_gteq])) if params[:q][:created_at_gteq].present?
+ @epp_logs = @epp_logs.where("extract(epoch from created_at) <= extract(epoch from ?::timestamp)", Time.parse(params[:q][:created_at_lteq])) if params[:q][:created_at_lteq].present?
+ @epp_logs = @epp_logs.page(params[:page])
end
def show
@epp_log = ApiLog::EppLog.find(params[:id])
end
+
+ def set_default_dates
+ params[:q] ||= {}
+
+ if params[:q][:created_at_gteq].nil? && params[:q][:created_at_lteq].nil? && params[:created_after].present?
+ default_date = params[:created_after]
+
+ if !['today', 'tomorrow', 'yesterday'].include?(default_date)
+ default_date = 'today'
+ end
+
+ params[:q][:created_at_gteq] = Date.send(default_date).strftime("%Y-%m-%d")
+ end
+
+ end
end
diff --git a/app/controllers/admin/registrars_controller.rb b/app/controllers/admin/registrars_controller.rb
index cf8c89505..be4b7d092 100644
--- a/app/controllers/admin/registrars_controller.rb
+++ b/app/controllers/admin/registrars_controller.rb
@@ -57,7 +57,7 @@ class Admin::RegistrarsController < AdminController
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
+ :country_code, :email, :phone, :billing_email, :code, :test_registrar
)
end
end
diff --git a/app/controllers/admin/repp_logs_controller.rb b/app/controllers/admin/repp_logs_controller.rb
index e9e35aac0..ff306b0fc 100644
--- a/app/controllers/admin/repp_logs_controller.rb
+++ b/app/controllers/admin/repp_logs_controller.rb
@@ -1,13 +1,34 @@
class Admin::ReppLogsController < AdminController
load_and_authorize_resource class: ApiLog::ReppLog
+ before_action :set_default_dates, only: [:index]
def index
@q = ApiLog::ReppLog.search(params[:q])
@q.sorts = 'id desc' if @q.sorts.empty?
- @repp_logs = @q.result.page(params[:page])
+
+ @repp_logs = @q.result
+ @repp_logs = @repp_logs.where("extract(epoch from created_at) >= extract(epoch from ?::timestamp)", Time.parse(params[:q][:created_at_gteq])) if params[:q][:created_at_gteq].present?
+ @repp_logs = @repp_logs.where("extract(epoch from created_at) <= extract(epoch from ?::timestamp)", Time.parse(params[:q][:created_at_lteq])) if params[:q][:created_at_lteq].present?
+ @repp_logs = @repp_logs.page(params[:page])
end
def show
@repp_log = ApiLog::ReppLog.find(params[:id])
end
+
+ def set_default_dates
+ params[:q] ||= {}
+
+ if params[:q][:created_at_gteq].nil? && params[:q][:created_at_lteq].nil? && params[:created_after].present?
+
+ default_date = params[:created_after]
+
+ if !['today', 'tomorrow', 'yesterday'].include?(default_date)
+ default_date = 'today'
+ end
+
+ params[:q][:created_at_gteq] = Date.send(default_date).strftime("%Y-%m-%d")
+ end
+
+ end
end
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index ac26e61a3..fac9d29f4 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -55,6 +55,10 @@ class ApplicationController < ActionController::Base
end
end
+ def info_for_paper_trail
+ { uuid: request.uuid }
+ end
+
def user_for_paper_trail
user_log_str(current_user)
end
diff --git a/app/controllers/epp/contacts_controller.rb b/app/controllers/epp/contacts_controller.rb
index 5b0a39bbf..117aaabc0 100644
--- a/app/controllers/epp/contacts_controller.rb
+++ b/app/controllers/epp/contacts_controller.rb
@@ -19,6 +19,8 @@ class Epp::ContactsController < EppController
authorize! :create, Epp::Contact
@contact = Epp::Contact.new(params[:parsed_frame], current_user.registrar)
+ @contact.add_legal_file_to_new(params[:parsed_frame])
+
if @contact.save
render_epp_response '/epp/contacts/create'
else
@@ -29,7 +31,7 @@ class Epp::ContactsController < EppController
def update
authorize! :update, @contact, @password
- if @contact.update_attributes(params[:parsed_frame])
+ if @contact.update_attributes(params[:parsed_frame], current_user)
render_epp_response 'epp/contacts/update'
else
handle_errors(@contact)
@@ -39,7 +41,7 @@ class Epp::ContactsController < EppController
def delete
authorize! :delete, @contact, @password
- if @contact.destroy_and_clean
+ if @contact.destroy_and_clean(params[:parsed_frame])
render_epp_response '/epp/contacts/delete'
else
handle_errors(@contact)
diff --git a/app/controllers/epp/domains_controller.rb b/app/controllers/epp/domains_controller.rb
index 91ddeb93d..fb3441580 100644
--- a/app/controllers/epp/domains_controller.rb
+++ b/app/controllers/epp/domains_controller.rb
@@ -30,6 +30,8 @@ class Epp::DomainsController < EppController
handle_errors and return unless balance_ok?('create') # loads pricelist in this method
ActiveRecord::Base.transaction do
+ @domain.add_legal_file_to_new(params[:parsed_frame])
+
if @domain.save # TODO: Maybe use validate: false here because we have already validated the domain?
current_user.registrar.debit!({
sum: @domain_pricelist.price.amount,
diff --git a/app/controllers/epp/keyrelays_controller.rb b/app/controllers/epp/keyrelays_controller.rb
index d6515758f..81ff3dd32 100644
--- a/app/controllers/epp/keyrelays_controller.rb
+++ b/app/controllers/epp/keyrelays_controller.rb
@@ -56,4 +56,8 @@ class Epp::KeyrelaysController < EppController
# domain
end
+
+ def resource
+ @domain
+ end
end
diff --git a/app/controllers/epp/polls_controller.rb b/app/controllers/epp/polls_controller.rb
index 531509a6c..fb032975f 100644
--- a/app/controllers/epp/polls_controller.rb
+++ b/app/controllers/epp/polls_controller.rb
@@ -54,4 +54,8 @@ class Epp::PollsController < EppController
def validate_poll
requires_attribute 'poll', 'op', values: %(ack req), allow_blank: true
end
+
+ def resource
+ @message
+ end
end
diff --git a/app/controllers/epp/sessions_controller.rb b/app/controllers/epp/sessions_controller.rb
index c217d38aa..58a314410 100644
--- a/app/controllers/epp/sessions_controller.rb
+++ b/app/controllers/epp/sessions_controller.rb
@@ -137,4 +137,9 @@ class Epp::SessionsController < EppController
pw = params[:parsed_frame].css('pw').first.text
{ username: user, password: pw }
end
+
+ private
+ def resource
+ @api_user
+ end
end
diff --git a/app/controllers/epp_controller.rb b/app/controllers/epp_controller.rb
index 49be47848..e7d3f0ac1 100644
--- a/app/controllers/epp_controller.rb
+++ b/app/controllers/epp_controller.rb
@@ -6,8 +6,15 @@ class EppController < ApplicationController
before_action :generate_svtrid
before_action :latin_only
-
before_action :validate_against_schema
+ before_action :validate_request
+ before_action :update_epp_session
+
+ around_action :catch_epp_errors
+
+ helper_method :current_user
+ helper_method :resource
+
def validate_against_schema
return if ['hello', 'error', 'keyrelay'].include?(params[:action])
schema.validate(params[:nokogiri_frame]).each do |error|
@@ -20,10 +27,7 @@ class EppController < ApplicationController
handle_errors and return if epp_errors.any?
end
- before_action :validate_request
- before_action :update_epp_session
- around_action :catch_epp_errors
def catch_epp_errors
err = catch(:epp_error) do
yield
@@ -34,7 +38,6 @@ class EppController < ApplicationController
handle_errors
end
- helper_method :current_user
rescue_from StandardError do |e|
@errors ||= []
@@ -361,17 +364,18 @@ class EppController < ApplicationController
if request_command == 'login' && frame.present?
frame.gsub!(/pw>.+<\//, 'pw>[FILTERED]')
end
- trimmed_request = frame.gsub(/]+)>([^<])+<\/eis:legalDocument>/, "[FILTERED]")
+ trimmed_request = frame.gsub(/]+)>([^<])+<\/eis:legalDocument>/, "[FILTERED]") if frame.present?
ApiLog::EppLog.create({
request: trimmed_request,
request_command: request_command,
request_successful: epp_errors.empty?,
- request_object: params[:epp_object_type],
+ request_object: resource ? "#{params[:epp_object_type]}: #{resource.class} - #{resource.id} - #{resource.name}" : params[:epp_object_type],
response: @response,
api_user_name: @api_user.try(:username) || current_user.try(:username) || 'api-public',
api_user_registrar: @api_user.try(:registrar).try(:to_s) || current_user.try(:registrar).try(:to_s),
- ip: request.ip
+ ip: request.ip,
+ uuid: request.uuid
})
end
# rubocop: enable Metrics/CyclomaticComplexity
@@ -382,4 +386,9 @@ class EppController < ApplicationController
return if current_user.blank?
counter_update(current_user.registrar_code, ENV['iptables_server_ip'])
end
+
+ def resource
+ name = self.class.to_s.sub("Epp::","").sub("Controller","").underscore.singularize
+ instance_variable_get("@#{name}")
+ end
end
diff --git a/app/controllers/registrant/domain_delete_confirms_controller.rb b/app/controllers/registrant/domain_delete_confirms_controller.rb
index f6f05d628..209456808 100644
--- a/app/controllers/registrant/domain_delete_confirms_controller.rb
+++ b/app/controllers/registrant/domain_delete_confirms_controller.rb
@@ -22,18 +22,18 @@ class Registrant::DomainDeleteConfirmsController < RegistrantController
verification_token: params[:token])
if params[:rejected]
if @registrant_verification.domain_registrant_delete_reject!
- flash[:notice] = t(:registrant_domain_verification_rejected)
+ flash[:notice] = t(:registrant_domain_delete_rejected)
redirect_to registrant_domain_delete_confirm_path(@domain.id, rejected: true)
else
- flash[:alert] = t(:registrant_domain_verification_rejected_failed)
+ flash[:alert] = t(:registrant_domain_delete_rejected_failed)
return render 'show'
end
elsif params[:confirmed]
if @registrant_verification.domain_registrant_delete_confirm!
- flash[:notice] = t(:registrant_domain_verification_confirmed)
+ flash[:notice] = t(:registrant_domain_delete_confirmed)
redirect_to registrant_domain_delete_confirm_path(@domain.id, confirmed: true)
else
- flash[:alert] = t(:registrant_domain_verification_confirmed_failed)
+ flash[:alert] = t(:registrant_domain_delete_confirmed_failed)
return render 'show'
end
end
diff --git a/app/jobs/domain_delete_confirm_job.rb b/app/jobs/domain_delete_confirm_job.rb
index cce230234..e147e3aa8 100644
--- a/app/jobs/domain_delete_confirm_job.rb
+++ b/app/jobs/domain_delete_confirm_job.rb
@@ -3,17 +3,30 @@ class DomainDeleteConfirmJob < 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)
+
case action
when RegistrantVerification::CONFIRMED
domain.poll_message!(:poll_pending_delete_confirmed_by_registrant)
domain.apply_pending_delete!
+ raise_errors!(domain)
+
when RegistrantVerification::REJECTED
- DomainMailer.pending_delete_rejected_notification(domain_id, true).deliver
domain.statuses.delete(DomainStatus::PENDING_DELETE_CONFIRMATION)
domain.poll_message!(:poll_pending_delete_rejected_by_registrant)
+
domain.cancel_pending_delete
+ domain.save(validate: false)
+ raise_errors!(domain)
+
+ DomainMailer.pending_delete_rejected_notification(domain_id, true).deliver
end
+
destroy # it's best to destroy the job in the same transaction
end
end
+
+
+ def raise_errors!(domain)
+ throw "domain #{domain.name} failed with errors #{domain.errors.full_messages}" if domain.errors.any?
+ end
end
diff --git a/app/jobs/domain_delete_job.rb b/app/jobs/domain_delete_job.rb
new file mode 100644
index 000000000..7d86e9885
--- /dev/null
+++ b/app/jobs/domain_delete_job.rb
@@ -0,0 +1,17 @@
+class DomainDeleteJob < Que::Job
+
+ def run(domain_id)
+ domain = Domain.find(domain_id)
+
+ ::PaperTrail.whodunnit = "job - #{self.class.name}"
+ WhoisRecord.where(domain_id: domain.id).destroy_all
+
+ 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
+ )
+ end
+end
diff --git a/app/jobs/domain_set_delete_candidate_job.rb b/app/jobs/domain_set_delete_candidate_job.rb
new file mode 100644
index 000000000..f1e489694
--- /dev/null
+++ b/app/jobs/domain_set_delete_candidate_job.rb
@@ -0,0 +1,10 @@
+class DomainSetDeleteCandidateJob < Que::Job
+
+ def run(domain_id)
+ domain = Domain.find(domain_id)
+ domain.statuses << DomainStatus::DELETE_CANDIDATE
+ ::PaperTrail.whodunnit = "job - #{self.class.name}"
+ domain.save(validate: false)
+ DomainDeleteJob.enqueue(domain.id, run_at: rand(((24*60) - (DateTime.now.hour * 60 + DateTime.now.minute))).minutes.from_now)
+ end
+end
diff --git a/app/jobs/domain_update_confirm_job.rb b/app/jobs/domain_update_confirm_job.rb
index 098b9853e..67007d334 100644
--- a/app/jobs/domain_update_confirm_job.rb
+++ b/app/jobs/domain_update_confirm_job.rb
@@ -7,8 +7,13 @@ class DomainUpdateConfirmJob < Que::Job
case action
when RegistrantVerification::CONFIRMED
domain.poll_message!(:poll_pending_update_confirmed_by_registrant)
+ raise_errors!(domain)
+
domain.apply_pending_update!
+ raise_errors!(domain)
+
domain.clean_pendings!
+ raise_errors!(domain)
when RegistrantVerification::REJECTED
domain.send_mail :pending_update_rejected_notification_for_new_registrant
domain.poll_message!(:poll_pending_update_rejected_by_registrant)
@@ -17,4 +22,8 @@ class DomainUpdateConfirmJob < Que::Job
destroy # it's best to destroy the job in the same transaction
end
end
+
+ def raise_errors!(domain)
+ throw "domain #{domain.name} failed with errors #{domain.errors.full_messages}" if domain.errors.any?
+ end
end
diff --git a/app/mailers/contact_mailer.rb b/app/mailers/contact_mailer.rb
index 08beae05d..bbfecfca6 100644
--- a/app/mailers/contact_mailer.rb
+++ b/app/mailers/contact_mailer.rb
@@ -4,6 +4,11 @@ class ContactMailer < ApplicationMailer
def email_updated(old_email, email, contact_id, should_deliver)
@contact = Contact.find_by(id: contact_id)
@old_email = old_email
+ unless @contact
+ Rails.logger.info "Cannot send email in #{self.class.name}##{__method__} with contact_id #{contact_id}. It cannot be found"
+ return
+ end
+
return unless email || @contact
return if delivery_off?(@contact, should_deliver)
diff --git a/app/mailers/domain_mailer.rb b/app/mailers/domain_mailer.rb
index 28e232a8c..afdfe89fc 100644
--- a/app/mailers/domain_mailer.rb
+++ b/app/mailers/domain_mailer.rb
@@ -9,12 +9,34 @@ class DomainMailer < ApplicationMailer
compose_from(params)
end
- def registrant_updated_notification_for_new_registrant(params)
- compose_from(params)
+
+ def registrant_updated_notification_for_new_registrant(domain_id, old_registrant_id, new_registrant_id, should_deliver)
+ @domain = Domain.find_by(id: domain_id)
+ return unless @domain
+ return if delivery_off?(@domain, should_deliver)
+
+ @old_registrant = Registrant.find(old_registrant_id)
+ @new_registrant = Registrant.find(new_registrant_id)
+
+ return if whitelist_blocked?(@new_registrant.email)
+ mail(to: format(@new_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(params)
- compose_from(params)
+
+ def registrant_updated_notification_for_old_registrant(domain_id, old_registrant_id, new_registrant_id, should_deliver)
+ @domain = Domain.find_by(id: domain_id)
+ return unless @domain
+ return if delivery_off?(@domain, should_deliver)
+
+ @old_registrant = Registrant.find(old_registrant_id)
+ @new_registrant = Registrant.find(new_registrant_id)
+
+ 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(params)
diff --git a/app/models/account_activity.rb b/app/models/account_activity.rb
index 3a0e7dc30..c6523be33 100644
--- a/app/models/account_activity.rb
+++ b/app/models/account_activity.rb
@@ -6,7 +6,6 @@ class AccountActivity < ActiveRecord::Base
belongs_to :bank_transaction
belongs_to :invoice
- attr_accessor :registrar
CREATE = 'create'
RENEW = 'renew'
@@ -24,14 +23,15 @@ class AccountActivity < ActiveRecord::Base
end
def to_csv
- attributes = %w(registrar description activity_type created_at sum)
+ attributes = %w(description activity_type created_at sum)
CSV.generate(headers: true) do |csv|
csv << %w(registrar description activity_type receipt_date sum)
all.each do |x| # rubocop:disable Rails/FindEach
- x.registrar = Registrar.find(x.account_id).try(:code)
- csv << attributes.map { |attr| x.send(attr) }
+ attrs = [x.account.registrar.try(:code)]
+ attrs += attributes.map { |attr| x.send(attr) }
+ csv << attrs
end
end
end
diff --git a/app/models/api_user.rb b/app/models/api_user.rb
index 260441620..5d6e3afb7 100644
--- a/app/models/api_user.rb
+++ b/app/models/api_user.rb
@@ -62,6 +62,10 @@ class ApiUser < User
username
end
+ def name
+ username
+ end
+
def queued_messages
registrar.messages.queued
end
diff --git a/app/models/bank_transaction.rb b/app/models/bank_transaction.rb
index 1a34965bf..daf6abc29 100644
--- a/app/models/bank_transaction.rb
+++ b/app/models/bank_transaction.rb
@@ -2,7 +2,6 @@ class BankTransaction < ActiveRecord::Base
include Versions
belongs_to :bank_statement
has_one :account_activity
- 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/blocked_domain.rb b/app/models/blocked_domain.rb
index 2e337dce4..3708dd6e6 100644
--- a/app/models/blocked_domain.rb
+++ b/app/models/blocked_domain.rb
@@ -40,7 +40,7 @@ class BlockedDomain < ActiveRecord::Base
def generate_json
h = HashWithIndifferentAccess.new
h[:name] = self.name
- h[:status] = 'Blocked'
+ h[:status] = ['Blocked']
h
end
diff --git a/app/models/contact.rb b/app/models/contact.rb
index 0ddf9ef67..ccacd4142 100644
--- a/app/models/contact.rb
+++ b/app/models/contact.rb
@@ -12,6 +12,10 @@ class Contact < ActiveRecord::Base
# TODO: remove later
has_many :depricated_statuses, class_name: 'DepricatedContactStatus', dependent: :destroy
+ has_paper_trail class_name: "ContactVersion", meta: { children: :children_log }
+
+ attr_accessor :legal_document_id
+
accepts_nested_attributes_for :legal_documents
validates :name, :phone, :email, :ident, :ident_type,
@@ -29,9 +33,12 @@ 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 :val_ident_type
validate :val_ident_valid_format?
validate :uniq_statuses?
validate :validate_html
+ validate :val_country_code
after_initialize do
self.statuses = [] if statuses.nil?
@@ -39,8 +46,9 @@ class Contact < ActiveRecord::Base
self.ident_updated_at = Time.zone.now if new_record? && ident_updated_at.blank?
end
- before_validation :set_ident_country_code
+ before_validation :to_upcase_country_code
before_validation :prefix_code
+ before_validation :strip_email
before_create :generate_auth_info
before_update :manage_emails
@@ -76,7 +84,7 @@ class Contact < ActiveRecord::Base
ORG = 'org'
PRIV = 'priv'
- BIRTHDAY = 'birthday'
+ BIRTHDAY = 'birthday'.freeze
PASSPORT = 'passport'
IDENT_TYPES = [
@@ -235,6 +243,10 @@ class Contact < ActiveRecord::Base
name || '[no name]'
end
+ def val_ident_type
+ errors.add(:ident_type, :epp_ident_type_invalid, code: code) if !%w(org priv birthday).include?(ident_type)
+ end
+
def val_ident_valid_format?
case ident_country_code
when 'EE'.freeze
@@ -247,6 +259,8 @@ class Contact < ActiveRecord::Base
if ident.size != 8 || !(ident =~/\A[0-9]{8}\z/)
errors.add(:ident, err_msg)
end
+ when BIRTHDAY
+ errors.add(:ident, err_msg) if id.blank? # only for create action right now. Later for all of them
end
end
end
@@ -279,6 +293,10 @@ class Contact < ActiveRecord::Base
!org?
end
+ def birthday?
+ ident_type == BIRTHDAY
+ end
+
def generate_auth_info
return if @generate_auth_info_disabled
return if auth_info.present?
@@ -330,22 +348,36 @@ class Contact < ActiveRecord::Base
# TODO: refactor, it should not allow to destroy with normal destroy,
# no need separate method
# should use only in transaction
- def destroy_and_clean
+ def destroy_and_clean frame
if domains_present?
errors.add(:domains, :exist)
return false
end
+
+ legal_document_data = Epp::Domain.parse_legal_document_from_frame(frame)
+
+ if legal_document_data
+
+ doc = LegalDocument.create(
+ documentable_type: Contact,
+ document_type: legal_document_data[:type],
+ body: legal_document_data[:body]
+ )
+ self.legal_documents = [doc]
+ self.legal_document_id = doc.id
+ self.save
+ end
destroy
end
- def set_ident_country_code
- return true unless ident_country_code_changed? && ident_country_code.present?
- code = Country.new(ident_country_code)
- if code
- self.ident_country_code = code.alpha2
- else
- errors.add(:ident, :invalid_country_code)
- end
+ def to_upcase_country_code
+ self.ident_country_code = ident_country_code.upcase if ident_country_code
+ self.country_code = country_code.upcase if country_code
+ end
+
+ def val_country_code
+ errors.add(:ident, :invalid_country_code) unless Country.new(ident_country_code)
+ errors.add(:ident, :invalid_country_code) unless Country.new(country_code)
end
def related_domain_descriptions
@@ -392,6 +424,10 @@ class Contact < ActiveRecord::Base
"#{code} #{name}"
end
+ def strip_email
+ self.email = email.to_s.strip
+ end
+
# what we can do load firstly by registrant
# if total is smaller than needed, the load more
@@ -525,9 +561,18 @@ class Contact < ActiveRecord::Base
]).present?
end
- def update_related_whois_records
- names = related_domain_descriptions.keys
- UpdateWhoisRecordJob.enqueue(names, :domain) if names.present?
- end
+ def update_related_whois_records
+ # not doing anything if no real changes
+ return if changes.slice(*(self.class.column_names - ["updated_at", "created_at", "statuses", "status_notes"])).empty?
+
+ names = related_domain_descriptions.keys
+ UpdateWhoisRecordJob.enqueue(names, :domain) if names.present?
+ end
+
+ def children_log
+ log = HashWithIndifferentAccess.new
+ log[:legal_documents]= [legal_document_id]
+ log
+ end
end
diff --git a/app/models/counter.rb b/app/models/counter.rb
new file mode 100644
index 000000000..7d1c2b926
--- /dev/null
+++ b/app/models/counter.rb
@@ -0,0 +1,24 @@
+class Counter
+ def initialize value = 0
+ @value = value
+ end
+ attr_accessor :value
+ def method_missing *args, &blk
+ @value.send(*args, &blk)
+ end
+ def to_s
+ @value.to_s
+ end
+
+ def now
+ @value
+ end
+
+ # pre-increment ".+" when x not present
+ def next(x = 1)
+ @value += x
+ end
+ def prev(x = 1)
+ @value -= x
+ end
+end
\ No newline at end of file
diff --git a/app/models/depp/domain.rb b/app/models/depp/domain.rb
index 7b4630008..f181d0000 100644
--- a/app/models/depp/domain.rb
+++ b/app/models/depp/domain.rb
@@ -66,8 +66,9 @@ module Depp
def delete(domain_params)
xml = epp_xml.delete({
- name: { value: domain_params[:name] }
- }, Depp::Domain.construct_custom_params_hash(domain_params))
+ name: { value: domain_params[:name] }},
+ Depp::Domain.construct_custom_params_hash(domain_params),
+ (domain_params[:verified].present? && 'yes'))
current_user.request(xml)
end
@@ -214,7 +215,8 @@ module Depp
rem_arr << { _anonymus: rem_anon } if rem_anon.any?
if domain_params[:registrant] != old_domain_params[:registrant]
- chg = [{ registrant: { value: domain_params[:registrant] } }]
+ chg = [{ registrant: { value: domain_params[:registrant] } }] if !domain_params[:verified].present?
+ chg = [{ registrant: { value: domain_params[:registrant], attrs: { verified: 'yes' } } }] if domain_params[:verified]
end
add_arr = nil if add_arr.none?
diff --git a/app/models/directo.rb b/app/models/directo.rb
index 66fada5d1..05d9da5aa 100644
--- a/app/models/directo.rb
+++ b/app/models/directo.rb
@@ -1,4 +1,5 @@
class Directo < ActiveRecord::Base
+ DOMAIN_TO_PRODUCT = {"ee" => "01EE", "com.ee" => "02COM", "pri.ee" => "03PRI", "fie.ee"=>"04FIE", "med.ee" => "05MED"}.freeze
belongs_to :item, polymorphic: true
def self.send_receipts
@@ -52,9 +53,127 @@ 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.create!(response: res.as_json.to_h)
+ obj.directo_records.create!(response: res.as_json.to_h, invoice_number: obj.number)
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
+
+
+ def self.send_monthly_invoices(debug: false)
+ @debug = debug
+ I18n.locale = :et
+ month = Time.now - 1.month
+ invoices_until = month.end_of_month
+ date_format = "%Y-%m-%d"
+ invoice_counter= Counter.new
+
+ min_directo = Setting.directo_monthly_number_min.presence.try(:to_i)
+ max_directo = Setting.directo_monthly_number_max.presence.try(:to_i)
+ last_directo = [Setting.directo_monthly_number_last.presence.try(:to_i), min_directo].compact.max || 0
+ if max_directo && max_directo <= last_directo
+ raise "Directo counter is out of period (max allowed number is smaller than last counter number)"
+ end
+
+ directo_next = last_directo
+ Registrar.where.not(test_registrar: true).find_each do |registrar|
+ unless registrar.cash_account
+ Rails.logger.info("[DIRECTO] Monthly invoice for registrar #{registrar.id} has been skipped as it doesn't has cash_account")
+ next
+ end
+ counter = Counter.new(1)
+ items = {}
+ registrar_activities = AccountActivity.where(account_id: registrar.account_ids).where("created_at BETWEEN ? AND ?",month.beginning_of_month, month.end_of_month)
+
+ # adding domains items
+ registrar_activities.where(activity_type: [AccountActivity::CREATE, AccountActivity::RENEW]).each do |activity|
+ pricelist = load_activity_pricelist(activity)
+ unless pricelist
+ Rails.logger.error("[DIRECTO] Skipping activity #{activity.id} as pricelist not found")
+ next
+ end
+
+ pricelist.years_amount.times do |i|
+ year = i+1
+ hash = {
+ "ProductID" => DOMAIN_TO_PRODUCT[pricelist.category],
+ "Unit" => "tk",
+ "ProductName" => ".#{pricelist.category} registreerimine: #{pricelist.years_amount} aasta",
+ "UnitPriceWoVAT" => pricelist.price_decimal/pricelist.years_amount
+ }
+ hash["StartDate"] = (activity.created_at + (year-1).year).end_of_month.strftime(date_format) if year > 1
+ hash["EndDate"] = (activity.created_at + (year-1).year + 1).end_of_month.strftime(date_format) if year > 1
+
+ if items.has_key?(hash)
+ items[hash]["Quantity"] += 1
+ else
+ items[hash] = {"RN"=>counter.next, "RR" => counter.now - i, "Quantity"=> 1}
+ end
+ end
+ end
+
+ #adding prepaiments
+ if items.any?
+ total = 0
+ items.each{ |key, val| total += val["Quantity"] * key["UnitPriceWoVAT"] }
+ hash = {"ProductID" => Setting.directo_receipt_product_name, "Unit" => "tk", "ProductName" => "Domeenide ettemaks", "UnitPriceWoVAT"=>total}
+ items[hash] = {"RN"=>counter.next, "RR" => counter.now, "Quantity"=> -1}
+ end
+
+ # generating XML
+ if items.any?
+ directo_next += 1
+ invoice_counter.next
+
+ builder = Nokogiri::XML::Builder.new(encoding: "UTF-8") do |xml|
+ xml.invoices{
+ xml.invoice("Number" =>directo_next,
+ "InvoiceDate" =>invoices_until.strftime(date_format),
+ "PaymentTerm" =>Setting.directo_receipt_payment_term,
+ "CustomerCode"=>registrar.directo_handle,
+ "Language" =>"",
+ "Currency" =>registrar_activities.first.currency,
+ "SalesAgent" =>Setting.directo_sales_agent){
+ xml.line("RN" => 1, "RR"=>1, "ProductName"=> "Domeenide registreerimine - #{I18n.l(invoices_until, format: "%B %Y").titleize}")
+ items.each do |line, val|
+ xml.line(val.merge(line))
+ 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
+ if @debug
+ STDOUT << "#{Time.zone.now.utc} - Directo xml had to be sent #{data}\n"
+ else
+ Setting.directo_monthly_number_last = directo_next
+ Nokogiri::XML(response).css("Result").each do |res|
+ Directo.create!(request: data, response: res.as_json.to_h, invoice_number: directo_next)
+ Rails.logger.info("[DIRECTO] Invoice #{res.attributes["docid"].value} was pushed and return is #{res.as_json.to_h.inspect}")
+ end
+ end
+ else
+ Rails.logger.info("[DIRECTO] Registrar #{registrar.id} has nothing to be sent to Directo")
+ end
+
+ end
+ STDOUT << "#{Time.zone.now.utc} - Directo invoices sending finished. #{invoice_counter.now} are sent\n"
+ end
+
+
+ def self.load_activity_pricelist activity
+ @pricelists ||= {}
+ return @pricelists[activity.log_pricelist_id] if @pricelists.has_key?(activity.log_pricelist_id)
+
+ pricelist = Pricelist.find_by(id: activity.log_pricelist_id) || PricelistVersion.find_by(item_id: activity.log_pricelist_id).try(:reify)
+ unless pricelist
+ @pricelists[activity.log_pricelist_id] = nil
+ Rails.logger.info("[DIRECTO] AccountActivity #{activity.id} cannot be sent as pricelist wasn't found #{activity.log_pricelist_id}")
+ return
+ end
+
+ @pricelists[activity.log_pricelist_id] = pricelist.version_at(activity.created_at) || pricelist
+ end
end
+
diff --git a/app/models/domain.rb b/app/models/domain.rb
index 86b6d4a60..3751da5b6 100644
--- a/app/models/domain.rb
+++ b/app/models/domain.rb
@@ -7,6 +7,8 @@ class Domain < ActiveRecord::Base
attr_accessor :roles
+ attr_accessor :legal_document_id
+
# TODO: whois requests ip whitelist for full info for own domains and partial info for other domains
# TODO: most inputs should be trimmed before validatation, probably some global logic?
@@ -345,7 +347,8 @@ class Domain < ActiveRecord::Base
end
- # state change shouln't be
+ # state changes may be done low-level - no validation
+ # in this metod we still save PaperTrail log.
def clean_pendings_lowlevel
statuses.delete(DomainStatus::PENDING_DELETE_CONFIRMATION)
statuses.delete(DomainStatus::PENDING_UPDATE)
@@ -354,13 +357,23 @@ class Domain < ActiveRecord::Base
status_notes[DomainStatus::PENDING_UPDATE] = ''
status_notes[DomainStatus::PENDING_DELETE] = ''
- update_columns(
+ hash = {
registrant_verification_token: nil,
registrant_verification_asked_at: nil,
pending_json: {},
status_notes: status_notes,
- statuses: statuses.presence || [DomainStatus::OK]
- )
+ statuses: statuses.presence || [DomainStatus::OK],
+ # need this column in order to update PaperTrail version properly
+ updated_at: Time.now.utc
+ }
+
+ # PaperTrail
+ self.attributes = hash
+ record_update
+ clear_version_instance!
+ reset_transaction_id
+
+ update_columns(hash)
end
def pending_update!
@@ -384,6 +397,7 @@ class Domain < ActiveRecord::Base
self.registrant_verification_token = token
self.registrant_verification_asked_at = asked_at
set_pending_update
+ touch_always_version
pending_json['new_registrant_id'] = new_registrant_id
pending_json['new_registrant_email'] = new_registrant_email
pending_json['new_registrant_name'] = new_registrant_name
@@ -449,19 +463,14 @@ class Domain < ActiveRecord::Base
period_i ||= period
unit ||= period_unit
+ # TODO: test if name.scan(/\.(.+)\z/).first.first is faster
zone = name.split('.').drop(1).join('.')
p = period_i / 365 if unit == 'd'
p = period_i / 12 if unit == 'm'
p = period_i if unit == 'y'
- if p > 1
- p = "#{p}years"
- else
- p = "#{p}year"
- end
-
- Pricelist.pricelist_for(zone, operation, p)
+ Pricelist.pricelist_for(zone, operation, "#{p}year".pluralize(p))
end
### VALIDATIONS ###
@@ -469,7 +478,8 @@ 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 if ns.ipv4.present?
+ next if ns.ipv4.present? || ns.ipv6.present?
+
errors.add(:nameservers, :invalid) if errors[:nameservers].blank?
ns.errors.add(:ipv4, :blank)
end
@@ -566,7 +576,7 @@ class Domain < ActiveRecord::Base
statuses << DomainStatus::SERVER_MANUAL_INZONE
end
- self.force_delete_at = Time.zone.now + Setting.redemption_grace_period.days unless force_delete_at
+ self.force_delete_at = (Time.zone.now + (Setting.redemption_grace_period.days + 1.day)).utc.beginning_of_day unless force_delete_at
transaction do
save!(validate: false)
registrar.messages.create!(
@@ -595,7 +605,7 @@ class Domain < ActiveRecord::Base
def set_graceful_expired
self.outzone_at = valid_to + Setting.expire_warning_period.days
- self.delete_at = outzone_at + Setting.redemption_grace_period.days
+ self.delete_at = (outzone_at + (Setting.redemption_grace_period.days + 1.day)).utc.beginning_of_day
self.statuses |= [DomainStatus::EXPIRED]
end
@@ -603,7 +613,7 @@ class Domain < ActiveRecord::Base
# TODO: currently valid_to attribute update logic is open
# self.valid_to = valid_from + self.class.convert_period_to_time(period, period_unit)
self.outzone_at = Time.zone.now + Setting.expire_warning_period.days
- self.delete_at = Time.zone.now + Setting.redemption_grace_period.days
+ self.delete_at = (Time.zone.now + (Setting.redemption_grace_period.days + 1.day)).utc.beginning_of_day
statuses << DomainStatus::EXPIRED
end
@@ -725,16 +735,14 @@ class Domain < ActiveRecord::Base
# rubocop: enable Metrics/CyclomaticComplexity
# rubocop: enable Metrics/PerceivedComplexity
-
- # small optimization that we'are using to_a if it was done already
- # otherwise just getting ids
def children_log
log = HashWithIndifferentAccess.new
log[:admin_contacts] = admin_contact_ids
log[:tech_contacts] = tech_contact_ids
log[:nameservers] = nameserver_ids
- log[:domain_statuses]= domain_status_ids
log[:dnskeys] = dnskey_ids
+ log[:domain_statuses]= domain_status_ids
+ log[:legal_documents]= [legal_document_id]
log[:registrant] = [registrant_id]
log
end
diff --git a/app/models/domain_cron.rb b/app/models/domain_cron.rb
index 9a12e1f93..6f04b92d5 100644
--- a/app/models/domain_cron.rb
+++ b/app/models/domain_cron.rb
@@ -65,46 +65,55 @@ class DomainCron
marked
end
- def self.start_delete_period
- begin
- STDOUT << "#{Time.zone.now.utc} - Setting delete_candidate to domains\n" unless Rails.env.test?
+ #doing nothing, deprecated
- 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} 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
- STDOUT << "#{Time.zone.now.utc} - Finished setting delete_candidate - #{marked} out of #{real} successfully set\n" unless Rails.env.test?
- end
- marked
+ def self.start_delete_period
+ # begin
+ # STDOUT << "#{Time.zone.now.utc} - Setting delete_candidate to domains\n" unless Rails.env.test?
+ #
+ # 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} DomainCron.start_delete_period: ##{domain.id} (#{domain.name})\n" unless Rails.env.test?
+ # ::PaperTrail.whodunnit = "cron - #{__method__}"
+ # 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?
+ # end
+ # marked
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
+ Domain.where('delete_at <= ?', Time.zone.now).each do |x|
+ next unless x.delete_candidateable?
+
+ x.statuses << DomainStatus::DELETE_CANDIDATE
+
+ # If domain successfully saved, add it to delete schedule
+ if x.save(validate: false)
+ ::PaperTrail.whodunnit = "cron - #{__method__}"
+ DomainDeleteJob.enqueue(x.id, run_at: rand(((24*60) - (DateTime.now.hour * 60 + DateTime.now.minute))).minutes.from_now)
+ STDOUT << "#{Time.zone.now.utc} Domain.destroy_delete_candidates: job added by deleteCandidate status ##{x.id} (#{x.name})\n" unless Rails.env.test?
+ c += 1
+ end
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} DomainCron.destroy_delete_candidates: by force delete time ##{x.id} (#{x.name})\n" unless Rails.env.test?
+ DomainDeleteJob.enqueue(x.id, run_at: rand(((24*60) - (DateTime.now.hour * 60 + DateTime.now.minute))).minutes.from_now)
+ STDOUT << "#{Time.zone.now.utc} DomainCron.destroy_delete_candidates: job added 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?
+ STDOUT << "#{Time.zone.now.utc} - Job destroy added for #{c} domains\n" unless Rails.env.test?
end
# rubocop: enable Metrics/AbcSize
diff --git a/app/models/domain_mail_model.rb b/app/models/domain_mail_model.rb
index 46309ad52..d443d8783 100644
--- a/app/models/domain_mail_model.rb
+++ b/app/models/domain_mail_model.rb
@@ -20,28 +20,7 @@ class DomainMailModel
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_pending
- registrant_old
- subject(:registrant_updated_notification_for_old_registrant_subject)
- 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
- @params[:registrant_country] = new_registrant.country.name
- compose
- end
def pending_update_rejected_notification_for_new_registrant
registrant_pending
diff --git a/app/models/epp/contact.rb b/app/models/epp/contact.rb
index fef4c3eda..bddee18ab 100644
--- a/app/models/epp/contact.rb
+++ b/app/models/epp/contact.rb
@@ -37,10 +37,7 @@ class Epp::Contact < Contact
at[:country_code] = f.css('postalInfo addr cc').text if f.css('postalInfo addr cc').present?
at[:auth_info] = f.css('authInfo pw').text if f.css('authInfo pw').present?
- legal_frame = f.css('legalDocument').first
- if legal_frame.present?
- at[:legal_documents_attributes] = legal_document_attrs(legal_frame)
- end
+
at.merge!(ident_attrs(f.css('ident').first)) if new_record
at
end
@@ -104,6 +101,7 @@ class Epp::Contact < Contact
res
end
+
end
delegate :ident_attr_valid?, to: :class
@@ -134,6 +132,9 @@ class Epp::Contact < Contact
'2302' => [ # Object exists
[:code, :epp_id_taken]
],
+ '2304' => [ # Object status prohibits operation
+ [:ident_type, :epp_ident_type_invalid, { value: { obj: 'code', val: code}, interpolation: {code: code}}]
+ ],
'2305' => [ # Association exists
[:domains, :exist]
],
@@ -143,7 +144,7 @@ class Epp::Contact < Contact
end
# rubocop:disable Metrics/AbcSize
- def update_attributes(frame)
+ def update_attributes(frame, current_user)
return super if frame.blank?
at = {}.with_indifferent_access
at.deep_merge!(self.class.attrs_from(frame.css('chg'), new_record: false))
@@ -152,8 +153,14 @@ class Epp::Contact < Contact
at[:statuses] = statuses - statuses_attrs(frame.css('rem'), 'rem') + statuses_attrs(frame.css('add'), 'add')
end
- legal_frame = frame.css('legalDocument').first
- at[:legal_documents_attributes] = self.class.legal_document_attrs(legal_frame)
+ # legal_frame = frame.css('legalDocument').first
+ # at[:legal_documents_attributes] = self.class.legal_document_attrs(legal_frame)
+
+ if doc = attach_legal_document(Epp::Domain.parse_legal_document_from_frame(frame))
+ frame.css("legalDocument").first.content = doc.path if doc && doc.persisted?
+ self.legal_document_id = doc.id
+ end
+
self.deliver_emails = true # turn on email delivery for epp
@@ -169,6 +176,8 @@ class Epp::Contact < Contact
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 == "birthday" && ident_country_code.blank?
+ at.merge!(ident_country_code: ident_frame.attr('cc'))
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?
@@ -180,6 +189,9 @@ class Epp::Contact < Contact
end
end
+ self.upid = current_user.registrar.id if current_user.registrar
+ self.up_date = Time.zone.now
+
super(at)
end
# rubocop:enable Metrics/AbcSize
@@ -217,4 +229,29 @@ class Epp::Contact < Contact
status_list
end
+
+ def attach_legal_document(legal_document_data)
+ return unless legal_document_data
+
+ legal_documents.create(
+ document_type: legal_document_data[:type],
+ body: legal_document_data[:body]
+ )
+ end
+
+ def add_legal_file_to_new frame
+ legal_document_data = Epp::Domain.parse_legal_document_from_frame(frame)
+ return unless legal_document_data
+
+ doc = LegalDocument.create(
+ documentable_type: Contact,
+ document_type: legal_document_data[:type],
+ body: legal_document_data[:body]
+ )
+ self.legal_documents = [doc]
+
+ frame.css("legalDocument").first.content = doc.path if doc && doc.persisted?
+ self.legal_document_id = doc.id
+ end
+
end
diff --git a/app/models/epp/domain.rb b/app/models/epp/domain.rb
index d1da30a2f..c5e298cff 100644
--- a/app/models/epp/domain.rb
+++ b/app/models/epp/domain.rb
@@ -133,7 +133,8 @@ class Epp::Domain < Domain
[:base, :ds_data_not_allowed],
[:base, :key_data_not_allowed],
[:period, :not_a_number],
- [:period, :not_an_integer]
+ [:period, :not_an_integer],
+ [:registrant, :cannot_be_missing]
],
'2308' => [
[:base, :domain_name_blocked, { value: { obj: 'name', val: name_dirty } }]
@@ -155,7 +156,8 @@ class Epp::Domain < Domain
def attrs_from(frame, current_user, action = nil)
at = {}.with_indifferent_access
- code = frame.css('registrant').first.try(:text)
+ registrant_frame = frame.css('registrant').first
+ code = registrant_frame.try(:text)
if code.present?
if action == 'chg' && registrant_change_prohibited?
add_epp_error('2304', nil, DomainStatus::SERVER_REGISTRANT_CHANGE_PROHIBITED, I18n.t(:object_status_prohibits_operation))
@@ -166,7 +168,10 @@ class Epp::Domain < Domain
else
add_epp_error('2303', 'registrant', code, [:registrant, :not_found])
end
- end
+ else
+ add_epp_error('2306', nil, nil, [:registrant, :cannot_be_missing])
+ end if registrant_frame
+
at[:name] = frame.css('name').text if new_record?
at[:registrar_id] = current_user.registrar.try(:id)
@@ -195,9 +200,27 @@ class Epp::Domain < Domain
end
at[:dnskeys_attributes] = dnskeys_attrs(dnskey_frame, action)
- at[:legal_documents_attributes] = legal_document_from(frame)
+
at
end
+
+
+ # Adding legal doc to domain and
+ # if something goes wrong - raise Rollback error
+ def add_legal_file_to_new frame
+ legal_document_data = Epp::Domain.parse_legal_document_from_frame(frame)
+ return unless legal_document_data
+
+ doc = LegalDocument.create(
+ documentable_type: Domain,
+ document_type: legal_document_data[:type],
+ body: legal_document_data[:body]
+ )
+ self.legal_documents = [doc]
+
+ frame.css("legalDocument").first.content = doc.path if doc && doc.persisted?
+ self.legal_document_id = doc.id
+ end
# rubocop: enable Metrics/PerceivedComplexity
# rubocop: enable Metrics/CyclomaticComplexity
# rubocop: enable Metrics/MethodLength
@@ -457,15 +480,6 @@ class Epp::Domain < Domain
status_list
end
- def legal_document_from(frame)
- ld = frame.css('legalDocument').first
- return [] unless ld
-
- [{
- body: ld.text,
- document_type: ld['type']
- }]
- end
# rubocop: disable Metrics/AbcSize
# rubocop: disable Metrics/CyclomaticComplexity
@@ -477,6 +491,7 @@ class Epp::Domain < Domain
if doc = attach_legal_document(Epp::Domain.parse_legal_document_from_frame(frame))
frame.css("legalDocument").first.content = doc.path if doc && doc.persisted?
+ self.legal_document_id = doc.id
end
at_add = attrs_from(frame.css('add'), current_user, 'add')
@@ -489,6 +504,11 @@ class Epp::Domain < Domain
# at[:statuses] += at_add[:domain_statuses_attributes]
+ if errors.empty? && verify
+ self.upid = current_user.registrar.id if current_user.registrar
+ self.up_date = Time.zone.now
+ end
+
if registrant_id && registrant.code == frame.css('registrant')
throw :epp_error, {
@@ -515,19 +535,23 @@ class Epp::Domain < Domain
preclean_pendings
user = ApiUser.find(pending_json['current_user_id'])
frame = Nokogiri::XML(pending_json['frame'])
+ old_registrant_id = registrant_id
self.deliver_emails = true # turn on email delivery
self.statuses.delete(DomainStatus::PENDING_UPDATE)
+ self.upid = user.registrar.id if user.registrar
+ self.up_date = Time.zone.now
::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
- WhoisRecord.find_by(domain_id: id).save # need to reload model
-
save! # for notification if everything fails
+
+ WhoisRecord.find_by(domain_id: id).save # need to reload model
+ DomainMailer.registrant_updated_notification_for_old_registrant(id, old_registrant_id, registrant_id, true).deliver
+ DomainMailer.registrant_updated_notification_for_new_registrant(id, old_registrant_id, registrant_id, true).deliver
+
true
end
@@ -576,7 +600,7 @@ class Epp::Domain < Domain
msg: I18n.t(:object_status_prohibits_operation)
} unless pending_deletable?
- self.delete_at = Time.zone.now + Setting.redemption_grace_period.days
+ self.delete_at = (Time.zone.now + (Setting.redemption_grace_period.days + 1.day)).utc.beginning_of_day
set_pending_delete
set_server_hold if server_holdable?
save(validate: false)
diff --git a/app/models/legal_document.rb b/app/models/legal_document.rb
index e807ae2f7..b4bf3c96b 100644
--- a/app/models/legal_document.rb
+++ b/app/models/legal_document.rb
@@ -1,4 +1,7 @@
class LegalDocument < ActiveRecord::Base
+ include EppErrors
+ MIN_BODY_SIZE = (1.37 * 3.kilobytes).ceil
+
if ENV['legal_document_types'].present?
TYPES = ENV['legal_document_types'].split(',').map(&:strip)
else
@@ -10,11 +13,22 @@ class LegalDocument < ActiveRecord::Base
belongs_to :documentable, polymorphic: true
- validates :body, length: { minimum: (1.37 * 8.kilobytes).ceil }, if: ->(file){ file.path.blank? && !Rails.env.staging?}
+ validate :val_body_length, if: ->(file){ file.path.blank? && !Rails.env.staging?}
before_create :add_creator
before_save :save_to_filesystem
+ def epp_code_map
+ {
+ '2306' => [
+ [:body, :length]
+ ]
+ }
+ end
+
+ def val_body_length
+ errors.add(:body, :length) if body.nil? || body.size < MIN_BODY_SIZE
+ end
def save_to_filesystem
diff --git a/app/models/message.rb b/app/models/message.rb
index 174edc8ef..10d823e63 100644
--- a/app/models/message.rb
+++ b/app/models/message.rb
@@ -12,4 +12,8 @@ class Message < ActiveRecord::Base
self.queued = false
save
end
+
+ def name
+ "-"
+ end
end
diff --git a/app/models/nameserver.rb b/app/models/nameserver.rb
index ccedf0880..86cd7e002 100644
--- a/app/models/nameserver.rb
+++ b/app/models/nameserver.rb
@@ -8,7 +8,7 @@ class Nameserver < ActiveRecord::Base
# scope :owned_by_registrar, -> (registrar) { joins(:domain).where('domains.registrar_id = ?', registrar.id) }
# rubocop: disable Metrics/LineLength
- validates :hostname, format: { with: /\A(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])\z/ }
+ validates :hostname, format: { with: /\A(([a-zA-Z0-9]|[a-zA-ZäöüõšžÄÖÜÕŠŽ0-9][a-zA-ZäöüõšžÄÖÜÕŠŽ0-9\-]*[a-zA-ZäöüõšžÄÖÜÕŠŽ0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])\z/ }
# validates :ipv4, format: { with: /\A(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\z/, allow_blank: true }
# validates :ipv6, format: { with: /(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))/, allow_blank: true }
validate :val_ipv4
@@ -16,7 +16,9 @@ class Nameserver < ActiveRecord::Base
# rubocop: enable Metrics/LineLength
before_validation :normalize_attributes
-
+ before_validation :check_puny_symbols
+ before_validation :check_label_length
+
delegate :name, to: :domain, prefix: true
def epp_code_map
@@ -26,10 +28,11 @@ class Nameserver < ActiveRecord::Base
],
'2005' => [
[:hostname, :invalid, { value: { obj: 'hostAttr', val: hostname } }],
+ [:hostname, :puny_to_long, { value: { obj: 'hostAttr', val: hostname } }],
[:ipv4, :invalid, { value: { obj: 'hostAddr', val: ipv4 } }],
[:ipv6, :invalid, { value: { obj: 'hostAddr', val: ipv6 } }]
],
- '2306' => [
+ '2003' => [
[:ipv4, :blank]
]
}
@@ -41,10 +44,26 @@ class Nameserver < ActiveRecord::Base
self.ipv6 = Array(ipv6).reject(&:blank?).map(&:strip).map(&:upcase)
end
+ def check_label_length
+ hostname_puny.split('.').each do |label|
+ errors.add(:hostname, :puny_to_long) if label.length > 63
+ end
+ end
+
+ def check_puny_symbols
+ regexp = /(\A|\.)..--/
+ errors.add(:hostname, :invalid) if hostname =~ regexp
+ end
+
def to_s
hostname
end
+ def hostname=(hostname)
+ self[:hostname] = SimpleIDN.to_unicode(hostname)
+ self[:hostname_puny] = SimpleIDN.to_ascii(hostname)
+ end
+
def val_ipv4
regexp = /\A(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\z/
ipv4.to_a.each do |ip|
diff --git a/app/models/pricelist.rb b/app/models/pricelist.rb
index 17420dfa1..d38e4290d 100644
--- a/app/models/pricelist.rb
+++ b/app/models/pricelist.rb
@@ -8,6 +8,8 @@ class Pricelist < ActiveRecord::Base
)
}
+ scope :valid_at, ->(time){ where("valid_from IS NULL OR valid_from <= ?", time).where("valid_to IS NULL OR valid_to >= ?", time) }
+
monetize :price_cents
validates :price_cents, :price_currency, :price,
@@ -27,6 +29,14 @@ class Pricelist < ActiveRecord::Base
"#{operation_category} #{category}"
end
+ def years_amount
+ duration.to_i
+ end
+
+ def price_decimal
+ price_cents / BigDecimal.new('100')
+ end
+
class << self
def pricelist_for(zone, operation, period)
lists = valid.where(category: zone, operation_category: operation, duration: period)
diff --git a/app/models/registrant_user.rb b/app/models/registrant_user.rb
index 413ff1202..12cae0d82 100644
--- a/app/models/registrant_user.rb
+++ b/app/models/registrant_user.rb
@@ -30,10 +30,20 @@ class RegistrantUser < User
return false if issuer_organization != ACCEPTED_ISSUER
idc_data.force_encoding('UTF-8')
- 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
- last_name = idc_data.scan(%r{/SN=(.+)/GN}).flatten.first
+
+ # handling here new and old mode
+ if idc_data.starts_with?("/")
+ 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
+ last_name = idc_data.scan(%r{/SN=(.+)/GN}).flatten.first
+ else
+ parse_str = "," + idc_data
+ identity_code = parse_str.scan(/,serialNumber=(\d+)/).flatten.first
+ country = parse_str.scan(/,C=(.{2})/).flatten.first
+ first_name = parse_str.scan(/,GN=([^,]+)/).flatten.first
+ last_name = parse_str.scan(/,SN=([^,]+)/).flatten.first
+ end
u = where(registrant_ident: "#{country}-#{identity_code}").first_or_create
u.username = "#{first_name} #{last_name}"
diff --git a/app/models/reserved_domain.rb b/app/models/reserved_domain.rb
index 9f36fcebc..e80b96c24 100644
--- a/app/models/reserved_domain.rb
+++ b/app/models/reserved_domain.rb
@@ -65,7 +65,7 @@ class ReservedDomain < ActiveRecord::Base
def generate_json
h = HashWithIndifferentAccess.new
h[:name] = self.name
- h[:status] = 'Reserved'
+ h[:status] = ['Reserved']
h
end
diff --git a/app/views/admin/account_activities/index.haml b/app/views/admin/account_activities/index.haml
index e29f12f75..0a60e0809 100644
--- a/app/views/admin/account_activities/index.haml
+++ b/app/views/admin/account_activities/index.haml
@@ -56,7 +56,7 @@
%thead
%tr
%th{class: 'col-xs-2'}
- = sort_link(@q, 'registrar')
+ = sort_link(@q, 'account_registrar_code', t(:registrar))
%th{class: 'col-xs-3'}
= sort_link(@q, 'description')
%th{class: 'col-xs-2'}
diff --git a/app/views/admin/domains/partials/_version.haml b/app/views/admin/domains/partials/_version.haml
index 580a5589a..38c4474e8 100644
--- a/app/views/admin/domains/partials/_version.haml
+++ b/app/views/admin/domains/partials/_version.haml
@@ -1,4 +1,4 @@
-- statuses_link ||= false
+-#- statuses_link ||= false
- version ||= false
- domain ||= false
- pending_user ||= false
@@ -21,7 +21,12 @@
- dnskeys = domain.dnskeys
- tech_contacts = domain.tech_contacts
- admin_contacts = domain.admin_contacts
- - registrant = [domain.registrant]
+ - registrant = domain.registrant
+ - unless registrant
+ - ver = ContactVersion.where(item_id: domain.registrant_id).where(event: :destroy).last
+ - registrant = ver.reify
+ - registrant.version_loader = ver
+ - registrant = [registrant]
- creator = pending_user.try(:username)
- event = 'pending'
- whodunnit = false
@@ -29,7 +34,7 @@
%td
%p.nowrap
= l(domain.updated_at, format: :shorts)
- - if statuses_link
+ -#- if statuses_link
%br= link_to t(:edit_statuses), edit_admin_domain_path(params[:domain_id])
%p.text-right
diff --git a/app/views/admin/domains/versions.haml b/app/views/admin/domains/versions.haml
index cfef69872..6dbf706f6 100644
--- a/app/views/admin/domains/versions.haml
+++ b/app/views/admin/domains/versions.haml
@@ -19,7 +19,7 @@
%th{class: 'col-xs-2'}= t(:registrar)
%tbody
- - if @pending_domain.present?
+ -#- if @pending_domain.present?
%tr.small
= render 'admin/domains/partials/version',
domain: @pending_domain, pending_user: @pending_user, statuses_link: true
diff --git a/app/views/admin/epp_logs/index.haml b/app/views/admin/epp_logs/index.haml
index fa2e64267..3bb8536d3 100644
--- a/app/views/admin/epp_logs/index.haml
+++ b/app/views/admin/epp_logs/index.haml
@@ -11,8 +11,10 @@
= f.select :request_command_eq, [[t(:choose),''], 'hello', 'login', 'logout', 'info', 'create', 'update', 'delete', 'check', 'renew', 'transfer', 'poll', 'keyrelay'], {}, class: 'form-control selectize', placeholder: t(:choose)
.col-md-3
.form-group
+ - opts = [[t(:choose),''], 'contact', 'domain', 'poll', 'keyrelay']
+ - opts += [params[:q][:request_object_cont]] if params[:q].present? && params[:q][:request_object_cont].present?
= f.label :request_object
- = f.select :request_object_eq, [[t(:choose),''], 'contact', 'domain', 'poll', 'keyrelay'], {}, class: 'form-control selectize', placeholder: t(:choose)
+ = f.select :request_object_cont, opts, {}, class: 'form-control selectize_create', placeholder: t(:choose)
.col-md-3
.form-group
= f.label :request_successful
@@ -29,11 +31,11 @@
.col-md-3
.form-group
= f.label t(:created_after)
- = f.search_field :created_at_gteq, class: 'form-control', placeholder: t(:created_after), autocomplete: 'off'
+ = f.search_field :created_at_gteq, value: params[:q][:created_at_gteq], class: 'form-control datepicker', placeholder: t(:created_after), autocomplete: 'off'
.col-md-3
.form-group
= f.label t(:created_before)
- = f.search_field :created_at_lteq, class: 'form-control', placeholder: t(:created_before), autocomplete: 'off'
+ = f.search_field :created_at_lteq, value: params[:q][:created_at_lteq], class: 'form-control datepicker', placeholder: t(:created_before), autocomplete: 'off'
.col-md-3{style: 'padding-top: 25px;'}
%button.btn.btn-primary
diff --git a/app/views/admin/registrars/_form.haml b/app/views/admin/registrars/_form.haml
index f00bf6a14..48cfc8066 100644
--- a/app/views/admin/registrars/_form.haml
+++ b/app/views/admin/registrars/_form.haml
@@ -82,6 +82,11 @@
= f.label :code
.col-md-7
= f.text_field(:code, class: 'form-control', disabled: !f.object.new_record?)
+ .form-group
+ .col-md-4.control-label
+ = f.label :test_registrar
+ .col-md-7
+ = f.check_box :test_registrar, class: 'form-control'
%hr
.row
diff --git a/app/views/admin/registrars/index.haml b/app/views/admin/registrars/index.haml
index 8ba45d205..4e1c78294 100644
--- a/app/views/admin/registrars/index.haml
+++ b/app/views/admin/registrars/index.haml
@@ -14,12 +14,15 @@
= sort_link(@q, 'reg_no', t(:reg_no))
%th{class: 'col-xs-4'}
= t(:credit_balance)
+ %th{class: 'col-xs-4'}
+ = t(:test_registrar)
%tbody
- @registrars.each do |x|
%tr
%td= link_to(x, [:admin, x])
%td= x.reg_no
%td= "#{x.balance}"
+ %td= "#{x.test_registrar}"
.row
.col-md-12
= paginate @registrars
diff --git a/app/views/admin/registrars/show.haml b/app/views/admin/registrars/show.haml
index 35938c0c6..c1c8ebf6c 100644
--- a/app/views/admin/registrars/show.haml
+++ b/app/views/admin/registrars/show.haml
@@ -2,6 +2,10 @@
= link_to(t(:edit), edit_admin_registrar_path(@registrar), class: 'btn btn-primary')
= link_to(t(:delete), admin_registrar_path(@registrar),
method: :delete, data: { confirm: t(:are_you_sure) }, class: 'btn btn-danger')
+- content_for :page_name do
+ = @registrar.name
+ - if @registrar.test_registrar?
+ %span{style: "color: #c9302c;"} (test)
= render 'shared/title', name: @registrar.name
- if @registrar.errors.any?
diff --git a/app/views/admin/repp_logs/index.haml b/app/views/admin/repp_logs/index.haml
index 0d33c4a6b..49c74405b 100644
--- a/app/views/admin/repp_logs/index.haml
+++ b/app/views/admin/repp_logs/index.haml
@@ -29,11 +29,11 @@
.col-md-3
.form-group
= f.label t(:created_after)
- = f.search_field :created_at_gteq, class: 'form-control', placeholder: t(:created_after), autocomplete: 'off'
+ = f.search_field :created_at_gteq, value: params[:q][:created_at_gteq], class: 'form-control datepicker', placeholder: t(:created_after), autocomplete: 'off'
.col-md-3
.form-group
= f.label t(:created_before)
- = f.search_field :created_at_lteq, class: 'form-control', placeholder: t(:created_before), autocomplete: 'off'
+ = f.search_field :created_at_lteq, value: params[:q][:created_at_lteq], class: 'form-control datepicker', placeholder: t(:created_before), autocomplete: 'off'
.col-md-3{style: 'padding-top: 25px;'}
%button.btn.btn-primary
diff --git a/app/views/admin/settings/index.haml b/app/views/admin/settings/index.haml
index 863d197d0..6c7e3d74c 100644
--- a/app/views/admin/settings/index.haml
+++ b/app/views/admin/settings/index.haml
@@ -69,6 +69,9 @@
%tbody
= render 'setting_row', var: :invoice_number_min
= render 'setting_row', var: :invoice_number_max
+ = render 'setting_row', var: :directo_monthly_number_min
+ = render 'setting_row', var: :directo_monthly_number_max
+ = render 'setting_row', var: :directo_monthly_number_last
= 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
diff --git a/app/views/epp/poll/poll_req.xml.builder b/app/views/epp/poll/poll_req.xml.builder
index 605ca496e..d5da707a6 100644
--- a/app/views/epp/poll/poll_req.xml.builder
+++ b/app/views/epp/poll/poll_req.xml.builder
@@ -9,15 +9,11 @@ xml.epp_head do
xml.msg @message.body
end
- xml.resData do
- case @message.attached_obj_type
- when 'DomainTransfer'
- xml << render('epp/domains/partials/transfer', builder: xml, dt: @object)
- when 'DomainVersion'
- xml << render('epp/domains/partials/delete_complete', builder: xml, bye_bye: @object)
- end
- end if @object
-
+ if @message.attached_obj_type == 'DomainTransfer'
+ xml.resData do
+ xml << render('epp/domains/partials/transfer', builder: xml, dt: @object)
+ end if @object
+ end
render('epp/shared/trID', builder: xml)
end
end
diff --git a/app/views/layouts/admin/application.haml b/app/views/layouts/admin/application.haml
index 6baef9abf..9937937e6 100644
--- a/app/views/layouts/admin/application.haml
+++ b/app/views/layouts/admin/application.haml
@@ -55,7 +55,7 @@
%li= link_to t(:pricelists), admin_pricelists_path
%li= link_to t(:bank_statements), admin_bank_statements_path
%li= link_to t(:invoices), admin_invoices_path
- %li= link_to t(:account_activities), admin_account_activities_path
+ %li= link_to t(:account_activities), admin_account_activities_path(created_after: 'today')
%li.divider
%li.dropdown-header= t(:archive)
%li= link_to t(:domains_history), admin_domain_versions_path
@@ -68,8 +68,8 @@
%li= link_to t(:reserved_domains), admin_reserved_domains_path
%li= link_to t(:mail_templates), admin_mail_templates_path
-# %li= link_to t(:domains_history), admin_domain_versions_path
- %li= link_to t(:epp_logs), admin_epp_logs_path
- %li= link_to t(:repp_logs), admin_repp_logs_path
+ %li= link_to t(:epp_logs), admin_epp_logs_path(created_after: 'today')
+ %li= link_to t(:repp_logs), admin_repp_logs_path(created_after: 'today')
%li= link_to t(:que), '/admin/que'
- if signed_in?
diff --git a/app/views/mailers/contact_mailer/email_updated.html.erb b/app/views/mailers/contact_mailer/email_updated.html.erb
index cd5a75682..6c88f5009 100644
--- a/app/views/mailers/contact_mailer/email_updated.html.erb
+++ b/app/views/mailers/contact_mailer/email_updated.html.erb
@@ -1,10 +1,10 @@
Tere <%= @contact.name %>
-Kontakti <%= @contact.name %> eposti aadress on muudetud
+Kontakti <%= @contact.name %> e-posti aadress on muudetud
endine aadress: <%= @old_email %>
uus aadress: <%= @contact.email %>
-Eposti aadressile saadetakse domeenidega seotud infot seal hulgas kinnitustaotluseid omaniku vahetuse ja domeeni kustutamise korral. Palun veenduge, et muudatus on korrektne ning probleemide korral pöörduga oma registripidaja poole. Teie registripidaja on <%= @contact.registrar.name %>
+E-posti aadressile saadetakse domeeni toimingutega seotud infot, sealhulgas kinnitustaotlused omanikuvahetuse ja domeeni kustutamise korral. Palun veenduge, et muudatus on korrektne ning probleemide korral pöörduge oma registripidaja <%= @contact.registrar.name %> poole.
<% if @contact.related_domain_descriptions.present? %>
Muudatusega seotud domeenid:
@@ -16,14 +16,14 @@ Muudatusega seotud domeenid:
Kontaktandmed:
Nimi: <%= @contact.name %>
Isikukood: <%= @contact.ident %>
-Epost: <%= @contact.email %>
+E-post: <%= @contact.email %>
Tel: <%= @contact.phone %>
Tänav: <%= @contact.street %>
Linn: <%= @contact.city %>
Riik: <%= @contact.country %>
Lugupidamisega
-Eesti Interneti SA
+Eesti Interneti Sihtasutus
@@ -52,4 +52,4 @@ City: <%= @contact.city %>
Country: <%= @contact.country %>
Best Regards,
-Eesti Interneti SA
+Estonian Internet Foundation
diff --git a/app/views/mailers/contact_mailer/email_updated.text.erb b/app/views/mailers/contact_mailer/email_updated.text.erb
index a899c04c2..56cb319bc 100644
--- a/app/views/mailers/contact_mailer/email_updated.text.erb
+++ b/app/views/mailers/contact_mailer/email_updated.text.erb
@@ -1,10 +1,10 @@
Tere <%= @contact.name %>
-Kontakti <%= @contact.name %> eposti aadress on muudetud
+Kontakti <%= @contact.name %> e-posti aadress on muudetud
endine aadress: <%= @old_email %>
uus aadress: <%= @contact.email %>
-Eposti aadressile saadetakse domeenidega seotud infot seal hulgas kinnitustaotluseid omaniku vahetuse ja domeeni kustutamise korral. Palun veenduge, et muudatus on korrektne ning probleemide korral pöörduga oma registripidaja poole. Teie registripidaja on <%= @contact.registrar.name %>
+E-posti aadressile saadetakse domeeni toimingutega seotud infot, sealhulgas kinnitustaotlused omanikuvahetuse ja domeeni kustutamise korral. Palun veenduge, et muudatus on korrektne ning probleemide korral pöörduge oma registripidaja <%= @contact.registrar.name %> poole.
<% if @contact.related_domain_descriptions.present? %>
Muudatusega seotud domeenid:
@@ -16,14 +16,14 @@ Muudatusega seotud domeenid:
Kontaktandmed:
Nimi: <%= @contact.name %>
Isikukood: <%= @contact.ident %>
-Epost: <%= @contact.email %>
+E-post: <%= @contact.email %>
Tel: <%= @contact.phone %>
Tänav: <%= @contact.street %>
Linn: <%= @contact.city %>
Riik: <%= @contact.country %>
Lugupidamisega
-Eesti Interneti SA
+Eesti Interneti Sihtasutus
----------------------------------------------------------------------------------
@@ -52,4 +52,4 @@ City: <%= @contact.city %>
Country: <%= @contact.country %>
Best Regards,
-Eesti Interneti SA
+Estonian Internet Foundation
diff --git a/app/views/mailers/domain_mailer/delete_confirmation.html.erb b/app/views/mailers/domain_mailer/delete_confirmation.html.erb
index acc915787..5a7cada60 100644
--- a/app/views/mailers/domain_mailer/delete_confirmation.html.erb
+++ b/app/views/mailers/domain_mailer/delete_confirmation.html.erb
@@ -1,15 +1,15 @@
-Tere,
+Tere
Domeeni <%= @domain.name %> kustutamise taotlus on registreerija poolt kinnitatud. Domeen <%= @domain.name %> on peatatud ja kustub registrist.
Lugupidamisega
-Eesti Interneti SA
+Eesti Interneti Sihtasutus
Hi,
-Domain <%= @domain.name %> deletion confirmed and will be deleted.
+Domain <%= @domain.name %> deletion is confirmed by the registrant. Domain <%= @domain.name %> is suspended and will be deleted.
Best Regards,
Estonian Internet Foundation
diff --git a/app/views/mailers/domain_mailer/delete_confirmation.text.erb b/app/views/mailers/domain_mailer/delete_confirmation.text.erb
index a587b7f78..5d924eca7 100644
--- a/app/views/mailers/domain_mailer/delete_confirmation.text.erb
+++ b/app/views/mailers/domain_mailer/delete_confirmation.text.erb
@@ -1,15 +1,15 @@
-Tere,
+Tere
Domeeni <%= @domain.name %> kustutamise taotlus on registreerija poolt kinnitatud. Domeen <%= @domain.name %> on peatatud ja kustub registrist.
Lugupidamisega
-Eesti Interneti SA
+Eesti Interneti Sihtasutus
--------------------------------------
Hi,
-Domain <%= @domain.name %> deletion confirmed and will be deleted.
+Domain <%= @domain.name %> deletion is confirmed by the registrant. Domain <%= @domain.name %> is suspended and will be deleted.
Best Regards,
Estonian Internet Foundation
diff --git a/app/views/mailers/domain_mailer/expiration_reminder.html.erb b/app/views/mailers/domain_mailer/expiration_reminder.html.erb
index e29ca826e..9404838ae 100644
--- a/app/views/mailers/domain_mailer/expiration_reminder.html.erb
+++ b/app/views/mailers/domain_mailer/expiration_reminder.html.erb
@@ -14,13 +14,8 @@ Registripidaja: <%= @domain.registrar.name %>
Nimeserverid: <%= @domain.nameservers.join(', ') %>
Ülevaate kõikidest endaga seotud domeenidest saate registreerija portaalist. <%= ENV['registrant_url'] %>.
-Parimate soovidega
-
-Eesti Interneti Sihtasutus
-Paldiski mnt 80, 10617 Tallinn
-Registrikood: 90010019
-E-post: info@internet.ee
-Tel: +372 727 1000
+Lugupidamisega
+Eesti Interneti Sihtasutus
@@ -29,7 +24,7 @@ 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: :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/.
+To renew the domain registration, please contact your registrar <%= @domain.registrar.name %>. You can find the registrar's contacts at http://internet.ee/registrars.
The following data for the <%= @domain.name %> domain have been entered into the registry:
@@ -40,13 +35,8 @@ Registrar: <%= @domain.registrar.name %>
Name servers: <%= @domain.nameservers.join(', ') %>
You can find an overview of all your domains at the registrant's portal. <%= ENV['registrant_url'] %>.
-Sincerely
-
-Estonian Internet Foundation
-Paldiski mnt 80, 10617 Tallinn
-Business Registry no: 90010019
-E-mail: info@internet.ee
-Phone: +372 727 1000
+Best Regards,
+Estonian Internet Foundation
@@ -55,7 +45,7 @@ Phone: +372 727 1000
Доменное имя <%= @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/.
+Для продления регистрации домена просим обратиться к своему регистратору <%= @domain.registrar.name %>. Контактные данные регистраторов можно найти по адресу http://internet.ee/registratory.
Относительно домена <%= @domain.name %> в реестр внесены следующие данные:
@@ -66,10 +56,5 @@ Phone: +372 727 1000
Серверы доменных имен: <%= @domain.nameservers.join(', ') %>
Обзор всех связанных с Вами доменов можете получить на портале регистранта. <%= ENV['registrant_url'] %>.
-С наилучшими пожеланиями
-
-Целевое учреждение Eesti Internet
-Paldiski mnt 80, 10617 Tallinn
-Регистрационный код: 90010019
-Э-почта: info@internet.ee
-Тел.: +372 727 1000
\ No newline at end of file
+С наилучшими пожеланиями
+Целевое учреждение Eesti Internet
diff --git a/app/views/mailers/domain_mailer/expiration_reminder.text.erb b/app/views/mailers/domain_mailer/expiration_reminder.text.erb
index d16682ea5..5148df211 100644
--- a/app/views/mailers/domain_mailer/expiration_reminder.text.erb
+++ b/app/views/mailers/domain_mailer/expiration_reminder.text.erb
@@ -15,12 +15,7 @@ Nimeserverid: <%= @domain.nameservers.join(', ') %>
Ülevaate kõikidest endaga seotud domeenidest saate registreerija portaalist. <%= ENV['registrant_url'] %>.
Parimate soovidega
-
Eesti Interneti Sihtasutus
-Paldiski mnt 80, 10617 Tallinn
-Registrikood: 90010019
-E-post: info@internet.ee
-Tel: +372 727 1000
--------------------------------------
@@ -29,7 +24,7 @@ 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: :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/.
+To renew the domain registration, please contact your registrar <%= @domain.registrar.name %>. You can find the registrar's contacts at http://internet.ee/registrars.
The following data for the <%= @domain.name %> domain have been entered into the registry:
@@ -40,13 +35,8 @@ Registrar: <%= @domain.registrar.name %>
Name servers: <%= @domain.nameservers.join(', ') %>
You can find an overview of all your domains at the registrant's portal. <%= ENV['registrant_url'] %>.
-Sincerely
-
+Best Regards,
Estonian Internet Foundation
-Paldiski mnt 80, 10617 Tallinn
-Business Registry no: 90010019
-E-mail: info@internet.ee
-Phone: +372 727 1000
--------------------------------------
@@ -55,7 +45,7 @@ Phone: +372 727 1000
Доменное имя <%= @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/.
+Для продления регистрации домена просим обратиться к своему регистратору <%= @domain.registrar.name %>. Контактные данные регистраторов можно найти по адресу http://internet.ee/registratory.
Относительно домена <%= @domain.name %> в реестр внесены следующие данные:
@@ -67,9 +57,4 @@ Phone: +372 727 1000
Обзор всех связанных с Вами доменов можете получить на портале регистранта. <%= ENV['registrant_url'] %>.
С наилучшими пожеланиями
-
Целевое учреждение Eesti Internet
-Paldiski mnt 80, 10617 Tallinn
-Регистрационный код: 90010019
-Э-почта: info@internet.ee
-Тел.: +372 727 1000
\ No newline at end of file
diff --git a/app/views/mailers/domain_mailer/force_delete.html.erb b/app/views/mailers/domain_mailer/force_delete.html.erb
index 6f4f4cb27..64fa3d2e2 100644
--- a/app/views/mailers/domain_mailer/force_delete.html.erb
+++ b/app/views/mailers/domain_mailer/force_delete.html.erb
@@ -9,33 +9,33 @@
Lugupeetud domeeni <%= @domain.name %> kontaktisik
-Eesti Interneti SA (EIS) domeeniregistrisse on domeeni <%= @domain.name %> kohta kantud järgmised andmed:
+.ee domeeniregistrisse on domeeni <%= @domain.name %> kohta kantud järgmised andmed:
Registreerija nimi: <%= @domain.registrant %>
Registrikood: <%= @domain.registrant.try(:ident) %>
-EIS-le on saanud teatavaks, et juriidiline isik registrikoodiga <%= @domain.registrant.try(:ident) %> on äriregistrist kustutatud.
+Eesti Interneti Sihtasutusele (EIS) on saanud teatavaks, et juriidiline isik registrikoodiga <%= @domain.registrant.try(:ident) %> on äriregistrist kustutatud.
Kuivõrd äriregistrist kustutatud juriidiline isik ei saa olla domeeni registreerijaks, siis algatas EIS <%= l(Time.zone.now, format: :date) %> vastavalt Domeenireeglite (http://www.internet.ee/domeenid/) punktile 6.4 domeeni <%= @domain.name %> suhtes 30 päeva pikkuse kustutusmenetluse. Kustutamise käigus jääb domeen internetis kättesaadavaks.
-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.
+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 tuleb 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: :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
+Lisaküsimuste korral võtke palun ühendust oma registripidajaga <%= @domain.registrar %>. Registripidajate kontaktid leiate aadressilt http://www.internet.ee/registripidajad
Dear contact of <%= @domain.name %> domain
-The following details for domain name <%= @domain.name %> have been entered into the Estonian Internet Foundation's (EIF) domain registry:
+The following details for domain name <%= @domain.name %> have been entered into the .ee domain registry:
Registrant's name: <%= @domain.registrant %>
Registry code: <%= @domain.registrant.try(:ident) %>
-EIF has learned that the legal person with registry code <%= @domain.registrant.try(:ident) %> has been deleted from the Business Registry.
+Estonian Internet Foundation (EIS) has learned that the legal person with registry code <%= @domain.registrant.try(:ident) %> has been deleted from the Business Registry.
-As a terminated legal person cannot be the registrant of a domain, the EIF started the deletion process of <%= @domain.name %> domain on <%= l(Time.zone.now, format: :date) %> according to the Domain Regulation (http://www.internet.ee/domains/), using the 30-day delete procedure. The domain will remain available on the Internet during the delete procedure.
+As a terminated legal person cannot be the registrant of a domain, the EIS started the deletion process of <%= @domain.name %> domain on <%= l(Time.zone.now, format: :date) %> according to the Domain Regulation (http://www.internet.ee/domains/), using the 30-day delete procedure. The domain will remain available on the Internet during the delete procedure.
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.
@@ -65,9 +65,9 @@ Registry code: <%= @domain.registrant.try(:ident) %>
Lugupidamisega,
- Yours Sincerely,
+ Best Regards,
С уважением,
- Eesti Interneti SA
+ Eesti Interneti Sihtasutus
Estonian Internet Foundation
| |
diff --git a/app/views/mailers/domain_mailer/force_delete.text.erb b/app/views/mailers/domain_mailer/force_delete.text.erb
index d6369c8cb..f82cad6d2 100644
--- a/app/views/mailers/domain_mailer/force_delete.text.erb
+++ b/app/views/mailers/domain_mailer/force_delete.text.erb
@@ -1,32 +1,32 @@
Lugupeetud domeeni <%= @domain.name %> kontaktisik
-Eesti Interneti SA (EIS) domeeniregistrisse on domeeni <%= @domain.name %> kohta kantud järgmised andmed:
+.ee domeeniregistrisse on domeeni <%= @domain.name %> kohta kantud järgmised andmed:
Registreerija nimi: <%= @domain.registrant %>
Registrikood: <%= @domain.registrant.try(:ident) %>
-EIS-le on saanud teatavaks, et juriidiline isik registrikoodiga <%= @domain.registrant.try(:ident) %> on äriregistrist kustutatud.
+Eesti Interneti Sihtasutusele (EIS) on saanud teatavaks, et juriidiline isik registrikoodiga <%= @domain.registrant.try(:ident) %> on äriregistrist kustutatud.
Kuivõrd äriregistrist kustutatud juriidiline isik ei saa olla domeeni registreerijaks, siis algatas EIS <%= l(Time.zone.now, format: :date) %> vastavalt Domeenireeglite (http://www.internet.ee/domeenid/) punktile 6.4 domeeni <%= @domain.name %> suhtes 30 päeva pikkuse kustutusmenetluse. Kustutamise käigus jääb domeen internetis kättesaadavaks.
-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.
+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 tuleb 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: :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/
+Lisaküsimuste korral võtke palun ühendust oma registripidajaga <%= @domain.registrar %>. Registripidajate kontaktid leiate aadressilt http://www.internet.ee/registripidajad/
Dear contact of <%= @domain.name %> domain
-The following details for domain name <%= @domain.name %> have been entered into the Estonian Internet Foundation's (EIF) domain registry:
+The following details for domain name <%= @domain.name %> have been entered into the .ee domain registry:
Registrant's name: <%= @domain.registrant %>
Registry code: <%= @domain.registrant.try(:ident) %>
-EIF has learned that the legal person with registry code <%= @domain.registrant.try(:ident) %> has been deleted from the Business Registry.
+Estonian Internet Foundation (EIS) has learned that the legal person with registry code <%= @domain.registrant.try(:ident) %> has been deleted from the Business Registry.
-As a terminated legal person cannot be the registrant of a domain, the EIF started the deletion process of <%= @domain.name %> domain on <%= l(Time.zone.now, format: :date) %> according to the Domain Regulation (http://www.internet.ee/domains/), using the 30-day delete procedure. The domain will remain available on the Internet during the delete procedure.
+As a terminated legal person cannot be the registrant of a domain, the EIS started the deletion process of <%= @domain.name %> domain on <%= l(Time.zone.now, format: :date) %> according to the Domain Regulation (http://www.internet.ee/domains/), using the 30-day delete procedure. The domain will remain available on the Internet during the delete procedure.
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.
@@ -56,8 +56,8 @@ EIS стало известно, что юридическое лицо с ре
Lugupidamisega,
-Yours Sincerely,
+Best Regards,
С уважением,
---
-Eesti Interneti SA
+Eesti Interneti Sihtasutus
Estonian Internet Foundation
diff --git a/app/views/mailers/domain_mailer/pending_delete_expired_notification.html.erb b/app/views/mailers/domain_mailer/pending_delete_expired_notification.html.erb
index c5ed71c39..ae3dea358 100644
--- a/app/views/mailers/domain_mailer/pending_delete_expired_notification.html.erb
+++ b/app/views/mailers/domain_mailer/pending_delete_expired_notification.html.erb
@@ -1,15 +1,15 @@
-Tere,
+Tere
Domeeni <%= @domain.name %> kustutamise taotlust ei kinnitatud tähtaegselt registreerija <%= @domain.registrant_name %> poolt. Domeeni <%= @domain.name %> kustutamine on sellest tulenevalt tühistatud.
Lugupidamisega
-Eesti Interneti SA
+Eesti Interneti Sihtasutus
Hi,
-Domain <%= @domain.name %> deletion cancelled.
+Domain <%= @domain.name %> deletion was not approved in time by the registrant <%= @domain.registrant_name %>. Thus the deletion of domain <%= @domain.name %> is cancelled.
Best Regards,
Estonian Internet Foundation
diff --git a/app/views/mailers/domain_mailer/pending_delete_expired_notification.text.erb b/app/views/mailers/domain_mailer/pending_delete_expired_notification.text.erb
index 5ff510820..efd6eb449 100644
--- a/app/views/mailers/domain_mailer/pending_delete_expired_notification.text.erb
+++ b/app/views/mailers/domain_mailer/pending_delete_expired_notification.text.erb
@@ -1,15 +1,15 @@
-Tere,
+Tere
Domeeni <%= @domain.name %> kustutamise taotlust ei kinnitatud tähtaegselt registreerija <%= @domain.registrant_name %> poolt. Domeeni <%= @domain.name %> kustutamine on sellest tulenevalt tühistatud.
Lugupidamisega
-Eesti Interneti SA
+Eesti Interneti Sihtasutus
--------------------------------------
Hi,
-Domain <%= @domain.name %> deletion cancelled.
+Domain <%= @domain.name %> deletion was not approved in time by the registrant <%= @domain.registrant_name %>. Thus the deletion of domain <%= @domain.name %> is cancelled.
Best Regards,
Estonian Internet Foundation
diff --git a/app/views/mailers/domain_mailer/pending_delete_rejected_notification.html.erb b/app/views/mailers/domain_mailer/pending_delete_rejected_notification.html.erb
index e89a02327..9f381b2c5 100644
--- a/app/views/mailers/domain_mailer/pending_delete_rejected_notification.html.erb
+++ b/app/views/mailers/domain_mailer/pending_delete_rejected_notification.html.erb
@@ -1,15 +1,15 @@
-Tere,
+Tere
-Domeeni <%= @domain.name %> kustutamise taotlus on registreerija <%= @domain.registrar_name %> poolt tagasi lükatud.
+Domeeni <%= @domain.name %> kustutamise taotlus on registreerija <%= @domain.registrant_name %> poolt tagasi lükatud.
Lugupidamisega
-Eesti Interneti SA
+Eesti Interneti Sihtasutus
Hi,
-Domain <%= @domain.name %> deletion rejected.
+Domain <%= @domain.name %> deletion was rejected by the registrant <%= @domain.registrant_name %>.
Best Regards,
Estonian Internet Foundation
diff --git a/app/views/mailers/domain_mailer/pending_delete_rejected_notification.text.erb b/app/views/mailers/domain_mailer/pending_delete_rejected_notification.text.erb
index d3600a3c7..8d49983a1 100644
--- a/app/views/mailers/domain_mailer/pending_delete_rejected_notification.text.erb
+++ b/app/views/mailers/domain_mailer/pending_delete_rejected_notification.text.erb
@@ -1,15 +1,15 @@
-Tere,
+Tere
-Domeeni <%= @domain.name %> kustutamise taotlus on registreerija <%= @domain.registrar_name %> poolt tagasi lükatud.
+Domeeni <%= @domain.name %> kustutamise taotlus on registreerija <%= @domain.registrant_name %> poolt tagasi lükatud.
Lugupidamisega
-Eesti Interneti SA
+Eesti Interneti Sihtasutus
--------------------------------------
Hi,
-Domain <%= @domain.name %> deletion rejected.
+Domain <%= @domain.name %> deletion was rejected by the registrant <%= @domain.registrant_name %>.
Best Regards,
Estonian Internet Foundation
diff --git a/app/views/mailers/domain_mailer/pending_deleted.html.erb b/app/views/mailers/domain_mailer/pending_deleted.html.erb
index 972318ee4..6d0a47f57 100644
--- a/app/views/mailers/domain_mailer/pending_deleted.html.erb
+++ b/app/views/mailers/domain_mailer/pending_deleted.html.erb
@@ -1,25 +1,25 @@
-Tere,
+Tere
-Registrisse laekus taotlus domeeni <%= @domain.name %> kustutamiseks. Palun veenduge, et muudatus on korrektne ning probleemide korral pöörduge oma registripidaja poole. Teie registripidaja on <%= @domain.registrar_name %>
+Registrisse laekus taotlus domeeni <%= @domain.name %> kustutamiseks. Palun veenduge, et muudatus on korrektne ning probleemide korral pöörduge oma registripidaja <%= @domain.registrar_name %> poole.
-Muudatuse kinnitamiseks külastage palun allolevat võrgulehekülge, kontrollige uuesti üle muudatuse andmed ning vajutage nuppu kinnitan:
+Muudatuse kinnitamiseks külastage palun allolevat lehekülge, kontrollige uuesti üle muudatuse andmed ning vajutage nuppu kinnitan.
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.
<%= link_to @verification_url, @verification_url %>
Lugupidamisega
-Eesti Interneti SA
+Eesti Interneti Sihtasutus
Hi,
-Application for deletion of your domain <%= @domain.name %> has been filed. Please make sure that the application is correct. Incase of problems please turn to your registrar. Your registrar is <%= @domain.registrar_name %>
+Application for deletion of your domain <%= @domain.name %> has been filed. Please make sure that the application is correct. Incase of problems please contact your registrar <%= @domain.registrar_name %>.
To confirm the update please visit this website, once again review the data and press approve:
<%= link_to @verification_url, @verification_url %>
-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.
+The application will remain in pending status for <%= Setting.expire_pending_confirmation %> hrs and will be automatically rejected if it is not approved nor rejected before.
Best Regards,
Estonian Internet Foundation
diff --git a/app/views/mailers/domain_mailer/pending_deleted.text.erb b/app/views/mailers/domain_mailer/pending_deleted.text.erb
index 80e01945a..cc49cbbb0 100644
--- a/app/views/mailers/domain_mailer/pending_deleted.text.erb
+++ b/app/views/mailers/domain_mailer/pending_deleted.text.erb
@@ -1,25 +1,25 @@
-Tere,
+Tere
-Registrisse laekus taotlus domeeni <%= @domain.name %> kustutamiseks. Palun veenduge, et muudatus on korrektne ning probleemide korral pöörduge oma registripidaja poole. Teie registripidaja on <%= @domain.registrar_name %>
+Registrisse laekus taotlus domeeni <%= @domain.name %> kustutamiseks. Palun veenduge, et muudatus on korrektne ning probleemide korral pöörduge oma registripidaja <%= @domain.registrar_name %> poole.
-Muudatuse kinnitamiseks külastage palun allolevat võrgulehekülge, kontrollige uuesti üle muudatuse andmed ning vajutage nuppu kinnitan:
+Muudatuse kinnitamiseks külastage palun allolevat lehekülge, kontrollige uuesti üle muudatuse andmed ning vajutage nuppu kinnitan.
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.
<%= link_to @verification_url, @verification_url %>
Lugupidamisega
-Eesti Interneti SA
+Eesti Interneti Sihtasutus
--------------------------------------
Hi,
-Application for deletion of your domain <%= @domain.name %> has been filed. Please make sure that the application is correct. Incase of problems please turn to your registrar. Your registrar is <%= @domain.registrar_name %>
+Application for deletion of your domain <%= @domain.name %> has been filed. Please make sure that the application is correct. Incase of problems please contact your registrar <%= @domain.registrar_name %>.
To confirm the update please visit this website, once again review the data and press approve:
<%= link_to @verification_url, @verification_url %>
-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.
+The application will remain in pending status for <%= Setting.expire_pending_confirmation %> hrs and will be automatically rejected if it is not approved nor rejected before.
Best Regards,
Estonian Internet Foundation
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 cfa539736..800ff33e1 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,19 +1,19 @@
-Tere,
+Tere
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 <%= @params[:registrar_name] %>, kelle kontaktid leiate http://internet.ee/registripidajad/akrediteeritud-registripidajad
+Küsimuste korral palun võtke ühendust oma registripidajaga <%= @params[:registrar_name] %>. Registripidajate kontaktid leiate aadressilt www.internet.ee/registripidajad.
Lugupidamisega
-Eesti Interneti SA
+Eesti Interneti Sihtasutus
Hi,
-Domain registrant change has been expired for the domain <%= @params[:name] %>.
+Domain registrant change request has been expired for the domain <%= @params[:name] %>.
-Please contact to your registrar <%= @params[:registrar_name] %> if you have any questions.
+Please contact to your registrar <%= @params[:registrar_name] %> if you have any questions. You can find the registrar's contacts at http://internet.ee/registrars.
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 626583562..88ddefe9d 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,19 +1,19 @@
-Tere,
+Tere
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 <%= @params[:registrar_name] %>, kelle kontaktid leiate http://internet.ee/registripidajad/akrediteeritud-registripidajad
+Küsimuste korral palun võtke ühendust oma registripidajaga <%= @params[:registrar_name] %>. Registripidajate kontaktid leiate aadressilt www.internet.ee/registripidajad.
Lugupidamisega
-Eesti Interneti SA
+Eesti Interneti Sihtasutus
--------------------------------------
Hi,
-Domain registrant change has been expired for the domain <%= @params[:name] %>.
+Domain registrant change request has been expired for the domain <%= @params[:name] %>.
-Please contact to your registrar <%= @params[:registrar_name] %> if you have any questions.
+Please contact to your registrar <%= @params[:registrar_name] %> if you have any questions. You can find the registrar's contacts at http://internet.ee/registrars.
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 07de23117..a58aaef12 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,8 +1,8 @@
-Tere,
+Tere
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 <%= @params[:registrar_name] %>
+Palun veenduge, et muudatus on korrektne ning probleemide korral pöörduge oma registripidaja <%= @params[:registrar_name] %> poole.
Uue registreerija andmed:
Nimi: <%= @params[:registrant_name] %>
@@ -15,14 +15,14 @@ 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 <%= @params[:old_registrant_name] %> omanikuvahetuse tähtaegselt kinnitab.
+Juhime Teie tähelepanu asjaolule, et omanikuvahetuse protseduur viiakse lõpule vaid juhul, kui domeeni hetkel kehtiv registreerija <%= @params[:old_registrant_name] %> omanikuvahetuse tähtaegselt kinnitab.
-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.
+Juhul kui <%= @params[:old_registrant_name] %> lükkab omanikuvahetuse 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 <%= @params[:registrar_name] %>, kelle kontaktid leiate http://internet.ee/registripidajad/akrediteeritud-registripidajad
+Küsimuste korral palun võtke ühendust registripidajaga <%= @params[:registrar_name] %>. Registripidajate kontaktid leiate aadressilt www.internet.ee/registripidajad.
Lugupidamisega
-Eesti Interneti SA
+Eesti Interneti Sihtasutus
@@ -30,6 +30,8 @@ Hi,
Registrant change process for the domain <%= @params[:name] %> has been started.
+Please verify the details of the following change request. In case of problems contact your registrar <%= @params[:registrar_name] %>
+
New registrant:
Name: <%= @params[:registrant_name] %>
<% if @params[:registrant_priv] %>
@@ -41,7 +43,11 @@ Street: <%= @params[:registrant_street] %>
City: <%= @params[:registrant_city] %>
Country: <%= @params[:registrant_country] %>
-Please contact to your registrar <%= @params[:registrar_name] %> if you have any questions.
+The registrant change procedure will be completed only after the current registrant <%= @params[:old_registrant_name] %> has approved it.
+
+Change request will be cancelled in case <%= @params[:old_registrant_name] %> rejects or does not approve it in <%= Setting.expire_pending_confirmation %> hours.
+
+Please contact registrar <%= @params[:registrar_name] %> in case of questions. You can find the registrar's contacts at http://internet.ee/registrars.
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 24005a58a..9c1a6aebe 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,8 +1,8 @@
-Tere,
+Tere
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 <%= @params[:registrar_name] %>
+Palun veenduge, et muudatus on korrektne ning probleemide korral pöörduge oma registripidaja <%= @params[:registrar_name] %> poole.
Uue registreerija andmed:
Nimi: <%= @params[:registrant_name] %>
@@ -15,14 +15,14 @@ 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 <%= @params[:old_registrant_name] %> omanikuvahetuse tähtaegselt kinnitab.
+Juhime Teie tähelepanu asjaolule, et omanikuvahetuse protseduur viiakse lõpule vaid juhul, kui domeeni hetkel kehtiv registreerija <%= @params[:old_registrant_name] %> omanikuvahetuse tähtaegselt kinnitab.
-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.
+Juhul kui <%= @params[:old_registrant_name] %> lükkab omanikuvahetuse 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 <%= @params[:registrar_name] %>, kelle kontaktid leiate http://internet.ee/registripidajad/akrediteeritud-registripidajad
+Küsimuste korral palun võtke ühendust registripidajaga <%= @params[:registrar_name] %>. Registripidajate kontaktid leiate aadressilt www.internet.ee/registripidajad.
Lugupidamisega
-Eesti Interneti SA
+Eesti Interneti Sihtasutus
--------------------------------------
@@ -30,6 +30,8 @@ Hi,
Registrant change process for the domain <%= @params[:name] %> has been started.
+Please verify the details of the following change request. In case of problems contact your registrar <%= @params[:registrar_name] %>
+
New registrant:
Name: <%= @params[:registrant_name] %>
<% if @params[:registrant_priv] %>
@@ -41,7 +43,11 @@ Street: <%= @params[:registrant_street] %>
City: <%= @params[:registrant_city] %>
Country: <%= @params[:registrant_country] %>
-Please contact to your registrar <%= @params[:registrar_name] %> if you have any questions.
+The registrant change procedure will be completed only after the current registrant <%= @params[:old_registrant_name] %> has approved it.
+
+Change request will be cancelled in case <%= @params[:old_registrant_name] %> rejects or does not approve it in <%= Setting.expire_pending_confirmation %> hours.
+
+Please contact registrar <%= @params[:registrar_name] %> in case of questions. You can find the registrar's contacts at http://internet.ee/registrars.
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 1f9acf666..0dca95ee9 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,19 +1,19 @@
-Tere,
+Tere
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
+Küsimuste korral võtke palun ühendust oma registripidajaga <%= @params[:registrar_name] %>. Registripidajate kontaktid leiate aadressilt www.internet.ee/registripidajad.
-Lugupidamisega,
-Eesti Interneti SA
+Lugupidamisega
+Eesti Interneti Sihtasutus
Hi,
-Registrant change was declined for the domain <%= @params[:name] %>.
+Registrant change for the domain <%= @params[:name] %> was rejected by the registrant <%= @params[:old_registrant_name] %>.
-Please contact to your registrar <%= @params[:registrar_name] %> if you have any questions.
+Please contact your registrar <%= @params[:registrar_name] %> if you have any questions. You can find the registrar's contacts at http://internet.ee/registrars.
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 38a83e1b3..bf9ecc80a 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,19 +1,20 @@
-Tere,
+Tere
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
+Küsimuste korral võtke palun ühendust oma registripidajaga <%= @params[:registrar_name] %>. Registripidajate kontaktid leiate aadressilt www.internet.ee/registripidajad.
Lugupidamisega
-Eesti Interneti SA
+Eesti Interneti Sihtasutus
--------------------------------------
Hi,
-Registrant change was declined for the domain <%= @params[:name] %>.
+Registrant change for the domain <%= @params[:name] %> was rejected by the registrant <%= @params[:old_registrant_name] %>
+.
-Please contact to your registrar <%= @params[:registrar_name] %> if you have any questions.
+Please contact your registrar <%= @params[:registrar_name] %> if you have any questions. You can find the registrar's contacts at http://internet.ee/registrars.
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 dc26a9c1c..9015a8945 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,6 +1,6 @@
-Tere,
+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] %>
+Registrisse laekus taotlus domeeni <%= @params[:name] %> registreerija vahetuseks. Palun veenduge, et muudatus on korrektne ning probleemide korral pöörduge oma registripidaja <%= @params[:registrar_name] %> poole.
Uue registreerija andmed:
Nimi: <%= @params[:registrant_name] %>
@@ -13,14 +13,14 @@ 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.
+Taotlus on aktiivne <%= Setting.expire_pending_confirmation %> tundi ja lükatakse automaatselt tagasi kui te seda enne 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:
+Muudatuse kinnitamiseks külastage palun allolevat lehekülge, kontrollige uuesti üle muudatuse andmed ning vajutage nuppu kinnitan:
<%= link_to @params[:verification_url], @params[:verification_url] %>
Lugupidamisega
-Eesti Interneti SA
+Eesti Interneti Sihtasutus
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 142004bb6..d2ee28479 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,6 +1,6 @@
-Tere,
+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] %>
+Registrisse laekus taotlus domeeni <%= @params[:name] %> registreerija vahetuseks. Palun veenduge, et muudatus on korrektne ning probleemide korral pöörduge oma registripidaja <%= @params[:registrar_name] %> poole.
Uue registreerija andmed:
Nimi: <%= @params[:registrant_name] %>
@@ -13,12 +13,12 @@ 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:
+Taotlus on aktiivne <%= Setting.expire_pending_confirmation %> tundi ja lükatakse automaatselt tagasi kui te seda enne ei kinnita või tagasi lükka.
+Muudatuse kinnitamiseks külastage palun allolevat lehekülge, kontrollige uuesti üle muudatuse andmed ning vajutage nuppu kinnitan:
<%= @params[:verification_url] %>
Lugupidamisega
-Eesti Interneti SA
+Eesti Interneti Sihtasutus
--------------------------------------
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 c7d464f43..dc493969c 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,39 +1,39 @@
-Tere,
+Tere
-Domeeni <%= @params[:name] %> registreerija vahetuse taotlus on kinnitatud ning andmed registris uuendatud.
+Domeeni <%= @domain.name %> registreerija vahetuse taotlus on kinnitatud ning andmed registris uuendatud.
Uue registreerija andmed:
-Nimi: <%= @params[:registrant_name] %>
-<% if @params[:registrant_priv] %>
-Isikukood: <%= @params[:registrant_ident] %>
+Nimi: <%= @new_registrant.name %>
+<% if @new_registrant.priv? %>
+ Isikukood: <%= @new_registrant.ident %>
<% else %>
-Äriregistrikood: <%= @params[:registrant_ident] %>
+ Äriregistrikood: <%= @new_registrant.ident %>
<% end %>
-Epost: <%= @params[:registrant_email] %>
-Tänav: <%= @params[:registrant_street] %>
-Linn: <%= @params[:registrant_city] %>
-Riik: <%= @params[:registrant_country] %>
+Epost: <%= @new_registrant.email %>
+Tänav: <%= @new_registrant.street %>
+Linn: <%= @new_registrant.city %>
+Riik: <%= @new_registrant.country.name %>
Lugupidamisega
-Eesti Interneti SA
+Eesti Interneti Sihtasutus
Hi,
-Process for changing registrant of the domain <%= @params[:name] %> has been approved and the data in the registry is updated.
+Process for changing registrant of the domain <%= @domain.name %> has been approved and the data in the registry is updated.
New registrant:
-Name: <%= @params[:registrant_name] %>
-<% if @params[:registrant_priv] %>
-Personal code: <%= @params[:registrant_ident] %>
+Name: <%= @new_registrant.name %>
+<% if @new_registrant.priv? %>
+ Personal code: <%= @new_registrant.ident %>
<% else %>
-Business Registry code: <%= @params[:registrant_ident] %>
+ Business Registry code: <%= @new_registrant.ident %>
<% end %>
-E-mail: <%= @params[:registrant_email] %>
-Street: <%= @params[:registrant_street] %>
-City: <%= @params[:registrant_city] %>
-Country: <%= @params[:registrant_country] %>
+E-mail: <%= @new_registrant.email %>
+Street: <%= @new_registrant.street %>
+City: <%= @new_registrant.city %>
+Country: <%= @new_registrant.country.name %>
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 115655897..0fd6a609e 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,39 +1,41 @@
-Tere,
+Tere
-Domeeni <%= @params[:name] %> registreerija vahetuse taotlus on kinnitatud ning andmed registris uuendatud.
+Domeeni <%= @domain.name %> registreerija vahetuse taotlus on kinnitatud ning andmed registris uuendatud.
Uue registreerija andmed:
-Nimi: <%= @params[:registrant_name] %>
-<% if @params[:registrant_priv] %>
-Isikukood: <%= @params[:registrant_ident] %>
+Nimi: <%= @new_registrant.name %>
+
+<% if @new_registrant.priv? %>
+ Isikukood: <%= @new_registrant.ident %>
<% else %>
-Äriregistrikood: <%= @params[:registrant_ident] %>
+ Äriregistrikood: <%= @new_registrant.ident %>
<% end %>
-Epost: <%= @params[:registrant_email] %>
-Tänav: <%= @params[:registrant_street] %>
-Linn: <%= @params[:registrant_city] %>
-Riik: <%= @params[:registrant_country] %>
+Epost: <%= @new_registrant.email %>
+Tänav: <%= @new_registrant.street %>
+Linn: <%= @new_registrant.city %>
+Riik: <%= @new_registrant.country.name %>
Lugupidamisega
-Eesti Interneti SA
+Eesti Interneti Sihtasutus
--------------------------------------
Hi,
-Process for changing registrant of the domain <%= @params[:name] %> has been approved and the data in the registry is updated.
+Process for changing registrant of the domain <%= @domain.name %> has been approved and the data in the registry is updated.
New registrant:
-Name: <%= @params[:registrant_name] %>
-<% if @params[:registrant_priv] %>
-Personal code: <%= @params[:registrant_ident] %>
+Name: <%= @new_registrant.name %>
+
+<% if @new_registrant.priv? %>
+ Personal code: <%= @new_registrant.ident %>
<% else %>
-Business Registry code: <%= @params[:registrant_ident] %>
+ Business Registry code: <%= @new_registrant.ident %>
<% end %>
-E-mail: <%= @params[:registrant_email] %>
-Street: <%= @params[:registrant_street] %>
-City: <%= @params[:registrant_city] %>
-Country: <%= @params[:registrant_country] %>
+E-mail: <%= @new_registrant.email %>
+Street: <%= @new_registrant.street %>
+City: <%= @new_registrant.city %>
+Country: <%= @new_registrant.country.name %>
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 b41e1f1eb..428994e36 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,39 +1,39 @@
-Tere,
+Tere
-Domeeni <%= @params[:name] %> registreerija vahetuse taotlus on kinnitatud ning andmed registris uuendatud.
+Domeeni <%= @domain.name %> registreerija vahetuse taotlus on kinnitatud ning andmed registris uuendatud.
Uue registreerija andmed:
-Nimi: <%= @params[:new_registrant_name] %>
-<% if @params[:registrant_priv] %>
-Isikukood: <%= @params[:registrant_ident] %>
+Nimi: <%= @new_registrant.name %>
+<% if @new_registrant.priv? %>
+Isikukood: <%= @new_registrant.ident %>
<% else %>
-Äriregistrikood: <%= @params[:registrant_ident] %>
+Äriregistrikood: <%= @new_registrant.ident %>
<% end %>
-Epost: <%= @params[:registrant_email] %>
-Tänav: <%= @params[:registrant_street] %>
-Linn: <%= @params[:registrant_city] %>
-Riik: <%= @params[:registrant_country] %>
+Epost: <%= @new_registrant.email %>
+Tänav: <%= @new_registrant.street %>
+Linn: <%= @new_registrant.city %>
+Riik: <%= @new_registrant.country.name %>
Lugupidamisega
-Eesti Interneti SA
+Eesti Interneti Sihtasutus
Hi,
-Process for changing registrant of the domain <%= @params[:name] %> has been approved and the data in the registry is updated.
+Process for changing registrant of the domain <%= @domain.name %> has been approved and the data in the registry is updated.
New registrant:
-Name: <%= @params[:new_registrant_name] %>
-<% if @params[:registrant_priv] %>
-Personal code: <%= @params[:registrant_ident] %>
+Name: <%= @new_registrant.name %>
+<% if @new_registrant.priv? %>
+Personal code: <%= @new_registrant.ident %>
<% else %>
-Business Registry code: <%= @params[:registrant_ident] %>
+Business Registry code: <%= @new_registrant.ident %>
<% end %>
-E-mail: <%= @params[:registrant_email] %>
-Street: <%= @params[:registrant_street] %>
-City: <%= @params[:registrant_city] %>
-Country: <%= @params[:registrant_country] %>
+E-mail: <%= @new_registrant.email %>
+Street: <%= @new_registrant.street %>
+City: <%= @new_registrant.city %>
+Country: <%= @new_registrant.country.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 c2efa5af9..a99eca6ba 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,41 +1,41 @@
-Tere,
+Tere
-Domeeni <%= @params[:name] %> registreerija vahetuse taotlus on kinnitatud ning andmed registris uuendatud.
+Domeeni <%= @domain.name %> registreerija vahetuse taotlus on kinnitatud ning andmed registris uuendatud.
Uue registreerija andmed:
-Nimi: <%= @params[:new_registrant_name] %>
+Nimi: <%= @new_registrant.name %>
-<% if @params[:registrant_priv] %>
-Isikukood: <%= @params[:registrant_ident] %>
+<% if @new_registrant.priv? %>
+Isikukood: <%= @new_registrant.ident %>
<% else %>
-Äriregistrikood: <%= @params[:registrant_ident] %>
+Äriregistrikood: <%= @new_registrant.ident %>
<% end %>
-Epost: <%= @params[:registrant_email] %>
-Tänav: <%= @params[:registrant_street] %>
-Linn: <%= @params[:registrant_city] %>
-Riik: <%= @params[:registrant_country] %>
+Epost: <%= @new_registrant.email %>
+Tänav: <%= @new_registrant.street %>
+Linn: <%= @new_registrant.city %>
+Riik: <%= @new_registrant.country.name %>
Lugupidamisega
-Eesti Interneti SA
+Eesti Interneti Sihtasutus
--------------------------------------
Hi,
-Process for changing registrant of the domain <%= @params[:name] %> has been approved and the data in the registry is updated.
+Process for changing registrant of the domain <%= @domain.name %> has been approved and the data in the registry is updated.
New registrant:
-Name: <%= @params[:new_registrant_name] %>
+Name: <%= @new_registrant.name %>
-<% if @params[:registrant_priv] %>
-Personal code: <%= @params[:registrant_ident] %>
+<% if @new_registrant.priv? %>
+Personal code: <%= @new_registrant.ident %>
<% else %>
-Business Registry code: <%= @params[:registrant_ident] %>
+Business Registry code: <%= @new_registrant.ident %>
<% end %>
-E-mail: <%= @params[:registrant_email] %>
-Street: <%= @params[:registrant_street] %>
-City: <%= @params[:registrant_city] %>
-Country: <%= @params[:registrant_country] %>
+E-mail: <%= @new_registrant.email %>
+Street: <%= @new_registrant.street %>
+City: <%= @new_registrant.city %>
+Country: <%= @new_registrant.country.name %>
Best Regards,
Estonian Internet Foundation
diff --git a/app/views/registrant/sessions/login.haml b/app/views/registrant/sessions/login.haml
index 06e26c26d..c24b19aca 100644
--- a/app/views/registrant/sessions/login.haml
+++ b/app/views/registrant/sessions/login.haml
@@ -2,6 +2,9 @@
.form-signin.col-md-6.center-block.text-center
%h2.form-signin-heading.text-center= t(:log_in)
%hr
+ .row
+ =t "only_estonian_residets_can_signin"
+ %br
= link_to '/registrant/login/mid' do
= image_tag 'mid.gif'
= link_to '/registrant/id', method: :post do
diff --git a/app/views/registrar/domains/delete.haml b/app/views/registrar/domains/delete.haml
index 13953a6e3..ab1bdfa31 100644
--- a/app/views/registrar/domains/delete.haml
+++ b/app/views/registrar/domains/delete.haml
@@ -6,6 +6,12 @@
.panel-heading.clearfix
= t(:legal_document)
.panel-body
+ .form-group
+ .col-md-4.control-label
+ = label_tag 'domain[verified]', t(:verified)
+ .col-md-6
+ = check_box_tag 'domain[verified]', '1', params[:verified].eql?('1'), onclick: "return (confirm('#{t(:verified_confirm)}') ? true : false);"
+
.form-group
.col-md-4.control-label
= label_tag 'domain[legal_document]', t(:legal_document), class: 'required'
diff --git a/app/views/registrar/domains/form_partials/_general.haml b/app/views/registrar/domains/form_partials/_general.haml
index e4c124803..91ae7462f 100644
--- a/app/views/registrar/domains/form_partials/_general.haml
+++ b/app/views/registrar/domains/form_partials/_general.haml
@@ -24,6 +24,13 @@
= text_field_tag 'domain[registrant_helper]', contacts.find_by(code: @domain_params[:registrant]).try(:search_name),
class: 'form-control', data: {autocomplete: search_contacts_registrar_domains_path}, required: true
+ - if params[:domain_name]
+ .form-group
+ .col-md-3.control-label
+ = label_tag :verified, t(:verified)
+ .col-md-7
+ = check_box_tag 'domain[verified]', '1', @domain_params[:verified].eql?('1'), onclick: "return (confirm('#{t(:verified_confirm)}') ? true : false);"
+
- unless params[:domain_name]
.form-group
.col-md-3.control-label
diff --git a/app/views/registrar/domains/partials/_contacts.haml b/app/views/registrar/domains/partials/_contacts.haml
index 536f256b7..b94f99ee2 100644
--- a/app/views/registrar/domains/partials/_contacts.haml
+++ b/app/views/registrar/domains/partials/_contacts.haml
@@ -6,10 +6,12 @@
%thead
%tr
%th{class: 'col-xs-4'}= t(:type)
- %th{class: 'col-xs-8'}= t(:id)
+ %th{class: 'col-xs-4'}= t(:name)
+ %th{class: 'col-xs-4'}= t(:id)
%tbody
- @data.css('contact').each do |x|
+ - registrant = Contact.find_by_code(x.text)
%tr
%td= x['type']
- %td= x.text
-
+ %td= registrant.name
+ %td= x.text
\ No newline at end of file
diff --git a/app/views/registrar/domains/partials/_general.haml b/app/views/registrar/domains/partials/_general.haml
index 4eb5285e7..5381d0865 100644
--- a/app/views/registrar/domains/partials/_general.haml
+++ b/app/views/registrar/domains/partials/_general.haml
@@ -10,8 +10,9 @@
%dt= t(:registrar)
%dd= @data.css('clID').text
+ - registrant = Contact.find_by_code(@data.css('registrant').text)
%dt= t(:registrant)
- %dd= @data.css('registrant').text
+ %dd= "#{registrant.name} (#{@data.css('registrant').text})"
%dt= t(:registered)
%dd= @data.css('crDate').text
diff --git a/app/views/shared/_title.haml b/app/views/shared/_title.haml
index 3832a7664..c6ab477fa 100644
--- a/app/views/shared/_title.haml
+++ b/app/views/shared/_title.haml
@@ -4,7 +4,7 @@
.row
.col-sm-6
%h1.text-center-xs
- = truncate(name, length: 35)
+ = content_for?(:page_name) ? yield(:page_name) : truncate(name, length: 35)
.col-sm-6
%h1.text-right.text-center-xs
= yield :actions
diff --git a/config/deploy-example.rb b/config/deploy-example.rb
index 33bf49247..536775727 100644
--- a/config/deploy-example.rb
+++ b/config/deploy-example.rb
@@ -235,7 +235,7 @@ end
desc 'Loads current commit hash'
task load_commit_hash: :environment do
queue! %(
- echo "CURRENT_COMMIT_HASH = '$(git --git-dir #{deploy_to}/scm rev-parse --short HEAD)'" > \
+ echo "CURRENT_COMMIT_HASH = '$(git --git-dir #{deploy_to}/scm rev-parse --short #{branch})'" > \
#{deploy_to}/shared/config/initializers/current_commit_hash.rb
)
end
diff --git a/config/initializers/initial_settings.rb b/config/initializers/initial_settings.rb
index eb333943f..b6a60c5e8 100644
--- a/config/initializers/initial_settings.rb
+++ b/config/initializers/initial_settings.rb
@@ -32,6 +32,9 @@ if con.present? && con.table_exists?('settings')
Setting.save_default(:invoice_number_min, 131050)
Setting.save_default(:invoice_number_max, 149999)
+ Setting.save_default(:directo_monthly_number_min, 309901)
+ Setting.save_default(:directo_monthly_number_max, 309999)
+ Setting.save_default(:directo_monthly_number_last, 309901)
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)
diff --git a/config/locales/devise.en.yml b/config/locales/devise.en.yml
index e419f7794..9524e860c 100644
--- a/config/locales/devise.en.yml
+++ b/config/locales/devise.en.yml
@@ -14,7 +14,7 @@ en:
last_attempt: "You have one more attempt before your account is locked."
not_found_in_database: "Invalid email address or password."
timeout: "Your session expired. Please sign in again to continue."
- unauthenticated: "You need to sign in or sign up before continuing."
+ unauthenticated: "You need to sign in."
unconfirmed: "You have to confirm your email address before continuing."
mailer:
confirmation_instructions:
diff --git a/config/locales/en.yml b/config/locales/en.yml
index c4bc211c1..885e79424 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -52,6 +52,9 @@ en:
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"
+ ident_type:
+ ident_type_invalid: 'Ident type is invalid'
+ epp_ident_type_invalid: 'Object status prohibits operation: ident_type of contact %{code} is invalid'
domains:
exist: 'Object association prohibits operation'
statuses:
@@ -77,6 +80,7 @@ en:
registrant:
blank: 'Registrant is missing'
not_found: 'Registrant not found'
+ cannot_be_missing: 'Parameter value policy error: registrant cannot be missing'
domain_contacts:
invalid: 'Contacts are invalid'
not_found: 'Contact was not found'
@@ -130,8 +134,9 @@ en:
hostname:
invalid: 'Hostname is invalid'
taken: 'Nameserver already exists on this domain'
+ puny_to_long: 'Hostname puny label is too long (maximum is 63 characters)'
ipv4:
- blank: 'IPv4 is missing'
+ blank: 'IP is missing'
invalid: 'IPv4 is invalid'
ipv6:
invalid: 'IPv6 is invalid'
@@ -206,6 +211,10 @@ en:
blank: 'Algorithm is missing'
auth_info_pw:
blank: 'Password is missing'
+ legal_document:
+ attributes:
+ body:
+ length: 'Parameter value policy error: legalDocument size should be more than 3kB'
attributes:
@@ -355,6 +364,7 @@ en:
contact: 'Contact'
credit_balance: 'Credit balance'
starting_balance: 'Starting balance'
+ destroyed: 'Destroyed'
domain_transfer_requested: 'Domain transfer requested!'
domain_transfer_approved: 'Domain transfer approved!'
@@ -728,13 +738,13 @@ en:
no_invoices_were_binded: 'No invoices were binded'
domain_general_help:
The Administrative Contact
- is an Estonian citizen or a citizen of another country in the European Union, European Economic Area or the Swiss Confederation with a registered place of residence in Estonia and an Estonian personal identification code who has the right to represent the registering entity in accordance with the current legislation of the Republic of Estonia (member of the management board) or on the basis of the written authorisation issued by a member of the management board. The Administrative Contact has the right to sign and submit in the name of the registering entity any applications connected with the domain name and also to receive and forward any information concerning the domain name(s). The Administrative Contact is responsible for the correctness and authenticity of the data and documents submitted about itself and the registering entity.
+ is a natural person who is a legal representative of the Registrant or whom the Registrant has authorised in writing (authorised representative). The Administrative Contact does not have the right to delegate the authorisation. The Administrative Contact has the right to sign and submit Domain Name-related applications on behalf of the Registrant and to receive and forward any information pertaining to the Domain Name(s). The Administrative Contact is responsible for the correctness and genuiness of the data and documents submitted by him/her about the Registrant and about himself/herself. Registrant is obliged to guarantee that the person appointed as the Administrative Contact agrees to fulfil the duties of and Administrative Contact. There may be more than one person in this role (the registry system allows of up to 10 Administrative Contacts)
domain_admin_contact_help:
The Technical Contact
- is a person who has the right to modify only such domain name server data that is connected with it. If the domain registering entity is using a website hosting service, it is recommended to register as the Technical Contact a representative of the corresponding provider company. If the domain registering entity manages its own servers, it can register itself as the Technical Contact.
+ is a natural or legal person who, in the name of the Registrant, adds, changes or removes entries of the authoritative Name Servers for that particular domain and its DNSSEC records. The Technical Contact does not have the right to represent the Registrant in other registration services. The Registrant is obliged to guarantee that the person appointed as the Technical Contact agrees to fulfil the duties of and Technical Contact. There may be more than one person in this role (the registry system allows of up to 10 Technical Contacts)
domain_tech_contact_help:
The domain name server
- is a computer that saves and forwards via a general-access data communications network such data that is connected with the domain name and corresponding IP addresses. Your IT helpdesk or Internet service provider will have the necessary information about the domain name servers.
+ refers to the computer that saves and forwards notices related to the Domain Names and their corresponding IP addresses in the Internet.
account_activity: 'Account activity'
account_activities: 'Account activities'
receipt_date: 'Receipt date'
@@ -821,16 +831,20 @@ en:
domain_registrant_change_confirmed_body: 'You have successfully submitted domain registrant change confirmation. You will receive email confirmation.'
registrant_domain_verification_confirmed: 'Domain registrant change has successfully received.'
registrant_domain_verification_confirmed_failed: 'Something went wrong.'
- domain_registrant_change_rejected_title: 'Domain registrant change has been rejected'
- domain_registrant_change_rejected_body: 'You have rejected domain registrant change.'
+ domain_registrant_change_rejected_title: 'Domain registrant change rejection has been received'
+ domain_registrant_change_rejected_body: 'You have rejected domain registrant change. You will receive confirmation by email.'
registrant_domain_verification_rejected: 'Domain registrant change has been rejected successfully.'
registrant_domain_verification_rejected_failed: 'Something went wrong.'
- domain_delete_title: 'Please confirm or reject domain deletation'
+ domain_delete_title: 'Please confirm or reject domain deletion'
domain_delete_body: 'There is a request to delete a domain. Before doing it we need your confirmation.'
+ registrant_domain_delete_confirmed: 'Setting the domain up for deletion...'
+ registrant_domain_delete_confirmed_failed: 'Something went wrong.'
domain_delete_confirmed_title: 'Domain deletion has been received successfully'
domain_delete_confirmed_body: 'You have successfully submitted delete confirmation. You will receive registry final confirmation to email.'
- domain_delete_rejected_title: 'Domain deletion has been rejected successfully'
- domain_delete_rejected_body: 'You have rejected domain deletion.'
+ registrant_domain_delete_rejected: 'Rejecting the domain deletion...'
+ registrant_domain_delete_rejected_failed: 'Something went wrong.'
+ domain_delete_rejected_title: 'Domain deletion rejection has been received successfully'
+ domain_delete_rejected_body: 'You have rejected pending domain deletion. You will receive confirmation by email.'
no_permission: 'No permission'
access_denied: 'Access denied'
common_name: 'Common name'
@@ -941,4 +955,8 @@ en:
add_blocked_domain: 'Add domain to blocked list'
edit_pw: 'Edit Pw'
optional: 'Optional'
+ test_registrar: "Test registrar"
+ verified_confirm: 'Verified status is for cases when current registrant is the one applying for the update. Legal document signed by the registrant is required. Are you sure this update is properly verified with the registrant?'
+ verified: 'Verified'
+ only_estonian_residets_can_signin: "Access currently available only to Estonian citizens and e-residents with Estonian ID-card or Mobile-ID."
cant_match_version: 'Impossible match version with request'
diff --git a/config/routes.rb b/config/routes.rb
index a041e41b7..39d6b3937 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -7,7 +7,7 @@ Rails.application.routes.draw do
post 'command/:action', controller: 'domains', constraints: EppConstraint.new(:domain)
post 'command/:action', controller: 'contacts', constraints: EppConstraint.new(:contact)
- post 'command/poll', to: 'polls#poll', constraints: EppConstraint.new(:poll)
+ post 'command/poll', to: 'polls#poll', constraints: EppConstraint.new(:poll)
post 'command/keyrelay', to: 'keyrelays#keyrelay', constraints: EppConstraint.new(:keyrelay)
post 'command/:command', to: 'errors#not_found', constraints: EppConstraint.new(:not_found) # fallback route
diff --git a/db/migrate/20160225113801_add_up_id_value_to_domain.rb b/db/migrate/20160225113801_add_up_id_value_to_domain.rb
new file mode 100644
index 000000000..9879c8555
--- /dev/null
+++ b/db/migrate/20160225113801_add_up_id_value_to_domain.rb
@@ -0,0 +1,5 @@
+class AddUpIdValueToDomain < ActiveRecord::Migration
+ def change
+ add_column :domains, :upid, :integer
+ end
+end
diff --git a/db/migrate/20160225113812_add_up_id_value_to_contact.rb b/db/migrate/20160225113812_add_up_id_value_to_contact.rb
new file mode 100644
index 000000000..b78478e75
--- /dev/null
+++ b/db/migrate/20160225113812_add_up_id_value_to_contact.rb
@@ -0,0 +1,5 @@
+class AddUpIdValueToContact < ActiveRecord::Migration
+ def change
+ add_column :contacts, :upid, :integer
+ end
+end
diff --git a/db/migrate/20160226132045_add_up_date_value_to_domain.rb b/db/migrate/20160226132045_add_up_date_value_to_domain.rb
new file mode 100644
index 000000000..5fdc3d196
--- /dev/null
+++ b/db/migrate/20160226132045_add_up_date_value_to_domain.rb
@@ -0,0 +1,5 @@
+class AddUpDateValueToDomain < ActiveRecord::Migration
+ def change
+ add_column :domains, :up_date, :timestamp
+ end
+end
diff --git a/db/migrate/20160226132056_add_up_date_value_to_contact.rb b/db/migrate/20160226132056_add_up_date_value_to_contact.rb
new file mode 100644
index 000000000..f7ba92313
--- /dev/null
+++ b/db/migrate/20160226132056_add_up_date_value_to_contact.rb
@@ -0,0 +1,5 @@
+class AddUpDateValueToContact < ActiveRecord::Migration
+ def change
+ add_column :contacts, :up_date, :timestamp
+ end
+end
diff --git a/db/migrate/20160304125933_add_invoice_number_to_directo.rb b/db/migrate/20160304125933_add_invoice_number_to_directo.rb
new file mode 100644
index 000000000..e639e8910
--- /dev/null
+++ b/db/migrate/20160304125933_add_invoice_number_to_directo.rb
@@ -0,0 +1,6 @@
+class AddInvoiceNumberToDirecto < ActiveRecord::Migration
+ def change
+ add_column :directos, :invoice_number, :string
+ execute "UPDATE directos d SET invoice_number=i.number FROM invoices i WHERE d.item_type='Invoice' AND d.item_id=i.id"
+ end
+end
diff --git a/db/migrate/20160311085957_add_test_registrar_to_registrar.rb b/db/migrate/20160311085957_add_test_registrar_to_registrar.rb
new file mode 100644
index 000000000..b8b05cbd7
--- /dev/null
+++ b/db/migrate/20160311085957_add_test_registrar_to_registrar.rb
@@ -0,0 +1,5 @@
+class AddTestRegistrarToRegistrar < ActiveRecord::Migration
+ def change
+ add_column :registrars, :test_registrar, :boolean, default: false
+ end
+end
diff --git a/db/migrate/20160405131315_add_request_to_directo.rb b/db/migrate/20160405131315_add_request_to_directo.rb
new file mode 100644
index 000000000..2efb95f7d
--- /dev/null
+++ b/db/migrate/20160405131315_add_request_to_directo.rb
@@ -0,0 +1,5 @@
+class AddRequestToDirecto < ActiveRecord::Migration
+ def change
+ add_column :directos, :request, :text
+ end
+end
diff --git a/db/migrate/20160411140719_add_matching_column.rb b/db/migrate/20160411140719_add_matching_column.rb
new file mode 100644
index 000000000..bbc15d352
--- /dev/null
+++ b/db/migrate/20160411140719_add_matching_column.rb
@@ -0,0 +1,15 @@
+class AddMatchingColumn < ActiveRecord::Migration
+
+ def change
+ tables = [:log_account_activities, :log_accounts, :log_addresses, :log_api_users, :log_bank_statements,
+ :log_bank_transactions, :log_blocked_domains, :log_certificates, :log_contact_statuses, :log_contacts,
+ :log_countries, :log_dnskeys, :log_domain_contacts, :log_domain_statuses, :log_domain_transfers,
+ :log_domains, :log_invoice_items, :log_invoices, :log_keyrelays, :log_messages, :log_nameservers,
+ :log_pricelists, :log_registrars, :log_reserved_domains, :log_settings, :log_users, :log_white_ips,
+ :log_zonefile_settings]
+
+ tables.each do |table|
+ add_column table, :uuid, :string
+ end
+ end
+end
diff --git a/db/migrate/20160414110443_add_time_indexing_to_epp_log.rb b/db/migrate/20160414110443_add_time_indexing_to_epp_log.rb
new file mode 100644
index 000000000..30e4d155e
--- /dev/null
+++ b/db/migrate/20160414110443_add_time_indexing_to_epp_log.rb
@@ -0,0 +1,6 @@
+class AddTimeIndexingToEppLog < ActiveRecord::Migration
+ def change
+ ApiLog::EppLog.connection.execute( "CREATE INDEX CONCURRENTLY epp_logs_created_at ON epp_logs USING btree (extract(epoch from created_at));")
+ ApiLog::ReppLog.connection.execute("CREATE INDEX CONCURRENTLY repp_logs_created_at ON repp_logs USING btree (extract(epoch from created_at));")
+ end
+end
diff --git a/db/migrate/20160421074023_add_log_matching_column.rb b/db/migrate/20160421074023_add_log_matching_column.rb
new file mode 100644
index 000000000..6ea1931a9
--- /dev/null
+++ b/db/migrate/20160421074023_add_log_matching_column.rb
@@ -0,0 +1,9 @@
+class AddLogMatchingColumn < ActiveRecord::Migration
+
+ def change
+
+ ApiLog::EppLog.connection.execute("ALTER TABLE epp_logs ADD COLUMN uuid varchar;")
+ ApiLog::ReppLog.connection.execute("ALTER TABLE repp_logs ADD COLUMN uuid varchar;")
+
+ end
+end
diff --git a/db/migrate/20160429114732_add_puny_hostname_to_nameserver.rb b/db/migrate/20160429114732_add_puny_hostname_to_nameserver.rb
new file mode 100644
index 000000000..368d9f144
--- /dev/null
+++ b/db/migrate/20160429114732_add_puny_hostname_to_nameserver.rb
@@ -0,0 +1,9 @@
+class AddPunyHostnameToNameserver < ActiveRecord::Migration
+
+ def change
+
+ add_column :nameservers, :hostname_puny, :string
+ execute "UPDATE nameservers n SET hostname_puny = n.hostname"
+
+ end
+end
diff --git a/db/schema-read-only.rb b/db/schema-read-only.rb
index 78722223a..2d410461c 100644
--- a/db/schema-read-only.rb
+++ b/db/schema-read-only.rb
@@ -11,11 +11,12 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 20160108135436) do
+ActiveRecord::Schema.define(version: 20160304125933) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
enable_extension "hstore"
+ enable_extension "btree_gist"
create_table "account_activities", force: :cascade do |t|
t.integer "account_id"
@@ -108,6 +109,7 @@ ActiveRecord::Schema.define(version: 20160108135436) do
t.datetime "updated_at"
t.string "creator_str"
t.string "updator_str"
+ t.boolean "in_directo", default: false
end
create_table "banklink_transactions", force: :cascade do |t|
@@ -144,6 +146,17 @@ ActiveRecord::Schema.define(version: 20160108135436) do
add_index "blocked_domains", ["name"], name: "index_blocked_domains_on_name", using: :btree
+ create_table "business_registry_caches", force: :cascade do |t|
+ t.string "ident"
+ t.string "ident_country_code"
+ t.datetime "retrieved_on"
+ t.string "associated_businesses", array: true
+ t.datetime "created_at", null: false
+ t.datetime "updated_at", null: false
+ end
+
+ add_index "business_registry_caches", ["ident"], name: "index_business_registry_caches_on_ident", using: :btree
+
create_table "cached_nameservers", id: false, force: :cascade do |t|
t.string "hostname", limit: 255
t.string "ipv4", limit: 255
@@ -241,6 +254,17 @@ ActiveRecord::Schema.define(version: 20160108135436) do
t.datetime "created_at"
end
+ create_table "directos", force: :cascade do |t|
+ t.integer "item_id"
+ t.string "item_type"
+ t.json "response"
+ t.datetime "created_at", null: false
+ t.datetime "updated_at", null: false
+ t.string "invoice_number"
+ end
+
+ add_index "directos", ["item_type", "item_id"], name: "index_directos_on_item_type_and_item_id", using: :btree
+
create_table "dnskeys", force: :cascade do |t|
t.integer "domain_id"
t.integer "flags"
@@ -345,6 +369,7 @@ ActiveRecord::Schema.define(version: 20160108135436) do
add_index "domains", ["registrant_verification_asked_at"], name: "index_domains_on_registrant_verification_asked_at", using: :btree
add_index "domains", ["registrant_verification_token"], name: "index_domains_on_registrant_verification_token", using: :btree
add_index "domains", ["registrar_id"], name: "index_domains_on_registrar_id", using: :btree
+ add_index "domains", ["statuses"], name: "index_domains_on_statuses", using: :gin
create_table "epp_sessions", force: :cascade do |t|
t.string "session_id"
@@ -372,20 +397,20 @@ ActiveRecord::Schema.define(version: 20160108135436) do
add_index "invoice_items", ["invoice_id"], name: "index_invoice_items_on_invoice_id", using: :btree
create_table "invoices", force: :cascade do |t|
- t.datetime "created_at", null: false
- t.datetime "updated_at", null: false
- t.string "invoice_type", null: false
- t.datetime "due_date", null: false
+ t.datetime "created_at", null: false
+ t.datetime "updated_at", null: false
+ t.string "invoice_type", null: false
+ t.datetime "due_date", null: false
t.string "payment_term"
- t.string "currency", null: false
+ t.string "currency", null: false
t.string "description"
t.string "reference_no"
- t.decimal "vat_prc", precision: 10, scale: 2, null: false
+ t.decimal "vat_prc", precision: 10, scale: 2, null: false
t.datetime "paid_at"
t.integer "seller_id"
- t.string "seller_name", null: false
+ t.string "seller_name", null: false
t.string "seller_reg_no"
- t.string "seller_iban", null: false
+ t.string "seller_iban", null: false
t.string "seller_bank"
t.string "seller_swift"
t.string "seller_vat_no"
@@ -399,7 +424,7 @@ ActiveRecord::Schema.define(version: 20160108135436) do
t.string "seller_email"
t.string "seller_contact_name"
t.integer "buyer_id"
- t.string "buyer_name", null: false
+ t.string "buyer_name", null: false
t.string "buyer_reg_no"
t.string "buyer_country_code"
t.string "buyer_state"
@@ -414,6 +439,7 @@ ActiveRecord::Schema.define(version: 20160108135436) do
t.integer "number"
t.datetime "cancelled_at"
t.decimal "sum_cache", precision: 10, scale: 2
+ t.boolean "in_directo", default: false
end
add_index "invoices", ["buyer_id"], name: "index_invoices_on_buyer_id", using: :btree
@@ -592,7 +618,7 @@ ActiveRecord::Schema.define(version: 20160108135436) do
t.integer "item_id", null: false
t.string "event", null: false
t.string "whodunnit"
- t.json "object"
+ t.jsonb "object"
t.json "object_changes"
t.datetime "created_at"
t.string "session"
@@ -623,7 +649,7 @@ ActiveRecord::Schema.define(version: 20160108135436) do
t.integer "item_id", null: false
t.string "event", null: false
t.string "whodunnit"
- t.json "object"
+ t.jsonb "object"
t.json "object_changes"
t.datetime "created_at"
t.string "session"
@@ -683,7 +709,7 @@ ActiveRecord::Schema.define(version: 20160108135436) do
t.integer "item_id", null: false
t.string "event", null: false
t.string "whodunnit"
- t.json "object"
+ t.jsonb "object"
t.json "object_changes"
t.datetime "created_at"
t.text "nameserver_ids", default: [], array: true
@@ -761,7 +787,7 @@ ActiveRecord::Schema.define(version: 20160108135436) do
t.integer "item_id", null: false
t.string "event", null: false
t.string "whodunnit"
- t.json "object"
+ t.jsonb "object"
t.json "object_changes"
t.datetime "created_at"
t.string "session"
@@ -897,10 +923,10 @@ ActiveRecord::Schema.define(version: 20160108135436) do
create_table "nameservers", force: :cascade do |t|
t.string "hostname"
- t.string "ipv4", default: [], array: true
+ t.string "ipv4", array: true
t.datetime "created_at"
t.datetime "updated_at"
- t.string "ipv6", default: [], array: true
+ t.string "ipv6", array: true
t.integer "domain_id"
t.string "creator_str"
t.string "updator_str"
@@ -992,6 +1018,7 @@ ActiveRecord::Schema.define(version: 20160108135436) do
end
add_index "registrars", ["code"], name: "index_registrars_on_code", using: :btree
+ add_index "registrars", ["legacy_id"], name: "index_registrars_on_legacy_id", using: :btree
create_table "reserved_domains", force: :cascade do |t|
t.datetime "created_at"
diff --git a/db/structure.sql b/db/structure.sql
index cf413eff1..78228b693 100644
--- a/db/structure.sql
+++ b/db/structure.sql
@@ -23,6 +23,20 @@ CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;
COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';
+--
+-- Name: btree_gist; Type: EXTENSION; Schema: -; Owner: -
+--
+
+CREATE EXTENSION IF NOT EXISTS btree_gist WITH SCHEMA public;
+
+
+--
+-- Name: EXTENSION btree_gist; Type: COMMENT; Schema: -; Owner: -
+--
+
+COMMENT ON EXTENSION btree_gist IS 'support for indexing common datatypes in GiST';
+
+
--
-- Name: hstore; Type: EXTENSION; Schema: -; Owner: -
--
@@ -39,140 +53,6 @@ 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: -
--
@@ -222,12 +102,10 @@ CREATE FUNCTION fill_ident_country() RETURNS boolean
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;
@@ -291,7 +169,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
@@ -318,6 +196,10 @@ 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(
@@ -325,26 +207,17 @@ 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, '; Zone NS Records', chr(10), tmp_var, chr(10), chr(10));
+ ret := concat(ret, tmp_var, chr(10), 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);
+ -- 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 other nameservers
SELECT array_to_string(
@@ -355,44 +228,16 @@ 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 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
- )
+ AND ns.ipv4 IS NOT NULL AND ns.ipv4 <> '{}'
+ AND NOT ('{serverHold,clientHold}' && d.statuses)
), chr(10)
) INTO tmp_var;
- -- TODO This is a possible subtitition to the previous query, stress testing is needed to see which is faster
+ ret := concat(ret, tmp_var, chr(10), 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);
+ -- 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));
-- aaaa glue records for other nameservers
SELECT array_to_string(
@@ -403,17 +248,12 @@ 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 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
- )
+ AND ns.ipv6 IS NOT NULL AND ns.ipv6 <> '{}'
+ AND NOT ('{serverHold,clientHold}' && d.statuses)
), chr(10)
) INTO tmp_var;
- ret := concat(ret, chr(10), tmp_var, chr(10), chr(10));
+ ret := concat(ret, tmp_var, chr(10), chr(10));
-- ds records
SELECT array_to_string(
@@ -424,7 +264,8 @@ CREATE FUNCTION generate_zonefile(i_origin character varying) RETURNS text
)
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
+ WHERE d.name LIKE include_filter AND d.name NOT LIKE exclude_filter AND dk.flags = 257
+ AND NOT ('{serverHold,clientHold}' && d.statuses)
),
chr(10)
) INTO tmp_var;
@@ -652,7 +493,8 @@ CREATE TABLE bank_transactions (
created_at timestamp without time zone,
updated_at timestamp without time zone,
creator_str character varying,
- updator_str character varying
+ updator_str character varying,
+ in_directo boolean DEFAULT false
);
@@ -757,6 +599,40 @@ CREATE SEQUENCE blocked_domains_id_seq
ALTER SEQUENCE blocked_domains_id_seq OWNED BY blocked_domains.id;
+--
+-- Name: business_registry_caches; Type: TABLE; Schema: public; Owner: -; Tablespace:
+--
+
+CREATE TABLE business_registry_caches (
+ id integer NOT NULL,
+ ident character varying,
+ ident_country_code character varying,
+ retrieved_on timestamp without time zone,
+ associated_businesses character varying[],
+ created_at timestamp without time zone NOT NULL,
+ updated_at timestamp without time zone NOT NULL
+);
+
+
+--
+-- Name: business_registry_caches_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE business_registry_caches_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: business_registry_caches_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE business_registry_caches_id_seq OWNED BY business_registry_caches.id;
+
+
--
-- Name: cached_nameservers; Type: TABLE; Schema: public; Owner: -; Tablespace:
--
@@ -1000,6 +876,40 @@ CREATE SEQUENCE depricated_versions_id_seq
ALTER SEQUENCE depricated_versions_id_seq OWNED BY depricated_versions.id;
+--
+-- Name: directos; Type: TABLE; Schema: public; Owner: -; Tablespace:
+--
+
+CREATE TABLE directos (
+ id integer NOT NULL,
+ item_id integer,
+ item_type character varying,
+ response json,
+ created_at timestamp without time zone NOT NULL,
+ updated_at timestamp without time zone NOT NULL,
+ invoice_number character varying
+);
+
+
+--
+-- Name: directos_id_seq; Type: SEQUENCE; Schema: public; Owner: -
+--
+
+CREATE SEQUENCE directos_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+
+--
+-- Name: directos_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
+--
+
+ALTER SEQUENCE directos_id_seq OWNED BY directos.id;
+
+
--
-- Name: dnskeys; Type: TABLE; Schema: public; Owner: -; Tablespace:
--
@@ -1328,7 +1238,8 @@ CREATE TABLE invoices (
updator_str character varying,
number integer,
cancelled_at timestamp without time zone,
- sum_cache numeric(10,2)
+ sum_cache numeric(10,2),
+ in_directo boolean DEFAULT false
);
@@ -1771,7 +1682,7 @@ CREATE TABLE log_contacts (
item_id integer NOT NULL,
event character varying NOT NULL,
whodunnit character varying,
- object json,
+ object jsonb,
object_changes json,
created_at timestamp without time zone,
session character varying,
@@ -1846,7 +1757,7 @@ CREATE TABLE log_dnskeys (
item_id integer NOT NULL,
event character varying NOT NULL,
whodunnit character varying,
- object json,
+ object jsonb,
object_changes json,
created_at timestamp without time zone,
session character varying,
@@ -1994,7 +1905,7 @@ CREATE TABLE log_domains (
item_id integer NOT NULL,
event character varying NOT NULL,
whodunnit character varying,
- object json,
+ object jsonb,
object_changes json,
created_at timestamp without time zone,
nameserver_ids text[] DEFAULT '{}'::text[],
@@ -2182,7 +2093,7 @@ CREATE TABLE log_nameservers (
item_id integer NOT NULL,
event character varying NOT NULL,
whodunnit character varying,
- object json,
+ object jsonb,
object_changes json,
created_at timestamp without time zone,
session character varying,
@@ -2548,10 +2459,10 @@ ALTER SEQUENCE messages_id_seq OWNED BY messages.id;
CREATE TABLE nameservers (
id integer NOT NULL,
hostname character varying,
- ipv4 character varying[] DEFAULT '{}'::character varying[],
+ ipv4 character varying[],
created_at timestamp without time zone,
updated_at timestamp without time zone,
- ipv6 character varying[] DEFAULT '{}'::character varying[],
+ ipv6 character varying[],
domain_id integer,
creator_str character varying,
updator_str character varying,
@@ -3118,6 +3029,13 @@ ALTER TABLE ONLY banklink_transactions ALTER COLUMN id SET DEFAULT nextval('bank
ALTER TABLE ONLY blocked_domains ALTER COLUMN id SET DEFAULT nextval('blocked_domains_id_seq'::regclass);
+--
+-- Name: id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY business_registry_caches ALTER COLUMN id SET DEFAULT nextval('business_registry_caches_id_seq'::regclass);
+
+
--
-- Name: id; Type: DEFAULT; Schema: public; Owner: -
--
@@ -3160,6 +3078,13 @@ ALTER TABLE ONLY delegation_signers ALTER COLUMN id SET DEFAULT nextval('delegat
ALTER TABLE ONLY depricated_versions ALTER COLUMN id SET DEFAULT nextval('depricated_versions_id_seq'::regclass);
+--
+-- Name: id; Type: DEFAULT; Schema: public; Owner: -
+--
+
+ALTER TABLE ONLY directos ALTER COLUMN id SET DEFAULT nextval('directos_id_seq'::regclass);
+
+
--
-- Name: id; Type: DEFAULT; Schema: public; Owner: -
--
@@ -3595,6 +3520,14 @@ ALTER TABLE ONLY blocked_domains
ADD CONSTRAINT blocked_domains_pkey PRIMARY KEY (id);
+--
+-- Name: business_registry_caches_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace:
+--
+
+ALTER TABLE ONLY business_registry_caches
+ ADD CONSTRAINT business_registry_caches_pkey PRIMARY KEY (id);
+
+
--
-- Name: certificates_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace:
--
@@ -3643,6 +3576,14 @@ ALTER TABLE ONLY depricated_versions
ADD CONSTRAINT depricated_versions_pkey PRIMARY KEY (id);
+--
+-- Name: directos_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace:
+--
+
+ALTER TABLE ONLY directos
+ ADD CONSTRAINT directos_pkey PRIMARY KEY (id);
+
+
--
-- Name: dnskeys_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace:
--
@@ -4109,6 +4050,13 @@ CREATE INDEX index_api_users_on_registrar_id ON api_users USING btree (registrar
CREATE INDEX index_blocked_domains_on_name ON blocked_domains USING btree (name);
+--
+-- Name: index_business_registry_caches_on_ident; Type: INDEX; Schema: public; Owner: -; Tablespace:
+--
+
+CREATE INDEX index_business_registry_caches_on_ident ON business_registry_caches USING btree (ident);
+
+
--
-- Name: index_cached_nameservers_on_hostname_and_ipv4_and_ipv6; Type: INDEX; Schema: public; Owner: -; Tablespace:
--
@@ -4158,6 +4106,13 @@ CREATE INDEX index_contacts_on_registrar_id_and_ident_type ON contacts USING btr
CREATE INDEX index_delegation_signers_on_domain_id ON delegation_signers USING btree (domain_id);
+--
+-- Name: index_directos_on_item_type_and_item_id; Type: INDEX; Schema: public; Owner: -; Tablespace:
+--
+
+CREATE INDEX index_directos_on_item_type_and_item_id ON directos USING btree (item_type, item_id);
+
+
--
-- Name: index_dnskeys_on_delegation_signer_id; Type: INDEX; Schema: public; Owner: -; Tablespace:
--
@@ -4256,6 +4211,13 @@ CREATE INDEX index_domains_on_registrant_verification_token ON domains USING btr
CREATE INDEX index_domains_on_registrar_id ON domains USING btree (registrar_id);
+--
+-- Name: index_domains_on_statuses; Type: INDEX; Schema: public; Owner: -; Tablespace:
+--
+
+CREATE INDEX index_domains_on_statuses ON domains USING gin (statuses);
+
+
--
-- Name: index_epp_sessions_on_session_id; Type: INDEX; Schema: public; Owner: -; Tablespace:
--
@@ -4732,6 +4694,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_registrars_on_legacy_id; Type: INDEX; Schema: public; Owner: -; Tablespace:
+--
+
+CREATE INDEX index_registrars_on_legacy_id ON registrars USING btree (legacy_id);
+
+
--
-- Name: index_reserved_domains_on_name; Type: INDEX; Schema: public; Owner: -; Tablespace:
--
@@ -4774,6 +4743,41 @@ CREATE INDEX index_whois_records_on_domain_id ON whois_records USING btree (doma
CREATE INDEX index_whois_records_on_registrar_id ON whois_records USING btree (registrar_id);
+--
+-- Name: log_contacts_object_legacy_id; Type: INDEX; Schema: public; Owner: -; Tablespace:
+--
+
+CREATE INDEX log_contacts_object_legacy_id ON log_contacts USING btree ((((object ->> 'legacy_id'::text))::integer));
+
+
+--
+-- Name: log_contacts_object_legacy_id1; Type: INDEX; Schema: public; Owner: -; Tablespace:
+--
+
+CREATE INDEX log_contacts_object_legacy_id1 ON log_contacts USING btree ((((object ->> 'legacy_id'::text))::integer));
+
+
+--
+-- Name: log_dnskeys_object_legacy_id; Type: INDEX; Schema: public; Owner: -; Tablespace:
+--
+
+CREATE INDEX log_dnskeys_object_legacy_id ON log_contacts USING btree ((((object ->> 'legacy_domain_id'::text))::integer));
+
+
+--
+-- Name: log_domains_object_legacy_id; Type: INDEX; Schema: public; Owner: -; Tablespace:
+--
+
+CREATE INDEX log_domains_object_legacy_id ON log_contacts USING btree ((((object ->> 'legacy_id'::text))::integer));
+
+
+--
+-- Name: log_nameservers_object_legacy_id; Type: INDEX; Schema: public; Owner: -; Tablespace:
+--
+
+CREATE INDEX log_nameservers_object_legacy_id ON log_contacts USING btree ((((object ->> 'legacy_domain_id'::text))::integer));
+
+
--
-- Name: unique_data_migrations; Type: INDEX; Schema: public; Owner: -; Tablespace:
--
@@ -5196,7 +5200,19 @@ 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 ('20151209122816');
+
+INSERT INTO schema_migrations (version) VALUES ('20160106101725');
INSERT INTO schema_migrations (version) VALUES ('20160108135436');
+INSERT INTO schema_migrations (version) VALUES ('20160113143447');
+
+INSERT INTO schema_migrations (version) VALUES ('20160118092453');
+
+INSERT INTO schema_migrations (version) VALUES ('20160118092454');
+
+INSERT INTO schema_migrations (version) VALUES ('20160218102355');
+
+INSERT INTO schema_migrations (version) VALUES ('20160304125933');
+
diff --git a/doc/epp/domain.md b/doc/epp/domain.md
index 524deee1e..178ab629b 100644
--- a/doc/epp/domain.md
+++ b/doc/epp/domain.md
@@ -32,7 +32,7 @@ Domain name mapping protocol short version:
1-n
1 Allowed values: 0, 256, 257
1 Allowed values: 3
- 1 Allowed values: 3, 5, 6, 7, 8, 252, 253, 254, 255
+ 1 Allowed values: 3, 5, 6, 7, 8, 10, 13, 14
1 Public key
1 Attribute: xmlns:eis="https://epp.tld.ee/schema/eis-1.0.xsd"
1 Base64 encoded document.
@@ -81,7 +81,7 @@ Domain name mapping protocol short version:
1-n
1 Allowed values: 0, 256, 257
1 Allowed values: 3
- 1 Allowed values: 3, 5, 6, 7, 8, 252, 253, 254, 255
+ 1 Allowed values: 3, 5, 6, 7, 8, 10, 13, 14
1 Public key
0-1 Attribute: xmlns:eis="https://epp.tld.ee/schema/eis-1.0.xsd"
0-1 Base64 encoded document. Required if registrant is changing.
diff --git a/doc/epp/keyrelay.md b/doc/epp/keyrelay.md
index f61765b2c..804fed6db 100644
--- a/doc/epp/keyrelay.md
+++ b/doc/epp/keyrelay.md
@@ -11,7 +11,7 @@ NB! Keyrelay not implemented.
1
1 Allowed values: 0, 256, 257
1 Allowed values: 3
- 1 Allowed values: 3, 5, 6, 7, 8, 252, 253, 254, 255
+ 1 Allowed values: 3, 5, 6, 7, 8, 10, 13, 14
1 Public key
1
1 Domain password. Attribute: roid="String"
diff --git a/lib/epp_constraint.rb b/lib/epp_constraint.rb
index 06cf3d45a..4463a7a04 100644
--- a/lib/epp_constraint.rb
+++ b/lib/epp_constraint.rb
@@ -11,8 +11,9 @@ class EppConstraint
# creates parsed_frame, detects epp request object
def matches?(request)
# TODO: Maybe move this to controller to keep params clean
- request.params[:nokogiri_frame] ||= Nokogiri::XML(request.params[:raw_frame])
- request.params[:parsed_frame] ||= request.params[:nokogiri_frame].dup.remove_namespaces!
+ request.params[:raw_frame] = request.params[:raw_frame].gsub!(/(?<=>)(.*?)(?=<)/) { |s| s.strip} if request.params[:raw_frame]
+ request.params[:nokogiri_frame] ||= Nokogiri::XML(request.params[:raw_frame] || request.params[:frame])
+ request.params[:parsed_frame] ||= request.params[:nokogiri_frame].dup.remove_namespaces!
unless [:keyrelay, :poll, :session, :not_found].include?(@type)
element = "//#{@type}:#{request.params[:action]}"
diff --git a/lib/tasks/convert.rake b/lib/tasks/convert.rake
index ba0e547dc..47e0ec7c2 100644
--- a/lib/tasks/convert.rake
+++ b/lib/tasks/convert.rake
@@ -32,5 +32,86 @@ namespace :convert do
d.save!
end
end
+
+
+ desc 'Contact Address Country Code Upcase'
+ task country_code_upcase: :environment do
+ count = 0
+ Contact.find_each do |c|
+ if c.country_code.present? && c.country_code != c.country_code.upcase
+ c.country_code = c.country_code.upcase
+ c.update_columns(country_code: c.country_code.upcase)
+
+ count +=1
+ puts "#{count} contacts has been changed" if count % 1000 == 0
+ end
+ end
+ puts "Contacts change has been finished. Starting ContactVersions"
+
+ count = 0
+ ContactVersion.find_each do |c|
+ if (if_object = (c.object && c.object["country_code"].present? && c.object["country_code"] != c.object["country_code"].upcase)) ||
+ (if_changes = (c.object_changes && c.object_changes["country_code"].present? && c.object_changes["country_code"] != c.object_changes["country_code"].map{|e|e.try(:upcase)}))
+
+ if if_object
+ h = c.object
+ h["country_code"] = h["country_code"].try(:upcase)
+ c.object = h
+ end
+
+ if if_changes
+ h = c.object_changes
+ h["country_code"] = h["country_code"].map{|e|e.try(:upcase)}
+ c.object_changes = h
+ end
+ c.update_columns(object: c.object, object_changes: c.object_changes)
+
+ count +=1
+ puts "#{count} contact histories has been changed" if count % 1000 == 0
+ end
+ end
+ end
+
+ desc 'Convert nameservers hostname and hostname_puny'
+ task nameserves_hostname: :environment do
+
+ start = Time.zone.now.to_f
+ count = 0
+ puts '-----> Converting hostnames...'
+
+ Nameserver.find_each(:batch_size => 1000) do |ns|
+ ns.hostname = SimpleIDN.to_unicode(ns.hostname)
+ ns.hostname_puny = SimpleIDN.to_ascii(ns.hostname_puny)
+ ns.save validate: false
+ count += 1
+ puts "-----> Converted #{count} nameservers" if count % 1000 == 0
+ end
+ puts "-----> Converted #{count} nameservers #{(Time.zone.now.to_f - start).round(2)} seconds"
+
+ end
+
+ desc 'Convert nameservers history hostname'
+ task nameserves_history_hostname: :environment do
+
+ start = Time.zone.now.to_f
+ count = 0
+ puts '-----> Converting hostnames history...'
+
+ NameserverVersion.find_each do |ns|
+ if obj = ns.object
+ obj["hostname"] = SimpleIDN.to_unicode(obj["hostname"])
+ ns.object = obj
+ end
+
+ if (obj_c = ns.object_changes).present?
+ obj_c["name"].map!{|e| e ? SimpleIDN.to_unicode(e) : e } if obj_c["hostname"]
+ ns.object_changes = obj_c
+ end
+ count += 1
+ ns.save!
+ end
+ puts "-----> Converted #{count} history rows #{(Time.zone.now.to_f - start).round(2)} seconds"
+ end
+
end
diff --git a/lib/tasks/documents.rake b/lib/tasks/documents.rake
new file mode 100644
index 000000000..5ae8fb4df
--- /dev/null
+++ b/lib/tasks/documents.rake
@@ -0,0 +1,45 @@
+namespace :documents do
+
+ desc 'Generate all'
+ task all: :environment do
+ Rake::Task['documents:log'].invoke
+ end
+
+ desc 'Generate legaldoc versions'
+ task log: :environment do
+ start = Time.zone.now.to_f
+ puts '-----> Adding documets id for PaperTrail log...'
+ count = 0
+
+ LegalDocument.find_each do |x|
+
+ next if x.documentable_id.blank?
+
+ document_type = case x.documentable_type
+ when 'Domain' then DomainVersion
+ when 'Contact'then ContactVersion
+ end
+
+ dc = document_type.where(item_id: x.documentable_id)
+
+ dc.each do |y|
+
+ if x.created_at < (y.created_at + (2*60)) &&
+ x.created_at > (y.created_at - (2*60))
+
+ y.children[:legal_documents] = [x.id]
+ y.save
+ count =+1
+
+ else
+
+ y.children[:legal_documents] = []
+ y.save
+
+ end
+ end
+ end
+ puts "-----> Log changed for #{count} rows in #{(Time.zone.now.to_f - start).round(2)} seconds"
+ end
+end
+
diff --git a/spec/mailers/domain_mailer_spec.rb b/spec/mailers/domain_mailer_spec.rb
index 3f645f7e0..9963fdd38 100644
--- a/spec/mailers/domain_mailer_spec.rb
+++ b/spec/mailers/domain_mailer_spec.rb
@@ -153,7 +153,7 @@ describe DomainMailer do
@registrant = Fabricate(:registrant, email: 'test@example.com')
@domain = Fabricate(:domain, registrant: @registrant)
@domain.deliver_emails = true
- @mail = DomainMailer.registrant_updated_notification_for_new_registrant(@domain.id, deliver_emails)
+ @mail = DomainMailer.registrant_updated_notification_for_new_registrant(@domain.id, @registrant.id, @registrant.id, deliver_emails)
end
it 'should render email subject' do
@@ -178,7 +178,7 @@ describe DomainMailer do
@registrant = Fabricate(:registrant, email: 'test@example.com')
@domain = Fabricate(:domain, registrant: @registrant)
@domain.deliver_emails = true
- @mail = DomainMailer.registrant_updated_notification_for_old_registrant(@domain.id, deliver_emails)
+ @mail = DomainMailer.registrant_updated_notification_for_old_registrant(@domain.id, @registrant.id, @registrant.id, deliver_emails)
end
it 'should render email subject' do