mirror of
https://github.com/internetee/registry.git
synced 2025-07-20 09:46:09 +02:00
Merge branch 'master' into 108869472-objects_archive
This commit is contained in:
commit
305333d6c9
29 changed files with 202 additions and 142 deletions
30
CHANGELOG.md
30
CHANGELOG.md
|
@ -1,5 +1,33 @@
|
|||
20.05.2016
|
||||
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)
|
||||
|
|
2
Gemfile
2
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
|
||||
|
|
10
Gemfile.lock
10
Gemfile.lock
|
@ -316,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)
|
||||
|
@ -332,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)
|
||||
|
@ -348,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)
|
||||
|
@ -619,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)
|
||||
|
|
|
@ -35,7 +35,7 @@ module Repp
|
|||
error! I18n.t('errors.messages.epp_authorization_error'), 401 unless domain.auth_info.eql? request.headers['Auth-Code']
|
||||
|
||||
contact_repp_json = proc{|contact|
|
||||
contact.attributes.slice("code", "name", "ident", "ident_type", "ident_country_code", "phone", "email", "street", "city", "zip","country_code", "statuses")
|
||||
contact.as_json.slice("code", "name", "ident", "ident_type", "ident_country_code", "phone", "email", "street", "city", "zip","country_code", "statuses")
|
||||
}
|
||||
|
||||
@response = {
|
||||
|
|
|
@ -2,6 +2,9 @@ $(document).on 'page:change', ->
|
|||
$('.selectize').selectize({
|
||||
allowEmptyOption: true
|
||||
})
|
||||
$('.selectize_create').selectize({
|
||||
allowEmptyOption: true, create: true
|
||||
})
|
||||
|
||||
$('.js-datepicker').datepicker({
|
||||
showAnim: "",
|
||||
|
|
|
@ -10,21 +10,13 @@ class Admin::ContactsController < AdminController
|
|||
search_params[:registrant_domains_id_not_null] = 1
|
||||
end
|
||||
|
||||
@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).joins(:registrar).select('contacts.*, registrars.name').where(
|
||||
"contacts.statuses @> ?::varchar[]", "{#{params[:statuses_contains].join(',')}}"
|
||||
)
|
||||
else
|
||||
contacts = Contact.includes(:registrar).joins(:registrar).select('contacts.*, registrars.name')
|
||||
end
|
||||
contacts = contacts.filter_by_states(params[:statuses_contains].join(',')) if params[:statuses_contains]
|
||||
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.includes(:registrar).joins(:registrar).select('contacts.*, registrars.name').search(search_params)
|
||||
@q = contacts.search(search_params)
|
||||
@contacts = @q.result.uniq.page(params[:page])
|
||||
end
|
||||
|
||||
|
|
|
@ -51,6 +51,7 @@ class Admin::SettingsController < AdminController
|
|||
:admin_contacts_max_count,
|
||||
:tech_contacts_min_count,
|
||||
:tech_contacts_max_count,
|
||||
:orphans_contacts_in_months,
|
||||
:ds_digest_type,
|
||||
:dnskeys_min_count,
|
||||
:dnskeys_max_count,
|
||||
|
|
|
@ -56,4 +56,8 @@ class Epp::KeyrelaysController < EppController
|
|||
|
||||
# domain
|
||||
end
|
||||
|
||||
def resource
|
||||
@domain
|
||||
end
|
||||
end
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 ||= []
|
||||
|
@ -367,7 +370,7 @@ class EppController < ApplicationController
|
|||
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),
|
||||
|
@ -383,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
|
||||
|
|
|
@ -42,13 +42,8 @@ class Registrar::ContactsController < Registrar::DeppController # EPP controller
|
|||
@contacts = Contact.find_by(name: params[:q][:name_matches])
|
||||
end
|
||||
|
||||
if params[:statuses_contains]
|
||||
contacts = current_user.registrar.contacts.includes(:registrar).where(
|
||||
"contacts.statuses @> ?::varchar[]", "{#{params[:statuses_contains].join(',')}}"
|
||||
)
|
||||
else
|
||||
contacts = current_user.registrar.contacts.includes(:registrar)
|
||||
end
|
||||
contacts = contacts.filter_by_states(params[:statuses_contains]) if params[:statuses_contains]
|
||||
|
||||
normalize_search_parameters do
|
||||
@q = contacts.search(params[:q])
|
||||
|
|
|
@ -62,6 +62,10 @@ class ApiUser < User
|
|||
username
|
||||
end
|
||||
|
||||
def name
|
||||
username
|
||||
end
|
||||
|
||||
def queued_messages
|
||||
registrar.messages.queued
|
||||
end
|
||||
|
|
|
@ -36,12 +36,10 @@ class Contact < ActiveRecord::Base
|
|||
|
||||
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?
|
||||
self.status_notes = {} if status_notes.nil?
|
||||
self.ident_updated_at = Time.zone.now if new_record? && ident_updated_at.blank?
|
||||
end
|
||||
|
@ -64,16 +62,6 @@ class Contact < ActiveRecord::Base
|
|||
end
|
||||
end
|
||||
|
||||
before_save :manage_statuses
|
||||
def manage_statuses
|
||||
if domain_transfer # very ugly but need better workflow
|
||||
self.statuses = statuses | [OK, LINKED]
|
||||
return
|
||||
end
|
||||
|
||||
manage_linked
|
||||
manage_ok
|
||||
end
|
||||
|
||||
after_save :update_related_whois_records
|
||||
|
||||
|
@ -176,7 +164,7 @@ class Contact < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def find_orphans
|
||||
Contact.where('
|
||||
where('
|
||||
NOT EXISTS(
|
||||
select 1 from domains d where d.registrant_id = contacts.id
|
||||
) AND NOT EXISTS(
|
||||
|
@ -185,20 +173,49 @@ class Contact < ActiveRecord::Base
|
|||
')
|
||||
end
|
||||
|
||||
def find_linked
|
||||
where('
|
||||
EXISTS(
|
||||
select 1 from domains d where d.registrant_id = contacts.id
|
||||
) OR EXISTS(
|
||||
select 1 from domain_contacts dc where dc.contact_id = contacts.id
|
||||
)
|
||||
')
|
||||
end
|
||||
|
||||
def filter_by_states in_states
|
||||
states = Array(in_states).dup
|
||||
scope = all
|
||||
|
||||
# all contacts has state ok, so no need to filter by it
|
||||
scope = scope.where("NOT contacts.statuses && ?::varchar[]", "{#{(STATUSES - [OK, LINKED]).join(',')}}") if states.delete(OK)
|
||||
scope = scope.find_linked if states.delete(LINKED)
|
||||
scope = scope.where("contacts.statuses @> ?::varchar[]", "{#{states.join(',')}}") if states.any?
|
||||
scope
|
||||
end
|
||||
|
||||
# To leave only new ones we need to check
|
||||
# if contact was at any time used in domain.
|
||||
# This can be checked by domain history.
|
||||
# This can be checked by saved relations in children attribute
|
||||
def destroy_orphans
|
||||
STDOUT << "#{Time.zone.now.utc} - Destroying orphaned contacts\n" unless Rails.env.test?
|
||||
|
||||
orphans = find_orphans
|
||||
|
||||
unless Rails.env.test?
|
||||
orphans.each do |m|
|
||||
STDOUT << "#{Time.zone.now.utc} Contact.destroy_orphans: ##{m.id} (#{m.name})\n"
|
||||
counter = Counter.new
|
||||
find_orphans.find_each do |contact|
|
||||
ver_scope = []
|
||||
%w(admin_contacts tech_contacts registrant).each do |type|
|
||||
ver_scope << "(children->'#{type}')::jsonb <@ json_build_array(#{contact.id})::jsonb"
|
||||
end
|
||||
next if DomainVersion.where("created_at > ?", Time.now - Setting.orphans_contacts_in_months.to_i.months).where(ver_scope.join(" OR ")).any?
|
||||
next if contact.domains_present?
|
||||
|
||||
contact.destroy
|
||||
counter.next
|
||||
STDOUT << "#{Time.zone.now.utc} Contact.destroy_orphans: ##{contact.id} (#{contact.name})\n"
|
||||
end
|
||||
|
||||
count = orphans.destroy_all.count
|
||||
|
||||
STDOUT << "#{Time.zone.now.utc} - Successfully destroyed #{count} orphaned contacts\n" unless Rails.env.test?
|
||||
STDOUT << "#{Time.zone.now.utc} - Successfully destroyed #{counter} orphaned contacts\n" unless Rails.env.test?
|
||||
end
|
||||
|
||||
def privs
|
||||
|
@ -239,6 +256,23 @@ class Contact < ActiveRecord::Base
|
|||
"EIS-#{id}"
|
||||
end
|
||||
|
||||
# kind of decorator in order to always return statuses
|
||||
# if we use separate decorator, then we should add it
|
||||
# to too many places
|
||||
def statuses
|
||||
calculated = Array(read_attribute(:statuses))
|
||||
calculated.delete(Contact::OK)
|
||||
calculated.delete(Contact::LINKED)
|
||||
calculated << Contact::OK if calculated.empty?# && valid?
|
||||
calculated << Contact::LINKED if domains_present?
|
||||
|
||||
calculated.uniq
|
||||
end
|
||||
|
||||
def statuses= arr
|
||||
write_attribute(:statuses, Array(arr).uniq)
|
||||
end
|
||||
|
||||
def to_s
|
||||
name || '[no name]'
|
||||
end
|
||||
|
@ -278,11 +312,6 @@ class Contact < ActiveRecord::Base
|
|||
end
|
||||
end
|
||||
|
||||
def uniq_statuses?
|
||||
return true unless statuses.detect { |s| statuses.count(s) > 1 }
|
||||
errors.add(:statuses, :not_uniq)
|
||||
false
|
||||
end
|
||||
|
||||
def org?
|
||||
ident_type == ORG
|
||||
|
@ -412,13 +441,6 @@ class Contact < ActiveRecord::Base
|
|||
domain_contacts.present? || registrant_domains.present?
|
||||
end
|
||||
|
||||
def manage_linked
|
||||
if domains_present?
|
||||
set_linked
|
||||
else
|
||||
unset_linked
|
||||
end
|
||||
end
|
||||
|
||||
def search_name
|
||||
"#{code} #{name}"
|
||||
|
@ -497,43 +519,6 @@ class Contact < ActiveRecord::Base
|
|||
end
|
||||
end
|
||||
|
||||
def set_linked
|
||||
statuses << LINKED if statuses.detect { |s| s == LINKED }.blank?
|
||||
end
|
||||
|
||||
def unset_linked
|
||||
statuses.delete_if { |s| s == LINKED }
|
||||
end
|
||||
|
||||
# rubocop:disable Metrics/CyclomaticComplexity
|
||||
def manage_ok
|
||||
return unset_ok unless valid?
|
||||
|
||||
case statuses.size
|
||||
when 0
|
||||
set_ok
|
||||
when 1
|
||||
set_ok if statuses == [LINKED]
|
||||
when 2
|
||||
return if statuses.sort == [LINKED, OK]
|
||||
unset_ok
|
||||
else
|
||||
unset_ok
|
||||
end
|
||||
end
|
||||
# rubocop:enable Metrics/CyclomaticComplexity
|
||||
|
||||
def unset_ok
|
||||
statuses.delete_if { |s| s == OK }
|
||||
end
|
||||
|
||||
def set_ok
|
||||
statuses << OK if statuses.detect { |s| s == OK }.blank?
|
||||
end
|
||||
|
||||
def linked?
|
||||
statuses.include?(LINKED)
|
||||
end
|
||||
|
||||
def update_prohibited?
|
||||
(statuses & [
|
||||
|
@ -562,6 +547,9 @@ class Contact < ActiveRecord::Base
|
|||
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
|
||||
|
|
|
@ -478,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
|
||||
|
|
|
@ -39,29 +39,12 @@ class Epp::Domain < Domain
|
|||
|
||||
before_save :link_contacts
|
||||
def link_contacts
|
||||
# Based on bullet report
|
||||
if new_record?
|
||||
# new record does not have correct instance contacts entries thanks to epp
|
||||
unlinked_contacts = [registrant]
|
||||
unlinked_contacts << admin_domain_contacts.map(&:contact)
|
||||
unlinked_contacts << tech_domain_contacts.map(&:contact)
|
||||
unlinked_contacts.flatten!
|
||||
else
|
||||
unlinked_contacts = contacts.select { |c| !c.linked? } # speed up a bit
|
||||
end
|
||||
|
||||
unlinked_contacts.each do |uc|
|
||||
uc.domains_present = true # no need to fetch domains again
|
||||
uc.save(validate: false)
|
||||
end
|
||||
#TODO: cleanup cache if we think to cache dynamic statuses
|
||||
end
|
||||
|
||||
after_destroy :unlink_contacts
|
||||
def unlink_contacts
|
||||
contacts.each do |c|
|
||||
c.domains_present = false
|
||||
c.save(validate: false)
|
||||
end
|
||||
#TODO: cleanup cache if we think to cache dynamic statuses
|
||||
end
|
||||
|
||||
class << self
|
||||
|
|
|
@ -12,4 +12,8 @@ class Message < ActiveRecord::Base
|
|||
self.queued = false
|
||||
save
|
||||
end
|
||||
|
||||
def name
|
||||
"-"
|
||||
end
|
||||
end
|
||||
|
|
|
@ -32,7 +32,7 @@ class Nameserver < ActiveRecord::Base
|
|||
[:ipv4, :invalid, { value: { obj: 'hostAddr', val: ipv4 } }],
|
||||
[:ipv6, :invalid, { value: { obj: 'hostAddr', val: ipv6 } }]
|
||||
],
|
||||
'2306' => [
|
||||
'2003' => [
|
||||
[:ipv4, :blank]
|
||||
]
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
|
||||
- if domain.present?
|
||||
- if version # normal history
|
||||
- epp_req = ApiLog::EppLog.find_by(uuid: version.uuid).try(:request) if version.uuid
|
||||
- children = HashWithIndifferentAccess.new(version.children)
|
||||
- nameservers = Nameserver.all_versions_for(children[:nameservers], version.created_at)
|
||||
- dnskeys = Dnskey.all_versions_for(children[:dnskeys], version.created_at)
|
||||
|
@ -13,7 +14,9 @@
|
|||
- registrant = Contact.all_versions_for(children[:registrant], version.created_at)
|
||||
- event = version.event
|
||||
- creator = plain_username(version.terminator)
|
||||
- whodunnit = version.try(:whodunnit)
|
||||
- else # pending history
|
||||
- epp_req = false
|
||||
- nameservers = domain.nameservers
|
||||
- dnskeys = domain.dnskeys
|
||||
- tech_contacts = domain.tech_contacts
|
||||
|
@ -26,6 +29,7 @@
|
|||
- registrant = [registrant]
|
||||
- creator = pending_user.try(:username)
|
||||
- event = 'pending'
|
||||
- whodunnit = false
|
||||
|
||||
%td
|
||||
%p.nowrap
|
||||
|
@ -34,8 +38,14 @@
|
|||
%br= link_to t(:edit_statuses), edit_admin_domain_path(params[:domain_id])
|
||||
|
||||
%p.text-right
|
||||
- if (event == 'update' || event == 'create') && epp_req
|
||||
= link_to event, '#', class: 'js-event'
|
||||
- else
|
||||
= event
|
||||
%br
|
||||
- if whodunnit
|
||||
= whodunnit
|
||||
- else
|
||||
= creator
|
||||
- if version
|
||||
%p.text-right
|
||||
|
@ -54,7 +64,7 @@
|
|||
%br
|
||||
- if domain.pending_json.present?
|
||||
%p
|
||||
= link_to t(:pending_epp), '#', class: 'js-pending-toggle'
|
||||
= link_to t(:pending_epp), '#', class: 'js-pending'
|
||||
|
||||
%td{class: changing_css_class(version, "period", "period_unit", "valid_from", "valid_to")}
|
||||
%p
|
||||
|
@ -120,9 +130,15 @@
|
|||
= link_to admin_registrar_path(domain.registrar), target: "registrar_#{domain.registrar.id}" do
|
||||
= domain.registrar.name
|
||||
|
||||
- if (event == 'create' || event == 'update') && epp_req
|
||||
%tr.js-event{ style: 'display: none;' }
|
||||
%td{colspan: 9}
|
||||
%pre
|
||||
= Nokogiri::XML(epp_req)
|
||||
|
||||
- if domain.pending_json.present?
|
||||
%tr.js-pending{ style: 'display: none;' }
|
||||
%td{colspan: 8}
|
||||
%td{colspan: 9}
|
||||
= preserve do
|
||||
%pre
|
||||
- formatted_req = Nokogiri::XML(domain.pending_json['frame'])
|
||||
|
|
|
@ -37,9 +37,9 @@
|
|||
domain: version.reify, version: version.previous
|
||||
|
||||
:coffee
|
||||
$(document).on 'click', '.js-pending-toggle', (e) ->
|
||||
$(document).on 'click', '.js-pending, .js-event', (e) ->
|
||||
e.preventDefault()
|
||||
|
||||
$(document).on 'mousedown', '.js-pending-toggle', (e) ->
|
||||
$(document).on 'mousedown', '.js-pending, .js-event', (e) ->
|
||||
target = $(e.target)
|
||||
target.parents('tr').next('tr.js-pending').toggle()
|
||||
target.parents('tr').nextUntil('tr.small' ,'tr.' + this.className).toggle()
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
= render 'setting_row', var: :admin_contacts_max_count
|
||||
= render 'setting_row', var: :tech_contacts_min_count
|
||||
= render 'setting_row', var: :tech_contacts_max_count
|
||||
= render 'setting_row', var: :orphans_contacts_in_months
|
||||
= render 'setting_row', var: :ds_data_allowed
|
||||
= render 'setting_row', var: :key_data_allowed
|
||||
= render 'setting_row', var: :dnskeys_min_count
|
||||
|
|
|
@ -30,6 +30,8 @@ Hi,
|
|||
<br><br>
|
||||
Registrant change process for the domain <%= @params[:name] %> has been started.
|
||||
<br><br>
|
||||
Please verify the details of the following change request. In case of problems contact your registrar <%= @params[:registrar_name] %>
|
||||
<br><br>
|
||||
New registrant:<br>
|
||||
Name: <%= @params[:registrant_name] %><br>
|
||||
<% if @params[:registrant_priv] %>
|
||||
|
@ -41,7 +43,11 @@ Street: <%= @params[:registrant_street] %><br>
|
|||
City: <%= @params[:registrant_city] %><br>
|
||||
Country: <%= @params[:registrant_country] %>
|
||||
<br><br>
|
||||
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.
|
||||
<br><br>
|
||||
Change request will be cancelled in case <%= @params[:old_registrant_name] %> rejects or does not approve it in <%= Setting.expire_pending_confirmation %> hours.
|
||||
<br><br>
|
||||
Please contact registrar <%= @params[:registrar_name] %> in case of questions. You can find the registrar's contacts at http://internet.ee/registrars.
|
||||
<br><br>
|
||||
Best Regards,<br>
|
||||
Estonian Internet Foundation
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -10,6 +10,7 @@ if con.present? && con.table_exists?('settings')
|
|||
Setting.save_default(:admin_contacts_max_count, 10)
|
||||
Setting.save_default(:tech_contacts_min_count, 1)
|
||||
Setting.save_default(:tech_contacts_max_count, 10)
|
||||
Setting.save_default(:orphans_contacts_in_months, 6)
|
||||
Setting.save_default(:expire_pending_confirmation, 48)
|
||||
|
||||
Setting.save_default(:ds_digest_type, 2)
|
||||
|
|
|
@ -136,7 +136,7 @@ en:
|
|||
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'
|
||||
|
@ -738,13 +738,13 @@ en:
|
|||
no_invoices_were_binded: 'No invoices were binded'
|
||||
domain_general_help:
|
||||
<b>The Administrative Contact</b>
|
||||
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:
|
||||
<b>The Technical Contact</b>
|
||||
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:
|
||||
<b>The domain name server</b>
|
||||
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'
|
||||
|
@ -959,4 +959,4 @@ en:
|
|||
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."
|
||||
deleted: 'Deleted'
|
||||
deleted: 'Deleted' cant_match_version: 'Impossible match version with request'
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
class ChangeContactStatusesDefault < ActiveRecord::Migration
|
||||
def change
|
||||
change_column_default :contacts, :statuses, []
|
||||
Contact.where(statuses: nil). update_all(statuses: [])
|
||||
end
|
||||
end
|
|
@ -11,8 +11,8 @@ class EppConstraint
|
|||
# creates parsed_frame, detects epp request object
|
||||
def matches?(request)
|
||||
# TODO: Maybe move this to controller to keep params clean
|
||||
request.params[:raw_frame] = request.params[:raw_frame].gsub!(/(?<=>)(.*?)(?=<)/) { |s| s.strip}
|
||||
request.params[:nokogiri_frame] ||= Nokogiri::XML(request.params[:raw_frame])
|
||||
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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue