mirror of
https://github.com/internetee/registry.git
synced 2025-07-04 18:23:35 +02:00
Merge branch 'master' into alpha
This commit is contained in:
commit
05ba870385
46 changed files with 2178 additions and 1001 deletions
|
@ -1,3 +1,8 @@
|
|||
08.06.2015
|
||||
|
||||
* Add sk service name to application.yml
|
||||
* Renew zonefile procedure
|
||||
|
||||
02.06.2015
|
||||
|
||||
* Added possibility to overwrite legal document types at application.yml level.
|
||||
|
|
2
Gemfile
2
Gemfile
|
@ -73,7 +73,7 @@ gem 'digidoc_client', '~> 0.2.1'
|
|||
|
||||
# epp
|
||||
gem 'epp', '~> 1.4.2', github: 'gitlabeu/epp'
|
||||
gem 'epp-xml', '~> 1.0.1' # EPP XMLs
|
||||
gem 'epp-xml', '~> 1.0.2' # EPP XMLs
|
||||
gem 'uuidtools', '~> 2.1.4' # For unique IDs (used by the epp gem)
|
||||
|
||||
# for importing legacy db
|
||||
|
|
|
@ -171,7 +171,7 @@ GEM
|
|||
nokogiri (>= 1.4.0)
|
||||
savon (>= 2.4.0)
|
||||
docile (1.1.5)
|
||||
epp-xml (1.0.1)
|
||||
epp-xml (1.0.2)
|
||||
activesupport (~> 4.1)
|
||||
builder (~> 3.2)
|
||||
equalizer (0.0.11)
|
||||
|
@ -529,7 +529,7 @@ DEPENDENCIES
|
|||
devise (~> 3.4.1)
|
||||
digidoc_client (~> 0.2.1)
|
||||
epp (~> 1.4.2)!
|
||||
epp-xml (~> 1.0.1)
|
||||
epp-xml (~> 1.0.2)
|
||||
fabrication (~> 2.12.2)
|
||||
faker (~> 1.3.0)
|
||||
figaro (~> 1.1.0)
|
||||
|
|
|
@ -57,6 +57,7 @@ class Admin::AdminUsersController < AdminController
|
|||
end
|
||||
|
||||
def admin_user_params
|
||||
params.require(:admin_user).permit(:username, :password, :password_confirmation, :identity_code, :email, :country_code, { roles: [] })
|
||||
params.require(:admin_user).permit(:username,
|
||||
:password, :password_confirmation, :identity_code, :email, :country_code, { roles: [] })
|
||||
end
|
||||
end
|
||||
|
|
|
@ -39,6 +39,7 @@ class Admin::PricelistsController < AdminController
|
|||
end
|
||||
|
||||
def pricelist_params
|
||||
params.require(:pricelist).permit(:category, :name, :duration, :price, :valid_from, :valid_to)
|
||||
params.require(:pricelist).permit(:operation_category, :category, :price_category,
|
||||
:duration, :price, :valid_from, :valid_to)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -118,6 +118,9 @@ class Epp::ContactsController < EppController
|
|||
contact_org_disabled
|
||||
fax_disabled
|
||||
status_editing_disabled
|
||||
if params[:parsed_frame].css('ident').present?
|
||||
epp_errors << { code: '2306', msg: "#{I18n.t(:ident_update_error)} [ident]" }
|
||||
end
|
||||
requires 'id'
|
||||
@prefix = nil
|
||||
end
|
||||
|
|
|
@ -70,7 +70,7 @@ class Domain < ActiveRecord::Base
|
|||
after_save :update_whois_record
|
||||
|
||||
validates :name_dirty, domain_name: true, uniqueness: true
|
||||
validates :name_puny, length: { maximum: 66 }
|
||||
validates :puny_label, length: { maximum: 63 }
|
||||
validates :period, numericality: { only_integer: true }
|
||||
validates :registrant, :registrar, presence: true
|
||||
|
||||
|
@ -146,6 +146,12 @@ class Domain < ActiveRecord::Base
|
|||
{ admin_contacts: :registrar }
|
||||
)
|
||||
end
|
||||
|
||||
def expire_domains
|
||||
Domain.where('valid_to <= ?', Time.zone.now).each do |x|
|
||||
x.domain_statuses.create(value: DomainStatus::EXPIRED) if x.expirable?
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def name=(value)
|
||||
|
@ -160,6 +166,10 @@ class Domain < ActiveRecord::Base
|
|||
"EIS-#{id}"
|
||||
end
|
||||
|
||||
def puny_label
|
||||
name_puny.to_s.split('.').first
|
||||
end
|
||||
|
||||
def registrant_typeahead
|
||||
@registrant_typeahead || registrant.try(:name) || nil
|
||||
end
|
||||
|
@ -174,6 +184,11 @@ class Domain < ActiveRecord::Base
|
|||
)).empty?
|
||||
end
|
||||
|
||||
def expirable?
|
||||
return false if valid_to > Time.zone.now
|
||||
domain_statuses.where(value: DomainStatus::EXPIRED).empty?
|
||||
end
|
||||
|
||||
def pending_update?
|
||||
(domain_statuses.pluck(:value) & %W(
|
||||
#{DomainStatus::PENDING_UPDATE}
|
||||
|
|
|
@ -143,7 +143,6 @@ class Epp::Contact < Contact
|
|||
at.deep_merge!(self.class.attrs_from(frame.css('rem'), 'rem'))
|
||||
at.deep_merge!(self.class.attrs_from(frame.css('add')))
|
||||
at.deep_merge!(self.class.attrs_from(frame.css('chg')))
|
||||
at.merge!(self.class.ident_attrs(frame.css('ident').first))
|
||||
legal_frame = frame.css('legalDocument').first
|
||||
at[:legal_documents_attributes] = self.class.legal_document_attrs(legal_frame)
|
||||
self.deliver_emails = true # turn on email delivery for epp
|
||||
|
|
|
@ -34,7 +34,6 @@ class Epp::Domain < Domain
|
|||
max: Setting.ns_max_count
|
||||
}
|
||||
],
|
||||
[:period, :out_of_range, { value: { obj: 'period', val: period } }],
|
||||
[:dnskeys, :out_of_range,
|
||||
{
|
||||
min: Setting.dnskeys_min_count,
|
||||
|
@ -56,7 +55,7 @@ class Epp::Domain < Domain
|
|||
],
|
||||
'2005' => [ # Parameter value syntax error
|
||||
[:name_dirty, :invalid, { obj: 'name', val: name_dirty }],
|
||||
[:name_puny, :too_long, { obj: 'name', val: name_puny }]
|
||||
[:puny_label, :too_long, { obj: 'name', val: name_puny }]
|
||||
],
|
||||
'2201' => [ # Authorisation error
|
||||
[:auth_info, :wrong_pw]
|
||||
|
@ -69,6 +68,7 @@ class Epp::Domain < Domain
|
|||
[:base, :domain_status_prohibits_operation]
|
||||
],
|
||||
'2306' => [ # Parameter policy error
|
||||
[:period, :out_of_range, { value: { obj: 'period', val: period } }],
|
||||
[:base, :ds_data_with_key_not_allowed],
|
||||
[:base, :ds_data_not_allowed],
|
||||
[:base, :key_data_not_allowed],
|
||||
|
@ -429,6 +429,13 @@ class Epp::Domain < Domain
|
|||
def renew(cur_exp_date, period, unit = 'y')
|
||||
# TODO: Check how much time before domain exp date can it be renewed
|
||||
validate_exp_dates(cur_exp_date)
|
||||
|
||||
if Setting.days_to_renew_domain_before_expire != 0
|
||||
if (valid_to - Time.zone.now).to_i / 1.day >= Setting.days_to_renew_domain_before_expire
|
||||
add_epp_error('2105', nil, nil, I18n.t('object_is_not_eligible_for_renewal'))
|
||||
end
|
||||
end
|
||||
|
||||
return false if errors.any?
|
||||
|
||||
p = self.class.convert_period_to_time(period, unit)
|
||||
|
|
|
@ -3,9 +3,11 @@ class Pricelist < ActiveRecord::Base
|
|||
|
||||
monetize :price_cents
|
||||
|
||||
validates :price_cents, :price_currency, :valid_from, :category, presence: true
|
||||
validates :price_cents, :price_currency, :price,
|
||||
:valid_from, :category, :operation_category, :duration, presence: true
|
||||
|
||||
CATEGORIES = %w(ee com.ee fie.ee pri.ee med.ee)
|
||||
CATEGORIES = %w(ee pri.ee fie.ee med.ee com.ee)
|
||||
OPERATION_CATEGORIES = %w(new renew)
|
||||
DURATIONS = %w(1year 2years 3years)
|
||||
|
||||
after_initialize :init_values
|
||||
|
@ -13,4 +15,8 @@ class Pricelist < ActiveRecord::Base
|
|||
return unless new_record?
|
||||
self.valid_from = Time.zone.now.beginning_of_year
|
||||
end
|
||||
|
||||
def name
|
||||
"#{operation_category} #{category}"
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,11 +1,4 @@
|
|||
class DomainNameValidator < ActiveModel::EachValidator
|
||||
# TODO
|
||||
# validates lenght of 2-63
|
||||
# validates/honours Estonian additional letters zäõüö
|
||||
# honours punicode and all interfces honors utf8
|
||||
# validates lower level domains (.pri.ee, edu.ee etc)
|
||||
# lower level domains are fixed for .ee and can add statically into settings
|
||||
|
||||
def validate_each(record, attribute, value)
|
||||
if !self.class.validate_format(value)
|
||||
record.errors[attribute] << (options[:message] || record.errors.generate_message(attribute, :invalid))
|
||||
|
|
|
@ -3,12 +3,12 @@
|
|||
|
||||
.row
|
||||
.col-md-6
|
||||
.form-group
|
||||
= f.label :operation_category
|
||||
= f.select(:operation_category, Pricelist::OPERATION_CATEGORIES, {}, { class: 'form-control' })
|
||||
.form-group
|
||||
= f.label :category, t(:category)
|
||||
= f.select(:category, Pricelist::CATEGORIES, {}, { class: 'form-control' })
|
||||
.form-group
|
||||
= f.label :name
|
||||
= f.text_field(:name, class: 'form-control')
|
||||
.form-group
|
||||
= f.label :duration
|
||||
= f.select(:duration, Pricelist::DURATIONS, {}, { class: 'form-control' })
|
||||
|
|
|
@ -5,20 +5,6 @@
|
|||
%h2.text-right.text-center-xs
|
||||
= link_to(t(:new), new_admin_pricelist_path, class: 'btn btn-primary')
|
||||
|
||||
%hr
|
||||
-# .row
|
||||
-# .col-md-12
|
||||
-# = form_tag admin_pricelists_path, html: { class: 'form-horizontal' } do
|
||||
-# .col-md-11
|
||||
-# .form-group
|
||||
-# = search_field_tag :name_cont, class: 'form-control'
|
||||
-# .col-md-1.text-right.text-center-xs
|
||||
-# .form-group
|
||||
-# %button.btn.btn-primary
|
||||
-#
|
||||
-# %span.glyphicon.glyphicon-search
|
||||
-#
|
||||
|
||||
%hr
|
||||
.row
|
||||
.col-md-12
|
||||
|
@ -29,9 +15,9 @@
|
|||
%th{class: 'col-xs-2'}
|
||||
= sort_link(@q, 'category', t(:category))
|
||||
%th{class: 'col-xs-2'}
|
||||
= sort_link(@q, 'duration', t(:duration))
|
||||
= sort_link(@q, 'operation_category', t(:operation))
|
||||
%th{class: 'col-xs-2'}
|
||||
= sort_link(@q, 'name', t(:name))
|
||||
= sort_link(@q, 'duration', t(:duration))
|
||||
%th{class: 'col-xs-2'}
|
||||
= sort_link(@q, 'price', t(:price))
|
||||
%th{class: 'col-xs-2'}
|
||||
|
@ -45,8 +31,8 @@
|
|||
- @pricelists.each do |pricelist|
|
||||
%tr
|
||||
%td= pricelist.category
|
||||
%td= pricelist.operation_category
|
||||
%td= pricelist.duration
|
||||
%td= pricelist.name
|
||||
%td= pricelist.price
|
||||
%td= l(pricelist.valid_from, format: :ydate)
|
||||
%td= l(pricelist.valid_to, format: :ydate)
|
||||
|
|
|
@ -55,7 +55,7 @@ xml.epp_head do
|
|||
end
|
||||
if can? :view_full_info, @contact, @password
|
||||
xml.tag!('extension') do
|
||||
xml.tag!('eis:extdata', 'xmlns:eis' => 'urn:ee:eis:xml:epp:eis-1.0') do
|
||||
xml.tag!('eis:extdata', 'xmlns:eis' => 'https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd') do
|
||||
xml.tag!('eis:ident', @contact.ident,
|
||||
type: @contact.ident_type, cc: @contact.ident_country_code)
|
||||
end
|
||||
|
|
|
@ -11,7 +11,7 @@ xml.epp_head do
|
|||
xml.objURI 'urn:ietf:params:xml:ns:keyrelay-1.0'
|
||||
xml.svcExtension do
|
||||
xml.extURI 'urn:ietf:params:xml:ns:secDNS-1.1'
|
||||
xml.extURI 'urn:ee:eis:xml:epp:eis-1.0'
|
||||
xml.extURI 'https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd'
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
</contact:create>
|
||||
</create>
|
||||
<extension>
|
||||
<eis:extdata xmlns:eis="urn:ee:eis:xml:epp:eis-1.0">
|
||||
<eis:extdata xmlns:eis="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd">
|
||||
<eis:ident type="bic" cc="EE">123</eis:ident>
|
||||
<eis:legalDocument type="pdf">
|
||||
JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
</contact:delete>
|
||||
</delete>
|
||||
<extension>
|
||||
<eis:extdata xmlns:eis="urn:ee:eis:xml:epp:eis-1.0">
|
||||
<eis:extdata xmlns:eis="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd">
|
||||
<eis:legalDocument type="pdf">
|
||||
JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==
|
||||
</eis:legalDocument>
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
</contact:update>
|
||||
</update>
|
||||
<extension>
|
||||
<eis:extdata xmlns:eis="urn:ee:eis:xml:epp:eis-1.0">
|
||||
<eis:extdata xmlns:eis="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd">
|
||||
<eis:legalDocument type="pdf">
|
||||
JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==
|
||||
</eis:legalDocument>
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
</secDNS:create>
|
||||
</extension>
|
||||
<extension>
|
||||
<eis:extdata xmlns:eis="urn:ee:eis:xml:epp:eis-1.0">
|
||||
<eis:extdata xmlns:eis="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd">
|
||||
<eis:legalDocument type="pdf">
|
||||
JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==
|
||||
</eis:legalDocument>
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
</domain:delete>
|
||||
</delete>
|
||||
<extension>
|
||||
<eis:extdata xmlns:eis="urn:ee:eis:xml:epp:eis-1.0">
|
||||
<eis:extdata xmlns:eis="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd">
|
||||
<eis:legalDocument type="pdf">
|
||||
JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==
|
||||
</eis:legalDocument>
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
</domain:transfer>
|
||||
</transfer>
|
||||
<extension>
|
||||
<eis:extdata xmlns:eis="urn:ee:eis:xml:epp:eis-1.0">
|
||||
<eis:extdata xmlns:eis="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd">
|
||||
<eis:legalDocument type="pdf">
|
||||
JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==
|
||||
</eis:legalDocument>
|
||||
|
|
|
@ -37,7 +37,7 @@
|
|||
</secDNS:update>
|
||||
</extension>
|
||||
<extension>
|
||||
<eis:extdata xmlns:eis="urn:ee:eis:xml:epp:eis-1.0">
|
||||
<eis:extdata xmlns:eis="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd">
|
||||
<eis:legalDocument type="pdf">
|
||||
JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==
|
||||
</eis:legalDocument>
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
<ext:relative>P1D</ext:relative>
|
||||
</ext:expiry>
|
||||
</ext:keyrelay>
|
||||
<eis:extdata xmlns:eis="urn:ee:eis:xml:epp:eis-1.0">
|
||||
<eis:extdata xmlns:eis="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd">
|
||||
<eis:legalDocument type="pdf">JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0Zp==</eis:legalDocument>
|
||||
</eis:extdata>
|
||||
<ext:clTRID>1422542244</ext:clTRID>
|
||||
|
|
|
@ -31,6 +31,7 @@ if con.present? && con.table_exists?('settings')
|
|||
Setting.save_default(:invoice_number_min, '131050')
|
||||
Setting.save_default(:invoice_number_max, '149999')
|
||||
Setting.save_default(:days_to_keep_overdue_invoices_active, 30)
|
||||
Setting.save_default(:days_to_renew_domain_before_expire, 90)
|
||||
end
|
||||
|
||||
# dev only setting
|
||||
|
|
|
@ -4,7 +4,7 @@ module I18n
|
|||
class << self
|
||||
alias_method :original_localize, :localize
|
||||
|
||||
def localize object, options = {}
|
||||
def localize(object, options = {})
|
||||
object.present? ? original_localize(object, options) : ''
|
||||
end
|
||||
end
|
||||
|
|
|
@ -64,7 +64,7 @@ en:
|
|||
invalid: 'Domain name is invalid'
|
||||
reserved: 'Domain name is reserved or restricted'
|
||||
taken: 'Domain name already exists'
|
||||
name_puny:
|
||||
puny_label:
|
||||
too_long: 'Domain name is too long (maximum is 63 characters)'
|
||||
registrant:
|
||||
blank: 'Registrant is missing'
|
||||
|
@ -505,6 +505,7 @@ en:
|
|||
crt_revoked: 'CRT (revoked)'
|
||||
contact_org_error: 'Parameter value policy error. Org must be blank'
|
||||
contact_fax_error: 'Parameter value policy error. Fax must be blank'
|
||||
ident_update_error: 'Parameter value policy error. Update of ident data not allowed'
|
||||
invoices: 'Invoices'
|
||||
no_such_user: 'No such user'
|
||||
log_in: 'Log in'
|
||||
|
@ -816,3 +817,4 @@ en:
|
|||
new_pricelist: New Pricelist
|
||||
valid: Valid
|
||||
category: Zone
|
||||
object_is_not_eligible_for_renewal: 'Object is not eligible for renewal'
|
||||
|
|
|
@ -24,6 +24,10 @@ every :day, at: '12:10pm' do
|
|||
runner 'Invoice.cancel_overdue_invoices'
|
||||
end
|
||||
|
||||
every :day, at: '12:15pm' do
|
||||
runner 'Domain.expire_domains'
|
||||
end
|
||||
|
||||
every 3.hours do
|
||||
runner 'Certificate.update_crl'
|
||||
end
|
||||
|
|
9
db/data/20150609093515_add_renew_setting.rb
Normal file
9
db/data/20150609093515_add_renew_setting.rb
Normal file
|
@ -0,0 +1,9 @@
|
|||
class AddRenewSetting < ActiveRecord::Migration
|
||||
def self.up
|
||||
Setting.days_to_renew_domain_before_expire = 90
|
||||
end
|
||||
|
||||
def self.down
|
||||
raise ActiveRecord::IrreversibleMigration
|
||||
end
|
||||
end
|
6
db/migrate/20150609103333_update_pricelist_chema.rb
Normal file
6
db/migrate/20150609103333_update_pricelist_chema.rb
Normal file
|
@ -0,0 +1,6 @@
|
|||
class UpdatePricelistChema < ActiveRecord::Migration
|
||||
def change
|
||||
add_column :pricelists, :operation_category, :string
|
||||
rename_column :pricelists, :name, :desc
|
||||
end
|
||||
end
|
21
db/schema.rb
21
db/schema.rb
|
@ -11,7 +11,7 @@
|
|||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(version: 20150603212659) do
|
||||
ActiveRecord::Schema.define(version: 20150609103333) do
|
||||
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "plpgsql"
|
||||
|
@ -19,7 +19,7 @@ ActiveRecord::Schema.define(version: 20150603212659) do
|
|||
create_table "account_activities", force: :cascade do |t|
|
||||
t.integer "account_id"
|
||||
t.integer "invoice_id"
|
||||
t.decimal "sum", precision: 10, scale: 2
|
||||
t.decimal "sum", precision: 8, scale: 2
|
||||
t.string "currency"
|
||||
t.integer "bank_transaction_id"
|
||||
t.datetime "created_at"
|
||||
|
@ -36,7 +36,7 @@ ActiveRecord::Schema.define(version: 20150603212659) do
|
|||
create_table "accounts", force: :cascade do |t|
|
||||
t.integer "registrar_id"
|
||||
t.string "account_type"
|
||||
t.decimal "balance", precision: 10, scale: 2, default: 0.0, null: false
|
||||
t.decimal "balance", precision: 8, scale: 2, default: 0.0, null: false
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.string "currency"
|
||||
|
@ -98,7 +98,7 @@ ActiveRecord::Schema.define(version: 20150603212659) do
|
|||
t.string "buyer_name"
|
||||
t.string "document_no"
|
||||
t.string "description"
|
||||
t.decimal "sum", precision: 10, scale: 2
|
||||
t.decimal "sum", precision: 8, scale: 2
|
||||
t.string "reference_no"
|
||||
t.datetime "paid_at"
|
||||
t.datetime "created_at"
|
||||
|
@ -114,7 +114,7 @@ ActiveRecord::Schema.define(version: 20150603212659) do
|
|||
t.string "vk_rec_id"
|
||||
t.string "vk_stamp"
|
||||
t.string "vk_t_no"
|
||||
t.decimal "vk_amount", precision: 10, scale: 2
|
||||
t.decimal "vk_amount", precision: 8, scale: 2
|
||||
t.string "vk_curr"
|
||||
t.string "vk_rec_acc"
|
||||
t.string "vk_rec_name"
|
||||
|
@ -331,7 +331,7 @@ ActiveRecord::Schema.define(version: 20150603212659) do
|
|||
t.string "description", null: false
|
||||
t.string "unit"
|
||||
t.integer "amount"
|
||||
t.decimal "price", precision: 10, scale: 2
|
||||
t.decimal "price", precision: 8, scale: 2
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.string "creator_str"
|
||||
|
@ -349,7 +349,7 @@ ActiveRecord::Schema.define(version: 20150603212659) do
|
|||
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: 8, scale: 2, null: false
|
||||
t.datetime "paid_at"
|
||||
t.integer "seller_id"
|
||||
t.string "seller_name", null: false
|
||||
|
@ -382,7 +382,7 @@ ActiveRecord::Schema.define(version: 20150603212659) do
|
|||
t.string "updator_str"
|
||||
t.integer "number"
|
||||
t.datetime "cancelled_at"
|
||||
t.decimal "sum_cache", precision: 10, scale: 2
|
||||
t.decimal "sum_cache", precision: 8, scale: 2
|
||||
end
|
||||
|
||||
add_index "invoices", ["buyer_id"], name: "index_invoices_on_buyer_id", using: :btree
|
||||
|
@ -886,7 +886,7 @@ ActiveRecord::Schema.define(version: 20150603212659) do
|
|||
add_index "people", ["reset_password_token"], name: "index_people_on_reset_password_token", unique: true, using: :btree
|
||||
|
||||
create_table "pricelists", force: :cascade do |t|
|
||||
t.string "name"
|
||||
t.string "desc"
|
||||
t.string "category"
|
||||
t.decimal "price_cents", precision: 8, scale: 2, default: 0.0, null: false
|
||||
t.string "price_currency", default: "EUR", null: false
|
||||
|
@ -897,6 +897,7 @@ ActiveRecord::Schema.define(version: 20150603212659) do
|
|||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
t.string "duration"
|
||||
t.string "operation_category"
|
||||
end
|
||||
|
||||
create_table "registrant_verifications", force: :cascade do |t|
|
||||
|
@ -982,7 +983,7 @@ ActiveRecord::Schema.define(version: 20150603212659) do
|
|||
t.text "crt"
|
||||
t.string "type"
|
||||
t.string "registrant_ident"
|
||||
t.string "encrypted_password", default: ""
|
||||
t.string "encrypted_password", default: "", null: false
|
||||
t.datetime "remember_created_at"
|
||||
t.integer "failed_attempts", default: 0, null: false
|
||||
t.datetime "locked_at"
|
||||
|
|
|
@ -16,5 +16,15 @@ Our implementation supports following protocols:
|
|||
[RFC5910 - DNSSEC Mapping](http://tools.ietf.org/html/rfc5910)
|
||||
[RFC3735 - Guidelines for Extending the EPP](http://tools.ietf.org/html/rfc3735)
|
||||
|
||||
Related XML Schema Definitions (may differ from policies applied to registry):
|
||||
|
||||
[contact-1.0.xsd](schemas/contact-1.0.xsd)
|
||||
[domain-1.0.xsd](schemas/domain-1.0.xsd)
|
||||
[eis-1.0.xsd](schemas/eis-1.0.xsd)
|
||||
[epp-1.0.xsd](schemas/epp-1.0.xsd)
|
||||
[eppcom-1.0.xsd](schemas/eppcom-1.0.xsd)
|
||||
[host-1.0.xsd](schemas/host-1.0.xsd)
|
||||
[secDNS-1.1.xsd](schemas/secDNS-1.1.xsd)
|
||||
|
||||
More info about The Extensible Provisioning Protocol (EPP):<br>
|
||||
http://en.wikipedia.org/wiki/Extensible_Provisioning_Protocol
|
||||
|
|
1918
doc/epp-examples.md
1918
doc/epp-examples.md
File diff suppressed because it is too large
Load diff
|
@ -26,7 +26,7 @@ Contact Mapping protocol short version:
|
|||
<contact:voice> 1 Phone number in format \+ddd.d+
|
||||
<contact:email> 1 E-mail
|
||||
<extension> 1
|
||||
<eis:extdata> 1 Attribute: xmlns:eis="urn:ee:eis:xml:epp:eis-1.0"
|
||||
<eis:extdata> 1 Attribute: xmlns:eis="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd"
|
||||
<eis:ident> 1 Contact identificator
|
||||
Attribute: "type"
|
||||
"bic" # Business registry code
|
||||
|
@ -62,7 +62,7 @@ Contact Mapping protocol short version:
|
|||
<contact:authInfo> 0-1 Required if registrar is not the owner of the contact.
|
||||
<contact:pw> 1 Contact password. Attribute: roid="String"
|
||||
<extension> 0-1
|
||||
<eis:extdata> 0-1 Attribute: xmlns:eis="urn:ee:eis:xml:epp:eis-1.0"
|
||||
<eis:extdata> 0-1 Attribute: xmlns:eis="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd"
|
||||
<eis:ident> 0-1 Contact identificator
|
||||
Attribute: "type"
|
||||
"bic" # Business registry code
|
||||
|
@ -87,7 +87,7 @@ Contact Mapping protocol short version:
|
|||
<contact:authInfo> 0-1 Required if registrar is not the owner of the contact.
|
||||
<contact:pw> 1 Contact password. Attribute: roid="String"
|
||||
<extension> 0-1
|
||||
<eis:extdata> 0-1 Attribute: xmlns:eis="urn:ee:eis:xml:epp:eis-1.0"
|
||||
<eis:extdata> 0-1 Attribute: xmlns:eis="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd"
|
||||
<eis:legalDocument> 0-1 Base64 encoded document.
|
||||
Attribute: type="pdf/bdoc/ddoc/zip/rar/gz/tar/7z"
|
||||
<clTRID> 0-1 Client transaction id
|
||||
|
|
|
@ -35,7 +35,7 @@ Domain name mapping protocol short version:
|
|||
<secDNS:protocol> 1 Allowed values: 3
|
||||
<secDNS:alg> 1 Allowed values: 3, 5, 6, 7, 8, 252, 253, 254, 255
|
||||
<secDNS:pubKey> 1 Public key
|
||||
<eis:extdata> 1 Attribute: xmlns:eis="urn:ee:eis:xml:epp:eis-1.0"
|
||||
<eis:extdata> 1 Attribute: xmlns:eis="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd"
|
||||
<eis:legalDocument> 1 Base64 encoded document.
|
||||
Attribute: type="pdf/bdoc/ddoc/zip/rar/gz/tar/7z"
|
||||
<clTRID> 0-1 Client transaction id
|
||||
|
@ -82,7 +82,7 @@ Domain name mapping protocol short version:
|
|||
<secDNS:rem> 0-1
|
||||
<secDNS:keyData> 1-n
|
||||
<secDNS:pubKey> 1 Public key
|
||||
<eis:extdata> 0-1 Attribute: xmlns:eis="urn:ee:eis:xml:epp:eis-1.0"
|
||||
<eis:extdata> 0-1 Attribute: xmlns:eis="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd"
|
||||
<eis:legalDocument> 0-1 Base64 encoded document. Required if registrant is changing.
|
||||
Attribute: type="pdf/bdoc/ddoc/zip/rar/gz/tar/7z"
|
||||
<clTRID> 0-1 Client transaction id
|
||||
|
@ -98,7 +98,7 @@ Domain name mapping protocol short version:
|
|||
Optional attribute: verified="yes/no"
|
||||
<domain:name> 1 Domain name. Can contain unicode characters.
|
||||
<extension> 1
|
||||
<eis:extdata> 1 Attribute: xmlns:eis="urn:ee:eis:xml:epp:eis-1.0"
|
||||
<eis:extdata> 1 Attribute: xmlns:eis="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd"
|
||||
<eis:legalDocument> 1 Base64 encoded document.
|
||||
Attribute: type="pdf/bdoc/ddoc/zip/rar/gz/tar/7z"
|
||||
<clTRID> 0-1 Client transaction id
|
||||
|
@ -130,7 +130,7 @@ Domain name mapping protocol short version:
|
|||
<domain:period> 1 Registration period for domain.
|
||||
Must add up to 1 / 2 / 3 years. Attribute: unit="y/m/d"
|
||||
<extension> 0-1
|
||||
<eis:extdata> 0-1 Attribute: xmlns:eis="urn:ee:eis:xml:epp:eis-1.0"
|
||||
<eis:extdata> 0-1 Attribute: xmlns:eis="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd"
|
||||
<eis:legalDocument> 0-1 Base64 encoded document.
|
||||
Attribute: type="pdf/bdoc/ddoc/zip/rar/gz/tar/7z"
|
||||
<clTRID> 0-1 Client transaction id
|
||||
|
@ -147,7 +147,7 @@ Domain name mapping protocol short version:
|
|||
<domain:authInfo> 1
|
||||
<domain:pw> 1 Domain password. Attribute: roid="String"
|
||||
<extension> 0-1
|
||||
<eis:extdata> 0-1 Attribute: xmlns:eis="urn:ee:eis:xml:epp:eis-1.0"
|
||||
<eis:extdata> 0-1 Attribute: xmlns:eis="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd"
|
||||
<eis:legalDocument> 0-1 Base64 encoded document.
|
||||
Attribute: type="pdf/bdoc/ddoc/zip/rar/gz/tar/7z"
|
||||
<clTRID> 0-1 Client transaction id
|
||||
|
|
|
@ -12,7 +12,6 @@
|
|||
-->
|
||||
<import namespace="urn:ietf:params:xml:ns:eppcom-1.0" schemaLocation="doc/schemas/eppcom-1.0.xsd"/>
|
||||
<import namespace="urn:ietf:params:xml:ns:epp-1.0" schemaLocation="doc/schemas/epp-1.0.xsd"/>
|
||||
<import namespace="urn:ietf:params:xml:ns:eis-1.0" schemaLocation="doc/schemas/eis-1.0.xsd"/>
|
||||
|
||||
<annotation>
|
||||
<documentation>
|
||||
|
@ -73,23 +72,6 @@
|
|||
</restriction>
|
||||
</simpleType>
|
||||
|
||||
<complexType name="identType">
|
||||
<simpleContent>
|
||||
<extension base="eppcom:clIDType">
|
||||
<attribute name="type" type="contact:identAttrType"/>
|
||||
</extension>
|
||||
</simpleContent>
|
||||
</complexType>
|
||||
|
||||
<simpleType name="identAttrType">
|
||||
<restriction base="token">
|
||||
<enumeration value="ico"/>
|
||||
<enumeration value="op"/>
|
||||
<enumeration value="passport"/>
|
||||
<enumeration value="birthday"/>
|
||||
</restriction>
|
||||
</simpleType>
|
||||
|
||||
<!--
|
||||
Child elements of the <create> command.
|
||||
-->
|
||||
|
@ -103,8 +85,6 @@
|
|||
<element name="fax" type="contact:e164Type"
|
||||
minOccurs="0"/>
|
||||
<element name="email" type="eppcom:minTokenType"/>
|
||||
<element name="ident" type="contact:identType"
|
||||
minOccurs="0"/>
|
||||
<element name="authInfo" type="contact:authInfoType" minOccurs="0"/>
|
||||
|
||||
</sequence>
|
||||
|
@ -220,8 +200,6 @@
|
|||
minOccurs="0"/>
|
||||
<element name="email" type="eppcom:minTokenType"
|
||||
minOccurs="0"/>
|
||||
<element name="ident" type="contact:identType"
|
||||
minOccurs="0"/>
|
||||
<element name="authInfo" type="contact:authInfoType"
|
||||
minOccurs="0"/>
|
||||
</sequence>
|
||||
|
|
366
doc/schemas/contact-eis-1.0.xsd
Normal file
366
doc/schemas/contact-eis-1.0.xsd
Normal file
|
@ -0,0 +1,366 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<schema targetNamespace="urn:ietf:params:xml:ns:contact-1.0"
|
||||
xmlns:contact="urn:ietf:params:xml:ns:contact-1.0"
|
||||
xmlns:epp="urn:ietf:params:xml:ns:epp-1.0"
|
||||
xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0"
|
||||
xmlns="http://www.w3.org/2001/XMLSchema"
|
||||
elementFormDefault="qualified">
|
||||
|
||||
<!--
|
||||
Import common element types.
|
||||
-->
|
||||
<import namespace="urn:ietf:params:xml:ns:eppcom-1.0" schemaLocation="doc/schemas/eppcom-1.0.xsd"/>
|
||||
<import namespace="urn:ietf:params:xml:ns:epp-1.0" schemaLocation="doc/schemas/epp-1.0.xsd"/>
|
||||
<import namespace="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd" schemaLocation="doc/schemas/eis-1.0.xsd"/>
|
||||
|
||||
<annotation>
|
||||
<documentation>
|
||||
Extensible Provisioning Protocol v1.0
|
||||
contact provisioning schema.
|
||||
</documentation>
|
||||
</annotation>
|
||||
|
||||
<!--
|
||||
Child elements found in EPP commands.
|
||||
-->
|
||||
<element name="check" type="contact:mIDType"/>
|
||||
<element name="create" type="contact:createType"/>
|
||||
<element name="delete" type="contact:authIDType"/>
|
||||
<element name="info" type="contact:authIDType"/>
|
||||
<element name="transfer" type="contact:authIDType"/>
|
||||
<element name="update" type="contact:updateType"/>
|
||||
|
||||
<!--
|
||||
Utility types.
|
||||
-->
|
||||
<simpleType name="ccType">
|
||||
<restriction base="token">
|
||||
<length value="2"/>
|
||||
</restriction>
|
||||
</simpleType>
|
||||
<complexType name="e164Type">
|
||||
<simpleContent>
|
||||
<extension base="contact:e164StringType">
|
||||
<attribute name="x" type="token"/>
|
||||
</extension>
|
||||
</simpleContent>
|
||||
</complexType>
|
||||
|
||||
<simpleType name="e164StringType">
|
||||
<restriction base="token">
|
||||
<!--<pattern value="(\+[0-9]{1,3}\.[0-9]{1,14})?"/> -->
|
||||
<maxLength value="17"/>
|
||||
</restriction>
|
||||
</simpleType>
|
||||
|
||||
<simpleType name="pcType">
|
||||
<restriction base="token">
|
||||
<maxLength value="16"/>
|
||||
</restriction>
|
||||
</simpleType>
|
||||
|
||||
<simpleType name="postalLineType">
|
||||
<restriction base="normalizedString">
|
||||
<minLength value="1"/>
|
||||
<maxLength value="255"/>
|
||||
</restriction>
|
||||
</simpleType>
|
||||
|
||||
<simpleType name="optPostalLineType">
|
||||
<restriction base="normalizedString">
|
||||
<maxLength value="255"/>
|
||||
</restriction>
|
||||
</simpleType>
|
||||
|
||||
<!--
|
||||
Child elements of the <create> command.
|
||||
-->
|
||||
<complexType name="createType">
|
||||
<sequence>
|
||||
<element name="id" type="eppcom:clIDType" minOccurs="0"/>
|
||||
<element name="postalInfo" type="contact:postalInfoType"
|
||||
maxOccurs="2"/>
|
||||
<element name="voice" type="contact:e164Type"
|
||||
minOccurs="0"/>
|
||||
<element name="fax" type="contact:e164Type"
|
||||
minOccurs="0"/>
|
||||
<element name="email" type="eppcom:minTokenType"/>
|
||||
<element name="authInfo" type="contact:authInfoType" minOccurs="0"/>
|
||||
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<complexType name="postalInfoType">
|
||||
<sequence>
|
||||
<element name="name" type="contact:postalLineType"/>
|
||||
<element name="org" type="contact:optPostalLineType"
|
||||
minOccurs="0"/>
|
||||
<element name="addr" type="contact:addrType"/>
|
||||
</sequence>
|
||||
<attribute name="type" type="contact:postalInfoEnumType"/>
|
||||
</complexType>
|
||||
|
||||
<simpleType name="postalInfoEnumType">
|
||||
<restriction base="token">
|
||||
<enumeration value="loc"/>
|
||||
<enumeration value="int"/>
|
||||
</restriction>
|
||||
</simpleType>
|
||||
|
||||
<complexType name="addrType">
|
||||
<sequence>
|
||||
<element name="street" type="contact:optPostalLineType"
|
||||
minOccurs="0" maxOccurs="3"/>
|
||||
<element name="city" type="contact:postalLineType"/>
|
||||
<element name="sp" type="contact:optPostalLineType"
|
||||
minOccurs="0"/>
|
||||
<element name="pc" type="contact:pcType"
|
||||
minOccurs="0"/>
|
||||
<element name="cc" type="contact:ccType"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<complexType name="authInfoType">
|
||||
<choice>
|
||||
<element name="pw" type="eppcom:pwAuthInfoType"/>
|
||||
<element name="ext" type="eppcom:extAuthInfoType"/>
|
||||
</choice>
|
||||
</complexType>
|
||||
|
||||
<complexType name="intLocType">
|
||||
<attribute name="type" type="contact:postalInfoEnumType"
|
||||
use="required"/>
|
||||
</complexType>
|
||||
|
||||
<!--
|
||||
Child element of commands that require only an identifier.
|
||||
-->
|
||||
<complexType name="sIDType">
|
||||
<sequence>
|
||||
<element name="id" type="eppcom:clIDType"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<!--
|
||||
Child element of commands that accept multiple identifiers.
|
||||
-->
|
||||
<complexType name="mIDType">
|
||||
<sequence>
|
||||
<element name="id" type="eppcom:clIDType"
|
||||
maxOccurs="unbounded"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<!--
|
||||
Child elements of the <info> and <transfer> commands.
|
||||
-->
|
||||
<complexType name="authIDType">
|
||||
<sequence>
|
||||
<element name="id" type="eppcom:clIDType"/>
|
||||
<element name="authInfo" type="contact:authInfoType"
|
||||
minOccurs="0"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<!--
|
||||
Child elements of the <update> command.
|
||||
-->
|
||||
<complexType name="updateType">
|
||||
<sequence>
|
||||
<element name="id" type="eppcom:clIDType"/>
|
||||
<element name="add" type="contact:addRemType"
|
||||
minOccurs="0"/>
|
||||
<element name="rem" type="contact:addRemType"
|
||||
minOccurs="0"/>
|
||||
<element name="chg" type="contact:chgType"
|
||||
minOccurs="0"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<!--
|
||||
Data elements that can be added or removed.
|
||||
-->
|
||||
<complexType name="addRemType">
|
||||
<sequence>
|
||||
<element name="status" type="contact:statusType"
|
||||
maxOccurs="7"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<!--
|
||||
Data elements that can be changed.
|
||||
-->
|
||||
<complexType name="chgType">
|
||||
<sequence>
|
||||
<element name="postalInfo" type="contact:chgPostalInfoType"
|
||||
minOccurs="0" maxOccurs="2"/>
|
||||
<element name="voice" type="contact:e164Type"
|
||||
minOccurs="0"/>
|
||||
<element name="fax" type="contact:e164Type"
|
||||
minOccurs="0"/>
|
||||
<element name="email" type="eppcom:minTokenType"
|
||||
minOccurs="0"/>
|
||||
<element name="authInfo" type="contact:authInfoType"
|
||||
minOccurs="0"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<complexType name="chgPostalInfoType">
|
||||
<sequence>
|
||||
<element name="name" type="contact:postalLineType"
|
||||
minOccurs="0"/>
|
||||
<element name="org" type="contact:optPostalLineType"
|
||||
minOccurs="0"/>
|
||||
<element name="addr" type="contact:addrType"
|
||||
minOccurs="0"/>
|
||||
</sequence>
|
||||
<attribute name="type" type="contact:postalInfoEnumType"/>
|
||||
</complexType>
|
||||
|
||||
<!--
|
||||
Child response elements.
|
||||
-->
|
||||
<element name="chkData" type="contact:chkDataType"/>
|
||||
<element name="creData" type="contact:creDataType"/>
|
||||
<element name="infData" type="contact:infDataType"/>
|
||||
<element name="panData" type="contact:panDataType"/>
|
||||
<element name="trnData" type="contact:trnDataType"/>
|
||||
|
||||
<!--
|
||||
<check> response elements.
|
||||
-->
|
||||
<complexType name="chkDataType">
|
||||
<sequence>
|
||||
<element name="cd" type="contact:checkType"
|
||||
maxOccurs="unbounded"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<complexType name="checkType">
|
||||
<sequence>
|
||||
<element name="id" type="contact:checkIDType"/>
|
||||
<element name="reason" type="eppcom:reasonType"
|
||||
minOccurs="0"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<complexType name="checkIDType">
|
||||
<simpleContent>
|
||||
<extension base="eppcom:clIDType">
|
||||
<attribute name="avail" type="boolean"
|
||||
use="required"/>
|
||||
</extension>
|
||||
</simpleContent>
|
||||
</complexType>
|
||||
|
||||
<!--
|
||||
<create> response elements.
|
||||
-->
|
||||
<complexType name="creDataType">
|
||||
<sequence>
|
||||
<element name="id" type="eppcom:clIDType"/>
|
||||
<element name="crDate" type="dateTime"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<!--
|
||||
<info> response elements.
|
||||
-->
|
||||
<complexType name="infDataType">
|
||||
<sequence>
|
||||
<element name="id" type="eppcom:clIDType"/>
|
||||
<element name="roid" type="eppcom:roidType"/>
|
||||
<element name="status" type="contact:statusType"
|
||||
maxOccurs="7"/>
|
||||
<element name="postalInfo" type="contact:postalInfoType"
|
||||
maxOccurs="2"/>
|
||||
<element name="voice" type="contact:e164Type"
|
||||
minOccurs="0"/>
|
||||
<element name="fax" type="contact:e164Type"
|
||||
minOccurs="0"/>
|
||||
<element name="email" type="eppcom:minTokenType"/>
|
||||
<element name="clID" type="eppcom:clIDType"/>
|
||||
<element name="crID" type="eppcom:clIDType"/>
|
||||
<element name="crDate" type="dateTime"/>
|
||||
<element name="upID" type="eppcom:clIDType"
|
||||
minOccurs="0"/>
|
||||
<element name="upDate" type="dateTime"
|
||||
minOccurs="0"/>
|
||||
<element name="trDate" type="dateTime"
|
||||
minOccurs="0"/>
|
||||
<element name="authInfo" type="contact:authInfoType"
|
||||
minOccurs="0"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<!--
|
||||
Status is a combination of attributes and an optional human-readable
|
||||
message that may be expressed in languages other than English.
|
||||
-->
|
||||
<complexType name="statusType">
|
||||
<simpleContent>
|
||||
<extension base="normalizedString">
|
||||
<attribute name="s" type="contact:statusValueType"
|
||||
use="required"/>
|
||||
<attribute name="lang" type="language"
|
||||
default="en"/>
|
||||
</extension>
|
||||
</simpleContent>
|
||||
</complexType>
|
||||
|
||||
<simpleType name="statusValueType">
|
||||
<restriction base="token">
|
||||
<enumeration value="clientDeleteProhibited"/>
|
||||
<enumeration value="clientTransferProhibited"/>
|
||||
<enumeration value="clientUpdateProhibited"/>
|
||||
<enumeration value="linked"/>
|
||||
<enumeration value="ok"/>
|
||||
<enumeration value="pendingCreate"/>
|
||||
<enumeration value="pendingDelete"/>
|
||||
<enumeration value="pendingTransfer"/>
|
||||
<enumeration value="pendingUpdate"/>
|
||||
<enumeration value="serverDeleteProhibited"/>
|
||||
<enumeration value="serverTransferProhibited"/>
|
||||
<enumeration value="serverUpdateProhibited"/>
|
||||
</restriction>
|
||||
</simpleType>
|
||||
|
||||
<!--
|
||||
Pending action notification response elements.
|
||||
-->
|
||||
<complexType name="panDataType">
|
||||
<sequence>
|
||||
<element name="id" type="contact:paCLIDType"/>
|
||||
<element name="paTRID" type="epp:trIDType"/>
|
||||
<element name="paDate" type="dateTime"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<complexType name="paCLIDType">
|
||||
<simpleContent>
|
||||
<extension base="eppcom:clIDType">
|
||||
<attribute name="paResult" type="boolean"
|
||||
use="required"/>
|
||||
</extension>
|
||||
</simpleContent>
|
||||
</complexType>
|
||||
|
||||
<!--
|
||||
<transfer> response elements.
|
||||
-->
|
||||
<complexType name="trnDataType">
|
||||
<sequence>
|
||||
<element name="id" type="eppcom:clIDType"/>
|
||||
<element name="trStatus" type="eppcom:trStatusType"/>
|
||||
<element name="reID" type="eppcom:clIDType"/>
|
||||
<element name="reDate" type="dateTime"/>
|
||||
<element name="acID" type="eppcom:clIDType"/>
|
||||
<element name="acDate" type="dateTime"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<!--
|
||||
End of schema.
|
||||
-->
|
||||
</schema>
|
|
@ -15,7 +15,6 @@
|
|||
<import namespace="urn:ietf:params:xml:ns:epp-1.0" schemaLocation="doc/schemas/epp-1.0.xsd"/>
|
||||
<import namespace="urn:ietf:params:xml:ns:host-1.0" schemaLocation="doc/schemas/host-1.0.xsd"/>
|
||||
<import namespace="urn:ietf:params:xml:ns:secDNS-1.1" schemaLocation="doc/schemas/secDNS-1.1.xsd"/>
|
||||
<import namespace="urn:ietf:params:xml:ns:eis-1.0" schemaLocation="doc/schemas/eis-1.0.xsd"/>
|
||||
|
||||
<annotation>
|
||||
<documentation>
|
||||
|
|
451
doc/schemas/domain-eis-1.0.xsd
Normal file
451
doc/schemas/domain-eis-1.0.xsd
Normal file
|
@ -0,0 +1,451 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<schema targetNamespace="urn:ietf:params:xml:ns:domain-1.0"
|
||||
xmlns:domain="urn:ietf:params:xml:ns:domain-1.0"
|
||||
xmlns:host="urn:ietf:params:xml:ns:host-1.0"
|
||||
xmlns:epp="urn:ietf:params:xml:ns:epp-1.0"
|
||||
xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0"
|
||||
xmlns="http://www.w3.org/2001/XMLSchema"
|
||||
elementFormDefault="qualified">
|
||||
|
||||
<!--
|
||||
Import common element types.
|
||||
-->
|
||||
<import namespace="urn:ietf:params:xml:ns:eppcom-1.0" schemaLocation="doc/schemas/eppcom-1.0.xsd"/>
|
||||
<import namespace="urn:ietf:params:xml:ns:epp-1.0" schemaLocation="doc/schemas/epp-1.0.xsd"/>
|
||||
<import namespace="urn:ietf:params:xml:ns:host-1.0" schemaLocation="doc/schemas/host-1.0.xsd"/>
|
||||
<import namespace="urn:ietf:params:xml:ns:secDNS-1.1" schemaLocation="doc/schemas/secDNS-1.1.xsd"/>
|
||||
<import namespace="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd" schemaLocation="doc/schemas/eis-1.0.xsd"/>
|
||||
|
||||
<annotation>
|
||||
<documentation>
|
||||
Extensible Provisioning Protocol v1.0
|
||||
domain provisioning schema.
|
||||
</documentation>
|
||||
</annotation>
|
||||
|
||||
<!--
|
||||
Child elements found in EPP commands.
|
||||
-->
|
||||
<element name="check" type="domain:mNameType"/>
|
||||
<element name="create" type="domain:createType"/>
|
||||
<element name="delete" type="domain:sNameType"/>
|
||||
<element name="info" type="domain:infoType"/>
|
||||
<element name="renew" type="domain:renewType"/>
|
||||
<element name="transfer" type="domain:transferType"/>
|
||||
<element name="update" type="domain:updateType"/>
|
||||
<!--
|
||||
Child elements of the <create> command.
|
||||
-->
|
||||
<complexType name="createType">
|
||||
<sequence>
|
||||
<element name="name" type="eppcom:labelType"/>
|
||||
<element name="period" type="domain:periodType"
|
||||
minOccurs="0"/>
|
||||
<element name="ns" type="domain:nsType"
|
||||
minOccurs="0"/>
|
||||
<element name="registrant" type="eppcom:clIDType"
|
||||
minOccurs="0"/>
|
||||
<element name="contact" type="domain:contactType"
|
||||
minOccurs="0" maxOccurs="unbounded"/>
|
||||
<element name="authInfo" type="domain:authInfoType" minOccurs="0"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<complexType name="periodType">
|
||||
<simpleContent>
|
||||
<extension base="domain:pLimitType">
|
||||
<attribute name="unit" type="domain:pUnitType"
|
||||
use="required"/>
|
||||
</extension>
|
||||
</simpleContent>
|
||||
</complexType>
|
||||
|
||||
<simpleType name="pLimitType">
|
||||
<restriction base="unsignedShort">
|
||||
<minInclusive value="1"/>
|
||||
<maxInclusive value="1095"/>
|
||||
</restriction>
|
||||
</simpleType>
|
||||
|
||||
<simpleType name="pUnitType">
|
||||
<restriction base="token">
|
||||
<enumeration value="y"/>
|
||||
<enumeration value="m"/>
|
||||
<enumeration value="d"/>
|
||||
</restriction>
|
||||
</simpleType>
|
||||
|
||||
<complexType name="nsType">
|
||||
<choice>
|
||||
<element name="hostObj" type="eppcom:labelType"
|
||||
maxOccurs="unbounded"/>
|
||||
<element name="hostAttr" type="domain:hostAttrType"
|
||||
maxOccurs="unbounded"/>
|
||||
</choice>
|
||||
</complexType>
|
||||
<!--
|
||||
Name servers are either host objects or attributes.
|
||||
-->
|
||||
|
||||
<complexType name="hostAttrType">
|
||||
<sequence>
|
||||
<element name="hostName" type="eppcom:labelType"/>
|
||||
<element name="hostAddr" type="host:addrType"
|
||||
|
||||
minOccurs="0" maxOccurs="unbounded"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<!--
|
||||
If attributes, addresses are optional and follow the
|
||||
structure defined in the host mapping.
|
||||
-->
|
||||
|
||||
<complexType name="contactType">
|
||||
<simpleContent>
|
||||
<extension base="eppcom:clIDType">
|
||||
<attribute name="type" type="domain:contactAttrType"/>
|
||||
</extension>
|
||||
</simpleContent>
|
||||
</complexType>
|
||||
|
||||
<simpleType name="contactAttrType">
|
||||
<restriction base="token">
|
||||
<enumeration value="admin"/>
|
||||
<enumeration value="billing"/>
|
||||
<enumeration value="tech"/>
|
||||
</restriction>
|
||||
</simpleType>
|
||||
|
||||
<complexType name="authInfoType">
|
||||
<choice>
|
||||
<element name="pw" type="eppcom:pwAuthInfoType"/>
|
||||
<element name="ext" type="eppcom:extAuthInfoType"/>
|
||||
</choice>
|
||||
</complexType>
|
||||
|
||||
<!--
|
||||
Child element of commands that require a single name.
|
||||
-->
|
||||
<complexType name="sNameType">
|
||||
<sequence>
|
||||
<element name="name" type="eppcom:labelType"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<!--
|
||||
Child element of commands that accept multiple names.
|
||||
-->
|
||||
<complexType name="mNameType">
|
||||
<sequence>
|
||||
<element name="name" type="eppcom:labelType"
|
||||
maxOccurs="unbounded"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<!--
|
||||
Child elements of the <info> command.
|
||||
-->
|
||||
<complexType name="infoType">
|
||||
<sequence>
|
||||
<element name="name" type="domain:infoNameType"/>
|
||||
<element name="authInfo" type="domain:authInfoType"
|
||||
minOccurs="0"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<complexType name="infoNameType">
|
||||
<simpleContent>
|
||||
<extension base = "eppcom:labelType">
|
||||
<attribute name="hosts" type="domain:hostsType"
|
||||
default="all"/>
|
||||
</extension>
|
||||
</simpleContent>
|
||||
</complexType>
|
||||
|
||||
<simpleType name="hostsType">
|
||||
<restriction base="token">
|
||||
<enumeration value="all"/>
|
||||
<enumeration value="del"/>
|
||||
<enumeration value="none"/>
|
||||
<enumeration value="sub"/>
|
||||
</restriction>
|
||||
</simpleType>
|
||||
|
||||
<!--
|
||||
Child elements of the <renew> command.
|
||||
-->
|
||||
<complexType name="renewType">
|
||||
<sequence>
|
||||
<element name="name" type="eppcom:labelType"/>
|
||||
<element name="curExpDate" type="date"/>
|
||||
<element name="period" type="domain:periodType"
|
||||
minOccurs="0"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<!--
|
||||
Child elements of the <transfer> command.
|
||||
-->
|
||||
<complexType name="transferType">
|
||||
<sequence>
|
||||
<element name="name" type="eppcom:labelType"/>
|
||||
<element name="period" type="domain:periodType"
|
||||
minOccurs="0"/>
|
||||
<element name="authInfo" type="domain:authInfoType"
|
||||
minOccurs="0"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<!--
|
||||
Child elements of the <update> command.
|
||||
-->
|
||||
<complexType name="updateType">
|
||||
<sequence>
|
||||
<element name="name" type="eppcom:labelType"/>
|
||||
<element name="add" type="domain:addRemType"
|
||||
minOccurs="0"/>
|
||||
<element name="rem" type="domain:addRemType"
|
||||
minOccurs="0"/>
|
||||
<element name="chg" type="domain:chgType"
|
||||
minOccurs="0"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<!--
|
||||
Data elements that can be added or removed.
|
||||
-->
|
||||
<complexType name="addRemType">
|
||||
<sequence>
|
||||
<element name="ns" type="domain:nsType"
|
||||
minOccurs="0"/>
|
||||
<element name="contact" type="domain:contactType"
|
||||
minOccurs="0" maxOccurs="unbounded"/>
|
||||
<element name="status" type="domain:statusType"
|
||||
minOccurs="0" maxOccurs="11"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<!--
|
||||
Data elements that can be changed.
|
||||
-->
|
||||
<complexType name="chgType">
|
||||
<sequence>
|
||||
<element name="registrant" type="domain:clIDChgType"
|
||||
minOccurs="0"/>
|
||||
<element name="authInfo" type="domain:authInfoChgType"
|
||||
minOccurs="0"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<!--
|
||||
Allow the registrant value to be nullified by changing the
|
||||
minLength restriction to "0".
|
||||
-->
|
||||
|
||||
<complexType name="clIDChgType">
|
||||
<simpleContent>
|
||||
<extension base="domain:clIDChgSimpleType">
|
||||
<attribute name="verified" type="domain:verifiedType"/>
|
||||
</extension>
|
||||
</simpleContent>
|
||||
</complexType>
|
||||
|
||||
<simpleType name="clIDChgSimpleType">
|
||||
<restriction base="token">
|
||||
<minLength value="0"/>
|
||||
</restriction>
|
||||
</simpleType>
|
||||
|
||||
<simpleType name="verifiedType">
|
||||
<restriction base="token">
|
||||
<enumeration value="yes"/>
|
||||
<enumeration value="no"/>
|
||||
</restriction>
|
||||
</simpleType>
|
||||
|
||||
|
||||
<!--
|
||||
Allow the authInfo value to be nullified by including an
|
||||
empty element within the choice.
|
||||
-->
|
||||
<complexType name="authInfoChgType">
|
||||
<choice>
|
||||
<element name="pw" type="eppcom:pwAuthInfoType"/>
|
||||
<element name="ext" type="eppcom:extAuthInfoType"/>
|
||||
<element name="null"/>
|
||||
</choice>
|
||||
</complexType>
|
||||
|
||||
<!--
|
||||
Child response elements.
|
||||
-->
|
||||
<element name="chkData" type="domain:chkDataType"/>
|
||||
<element name="creData" type="domain:creDataType"/>
|
||||
<element name="infData" type="domain:infDataType"/>
|
||||
<element name="panData" type="domain:panDataType"/>
|
||||
<element name="renData" type="domain:renDataType"/>
|
||||
<element name="trnData" type="domain:trnDataType"/>
|
||||
|
||||
<!--
|
||||
<check> response elements.
|
||||
-->
|
||||
<complexType name="chkDataType">
|
||||
<sequence>
|
||||
<element name="cd" type="domain:checkType"
|
||||
maxOccurs="unbounded"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<complexType name="checkType">
|
||||
<sequence>
|
||||
<element name="name" type="domain:checkNameType"/>
|
||||
<element name="reason" type="eppcom:reasonType"
|
||||
minOccurs="0"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<complexType name="checkNameType">
|
||||
<simpleContent>
|
||||
<extension base="eppcom:labelType">
|
||||
<attribute name="avail" type="boolean"
|
||||
use="required"/>
|
||||
</extension>
|
||||
</simpleContent>
|
||||
</complexType>
|
||||
|
||||
<!--
|
||||
<create> response elements.
|
||||
-->
|
||||
<complexType name="creDataType">
|
||||
<sequence>
|
||||
<element name="name" type="eppcom:labelType"/>
|
||||
<element name="crDate" type="dateTime"/>
|
||||
<element name="exDate" type="dateTime"
|
||||
minOccurs="0"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<!--
|
||||
<info> response elements.
|
||||
-->
|
||||
|
||||
<complexType name="infDataType">
|
||||
<sequence>
|
||||
<element name="name" type="eppcom:labelType"/>
|
||||
<element name="roid" type="eppcom:roidType"/>
|
||||
<element name="status" type="domain:statusType"
|
||||
minOccurs="0" maxOccurs="11"/>
|
||||
<element name="registrant" type="eppcom:clIDType"
|
||||
minOccurs="0"/>
|
||||
<element name="contact" type="domain:contactType"
|
||||
minOccurs="0" maxOccurs="unbounded"/>
|
||||
<element name="ns" type="domain:nsType"
|
||||
minOccurs="0"/>
|
||||
<element name="host" type="eppcom:labelType"
|
||||
minOccurs="0" maxOccurs="unbounded"/>
|
||||
<element name="clID" type="eppcom:clIDType"/>
|
||||
<element name="crID" type="eppcom:clIDType"
|
||||
minOccurs="0"/>
|
||||
<element name="crDate" type="dateTime"
|
||||
minOccurs="0"/>
|
||||
<element name="upID" type="eppcom:clIDType"
|
||||
minOccurs="0"/>
|
||||
<element name="upDate" type="dateTime"
|
||||
minOccurs="0"/>
|
||||
<element name="exDate" type="dateTime"
|
||||
minOccurs="0"/>
|
||||
<element name="trDate" type="dateTime"
|
||||
minOccurs="0"/>
|
||||
<element name="authInfo" type="domain:authInfoType"
|
||||
minOccurs="0"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<!--
|
||||
Status is a combination of attributes and an optional
|
||||
human-readable message that may be expressed in languages other
|
||||
than English.
|
||||
-->
|
||||
<complexType name="statusType">
|
||||
<simpleContent>
|
||||
<extension base="normalizedString">
|
||||
<attribute name="s" type="domain:statusValueType"
|
||||
use="required"/>
|
||||
<attribute name="lang" type="language"
|
||||
default="en"/>
|
||||
</extension>
|
||||
</simpleContent>
|
||||
</complexType>
|
||||
|
||||
<simpleType name="statusValueType">
|
||||
<restriction base="token">
|
||||
<enumeration value="clientDeleteProhibited"/>
|
||||
<enumeration value="clientHold"/>
|
||||
<enumeration value="clientRenewProhibited"/>
|
||||
<enumeration value="clientTransferProhibited"/>
|
||||
<enumeration value="clientUpdateProhibited"/>
|
||||
<enumeration value="inactive"/>
|
||||
<enumeration value="ok"/>
|
||||
<enumeration value="pendingCreate"/>
|
||||
<enumeration value="pendingDelete"/>
|
||||
<enumeration value="pendingRenew"/>
|
||||
<enumeration value="pendingTransfer"/>
|
||||
<enumeration value="pendingUpdate"/>
|
||||
<enumeration value="serverDeleteProhibited"/>
|
||||
<enumeration value="serverHold"/>
|
||||
<enumeration value="serverRenewProhibited"/>
|
||||
<enumeration value="serverTransferProhibited"/>
|
||||
<enumeration value="serverUpdateProhibited"/>
|
||||
</restriction>
|
||||
</simpleType>
|
||||
|
||||
<!--
|
||||
Pending action notification response elements.
|
||||
-->
|
||||
<complexType name="panDataType">
|
||||
<sequence>
|
||||
<element name="name" type="domain:paNameType"/>
|
||||
<element name="paTRID" type="epp:trIDType"/>
|
||||
<element name="paDate" type="dateTime"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<complexType name="paNameType">
|
||||
<simpleContent>
|
||||
<extension base="eppcom:labelType">
|
||||
<attribute name="paResult" type="boolean"
|
||||
use="required"/>
|
||||
</extension>
|
||||
</simpleContent>
|
||||
</complexType>
|
||||
|
||||
<!--
|
||||
<renew> response elements.
|
||||
-->
|
||||
<complexType name="renDataType">
|
||||
<sequence>
|
||||
<element name="name" type="eppcom:labelType"/>
|
||||
<element name="exDate" type="dateTime"
|
||||
minOccurs="0"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<!--
|
||||
<transfer> response elements.
|
||||
-->
|
||||
<complexType name="trnDataType">
|
||||
<sequence>
|
||||
<element name="name" type="eppcom:labelType"/>
|
||||
<element name="trStatus" type="eppcom:trStatusType"/>
|
||||
<element name="reID" type="eppcom:clIDType"/>
|
||||
<element name="reDate" type="dateTime"/>
|
||||
<element name="acID" type="eppcom:clIDType"/>
|
||||
<element name="acDate" type="dateTime"/>
|
||||
<element name="exDate" type="dateTime"
|
||||
minOccurs="0"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<!--
|
||||
End of schema.
|
||||
-->
|
||||
</schema>
|
|
@ -1,14 +1,13 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<schema
|
||||
targetNamespace="urn:ee:eis:xml:epp:eis-1.0"
|
||||
xmlns:eis="urn:ee:eis:xml:epp:eis-1.0"
|
||||
targetNamespace="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd"
|
||||
xmlns:eis="https://raw.githubusercontent.com/internetee/registry/alpha/doc/schemas/eis-1.0.xsd"
|
||||
xmlns="http://www.w3.org/2001/XMLSchema"
|
||||
elementFormDefault="qualified">
|
||||
|
||||
<annotation>
|
||||
<documentation>
|
||||
EIS Extensible Provisioning Protocol v1.0
|
||||
extension schema.
|
||||
EIS Extensible Provisioning Protocol v1.0 extension schema.
|
||||
</documentation>
|
||||
</annotation>
|
||||
|
||||
|
@ -19,21 +18,22 @@
|
|||
<element name="extdata" type="eis:legalDocAndIdentType"/>
|
||||
|
||||
<!--
|
||||
Child elements supporting either the
|
||||
dsData or the keyData interface.
|
||||
Child elements supporting ident and legal documents.
|
||||
-->
|
||||
<complexType name="legalDocAndIdentType">
|
||||
<sequence>
|
||||
<element name="legalDocument" type="eis:legalDocType"
|
||||
minOccurs="0" maxOccurs="1"/>
|
||||
<element name="ident" type="eis:identType"
|
||||
minOccurs="0" maxOccurs="1"/>
|
||||
<element name="ident" type="eis:identType" minOccurs="0" maxOccurs="1"/>
|
||||
<element name="legalDocument" type="eis:legalDocType" minOccurs="0" maxOccurs="1"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
|
||||
<!--
|
||||
Child elements of extdata
|
||||
-->
|
||||
|
||||
<!--
|
||||
Legal document, encoded in base64
|
||||
-->
|
||||
<complexType name="legalDocType">
|
||||
<simpleContent>
|
||||
<extension base="base64Binary">
|
||||
|
@ -55,6 +55,9 @@
|
|||
</restriction>
|
||||
</simpleType>
|
||||
|
||||
<!--
|
||||
Ident with type and country code
|
||||
-->
|
||||
<complexType name="identType">
|
||||
<simpleContent>
|
||||
<extension base="normalizedString">
|
||||
|
@ -66,10 +69,9 @@
|
|||
|
||||
<simpleType name="identEnumType">
|
||||
<restriction base="token">
|
||||
<enumeration value="pic"/>
|
||||
<enumeration value="bic"/>
|
||||
<enumeration value="priv"/>
|
||||
<enumeration value="birthday"/>
|
||||
<enumeration value="passport"/>
|
||||
</restriction>
|
||||
</simpleType>
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@ namespace :zonefile do
|
|||
ret text;
|
||||
BEGIN
|
||||
-- define filters
|
||||
include_filter = '%' || i_origin;
|
||||
include_filter = '%.' || i_origin;
|
||||
|
||||
-- for %.%.%
|
||||
IF i_origin ~ '\\.' THEN
|
||||
|
|
|
@ -2,7 +2,7 @@ require 'rails_helper'
|
|||
|
||||
describe 'EPP Contact', epp: true do
|
||||
before :all do
|
||||
@xsd = Nokogiri::XML::Schema(File.read('doc/schemas/contact-1.0.xsd'))
|
||||
@xsd = Nokogiri::XML::Schema(File.read('doc/schemas/contact-eis-1.0.xsd'))
|
||||
@registrar1 = Fabricate(:registrar1)
|
||||
@registrar2 = Fabricate(:registrar2)
|
||||
@epp_xml = EppXml::Contact.new(cl_trid: 'ABC-12345')
|
||||
|
@ -15,13 +15,19 @@ describe 'EPP Contact', epp: true do
|
|||
@contact = Fabricate(:contact, registrar: @registrar1)
|
||||
|
||||
@extension = {
|
||||
legalDocument: {
|
||||
value: 'dGVzdCBmYWlsCg==',
|
||||
attrs: { type: 'pdf' }
|
||||
},
|
||||
ident: {
|
||||
value: '37605030299',
|
||||
attrs: { type: 'priv', cc: 'EE' }
|
||||
},
|
||||
legalDocument: {
|
||||
value: 'dGVzdCBmYWlsCg==',
|
||||
attrs: { type: 'pdf' }
|
||||
}
|
||||
}
|
||||
@update_extension = {
|
||||
legalDocument: {
|
||||
value: 'dGVzdCBmYWlsCg==',
|
||||
attrs: { type: 'pdf' }
|
||||
}
|
||||
}
|
||||
end
|
||||
|
@ -106,13 +112,13 @@ describe 'EPP Contact', epp: true do
|
|||
|
||||
it 'successfully saves ident type with legal document' do
|
||||
extension = {
|
||||
legalDocument: {
|
||||
value: 'dGVzdCBmYWlsCg==',
|
||||
attrs: { type: 'pdf' }
|
||||
},
|
||||
ident: {
|
||||
value: '1990-22-12',
|
||||
attrs: { type: 'birthday', cc: 'US' }
|
||||
},
|
||||
legalDocument: {
|
||||
value: 'dGVzdCBmYWlsCg==',
|
||||
attrs: { type: 'pdf' }
|
||||
}
|
||||
}
|
||||
response = create_request({}, extension)
|
||||
|
@ -272,7 +278,7 @@ describe 'EPP Contact', epp: true do
|
|||
end
|
||||
|
||||
def update_request(overwrites = {}, extension = {}, options = {})
|
||||
extension = @extension if extension.blank?
|
||||
extension = @update_extension if extension.blank?
|
||||
|
||||
defaults = {
|
||||
id: { value: 'asd123123er' },
|
||||
|
@ -394,22 +400,23 @@ describe 'EPP Contact', epp: true do
|
|||
@contact.reload.code.should == 'FIRST0:SH8013'
|
||||
end
|
||||
|
||||
it 'should update ident' do
|
||||
it 'should not be able to update ident' do
|
||||
extension = {
|
||||
legalDocument: {
|
||||
value: 'dGVzdCBmYWlsCg==',
|
||||
attrs: { type: 'pdf' }
|
||||
},
|
||||
ident: {
|
||||
value: '1990-22-12',
|
||||
attrs: { type: 'birthday', cc: 'US' }
|
||||
},
|
||||
legalDocument: {
|
||||
value: 'dGVzdCBmYWlsCg==',
|
||||
attrs: { type: 'pdf' }
|
||||
}
|
||||
}
|
||||
response = update_request({ id: { value: 'FIRST0:SH8013' } }, extension)
|
||||
response[:msg].should == 'Command completed successfully'
|
||||
response[:result_code].should == '1000'
|
||||
response[:msg].should ==
|
||||
'Parameter value policy error. Update of ident data not allowed [ident]'
|
||||
response[:result_code].should == '2306'
|
||||
|
||||
Contact.find_by(code: 'FIRST0:SH8013').ident_type.should == 'birthday'
|
||||
Contact.find_by(code: 'FIRST0:SH8013').ident_type.should == 'priv'
|
||||
end
|
||||
|
||||
it 'should return parameter value policy errror for org update' do
|
||||
|
|
|
@ -2,7 +2,7 @@ require 'rails_helper'
|
|||
|
||||
describe 'EPP Domain', epp: true do
|
||||
before(:all) do
|
||||
@xsd = Nokogiri::XML::Schema(File.read('doc/schemas/domain-1.0.xsd'))
|
||||
@xsd = Nokogiri::XML::Schema(File.read('doc/schemas/domain-eis-1.0.xsd'))
|
||||
@epp_xml = EppXml.new(cl_trid: 'ABC-12345')
|
||||
@registrar1 = Fabricate(:registrar1, code: 'REGDOMAIN1')
|
||||
@registrar2 = Fabricate(:registrar2, code: 'REGDOMAIN2')
|
||||
|
@ -193,7 +193,7 @@ describe 'EPP Domain', epp: true do
|
|||
xml = domain_create_xml(name: { value: "#{'ä' * 63}.ee" })
|
||||
|
||||
response = epp_plain_request(xml)
|
||||
response[:msg].should == 'Domain name is too long (maximum is 63 characters) [name_puny]'
|
||||
response[:msg].should == 'Domain name is too long (maximum is 63 characters) [puny_label]'
|
||||
response[:result_code].should == '2005'
|
||||
response[:clTRID].should == 'ABC-12345'
|
||||
end
|
||||
|
@ -326,7 +326,7 @@ describe 'EPP Domain', epp: true do
|
|||
})
|
||||
|
||||
response = epp_plain_request(xml)
|
||||
response[:results][0][:result_code].should == '2004'
|
||||
response[:results][0][:result_code].should == '2306'
|
||||
response[:results][0][:msg].should == 'Period must add up to 1, 2 or 3 years [period]'
|
||||
response[:results][0][:value].should == '367'
|
||||
end
|
||||
|
@ -1949,7 +1949,10 @@ describe 'EPP Domain', epp: true do
|
|||
|
||||
### RENEW ###
|
||||
it 'renews a domain' do
|
||||
exp_date = 1.year.since.to_date
|
||||
domain.valid_to = Time.zone.now.to_date + 10.days
|
||||
domain.save
|
||||
|
||||
exp_date = domain.valid_to.to_date
|
||||
xml = @epp_xml.domain.renew(
|
||||
name: { value: domain.name },
|
||||
curExpDate: { value: exp_date.to_s },
|
||||
|
@ -1979,7 +1982,9 @@ describe 'EPP Domain', epp: true do
|
|||
end
|
||||
|
||||
it 'returns an error when period is invalid' do
|
||||
exp_date = (1.year.since.to_date)
|
||||
domain.valid_to = Time.zone.now.to_date + 10.days
|
||||
domain.save
|
||||
exp_date = domain.valid_to.to_date
|
||||
|
||||
xml = @epp_xml.domain.renew(
|
||||
name: { value: domain.name },
|
||||
|
@ -1989,10 +1994,59 @@ describe 'EPP Domain', epp: true do
|
|||
|
||||
response = epp_plain_request(xml)
|
||||
response[:results][0][:msg].should == 'Period must add up to 1, 2 or 3 years [period]'
|
||||
response[:results][0][:result_code].should == '2004'
|
||||
response[:results][0][:result_code].should == '2306'
|
||||
response[:results][0][:value].should == '4'
|
||||
end
|
||||
|
||||
it 'does not renew a domain unless less than 90 days till expiration' do
|
||||
domain.valid_to = Time.zone.now.to_date + 91.days
|
||||
domain.save
|
||||
exp_date = domain.valid_to.to_date
|
||||
|
||||
xml = @epp_xml.domain.renew(
|
||||
name: { value: domain.name },
|
||||
curExpDate: { value: exp_date.to_s },
|
||||
period: { value: '1', attrs: { unit: 'y' } }
|
||||
)
|
||||
|
||||
response = epp_plain_request(xml)
|
||||
response[:results][0][:msg].should == 'Object is not eligible for renewal'
|
||||
response[:results][0][:result_code].should == '2105'
|
||||
|
||||
domain.valid_to = Time.zone.now.to_date + 90.days
|
||||
domain.save
|
||||
exp_date = domain.valid_to.to_date
|
||||
|
||||
xml = @epp_xml.domain.renew(
|
||||
name: { value: domain.name },
|
||||
curExpDate: { value: exp_date.to_s },
|
||||
period: { value: '1', attrs: { unit: 'y' } }
|
||||
)
|
||||
|
||||
response = epp_plain_request(xml)
|
||||
response[:results][0][:msg].should == 'Command completed successfully'
|
||||
response[:results][0][:result_code].should == '1000'
|
||||
end
|
||||
|
||||
it 'does not renew a domain unless less than 90 days till expiration' do
|
||||
Setting.days_to_renew_domain_before_expire = 0
|
||||
|
||||
domain.valid_to = Time.zone.now.to_date + 5.years
|
||||
domain.save
|
||||
exp_date = domain.valid_to.to_date
|
||||
|
||||
xml = @epp_xml.domain.renew(
|
||||
name: { value: domain.name },
|
||||
curExpDate: { value: exp_date.to_s },
|
||||
period: { value: '1', attrs: { unit: 'y' } }
|
||||
)
|
||||
|
||||
response = epp_plain_request(xml)
|
||||
response[:results][0][:msg].should == 'Command completed successfully'
|
||||
response[:results][0][:result_code].should == '1000'
|
||||
Setting.days_to_renew_domain_before_expire = 90
|
||||
end
|
||||
|
||||
it 'does not renew foreign domain' do
|
||||
login_as :registrar2 do
|
||||
exp_date = 1.year.since.to_date
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
Fabricator(:pricelist) do
|
||||
active_from 1.year.ago
|
||||
active_until 1.year.since
|
||||
valid_from 1.year.ago
|
||||
valid_to 1.year.since
|
||||
category '.ee'
|
||||
duration '1year'
|
||||
operation_category 'new'
|
||||
price 10
|
||||
end
|
||||
|
|
|
@ -85,6 +85,17 @@ describe Domain do
|
|||
@domain.registrant_update_confirmable?('123').should == false
|
||||
end
|
||||
|
||||
it 'should expire domains' do
|
||||
Domain.expire_domains
|
||||
@domain.domain_statuses.where(value: DomainStatus::EXPIRED).count.should == 0
|
||||
|
||||
@domain.valid_to = Time.zone.now - 10.days
|
||||
@domain.save
|
||||
|
||||
Domain.expire_domains
|
||||
@domain.domain_statuses.where(value: DomainStatus::EXPIRED).count.should == 1
|
||||
end
|
||||
|
||||
context 'about registrant update confirm' do
|
||||
before :all do
|
||||
@domain.registrant_verification_token = 123
|
||||
|
@ -237,7 +248,7 @@ describe Domain do
|
|||
d.valid?
|
||||
d.errors.full_messages.should match_array([
|
||||
"Domain name Domain name is invalid",
|
||||
"Domain name Domain name is too long (maximum is 63 characters)"
|
||||
"Puny label Domain name is too long (maximum is 63 characters)"
|
||||
])
|
||||
end
|
||||
|
||||
|
@ -247,7 +258,15 @@ describe Domain do
|
|||
d.valid?
|
||||
d.errors.full_messages.should match_array([
|
||||
"Domain name Domain name is invalid",
|
||||
"Domain name Domain name is too long (maximum is 63 characters)"
|
||||
"Puny label Domain name is too long (maximum is 63 characters)"
|
||||
])
|
||||
end
|
||||
|
||||
it 'should be valid when name length is 63 characters' do
|
||||
d = Fabricate.build(:domain,
|
||||
name: "õäöüšžõäöüšžõäöüšžõäöüšžõäöüšžõäöüšžõäöüšžab123.pri.ee")
|
||||
d.valid?
|
||||
d.errors.full_messages.should match_array([
|
||||
])
|
||||
end
|
||||
|
||||
|
@ -255,7 +274,7 @@ describe Domain do
|
|||
d = Fabricate.build(:domain, name: "#{'ä' * 63}.ee")
|
||||
d.valid?
|
||||
d.errors.full_messages.should == [
|
||||
"Domain name Domain name is too long (maximum is 63 characters)"
|
||||
"Puny label Domain name is too long (maximum is 63 characters)"
|
||||
]
|
||||
end
|
||||
|
||||
|
@ -264,7 +283,7 @@ describe Domain do
|
|||
d.valid?
|
||||
d.errors.full_messages.should match_array([
|
||||
"Domain name Domain name is invalid",
|
||||
"Domain name Domain name is too long (maximum is 63 characters)"
|
||||
"Puny label Domain name is too long (maximum is 63 characters)"
|
||||
])
|
||||
end
|
||||
|
||||
|
@ -272,7 +291,7 @@ describe Domain do
|
|||
d = Fabricate.build(:domain, name: "#{'ä' * 63}.pri.ee")
|
||||
d.valid?
|
||||
d.errors.full_messages.should match_array([
|
||||
"Domain name Domain name is too long (maximum is 63 characters)"
|
||||
"Puny label Domain name is too long (maximum is 63 characters)"
|
||||
])
|
||||
end
|
||||
|
||||
|
|
|
@ -15,9 +15,9 @@ describe Pricelist do
|
|||
it 'should not be valid' do
|
||||
@pricelist.valid?
|
||||
@pricelist.errors.full_messages.should match_array([
|
||||
"Valid from is missing",
|
||||
"Active until is missing",
|
||||
"Category is missing"
|
||||
"Category is missing",
|
||||
"Duration is missing",
|
||||
"Operation category is missing"
|
||||
])
|
||||
end
|
||||
|
||||
|
@ -32,6 +32,11 @@ describe Pricelist do
|
|||
it 'should not have any versions' do
|
||||
@pricelist.versions.should == []
|
||||
end
|
||||
|
||||
it 'should not have name' do
|
||||
@pricelist.name.should == ' '
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
context 'with valid attributes' do
|
||||
|
@ -50,10 +55,14 @@ describe Pricelist do
|
|||
@pricelist.errors.full_messages.should match_array([])
|
||||
end
|
||||
|
||||
it 'should have name' do
|
||||
@pricelist.name.should == 'new .ee'
|
||||
end
|
||||
|
||||
it 'should have one version' do
|
||||
with_versioning do
|
||||
@pricelist.versions.reload.should == []
|
||||
@pricelist.name = 'New name'
|
||||
@pricelist.price = 11
|
||||
@pricelist.save
|
||||
@pricelist.errors.full_messages.should match_array([])
|
||||
@pricelist.versions.size.should == 1
|
||||
|
|
|
@ -24,7 +24,7 @@ describe ZonefileSetting do
|
|||
master_nameserver: 'ns.tld.ee'
|
||||
}).first_or_create!
|
||||
|
||||
d = Fabricate(:domain_with_dnskeys)
|
||||
d = Fabricate(:domain_with_dnskeys, name: 'testpri.ee')
|
||||
d.nameservers << Nameserver.new({
|
||||
hostname: "ns.#{d.name}",
|
||||
ipv4: '123.123.123.123',
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue