Merge branch 'master' into credit-and-debit-card-payments

This commit is contained in:
Maciej Szlosarczyk 2018-06-04 11:06:29 +03:00
commit 2965fddef4
No known key found for this signature in database
GPG key ID: 41D62D42D3B0D765
46 changed files with 334 additions and 249 deletions

View file

@ -2,3 +2,6 @@ inherit_from: .rubocop_todo.yml
Style/Alias: Style/Alias:
EnforcedStyle: prefer_alias_method EnforcedStyle: prefer_alias_method
Style/FrozenStringLiteralComment:
Enabled: false

View file

@ -1 +1 @@
2.2.7 2.3.7

View file

@ -1,3 +1,16 @@
25.05.2018
* GDPR: updated whois templates with configurable disclaimer [#795](https://github.com/internetee/registry/issues/795)
* GDPR: email forwarding solution to contact private domain registrants without revealing their email addresses [#824](https://github.com/internetee/registry/issues/824)
* EPP: added support for additional digitally signed doc formats like asice, sce, asics, scs, edoc, adoc [#840](https://github.com/internetee/registry/issues/840)
* Registrar: removed handling of newlines from contact form street field [#836](https://github.com/internetee/registry/issues/836)
* Ruby upgrade to version 2.3.7 [#546](https://github.com/internetee/registry/issues/546)
* Devise upgrade to version 4.4.3 [#847](https://github.com/internetee/registry/pull/847)
* Added extra logging to debug Directo integration [#848](https://github.com/internetee/registry/pull/848)
30.04.2018
* Upgrade Ruby on Rails to version 4.2.10 [#826](https://github.com/internetee/registry/issues/826)
* BUG: Admin - fixed internal error in domain_versions and contact_versions views caused by removed db column [#830](https://github.com/internetee/registry/issues/830)
23.04.2018 23.04.2018
* WHOIS: domains with deleteCandidate status do not return registration details as domains waiting to be deleted [#789](https://github.com/internetee/registry/issues/789) * WHOIS: domains with deleteCandidate status do not return registration details as domains waiting to be deleted [#789](https://github.com/internetee/registry/issues/789)
* Security: Nokigiri gem update to version 1.8.2 [#823](https://github.com/internetee/registry/pull/823) * Security: Nokigiri gem update to version 1.8.2 [#823](https://github.com/internetee/registry/pull/823)

View file

@ -1,4 +1,4 @@
FROM ruby:2.2 FROM ruby:2.3
MAINTAINER maciej.szlosarczyk@internet.ee MAINTAINER maciej.szlosarczyk@internet.ee
RUN apt-get update > /dev/null && apt-get install -y > /dev/null \ RUN apt-get update > /dev/null && apt-get install -y > /dev/null \

View file

@ -52,7 +52,7 @@ gem 'liquid', '3.0.6' # for email templates
# rights # rights
gem 'cancancan', '1.11.0' # autharization gem 'cancancan', '1.11.0' # autharization
gem 'devise', '3.5.4' # authenitcation gem 'devise', '4.4.3' # authenitcation
# rest api # rest api
gem 'grape', '0.12.0' gem 'grape', '0.12.0'

View file

@ -167,12 +167,11 @@ GEM
database_cleaner (1.6.1) database_cleaner (1.6.1)
descendants_tracker (0.0.4) descendants_tracker (0.0.4)
thread_safe (~> 0.3, >= 0.3.1) thread_safe (~> 0.3, >= 0.3.1)
devise (3.5.4) devise (4.4.3)
bcrypt (~> 3.0) bcrypt (~> 3.0)
orm_adapter (~> 0.1) orm_adapter (~> 0.1)
railties (>= 3.2.6, < 5) railties (>= 4.1.0, < 6.0)
responders responders
thread_safe (~> 0.1)
warden (~> 1.2.3) warden (~> 1.2.3)
diff-lcs (1.3) diff-lcs (1.3)
docile (1.1.5) docile (1.1.5)
@ -350,8 +349,9 @@ GEM
polyamorous (~> 1.1) polyamorous (~> 1.1)
rdoc (4.3.0) rdoc (4.3.0)
request_store (1.1.0) request_store (1.1.0)
responders (2.3.0) responders (2.4.0)
railties (>= 4.2.0, < 5.1) actionpack (>= 4.2.0, < 5.3)
railties (>= 4.2.0, < 5.3)
rest-client (2.0.1) rest-client (2.0.1)
http-cookie (>= 1.0.2, < 2.0) http-cookie (>= 1.0.2, < 2.0)
mime-types (>= 1.16, < 4.0) mime-types (>= 1.16, < 4.0)
@ -491,7 +491,7 @@ DEPENDENCIES
daemons-rails (= 1.2.1) daemons-rails (= 1.2.1)
data_migrate! data_migrate!
database_cleaner database_cleaner
devise (= 3.5.4) devise (= 4.4.3)
digidoc_client! digidoc_client!
epp (= 1.5.0)! epp (= 1.5.0)!
epp-xml (= 1.1.0)! epp-xml (= 1.1.0)!

View file

@ -3,13 +3,11 @@ module Admin
load_and_authorize_resource load_and_authorize_resource
def index def index
params[:q] ||= {} params[:q] ||= {}
domains = BlockedDomain.all.order(:name) domains = BlockedDomain.all.order(:name)
@q = domains.search(params[:q]) @q = domains.search(params[:q])
@domains = @q.result.page(params[:page]) @domains = @q.result.page(params[:page])
@domains = @domains.per(params[:results_per_page]) if params[:results_per_page].to_i > 0 @domains = @domains.per(params[:results_per_page]) if params[:results_per_page].to_i.positive?
end end
def new def new

View file

@ -26,7 +26,7 @@ module Admin
versions = ContactVersion.includes(:item).where(whereS).order(created_at: :desc, id: :desc) versions = ContactVersion.includes(:item).where(whereS).order(created_at: :desc, id: :desc)
@q = versions.search(params[:q]) @q = versions.search(params[:q])
@versions = @q.result.page(params[:page]) @versions = @q.result.page(params[:page])
@versions = @versions.per(params[:results_per_page]) if params[:results_per_page].to_i > 0 @versions = @versions.per(params[:results_per_page]) if params[:results_per_page].to_i.positive?
end end

View file

@ -22,7 +22,7 @@ module Admin
@contacts = @q.result.uniq.page(params[:page]) @contacts = @q.result.uniq.page(params[:page])
end end
@contacts = @contacts.per(params[:results_per_page]) if params[:results_per_page].to_i > 0 @contacts = @contacts.per(params[:results_per_page]) if params[:results_per_page].to_i.positive?
end end
def search def search

View file

@ -43,7 +43,7 @@ module Admin
versions = DomainVersion.includes(:item).where(whereS).order(created_at: :desc, id: :desc) versions = DomainVersion.includes(:item).where(whereS).order(created_at: :desc, id: :desc)
@q = versions.search(params[:q]) @q = versions.search(params[:q])
@versions = @q.result.page(params[:page]) @versions = @q.result.page(params[:page])
@versions = @versions.per(params[:results_per_page]) if params[:results_per_page].to_i > 0 @versions = @versions.per(params[:results_per_page]) if params[:results_per_page].to_i.positive?
render "admin/domain_versions/archive" render "admin/domain_versions/archive"
end end

View file

@ -32,7 +32,7 @@ module Admin
end end
end end
@domains = @domains.per(params[:results_per_page]) if params[:results_per_page].to_i > 0 @domains = @domains.per(params[:results_per_page]) if params[:results_per_page].to_i.positive?
end end
# rubocop: enable Metrics/PerceivedComplexity # rubocop: enable Metrics/PerceivedComplexity

View file

@ -13,7 +13,7 @@ module Admin
@deposit = Deposit.new(deposit_params.merge(registrar: r)) @deposit = Deposit.new(deposit_params.merge(registrar: r))
@invoice = @deposit.issue_prepayment_invoice @invoice = @deposit.issue_prepayment_invoice
if @invoice && @invoice.persisted? if @invoice&.persisted?
flash[:notice] = t(:record_created) flash[:notice] = t(:record_created)
redirect_to [:admin, @invoice] redirect_to [:admin, @invoice]
else else

View file

@ -4,13 +4,11 @@ module Admin
before_action :set_domain, only: [:edit, :update] before_action :set_domain, only: [:edit, :update]
def index def index
params[:q] ||= {} params[:q] ||= {}
domains = ReservedDomain.all.order(:name) domains = ReservedDomain.all.order(:name)
@q = domains.search(params[:q]) @q = domains.search(params[:q])
@domains = @q.result.page(params[:page]) @domains = @q.result.page(params[:page])
@domains = @domains.per(params[:results_per_page]) if params[:results_per_page].to_i > 0 @domains = @domains.per(params[:results_per_page]) if params[:results_per_page].to_i.positive?
end end
def new def new

View file

@ -168,7 +168,7 @@ class EppController < ApplicationController
# validate legal document's type here because it may be in most of the requests # validate legal document's type here because it may be in most of the requests
@prefix = nil @prefix = nil
if element_count('extdata > legalDocument') > 0 if element_count('extdata > legalDocument').positive?
requires_attribute('extdata > legalDocument', 'type', values: LegalDocument::TYPES, policy: true) requires_attribute('extdata > legalDocument', 'type', values: LegalDocument::TYPES, policy: true)
end end
@ -279,7 +279,7 @@ class EppController < ApplicationController
def optional(selector, *validations) def optional(selector, *validations)
full_selector = [@prefix, selector].compact.join(' ') full_selector = [@prefix, selector].compact.join(' ')
el = params[:parsed_frame].css(full_selector).first el = params[:parsed_frame].css(full_selector).first
return unless el && el.text.present? return unless el&.text.present?
value = el.text value = el.text
validations.each do |x| validations.each do |x|

View file

@ -6,7 +6,7 @@ class Registrant::DomainsController < RegistrantController
@q = domains.search(params[:q]) @q = domains.search(params[:q])
@domains = @q.result.page(params[:page]) @domains = @q.result.page(params[:page])
end end
@domains = @domains.per(params[:results_per_page]) if params[:results_per_page].to_i > 0 @domains = @domains.per(params[:results_per_page]) if params[:results_per_page].to_i.positive?
end end
def show def show

View file

@ -1,3 +1,5 @@
# As non-GDPR compliant, this controller is deprecated. Needs to be replaced with one that relies
# on the REST WHOIS API.
class Registrant::WhoisController < RegistrantController class Registrant::WhoisController < RegistrantController
def index def index
authorize! :view, :registrant_whois authorize! :view, :registrant_whois

View file

@ -33,7 +33,7 @@ class Registrar
@contacts = @q.result(distinct: :true).page(params[:page]) @contacts = @q.result(distinct: :true).page(params[:page])
end end
@contacts = @contacts.per(params[:results_per_page]) if params[:results_per_page].to_i > 0 @contacts = @contacts.per(params[:results_per_page]) if params[:results_per_page].to_i.positive?
end end
def download_list def download_list

View file

@ -10,7 +10,7 @@ class Registrar
@deposit = Deposit.new(deposit_params.merge(registrar: current_user.registrar)) @deposit = Deposit.new(deposit_params.merge(registrar: current_user.registrar))
@invoice = @deposit.issue_prepayment_invoice @invoice = @deposit.issue_prepayment_invoice
if @invoice && @invoice.persisted? if @invoice&.persisted?
flash[:notice] = t(:please_pay_the_following_invoice) flash[:notice] = t(:please_pay_the_following_invoice)
redirect_to [:registrar, @invoice] redirect_to [:registrar, @invoice]
else else

View file

@ -40,7 +40,7 @@ class Registrar
end end
end end
@domains = @domains.per(params[:results_per_page]) if params[:results_per_page].to_i > 0 @domains = @domains.per(params[:results_per_page]) if params[:results_per_page].to_i.positive?
respond_to do |format| respond_to do |format|
format.html format.html

View file

@ -1,5 +0,0 @@
module ContactHelper
def printable_street(street)
street.to_s.gsub("\n", '<br>').html_safe
end
end

View file

@ -51,4 +51,4 @@ class UpdateWhoisRecordJob < Que::Job
def delete_blocked(name) def delete_blocked(name)
delete_reserved(name) delete_reserved(name)
end end
end end

View file

@ -13,9 +13,9 @@ class Ability
case @user.class.to_s case @user.class.to_s
when 'AdminUser' when 'AdminUser'
@user.roles.each { |role| send(role) } if @user.roles @user.roles&.each { |role| send(role) }
when 'ApiUser' when 'ApiUser'
@user.roles.each { |role| send(role) } if @user.roles @user.roles&.each { |role| send(role) }
when 'RegistrantUser' when 'RegistrantUser'
static_registrant static_registrant
end end

View file

@ -45,8 +45,10 @@ class Directo < ActiveRecord::Base
end end
data = builder.to_xml.gsub("\n",'') 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 Rails.logger.info("[Directo] XML request: #{data}")
dump_result_to_db(mappers, response) response = RestClient::Request.execute(url: ENV['directo_invoice_url'], method: :post, payload: {put: "1", what: "invoice", xmldata: data}, verify_ssl: false)
Rails.logger.info("[Directo] Directo responded with code: #{response.code}, body: #{response.body}")
dump_result_to_db(mappers, response.to_s)
end end
STDOUT << "#{Time.zone.now.utc} - Directo receipts sending finished. #{counter} of #{total} are sent\n" STDOUT << "#{Time.zone.now.utc} - Directo receipts sending finished. #{counter} of #{total} are sent\n"
@ -165,11 +167,15 @@ class Directo < ActiveRecord::Base
end end
data = builder.to_xml.gsub("\n",'') data = builder.to_xml.gsub("\n",'')
Rails.logger.info("[Directo] XML request: #{data}")
if debug if debug
STDOUT << "#{Time.zone.now.utc} - Directo xml had to be sent #{data}\n" STDOUT << "#{Time.zone.now.utc} - Directo xml had to be sent #{data}\n"
else else
response = RestClient::Request.execute(url: ENV['directo_invoice_url'], method: :post, payload: {put: "1", what: "invoice", xmldata: data}, verify_ssl: false).to_s response = RestClient::Request.execute(url: ENV['directo_invoice_url'], method: :post, payload: {put: "1", what: "invoice", xmldata: data}, verify_ssl: false)
Rails.logger.info("[Directo] Directo responded with code: #{response.code}, body: #{response.body}")
response = response.to_s
Setting.directo_monthly_number_last = directo_next Setting.directo_monthly_number_last = directo_next
Nokogiri::XML(response).css("Result").each do |res| Nokogiri::XML(response).css("Result").each do |res|
Directo.create!(request: data, response: res.as_json.to_h, invoice_number: directo_next) Directo.create!(request: data, response: res.as_json.to_h, invoice_number: directo_next)
@ -190,4 +196,3 @@ class Directo < ActiveRecord::Base
@pricelists[account_activity.price_id] = account_activity.price @pricelists[account_activity.price_id] = account_activity.price
end end
end end

View file

@ -147,7 +147,7 @@ class Epp::Contact < Contact
end end
if doc = attach_legal_document(Epp::Domain.parse_legal_document_from_frame(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? frame.css("legalDocument").first.content = doc.path if doc&.persisted?
self.legal_document_id = doc.id self.legal_document_id = doc.id
end end
@ -238,7 +238,7 @@ class Epp::Contact < Contact
) )
self.legal_documents = [doc] self.legal_documents = [doc]
frame.css("legalDocument").first.content = doc.path if doc && doc.persisted? frame.css("legalDocument").first.content = doc.path if doc&.persisted?
self.legal_document_id = doc.id self.legal_document_id = doc.id
end end

View file

@ -197,7 +197,7 @@ class Epp::Domain < Domain
) )
self.legal_documents = [doc] self.legal_documents = [doc]
frame.css("legalDocument").first.content = doc.path if doc && doc.persisted? frame.css("legalDocument").first.content = doc.path if doc&.persisted?
self.legal_document_id = doc.id self.legal_document_id = doc.id
end end
# rubocop: enable Metrics/PerceivedComplexity # rubocop: enable Metrics/PerceivedComplexity
@ -472,7 +472,7 @@ class Epp::Domain < Domain
at.deep_merge!(attrs_from(frame.css('rem'), current_user, 'rem')) at.deep_merge!(attrs_from(frame.css('rem'), current_user, 'rem'))
if doc = attach_legal_document(Epp::Domain.parse_legal_document_from_frame(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? frame.css("legalDocument").first.content = doc.path if doc&.persisted?
self.legal_document_id = doc.id self.legal_document_id = doc.id
end end
@ -547,7 +547,7 @@ class Epp::Domain < Domain
check_discarded check_discarded
if doc = attach_legal_document(Epp::Domain.parse_legal_document_from_frame(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? frame.css("legalDocument").first.content = doc.path if doc&.persisted?
end end
if Setting.request_confirmation_on_domain_deletion_enabled && if Setting.request_confirmation_on_domain_deletion_enabled &&

View file

@ -6,7 +6,8 @@ class LegalDocument < ActiveRecord::Base
if ENV['legal_document_types'].present? if ENV['legal_document_types'].present?
TYPES = ENV['legal_document_types'].split(',').map(&:strip) TYPES = ENV['legal_document_types'].split(',').map(&:strip)
else else
TYPES = %w(pdf bdoc ddoc zip rar gz tar 7z odt doc docx).freeze TYPES = %w(pdf asice asics sce scs adoc edoc bdoc ddoc zip rar gz tar 7z odt
doc docx).freeze
end end
attr_accessor :body attr_accessor :body

View file

@ -36,6 +36,7 @@ class WhoisRecord < ActiveRecord::Base
registrant = domain.registrant registrant = domain.registrant
@disclosed = [] @disclosed = []
h[:disclaimer] = disclaimer_text if disclaimer_text.present?
h[:name] = domain.name h[:name] = domain.name
h[:status] = domain.statuses.map { |x| status_map[x] || x } h[:status] = domain.statuses.map { |x| status_map[x] || x }
h[:registered] = domain.registered_at.try(:to_s, :iso8601) h[:registered] = domain.registered_at.try(:to_s, :iso8601)
@ -120,4 +121,10 @@ class WhoisRecord < ActiveRecord::Base
def destroy_whois_record def destroy_whois_record
Whois::Record.where(name: name).delete_all Whois::Record.where(name: name).delete_all
end end
private
def disclaimer_text
Setting.registry_whois_disclaimer
end
end end

View file

@ -37,7 +37,7 @@ class DomainNameValidator < ActiveModel::EachValidator
def validate_blocked(value) def validate_blocked(value)
return true unless value return true unless value
return false if BlockedDomain.where(name: value).count > 0 return false if BlockedDomain.where(name: value).count.positive?
DNS::Zone.where(origin: value).count.zero? DNS::Zone.where(origin: value).count.zero?
end end
end end

View file

@ -62,7 +62,7 @@
- if contact.street.present? - if contact.street.present?
%dt= t(:street) %dt= t(:street)
%dd{class: changing_css_class(@version,"street")}= printable_street(contact.street) %dd{class: changing_css_class(@version,"street")}= contact.street
- if contact.city.present? - if contact.city.present?
%dt= t(:city) %dt= t(:city)

View file

@ -99,6 +99,7 @@
= render 'setting_row', var: :registry_state = render 'setting_row', var: :registry_state
= render 'setting_row', var: :registry_zip = render 'setting_row', var: :registry_zip
= render 'setting_row', var: :registry_country_code = render 'setting_row', var: :registry_country_code
= render 'setting_row', var: :registry_whois_disclaimer
.row .row
.col-md-12.text-right .col-md-12.text-right

View file

@ -22,7 +22,7 @@ xml.epp_head do
xml.tag!('domain:contact', ac.code, 'type' => 'admin') xml.tag!('domain:contact', ac.code, 'type' => 'admin')
end end
if @nameservers && @nameservers.any? if @nameservers&.any?
xml.tag!('domain:ns') do xml.tag!('domain:ns') do
@nameservers.each do |x| @nameservers.each do |x|
xml.tag!('domain:hostAttr') do xml.tag!('domain:hostAttr') do

View file

@ -1,3 +1,6 @@
<%- if json['disclaimer'].present? -%>
<%= json['disclaimer'].scan(/\S.{0,72}\S(?=\s|$)|\S+/).join("\n") %>
<%- end -%>
Estonia .ee Top Level Domain WHOIS server Estonia .ee Top Level Domain WHOIS server
Domain: Domain:
@ -23,18 +26,18 @@ changed: <%= json['registrant_changed'].to_s.tr('T',' ').sub('+', ' +') %>
<%- if json['admin_contacts'].present? -%> <%- if json['admin_contacts'].present? -%>
Administrative contact: Administrative contact:
<%- for contact in json['admin_contacts'] -%> <%- for contact in json['admin_contacts'] -%>
name: <%= contact['name'] %> name: Not Disclosed
email: Not Disclosed - Visit www.internet.ee for webbased WHOIS email: Not Disclosed - Visit www.internet.ee for webbased WHOIS
changed: <%= contact['changed'].to_s.tr('T',' ').sub('+', ' +') %> changed: Not Disclosed
<%- end -%> <%- end -%>
<%- end -%> <%- end -%>
<% if json['tech_contacts'].present? %> <% if json['tech_contacts'].present? %>
Technical contact: Technical contact:
<%- for contact in json['tech_contacts'] -%> <%- for contact in json['tech_contacts'] -%>
name: <%= contact['name'] %> name: Not Disclosed
email: Not Disclosed - Visit www.internet.ee for webbased WHOIS email: Not Disclosed - Visit www.internet.ee for webbased WHOIS
changed: <%= contact['changed'].to_s.tr('T',' ').sub('+', ' +') %> changed: Not Disclosed
<%- end -%> <%- end -%>
<%- end -%> <%- end -%>

View file

@ -1,54 +0,0 @@
!!! 5
%html{lang: I18n.locale.to_s}
%head
%meta{charset: "utf-8"}/
%meta{content: "width=device-width, initial-scale=1", name: "viewport"}/
- if content_for? :head_title
= yield :head_title
- else
%title= t(:registrant_head_title)
= csrf_meta_tags
= stylesheet_link_tag 'registrant-manifest', media: 'all'
= favicon_link_tag 'favicon.ico'
%body
/ Fixed navbar
%nav.navbar.navbar-default.navbar-fixed-top
.container
.navbar-header
%button.navbar-toggle.collapsed{"aria-controls" => "navbar", "aria-expanded" => "false", "data-target" => "#navbar", "data-toggle" => "collapse", :type => "button"}
%span.sr-only Toggle navigation
%span.icon-bar
%span.icon-bar
%span.icon-bar
= link_to registrant_root_path, class: 'navbar-brand' do
= t(:registrant_head_title)
- if unstable_env.present?
.text-center
%small{style: 'color: #0074B3;'}= unstable_env
- if current_user
.navbar-collapse.collapse
%ul.nav.navbar-nav.public-nav
- if can? :view, Depp::Domain
- active_class = %w(registrant/domains registrant/check registrant/renew registrant/tranfer registrant/keyrelays).include?(params[:controller]) ? 'active' :nil
%li{class: active_class}= link_to t(:domains), registrant_domains_path
- active_class = %w(registrant/whois).include?(params[:controller]) ? 'active' :nil
%li{class: active_class}= link_to t(:whois), registrant_whois_path
%ul.nav.navbar-nav.navbar-right
- if user_signed_in?
%li= link_to t(:log_out, user: current_user), '/registrant/logout'
.container
= render 'shared/flash'
= yield
%footer.footer
.container
.row
.col-md-6
= image_tag 'eis-logo-et.png'
.col-md-6.text-right
Version
= CURRENT_COMMIT_HASH
= javascript_include_tag 'registrant-manifest', async: true

View file

@ -0,0 +1,84 @@
<!DOCTYPE html>
<html lang="<%= I18n.locale.to_s %>">
<head>
<meta charset="utf-8"/>
<meta content="width=device-width, initial-scale=1" name="viewport"/>
<% if content_for? :head_title %>
<%= yield :head_title %>
<% else %>
<title>
<%= t(:registrant_head_title) %>
</title>
<% end %>
<%= csrf_meta_tags %>
<%= stylesheet_link_tag 'registrant-manifest', media: 'all' %>
<%= favicon_link_tag 'favicon.ico' %>
</head>
<body>
<!-- Fixed navbar
-->
<nav class="navbar navbar-default navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button aria-controls="navbar" aria-expanded="false" class="navbar-toggle collapsed" data-target="#navbar" data-toggle="collapse" type="button">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<%= link_to registrant_root_path, class: 'navbar-brand' do %>
<%= t(:registrant_head_title) %>
<% if unstable_env.present? %>
<div class="text-center">
<small style="color: #0074B3;">
<%= unstable_env %>
</small>
</div>
<% end %>
<% end %>
</div>
<% if current_user %>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav public-nav">
<% if can? :view, Depp::Domain %>
<% active_class = %w(registrant/domains registrant/check registrant/renew registrant/tranfer registrant/keyrelays).include?(params[:controller]) ? 'active' :nil %>
<li class="<%= active_class %>">
<%= link_to t(:domains), registrant_domains_path %>
</li>
<% end %>
<% active_class = %w(registrant/whois).include?(params[:controller]) ? 'active' :nil %>
<li class="<%= active_class %>">
<%= link_to 'Internet.ee', 'https://internet.ee' %>
</li>
</ul>
<ul class="nav navbar-nav navbar-right">
<% if user_signed_in? %>
<li>
<%= link_to t(:log_out, user: current_user), '/registrant/logout' %>
</li>
<% end %>
</ul>
</div>
<% end %>
</div>
</nav>
<div class="container">
<%= render 'shared/flash' %>
<%= yield %>
</div>
<footer class="footer">
<div class="container">
<div class="row">
<div class="col-md-6">
<%= image_tag 'eis-logo-et.png' %>
</div>
<div class="col-md-6 text-right">
Version
<%= CURRENT_COMMIT_HASH %>
</div>
</div>
</div>
</footer>
<%= javascript_include_tag 'registrant-manifest', async: true %>
</body>
</html>

View file

@ -8,7 +8,7 @@
%dd= @contact.org_name %dd= @contact.org_name
%dt= t(:street) %dt= t(:street)
%dd= printable_street(@contact.street) %dd= @contact.street
%dt= t(:city) %dt= t(:city)
%dd= @contact.city %dd= @contact.city

View file

@ -67,8 +67,8 @@ contact_org_enabled: 'false'
# iptables_server_ip: '127.0.0.1' # iptables_server_ip: '127.0.0.1'
# Custom legal document types. Changing this requires updating EPP extension schema for allowed legalDocEnumType values. # Custom legal document types. Changing this requires updating EPP extension schema for allowed legalDocEnumType values.
# System default for legal document types is: pdf,bdoc,ddoc,zip,rar,gz,tar,7z,odt,doc,docx # System default for legal document types is: pdf,asice,sce,asics,scs,adoc,edoc,bdoc,ddoc,zip,rar,gz,tar,7z,odt,doc,docx
# legal_document_types: "pdf,bdoc,ddoc,zip,rar,gz,tar,7z,odt,doc,docx" # legal_document_types: "pdf,asice,sce,asics,scs,adoc,edoc,bdoc,ddoc,zip,rar,gz,tar,7z,odt,doc,docx"
# #

View file

@ -72,4 +72,5 @@ if con.present? && con.table_exists?('settings')
Setting.save_default(:registry_bank_code, '689') Setting.save_default(:registry_bank_code, '689')
Setting.save_default(:registry_swift, 'LHVBEE22') Setting.save_default(:registry_swift, 'LHVBEE22')
Setting.save_default(:registry_invoice_contact, 'Martti Õigus') Setting.save_default(:registry_invoice_contact, 'Martti Õigus')
Setting.save_default(:registry_whois_disclaimer, 'Search results may not be used for commercial, advertising, recompilation, repackaging, redistribution, reuse, obscuring or other similar activities.')
end end

View file

@ -145,7 +145,6 @@ Rails.application.routes.draw do
end end
resources :contacts resources :contacts
resources :whois
end end

View file

@ -8,7 +8,7 @@ More info at http://en.wikipedia.org/wiki/Extensible_Provisioning_Protocol
Contact Mapping protocol short version: Contact Mapping protocol short version:
All values are limited to Unicode Latin characters if stricter limits are not specified. This includes unicode blocks All values are limited to Unicode Latin characters if stricter limits are not specified. This includes unicode blocks
Basic Latin, Latin-1 Supplement, Latin Extended-A, Latin Extended-B, Latin Extended C, Latin Extended D, Basic Latin, Latin-1 Supplement, Latin Extended-A, Latin Extended-B, Latin Extended C, Latin Extended D,
Latin Extended Additional, Diacritics. Latin Extended Additional, Diacritics.
More info: https://en.wikipedia.org/wiki/Latin_script_in_Unicode More info: https://en.wikipedia.org/wiki/Latin_script_in_Unicode
@ -16,9 +16,9 @@ More info: https://en.wikipedia.org/wiki/Latin_script_in_Unicode
Field name Min-max Field description Field name Min-max Field description
----------------------- ------- ----------------- ----------------------- ------- -----------------
<create> 1 <create> 1
<contact:create> 1 Attribute: xmlns:contact="https://epp.tld.ee/schema/contact-ee-1.1.xsd" <contact:create> 1 Attribute: xmlns:contact="https://epp.tld.ee/schema/contact-ee-1.1.xsd"
<contact:id> 0-1 Contact id, optional, <contact:id> 0-1 Contact id, optional,
string: ASCII letters, numbers, ':', '-' characters, no spaces, string: ASCII letters, numbers, ':', '-' characters, no spaces,
max 100 characters, max 100 characters,
generated automatically if missing. generated automatically if missing.
@ -34,7 +34,7 @@ More info: https://en.wikipedia.org/wiki/Latin_script_in_Unicode
<contact:voice> 1 Phone number in format \+ddd.d+ <contact:voice> 1 Phone number in format \+ddd.d+
<contact:fax> 0 Fax is not supported and must be blank or missing <contact:fax> 0 Fax is not supported and must be blank or missing
<contact:email> 1 E-mail <contact:email> 1 E-mail
<extension> 1 <extension> 1
<eis:extdata> 1 Attribute: xmlns:eis="https://epp.tld.ee/schema/eis-1.0.xsd" <eis:extdata> 1 Attribute: xmlns:eis="https://epp.tld.ee/schema/eis-1.0.xsd"
<eis:ident> 1 Identifier <eis:ident> 1 Identifier
Attribute: "type" Attribute: "type"
@ -43,8 +43,8 @@ More info: https://en.wikipedia.org/wiki/Latin_script_in_Unicode
"birthday" # Birthday date in format in YYYY-MM-DD "birthday" # Birthday date in format in YYYY-MM-DD
Attribute: "cc" Attribute: "cc"
"EE" # Country code in ISO_3166-1 aplha 2 "EE" # Country code in ISO_3166-1 aplha 2
<eis:legalDocument> 0-1 Base64 encoded document <eis:legalDocument> 0-1 Base64 encoded document
Attribute: type="pdf/bdoc/ddoc/zip/rar/gz/tar/7z" Attribute: type="pdf/asice/sce/adoc/asics/scs/edoc/adoc/bdoc/ddoc/zip/rar/gz/tar/7z"
<clTRID> 0-1 Client transaction id <clTRID> 0-1 Client transaction id
[EXAMPLE REQUEST AND RESPONSE](/doc/epp-examples.md#epp-contact-with-valid-user-create-command-successfully-creates-a-contact) [EXAMPLE REQUEST AND RESPONSE](/doc/epp-examples.md#epp-contact-with-valid-user-create-command-successfully-creates-a-contact)
@ -53,7 +53,7 @@ More info: https://en.wikipedia.org/wiki/Latin_script_in_Unicode
Field name Min-max Field description Field name Min-max Field description
----------------------- ------- ----------------- ----------------------- ------- -----------------
<update> 1 <update> 1
<contact:update> 1 Attribute: xmlns:contact="https://epp.tld.ee/schema/contact-ee-1.1.xsd" <contact:update> 1 Attribute: xmlns:contact="https://epp.tld.ee/schema/contact-ee-1.1.xsd"
<contact:id> 1 Contact id, required <contact:id> 1 Contact id, required
<contact:chg> 1 Change container <contact:chg> 1 Change container
@ -71,7 +71,7 @@ More info: https://en.wikipedia.org/wiki/Latin_script_in_Unicode
<contact:email> 0-1 E-mail <contact:email> 0-1 E-mail
<contact:authInfo> 0-1 Required if registrar is not the owner of the contact. <contact:authInfo> 0-1 Required if registrar is not the owner of the contact.
<contact:pw> 1 Contact password. Attribute: roid="String" <contact:pw> 1 Contact password. Attribute: roid="String"
<extension> 0-1 <extension> 0-1
<eis:extdata> 0-1 Attribute: xmlns:eis="https://epp.tld.ee/schema/eis-1.0.xsd" <eis:extdata> 0-1 Attribute: xmlns:eis="https://epp.tld.ee/schema/eis-1.0.xsd"
<eis:ident> 0-1 Identifier <eis:ident> 0-1 Identifier
Attribute: "type" Attribute: "type"
@ -80,8 +80,8 @@ More info: https://en.wikipedia.org/wiki/Latin_script_in_Unicode
"birthday" # Birthday date in format in YYYY-MM-DD "birthday" # Birthday date in format in YYYY-MM-DD
Attribute: "cc" Attribute: "cc"
"EE" # Country code in ISO_3166-1 aplha 2 "EE" # Country code in ISO_3166-1 aplha 2
<eis:legalDocument> 0-1 Base64 encoded document. <eis:legalDocument> 0-1 Base64 encoded document.
Attribute: type="pdf/bdoc/ddoc/zip/rar/gz/tar/7z" Attribute: type="pdf/asice/sce/adoc/asics/scs/edoc/adoc/bdoc/ddoc/zip/rar/gz/tar/7z"
<clTRID> 0-1 Client transaction id <clTRID> 0-1 Client transaction id
@ -91,15 +91,15 @@ More info: https://en.wikipedia.org/wiki/Latin_script_in_Unicode
Field name Min-max Field description Field name Min-max Field description
----------------------- ------- ----------------- ----------------------- ------- -----------------
<delete> 1 <delete> 1
<contact:delete> 1 Attribute: xmlns:contact="https://epp.tld.ee/schema/contact-ee-1.1.xsd" <contact:delete> 1 Attribute: xmlns:contact="https://epp.tld.ee/schema/contact-ee-1.1.xsd"
<contact:id> 1 Contact id <contact:id> 1 Contact id
<contact:authInfo> 0-1 Required if registrar is not the owner of the contact. <contact:authInfo> 0-1 Required if registrar is not the owner of the contact.
<contact:pw> 1 Contact password. Attribute: roid="String" <contact:pw> 1 Contact password. Attribute: roid="String"
<extension> 0-1 <extension> 0-1
<eis:extdata> 0-1 Attribute: xmlns:eis="https://epp.tld.ee/schema/eis-1.0.xsd" <eis:extdata> 0-1 Attribute: xmlns:eis="https://epp.tld.ee/schema/eis-1.0.xsd"
<eis:legalDocument> 0-1 Base64 encoded document. <eis:legalDocument> 0-1 Base64 encoded document.
Attribute: type="pdf/bdoc/ddoc/zip/rar/gz/tar/7z" Attribute: type="pdf/asice/sce/adoc/asics/scs/edoc/adoc/bdoc/ddoc/zip/rar/gz/tar/7z"
<clTRID> 0-1 Client transaction id <clTRID> 0-1 Client transaction id
[EXAMPLE REQUEST AND RESPONSE](/doc/epp-examples.md#epp-contact-with-valid-user-delete-command-deletes-contact) [EXAMPLE REQUEST AND RESPONSE](/doc/epp-examples.md#epp-contact-with-valid-user-delete-command-deletes-contact)
@ -109,9 +109,9 @@ More info: https://en.wikipedia.org/wiki/Latin_script_in_Unicode
Field name Min-max Field description Field name Min-max Field description
----------------------- ------- ----------------- ----------------------- ------- -----------------
<check> 1 <check> 1
<contact:check> 1 Attribute: xmlns:contact="https://epp.tld.ee/schema/contact-ee-1.1.xsd" <contact:check> 1 Attribute: xmlns:contact="https://epp.tld.ee/schema/contact-ee-1.1.xsd"
<contact:id> 1-n Contact id <contact:id> 1-n Contact id
<clTRID> 0-1 Client transaction id <clTRID> 0-1 Client transaction id
[EXAMPLE REQUEST AND RESPONSE](/doc/epp-examples.md#epp-contact-with-valid-user-check-command-returns-info-about-contact-availability) [EXAMPLE REQUEST AND RESPONSE](/doc/epp-examples.md#epp-contact-with-valid-user-check-command-returns-info-about-contact-availability)
@ -121,9 +121,9 @@ More info: https://en.wikipedia.org/wiki/Latin_script_in_Unicode
Field name Min-max Field description Field name Min-max Field description
----------------------- ------- ----------------- ----------------------- ------- -----------------
<info> 1 <info> 1
<contact:info> 1 Attribute: xmlns:contact="https://epp.tld.ee/schema/contact-ee-1.1.xsd" <contact:info> 1 Attribute: xmlns:contact="https://epp.tld.ee/schema/contact-ee-1.1.xsd"
<contact:id> 1-n Contact id <contact:id> 1-n Contact id
<contact:authInfo> 0-1 Required if registrar is not the owner of the contact. <contact:authInfo> 0-1 Required if registrar is not the owner of the contact.
<contact:pw> 1 Contact password. Attribute: roid="String" <contact:pw> 1 Contact password. Attribute: roid="String"
<clTRID> 0-1 Client transaction id <clTRID> 0-1 Client transaction id

View file

@ -12,15 +12,15 @@ Domain name mapping protocol short version:
Field name Min-max Field description Field name Min-max Field description
------------------------- ------- ----------------- ------------------------- ------- -----------------
<create> 1 <create> 1
<domain:create> 1 Attribute: xmlns:domain="https://epp.tld.ee/schema/domain-eis-1.0.xsd" <domain:create> 1 Attribute: xmlns:domain="https://epp.tld.ee/schema/domain-eis-1.0.xsd"
<domain:name> 1 Domain name. Can contain unicode characters. <domain:name> 1 Domain name. Can contain unicode characters.
<domain:period> 0-1 Registration period for domain. <domain:period> 0-1 Registration period for domain.
Must add up to 3m, 6m, 9m, 1y, 2y, 3y, 4y, 5y, 6y, 7y, 8y, 9y, 10y. Must add up to 3m, 6m, 9m, 1y, 2y, 3y, 4y, 5y, 6y, 7y, 8y, 9y, 10y.
Attribute: unit="y/m/d" Attribute: unit="y/m/d"
Default is 1 year. Default is 1 year.
<domain:ns> 0-1 <domain:ns> 0-1
<domain:hostAttr> 2-11 <domain:hostAttr> 2-11
<domain:hostName> 1 Hostname of the nameserver <domain:hostName> 1 Hostname of the nameserver
<domain:hostAddr> 0-2 Required if nameserver hostname is under the same domain. <domain:hostAddr> 0-2 Required if nameserver hostname is under the same domain.
Attribute ip="v4 / v6" Attribute ip="v4 / v6"
@ -30,16 +30,16 @@ Domain name mapping protocol short version:
<domain:authInfo> 0-1 <domain:authInfo> 0-1
<domain:pw> 1 Transfer code. Attribute: roid="String" <domain:pw> 1 Transfer code. Attribute: roid="String"
</domain:authInfo> </domain:authInfo>
<extension> 1 <extension> 1
<secDNS:create> 0-1 Attribute: xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1" <secDNS:create> 0-1 Attribute: xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1"
<secDNS:keyData> 1-n <secDNS:keyData> 1-n
<secDNS:flags> 1 Allowed values: 0, 256, 257 <secDNS:flags> 1 Allowed values: 0, 256, 257
<secDNS:protocol> 1 Allowed values: 3 <secDNS:protocol> 1 Allowed values: 3
<secDNS:alg> 1 Allowed values: 3, 5, 6, 7, 8, 10, 13, 14 <secDNS:alg> 1 Allowed values: 3, 5, 6, 7, 8, 10, 13, 14
<secDNS:pubKey> 1 Public key <secDNS:pubKey> 1 Public key
<eis:extdata> 1 Attribute: xmlns:eis="https://epp.tld.ee/schema/eis-1.0.xsd" <eis:extdata> 1 Attribute: xmlns:eis="https://epp.tld.ee/schema/eis-1.0.xsd"
<eis:legalDocument> 1 Base64 encoded document. <eis:legalDocument> 1 Base64 encoded document.
Attribute: type="pdf/bdoc/ddoc/zip/rar/gz/tar/7z" Attribute: type="pdf/asice/sce/adoc/asics/scs/edoc/adoc/bdoc/ddoc/zip/rar/gz/tar/7z"
<eis:reserved> 0-1 <eis:reserved> 0-1
<eis:pw> 0-1 Required if registering a reserved domain <eis:pw> 0-1 Required if registering a reserved domain
<clTRID> 0-1 Client transaction id <clTRID> 0-1 Client transaction id
@ -50,27 +50,27 @@ Domain name mapping protocol short version:
Field name Min-max Field description Field name Min-max Field description
------------------------ -------- ----------------- ------------------------ -------- -----------------
<update> 1 <update> 1
<domain:update> 1 Attribute: xmlns:domain="https://epp.tld.ee/schema/domain-eis-1.0.xsd" <domain:update> 1 Attribute: xmlns:domain="https://epp.tld.ee/schema/domain-eis-1.0.xsd"
<domain:name> 1 Domain name. Can contain unicode characters. <domain:name> 1 Domain name. Can contain unicode characters.
<domain:add> 0-1 Objects to add <domain:add> 0-1 Objects to add
<domain:contact> 0-n Contact reference. Attribute: type="admin / tech" <domain:contact> 0-n Contact reference. Attribute: type="admin / tech"
<domain:status> 0-n Status description. <domain:status> 0-n Status description.
Attribute: s="clientDeleteProhibited / clientHold / Attribute: s="clientDeleteProhibited / clientHold /
clientRenewProhibited / clientTransferProhibited / clientRenewProhibited / clientTransferProhibited /
clientUpdateProhibited" clientUpdateProhibited"
<domain:ns> 0-1 <domain:ns> 0-1
<domain:hostAttr> 1 <domain:hostAttr> 1
<domain:hostName> 1 Hostname of the nameserver <domain:hostName> 1 Hostname of the nameserver
<domain:hostAddr> 0-2 Required if nameserver hostname is under the same domain. <domain:hostAddr> 0-2 Required if nameserver hostname is under the same domain.
Attribute ip="v4 / v6" Attribute ip="v4 / v6"
<domain:rem> 0-1 Objects to remove <domain:rem> 0-1 Objects to remove
<domain:contact> 0-n Contact reference. Attribute: type="admin / tech" <domain:contact> 0-n Contact reference. Attribute: type="admin / tech"
<domain:status> 0-n Attribute: s="clientDeleteProhibited / clientHold / <domain:status> 0-n Attribute: s="clientDeleteProhibited / clientHold /
clientRenewProhibited / clientTransferProhibited / clientRenewProhibited / clientTransferProhibited /
clientUpdateProhibited" clientUpdateProhibited"
<domain:ns> 0-1 <domain:ns> 0-1
<domain:hostAttr> 1 <domain:hostAttr> 1
<domain:hostName> 1 Hostname of the nameserver <domain:hostName> 1 Hostname of the nameserver
<domain:chg> 0-1 Attributes to change <domain:chg> 0-1 Attributes to change
<domain:registrant> 0-1 Contact reference to the registrant <domain:registrant> 0-1 Contact reference to the registrant
@ -80,18 +80,18 @@ Domain name mapping protocol short version:
</domain:authInfo> </domain:authInfo>
<extension> 0-1 Required if registrant is changing <extension> 0-1 Required if registrant is changing
<secDNS:update> 0-1 Attribute: xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1" <secDNS:update> 0-1 Attribute: xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1"
<secDNS:rem> 0-1 <secDNS:rem> 0-1
<secDNS:keyData> 1-n <secDNS:keyData> 1-n
<secDNS:pubKey> 1 Public key <secDNS:pubKey> 1 Public key
<secDNS:add> 0-1 <secDNS:add> 0-1
<secDNS:keyData> 1-n <secDNS:keyData> 1-n
<secDNS:flags> 1 Allowed values: 0, 256, 257 <secDNS:flags> 1 Allowed values: 0, 256, 257
<secDNS:protocol> 1 Allowed values: 3 <secDNS:protocol> 1 Allowed values: 3
<secDNS:alg> 1 Allowed values: 3, 5, 6, 7, 8, 10, 13, 14 <secDNS:alg> 1 Allowed values: 3, 5, 6, 7, 8, 10, 13, 14
<secDNS:pubKey> 1 Public key <secDNS:pubKey> 1 Public key
<eis:extdata> 0-1 Attribute: xmlns:eis="https://epp.tld.ee/schema/eis-1.0.xsd" <eis:extdata> 0-1 Attribute: xmlns:eis="https://epp.tld.ee/schema/eis-1.0.xsd"
<eis:legalDocument> 0-1 Base64 encoded document. Required if registrant is changing. <eis:legalDocument> 0-1 Base64 encoded document. Required if registrant is changing.
Attribute: type="pdf/bdoc/ddoc/zip/rar/gz/tar/7z" Attribute: type="pdf/asice/sce/adoc/asics/scs/edoc/adoc/bdoc/ddoc/zip/rar/gz/tar/7z"
<clTRID> 0-1 Client transaction id <clTRID> 0-1 Client transaction id
[EXAMPLE REQUEST AND RESPONSE](/doc/epp-examples.md#epp-domain-with-valid-domain-updates-domain-and-adds-objects) [EXAMPLE REQUEST AND RESPONSE](/doc/epp-examples.md#epp-domain-with-valid-domain-updates-domain-and-adds-objects)
@ -100,14 +100,14 @@ Domain name mapping protocol short version:
Field name Min-max Field description Field name Min-max Field description
----------------------- ------- ----------------- ----------------------- ------- -----------------
<delete> 1 <delete> 1
<domain:delete> 1 Attribute: xmlns:domain="https://epp.tld.ee/schema/domain-eis-1.0.xsd" <domain:delete> 1 Attribute: xmlns:domain="https://epp.tld.ee/schema/domain-eis-1.0.xsd"
Optional attribute: verified="yes/no" Optional attribute: verified="yes/no"
<domain:name> 1 Domain name. Can contain unicode characters. <domain:name> 1 Domain name. Can contain unicode characters.
<extension> 1 <extension> 1
<eis:extdata> 1 Attribute: xmlns:eis="https://epp.tld.ee/schema/eis-1.0.xsd" <eis:extdata> 1 Attribute: xmlns:eis="https://epp.tld.ee/schema/eis-1.0.xsd"
<eis:legalDocument> 1 Base64 encoded document. <eis:legalDocument> 1 Base64 encoded document.
Attribute: type="pdf/bdoc/ddoc/zip/rar/gz/tar/7z" Attribute: type="pdf/asice/sce/adoc/asics/scs/edoc/adoc/bdoc/ddoc/zip/rar/gz/tar/7z"
<clTRID> 0-1 Client transaction id <clTRID> 0-1 Client transaction id
[EXAMPLE REQUEST AND RESPONSE](/doc/epp-examples.md#epp-domain-with-valid-domain-deletes-domain) [EXAMPLE REQUEST AND RESPONSE](/doc/epp-examples.md#epp-domain-with-valid-domain-deletes-domain)
@ -116,9 +116,9 @@ Domain name mapping protocol short version:
Field name Min-max Field description Field name Min-max Field description
----------------------- ------- ----------------- ----------------------- ------- -----------------
<info> 1 <info> 1
<domain:info> 1 Attribute: xmlns:domain="https://epp.tld.ee/schema/domain-eis-1.0.xsd" <domain:info> 1 Attribute: xmlns:domain="https://epp.tld.ee/schema/domain-eis-1.0.xsd"
<domain:name> 1 Domain name. Can contain unicode characters. <domain:name> 1 Domain name. Can contain unicode characters.
Attribute: hosts="all / del / sub / none" Attribute: hosts="all / del / sub / none"
<domain:authInfo> 0-1 Required if registrar is not the owner of the domain. <domain:authInfo> 0-1 Required if registrar is not the owner of the domain.
<domain:pw> 1 Domain transfer code. Attribute: roid="String" <domain:pw> 1 Domain transfer code. Attribute: roid="String"
@ -130,18 +130,18 @@ Domain name mapping protocol short version:
Field name Min-max Field description Field name Min-max Field description
----------------------- ------- ----------------- ----------------------- ------- -----------------
<renew> 1 <renew> 1
<domain:renew> 1 Attribute: xmlns:domain="https://epp.tld.ee/schema/domain-eis-1.0.xsd" <domain:renew> 1 Attribute: xmlns:domain="https://epp.tld.ee/schema/domain-eis-1.0.xsd"
<domain:name> 1 Domain name. Can contain unicode characters. <domain:name> 1 Domain name. Can contain unicode characters.
<domain:curExpDate> 1 Current expiry date (ISO8601 format) <domain:curExpDate> 1 Current expiry date (ISO8601 format)
<domain:period> 0-1 Registration period for domain. <domain:period> 0-1 Registration period for domain.
Must add up to 3m, 6m, 9m, 1y, 2y, 3y, 4y, 5y, 6y, 7y, 8y, 9y, 10y. Must add up to 3m, 6m, 9m, 1y, 2y, 3y, 4y, 5y, 6y, 7y, 8y, 9y, 10y.
Attribute: unit="y/m/d" Attribute: unit="y/m/d"
Default value is 1 year. Default value is 1 year.
<extension> 0-1 <extension> 0-1
<eis:extdata> 0-1 Attribute: xmlns:eis="https://epp.tld.ee/schema/eis-1.0.xsd" <eis:extdata> 0-1 Attribute: xmlns:eis="https://epp.tld.ee/schema/eis-1.0.xsd"
<eis:legalDocument> 0-1 Base64 encoded document. <eis:legalDocument> 0-1 Base64 encoded document.
Attribute: type="pdf/bdoc/ddoc/zip/rar/gz/tar/7z" Attribute: type="pdf/asice/sce/adoc/asics/scs/edoc/adoc/bdoc/ddoc/zip/rar/gz/tar/7z"
<clTRID> 0-1 Client transaction id <clTRID> 0-1 Client transaction id
[EXAMPLE REQUEST AND RESPONSE](/doc/epp-examples.md#epp-domain-with-valid-domain-renews-a-domain) [EXAMPLE REQUEST AND RESPONSE](/doc/epp-examples.md#epp-domain-with-valid-domain-renews-a-domain)
@ -152,13 +152,13 @@ Domain name mapping protocol short version:
----------------------- ------- ----------------- ----------------------- ------- -----------------
<transfer> 1 Attribute: op="request/query/approve/reject/cancel" <transfer> 1 Attribute: op="request/query/approve/reject/cancel"
<domain:transfer> 1 Attribute: xmlns:domain="https://epp.tld.ee/schema/domain-eis-1.0.xsd" <domain:transfer> 1 Attribute: xmlns:domain="https://epp.tld.ee/schema/domain-eis-1.0.xsd"
<domain:name> 1 Domain name. Can contain unicode characters. <domain:name> 1 Domain name. Can contain unicode characters.
<domain:authInfo> 1 <domain:authInfo> 1
<domain:pw> 1 Domain transfer code. Attribute: roid="String" <domain:pw> 1 Domain transfer code. Attribute: roid="String"
<extension> 0-1 <extension> 0-1
<eis:extdata> 0-1 Attribute: xmlns:eis="https://epp.tld.ee/schema/eis-1.0.xsd" <eis:extdata> 0-1 Attribute: xmlns:eis="https://epp.tld.ee/schema/eis-1.0.xsd"
<eis:legalDocument> 0-1 Base64 encoded document. <eis:legalDocument> 0-1 Base64 encoded document.
Attribute: type="pdf/bdoc/ddoc/zip/rar/gz/tar/7z" Attribute: type="pdf/asice/sce/adoc/asics/scs/edoc/adoc/bdoc/ddoc/zip/rar/gz/tar/7z"
<clTRID> 0-1 Client transaction id <clTRID> 0-1 Client transaction id
[EXAMPLE REQUEST AND RESPONSE](/doc/epp-examples.md#epp-domain-with-valid-domain-transfers-a-domain) [EXAMPLE REQUEST AND RESPONSE](/doc/epp-examples.md#epp-domain-with-valid-domain-transfers-a-domain)
@ -167,9 +167,9 @@ Domain name mapping protocol short version:
Field name Min-max Field description Field name Min-max Field description
----------------------- ------- ----------------- ----------------------- ------- -----------------
<check> 1 <check> 1
<domain:check> 1 Attribute: xmlns:domain="https://epp.tld.ee/schema/domain-eis-1.0.xsd" <domain:check> 1 Attribute: xmlns:domain="https://epp.tld.ee/schema/domain-eis-1.0.xsd"
<domain:name> 1 Domain name. Can contain unicode characters. <domain:name> 1 Domain name. Can contain unicode characters.
<clTRID> 0-1 Client transaction id <clTRID> 0-1 Client transaction id
[EXAMPLE REQUEST AND RESPONSE](/doc/epp-examples.md#epp-domain-with-valid-domain-checks-a-domain) [EXAMPLE REQUEST AND RESPONSE](/doc/epp-examples.md#epp-domain-with-valid-domain-checks-a-domain)

View file

@ -63,7 +63,13 @@
<simpleType name="legalDocEnumType"> <simpleType name="legalDocEnumType">
<restriction base="token"> <restriction base="token">
<enumeration value="pdf"/> <enumeration value="pdf"/>
<enumeration value="asice"/>
<enumeration value="asics"/>
<enumeration value="sce"/>
<enumeration value="scs"/>
<enumeration value="adoc"/>
<enumeration value="bdoc"/> <enumeration value="bdoc"/>
<enumeration value="edoc"/>
<enumeration value="ddoc"/> <enumeration value="ddoc"/>
<enumeration value="zip"/> <enumeration value="zip"/>
<enumeration value="rar"/> <enumeration value="rar"/>

View file

@ -1,12 +0,0 @@
require 'rails_helper'
RSpec.feature 'Contact list', settings: false do
background do
sign_in_to_admin_area
end
it 'is visible' do
visit admin_contacts_path
expect(page).to have_css('.contacts')
end
end

View file

@ -1,67 +0,0 @@
require 'rails_helper'
RSpec.describe WhoisRecord do
describe '::generate_json', db: false do
let(:registrant) { build_stubbed(:registrant) }
let(:domain) { build_stubbed(:domain, registrant: registrant) }
let(:whois_record) { described_class.new }
subject(:generated_json) { whois_record.generate_json }
before do
allow(whois_record).to receive(:domain).and_return(domain)
end
it 'generates registrant kind' do
expect(registrant).to receive(:kind).and_return('test kind')
expect(generated_json[:registrant_kind]).to eq('test kind')
end
describe 'reg no' do
subject(:reg_no) { generated_json[:registrant_reg_no] }
before do
allow(registrant).to receive(:reg_no).and_return('test reg no')
end
context 'when registrant is legal entity' do
let(:registrant) { build_stubbed(:registrant_legal_entity) }
it 'is present' do
expect(reg_no).to eq('test reg no')
end
end
context 'when registrant is private entity' do
let(:registrant) { build_stubbed(:registrant_private_entity) }
it 'is absent' do
expect(reg_no).to be_nil
end
end
end
describe 'country code' do
subject(:country_code) { generated_json[:registrant_ident_country_code] }
before do
allow(registrant).to receive(:ident_country_code).and_return('test country code')
end
context 'when registrant is legal entity' do
let(:registrant) { build_stubbed(:registrant_legal_entity) }
it 'is present' do
expect(country_code).to eq('test country code')
end
end
context 'when registrant is private entity' do
let(:registrant) { build_stubbed(:registrant_private_entity) }
it 'is absent' do
expect(country_code).to be_nil
end
end
end
end
end

View file

@ -0,0 +1,25 @@
require 'test_helper'
class AdminContactsTest < ActionDispatch::IntegrationTest
def setup
super
@contact = contacts(:william)
login_as users(:admin)
end
def test_display_list
visit admin_contacts_path
assert_text('william-001')
assert_text('william-002')
assert_text('acme-ltd-001')
end
def test_display_details
visit admin_contact_path(@contact)
assert_text('Street Main Street City New York Postcode 12345 ' \
'State New York Country United States of America')
end
end

View file

@ -0,0 +1,17 @@
require 'test_helper'
class RegistrantLayoutTest < ActionDispatch::IntegrationTest
def setup
super
login_as(users(:registrant))
Setting.days_to_keep_business_registry_cache = 1
travel_to Time.zone.parse('2010-07-05')
end
def test_has_link_to_rest_whois
visit registrant_domains_url
assert(has_link?('Internet.ee', href: 'https://internet.ee'))
refute(has_link?('WHOIS', href: 'registrant/whois'))
end
end

View file

@ -0,0 +1,60 @@
require 'test_helper'
class WhoisRecordTest < ActiveSupport::TestCase
def setup
super
@domain = domains(:shop)
@record = WhoisRecord.new(domain: @domain)
@record.populate
end
def test_generated_json_has_expected_values
expected_disclaimer_text = <<-TEXT.squish
Search results may not be used for commercial, advertising, recompilation,
repackaging, redistribution, reuse, obscuring or other similar activities.
TEXT
expected_partial_hash = {
disclaimer: expected_disclaimer_text,
name: 'shop.test',
registrant: 'John',
registrant_kind: 'priv',
email: 'john@inbox.test',
expire: '2010-07-05',
nameservers: ['ns1.bestnames.test', 'ns2.bestnames.test'],
registrar_address: 'Main Street, New York, New York, 12345',
dnssec_keys: [],
}
expected_partial_hash.each do |key, value|
assert_equal(value, @record.generated_json[key])
end
end
def test_generated_body_has_justified_disclaimer
expected_disclaimer = begin
'Search results may not be used for commercial, advertising, recompilation,\n' \
'repackaging, redistribution, reuse, obscuring or other similar activities.'
end
expected_technical_contact = begin
'Technical contact:\n' \
'name: Not Disclosed\n' \
'email: Not Disclosed - Visit www.internet.ee for webbased WHOIS\n' \
'changed: Not Disclosed'
end
regexp_contact = Regexp.new(expected_technical_contact, Regexp::MULTILINE)
regexp_disclaimer = Regexp.new(expected_disclaimer, Regexp::MULTILINE)
assert_match(regexp_disclaimer, @record.body)
assert_match(regexp_contact, @record.body)
end
def test_whois_record_has_no_disclaimer_if_Setting_is_blank
Setting.stubs(:registry_whois_disclaimer, '') do
refute(@record.json['disclaimer'])
refute_match(/Search results may not be used for commercial/, @record.body)
end
end
end