Merge pull request #11 from internetee/staging

Staging
This commit is contained in:
Timo Võhmar 2015-11-30 12:28:12 +02:00
commit 3834af4e59
28 changed files with 2770 additions and 1558 deletions

View file

@ -35,7 +35,7 @@ module Repp
error! I18n.t('errors.messages.epp_authorization_error'), 401 unless domain.auth_info.eql? request.headers['Auth-Code'] error! I18n.t('errors.messages.epp_authorization_error'), 401 unless domain.auth_info.eql? request.headers['Auth-Code']
contact_repp_json = proc{|contact| contact_repp_json = proc{|contact|
contact.attributes.slice("code", "ident_type", "ident_country_code", "phone", "email", "street", "city", "zip","country_code", "statuses") contact.attributes.slice("code", "name", "ident", "ident_type", "ident_country_code", "phone", "email", "street", "city", "zip","country_code", "statuses")
} }
@response = { @response = {

View file

@ -6,12 +6,13 @@ class Admin::DomainVersionsController < AdminController
@domain = Domain.where(id: params[:domain_id]).includes({versions: :item}).first @domain = Domain.where(id: params[:domain_id]).includes({versions: :item}).first
@versions = @domain.versions @versions = @domain.versions
if @domain.pending_json.present? # Depricated it had to load legal document. We may do it by parsing and adding link.
frame = Nokogiri::XML(@domain.pending_json['frame']) # if @domain.pending_json.present?
@pending_user = User.find(@domain.pending_json['current_user_id']) # frame = Nokogiri::XML(@domain.pending_json['frame'])
@pending_domain = Epp::Domain.find(@domain.id) # @pending_user = User.find(@domain.pending_json['current_user_id'])
@pending_domain.update(frame, @pending_user, false) # @pending_domain = Epp::Domain.find(@domain.id)
end # @pending_domain.update(frame, @pending_user, false)
# end
end end
# rubocop:enable Style/GuardClause # rubocop:enable Style/GuardClause
end end

View file

@ -9,7 +9,7 @@ class Admin::PendingUpdatesController < AdminController
if @epp_domain.apply_pending_update! if @epp_domain.apply_pending_update!
redirect_to admin_domain_path(@domain.id), notice: t(:pending_applied) redirect_to admin_domain_path(@domain.id), notice: t(:pending_applied)
else else
redirect_to admin_edit_domain_path(@domain.id), alert: t(:failure) redirect_to edit_admin_domain_path(@domain.id), alert: t(:failure)
end end
end end

View file

@ -73,10 +73,7 @@ class EppController < ApplicationController
end end
def schema def schema
# TODO: Support multiple schemas EPP_ALL_SCHEMA
return DOMAIN_SCHEMA if params[:epp_object_type] == :domain
return CONTACT_SCHEMA if params[:epp_object_type] == :contact
EPP_SCHEMA
end end
def generate_svtrid def generate_svtrid

View file

@ -30,6 +30,7 @@ class Contact < ActiveRecord::Base
length: { maximum: 100, message: :too_long_contact_code } length: { maximum: 100, message: :too_long_contact_code }
validate :ident_valid_format? validate :ident_valid_format?
validate :uniq_statuses? validate :uniq_statuses?
validate :validate_html
after_initialize do after_initialize do
self.statuses = [] if statuses.nil? self.statuses = [] if statuses.nil?
@ -221,6 +222,19 @@ class Contact < ActiveRecord::Base
end end
end end
def validate_html
self.class.columns.each do |column|
next unless column.type == :string
c_name = column.name
val = read_attribute(c_name)
if val && (val.include?('<') || val.include?('>') || val.include?('%3C') || val.include?('%3E'))
errors.add(c_name, :invalid)
return # want to run code faster
end
end
end
def uniq_statuses? def uniq_statuses?
return true unless statuses.detect { |s| statuses.count(s) > 1 } return true unless statuses.detect { |s| statuses.count(s) > 1 }
errors.add(:statuses, :not_uniq) errors.add(:statuses, :not_uniq)

View file

@ -590,7 +590,7 @@ class Domain < ActiveRecord::Base
def pending_registrant def pending_registrant
return '' if pending_json.blank? return '' if pending_json.blank?
return '' if pending_json['new_registrant_id'].blank? return '' if pending_json['new_registrant_id'].blank?
Registrant.find_by(id: pending_json['new_registrant_id'].last) Registrant.find_by(id: pending_json['new_registrant_id'])
end end
def generate_auth_info def generate_auth_info

View file

@ -21,7 +21,7 @@ class Epp::Contact < Contact
# rubocop: disable Metrics/PerceivedComplexity # rubocop: disable Metrics/PerceivedComplexity
# rubocop: disable Metrics/CyclomaticComplexity # rubocop: disable Metrics/CyclomaticComplexity
# rubocop: disable Metrics/AbcSize # rubocop: disable Metrics/AbcSize
def attrs_from(frame) def attrs_from(frame, new_record: false)
f = frame f = frame
at = {}.with_indifferent_access at = {}.with_indifferent_access
at[:name] = f.css('postalInfo name').text if f.css('postalInfo name').present? at[:name] = f.css('postalInfo name').text if f.css('postalInfo name').present?
@ -40,7 +40,7 @@ class Epp::Contact < Contact
if legal_frame.present? if legal_frame.present?
at[:legal_documents_attributes] = legal_document_attrs(legal_frame) at[:legal_documents_attributes] = legal_document_attrs(legal_frame)
end end
at.merge!(ident_attrs(f.css('ident').first)) at.merge!(ident_attrs(f.css('ident').first)) if new_record
at at
end end
# rubocop: enable Metrics/PerceivedComplexity # rubocop: enable Metrics/PerceivedComplexity
@ -51,7 +51,7 @@ class Epp::Contact < Contact
return super if frame.blank? return super if frame.blank?
super( super(
attrs_from(frame).merge( attrs_from(frame, new_record: true).merge(
code: frame.css('id').text, code: frame.css('id').text,
registrar: registrar registrar: registrar
) )
@ -59,10 +59,7 @@ class Epp::Contact < Contact
end end
def ident_attrs(ident_frame) def ident_attrs(ident_frame)
return {} if ident_frame.blank? return {} unless ident_attr_valid?(ident_frame)
return {} if ident_frame.try('text').blank?
return {} if ident_frame.attr('type').blank?
return {} if ident_frame.attr('cc').blank?
{ {
ident: ident_frame.text, ident: ident_frame.text,
@ -71,6 +68,15 @@ class Epp::Contact < Contact
} }
end end
def ident_attr_valid?(ident_frame)
return false if ident_frame.blank?
return false if ident_frame.try('text').blank?
return false if ident_frame.attr('type').blank?
return false if ident_frame.attr('cc').blank?
true
end
def legal_document_attrs(legal_frame) def legal_document_attrs(legal_frame)
return [] if legal_frame.blank? return [] if legal_frame.blank?
return [] if legal_frame.try('text').blank? return [] if legal_frame.try('text').blank?
@ -137,7 +143,7 @@ class Epp::Contact < Contact
def update_attributes(frame) def update_attributes(frame)
return super if frame.blank? return super if frame.blank?
at = {}.with_indifferent_access at = {}.with_indifferent_access
at.deep_merge!(self.class.attrs_from(frame.css('chg'))) at.deep_merge!(self.class.attrs_from(frame.css('chg'), new_record: false))
if Setting.client_status_editing_enabled if Setting.client_status_editing_enabled
at[:statuses] = statuses - statuses_attrs(frame.css('rem'), 'rem') + statuses_attrs(frame.css('add'), 'add') at[:statuses] = statuses - statuses_attrs(frame.css('rem'), 'rem') + statuses_attrs(frame.css('add'), 'add')
@ -147,17 +153,26 @@ class Epp::Contact < Contact
at[:legal_documents_attributes] = self.class.legal_document_attrs(legal_frame) at[:legal_documents_attributes] = self.class.legal_document_attrs(legal_frame)
self.deliver_emails = true # turn on email delivery for epp self.deliver_emails = true # turn on email delivery for epp
# allow to update ident code for legacy contacts # allow to update ident code for legacy contacts
if frame.css('ident').first.present? if frame.css('ident').first
if ident_updated_at.present? self.ident_updated_at ||= Time.zone.now # not in use
throw :epp_error, { ident_frame = frame.css('ident').first
code: '2306',
msg: I18n.t(:ident_update_error) if ident_frame && ident_attr_valid?(ident_frame) && ident_country_code.blank? && ident_type.in?(%w(org priv).freeze)
} at.merge!(ident_country_code: ident_frame.attr('cc'))
else
at.merge!(self.class.ident_attrs(frame.css('ident').first))
self.ident_updated_at = Time.zone.now
end end
# Deprecated
# if ident_updated_at.present?
# throw :epp_error, {
# code: '2306',
# msg: I18n.t(:ident_update_error)
# }
# else
# at.merge!(self.class.ident_attrs(frame.css('ident').first))
# self.ident_updated_at = Time.zone.now
# end
end end
super(at) super(at)

View file

@ -515,9 +515,8 @@ class Epp::Domain < Domain
statuses.delete(DomainStatus::PENDING_DELETE_CONFIRMATION) statuses.delete(DomainStatus::PENDING_DELETE_CONFIRMATION)
statuses.delete(DomainStatus::PENDING_DELETE) statuses.delete(DomainStatus::PENDING_DELETE)
DomainMailer.delete_confirmation(id, deliver_emails).deliver DomainMailer.delete_confirmation(id, deliver_emails).deliver
clean_pendings!
# TODO: confirm that this actually makes sense set_pending_delete!
clean_pendings! if valid? && set_pending_delete!
true true
end end
@ -843,6 +842,7 @@ class Epp::Domain < Domain
def parse_legal_document_from_frame(parsed_frame) def parse_legal_document_from_frame(parsed_frame)
ld = parsed_frame.css('legalDocument').first ld = parsed_frame.css('legalDocument').first
return nil unless ld return nil unless ld
return nil if ld.text.starts_with?(ENV['legal_documents_dir']) # escape reloading
{ {
body: ld.text, body: ld.text,

View file

@ -1,3 +1 @@
EPP_SCHEMA = Nokogiri::XML::Schema(File.read("lib/schemas/epp-1.0.xsd")) EPP_ALL_SCHEMA = Nokogiri::XML::Schema(File.read("lib/schemas/all-ee-1.0.xsd"))
DOMAIN_SCHEMA = Nokogiri::XML::Schema(File.read("lib/schemas/domain-eis-1.0.xsd"))
CONTACT_SCHEMA = Nokogiri::XML::Schema(File.read("lib/schemas/contact-eis-1.0.xsd"))

View file

@ -0,0 +1,168 @@
class RestoreTtlToZonefile2 < ActiveRecord::Migration
# rubocop:disable Metrics/MethodLength
def up
execute <<-SQL
CREATE OR REPLACE FUNCTION generate_zonefile(i_origin varchar)
RETURNS text AS $$
DECLARE
zone_header text := concat('$ORIGIN ', i_origin, '.');
serial_num varchar;
include_filter varchar := '';
exclude_filter varchar := '';
tmp_var text;
ret text;
BEGIN
-- define filters
include_filter = '%' || i_origin;
-- for %.%.%
IF i_origin ~ '\\.' THEN
exclude_filter := '';
-- for %.%
ELSE
exclude_filter := '%.%.' || i_origin;
END IF;
SELECT ROUND(extract(epoch from now() at time zone 'utc')) INTO serial_num;
-- zonefile header
SELECT concat(
format('%-10s', '$ORIGIN .'), chr(10),
format('%-10s', '$TTL'), zf.ttl, chr(10), chr(10),
format('%-10s', i_origin || '.'), 'IN SOA ', zf.master_nameserver, '. ', zf.email, '. (', chr(10),
format('%-17s', ''), format('%-12s', serial_num), '; serial number', chr(10),
format('%-17s', ''), format('%-12s', zf.refresh), '; refresh, seconds', chr(10),
format('%-17s', ''), format('%-12s', zf.retry), '; retry, seconds', chr(10),
format('%-17s', ''), format('%-12s', zf.expire), '; expire, seconds', chr(10),
format('%-17s', ''), format('%-12s', zf.minimum_ttl), '; minimum TTL, seconds', chr(10),
format('%-17s', ''), ')'
) FROM zonefile_settings zf WHERE i_origin = zf.origin INTO tmp_var;
ret = concat(tmp_var, chr(10), chr(10));
-- ns records
SELECT array_to_string(
array(
SELECT concat(d.name_puny, '. IN NS ', ns.hostname, '.')
FROM domains d
JOIN nameservers ns ON ns.domain_id = d.id
WHERE d.name LIKE include_filter AND d.name NOT LIKE exclude_filter
ORDER BY d.name
),
chr(10)
) INTO tmp_var;
ret := concat(ret, '; Zone NS Records', chr(10), tmp_var, chr(10), chr(10));
-- a glue records for origin nameservers
SELECT array_to_string(
array(
SELECT concat(ns.hostname, '. IN A ', ns.ipv4)
FROM nameservers ns
JOIN domains d ON d.id = ns.domain_id
WHERE d.name = i_origin
AND ns.hostname LIKE '%.' || d.name
AND ns.ipv4 IS NOT NULL AND ns.ipv4 <> ''
), chr(10)
) INTO tmp_var;
ret := concat(ret, '; Zone A Records', chr(10), tmp_var);
-- a glue records for other nameservers
SELECT array_to_string(
array(
SELECT concat(ns.hostname, '. IN A ', ns.ipv4)
FROM nameservers ns
JOIN domains d ON d.id = ns.domain_id
WHERE d.name LIKE include_filter AND d.name NOT LIKE exclude_filter
AND ns.hostname LIKE '%.' || d.name
AND d.name <> i_origin
AND ns.ipv4 IS NOT NULL AND ns.ipv4 <> ''
AND NOT EXISTS ( -- filter out glue records that already appeared in origin glue recrods
SELECT 1 FROM nameservers nsi
JOIN domains di ON nsi.domain_id = di.id
WHERE di.name = i_origin
AND nsi.hostname = ns.hostname
)
), chr(10)
) INTO tmp_var;
-- TODO This is a possible subtitition to the previous query, stress testing is needed to see which is faster
-- SELECT ns.*
-- FROM nameservers ns
-- JOIN domains d ON d.id = ns.domain_id
-- WHERE d.name LIKE '%ee' AND d.name NOT LIKE '%pri.ee'
-- AND ns.hostname LIKE '%.' || d.name
-- AND d.name <> 'ee'
-- AND ns.ipv4 IS NOT NULL AND ns.ipv4 <> ''
-- AND ns.hostname NOT IN (
-- SELECT ns.hostname FROM domains d JOIN nameservers ns ON d.id = ns.domain_id WHERE d.name = 'ee'
-- )
ret := concat(ret, chr(10), tmp_var, chr(10), chr(10));
-- aaaa glue records for origin nameservers
SELECT array_to_string(
array(
SELECT concat(ns.hostname, '. IN AAAA ', ns.ipv6)
FROM nameservers ns
JOIN domains d ON d.id = ns.domain_id
WHERE d.name = i_origin
AND ns.hostname LIKE '%.' || d.name
AND ns.ipv6 IS NOT NULL AND ns.ipv6 <> ''
), chr(10)
) INTO tmp_var;
ret := concat(ret, '; Zone AAAA Records', chr(10), tmp_var);
-- aaaa glue records for other nameservers
SELECT array_to_string(
array(
SELECT concat(ns.hostname, '. IN AAAA ', ns.ipv6)
FROM nameservers ns
JOIN domains d ON d.id = ns.domain_id
WHERE d.name LIKE include_filter AND d.name NOT LIKE exclude_filter
AND ns.hostname LIKE '%.' || d.name
AND d.name <> i_origin
AND ns.ipv6 IS NOT NULL AND ns.ipv6 <> ''
AND NOT EXISTS ( -- filter out glue records that already appeared in origin glue recrods
SELECT 1 FROM nameservers nsi
JOIN domains di ON nsi.domain_id = di.id
WHERE di.name = i_origin
AND nsi.hostname = ns.hostname
)
), chr(10)
) INTO tmp_var;
ret := concat(ret, chr(10), tmp_var, chr(10), chr(10));
-- ds records
SELECT array_to_string(
array(
SELECT concat(
d.name_puny, '. 3600 IN DS ', dk.ds_key_tag, ' ',
dk.ds_alg, ' ', dk.ds_digest_type, ' ', dk.ds_digest
)
FROM domains d
JOIN dnskeys dk ON dk.domain_id = d.id
WHERE d.name LIKE include_filter AND d.name NOT LIKE exclude_filter
),
chr(10)
) INTO tmp_var;
ret := concat(ret, '; Zone DS Records', chr(10), tmp_var, chr(10));
RETURN ret;
END;
$$
LANGUAGE plpgsql;
SQL
end
def down
execute <<-SQL
DROP FUNCTION generate_zonefile(i_origin varchar);
SQL
end
end

View file

@ -131,6 +131,8 @@ Content-Type: application/json
"domain":"ee-test.ee", "domain":"ee-test.ee",
"registrant":{ "registrant":{
"code":"EE:R1", "code":"EE:R1",
"name":"Registrant",
"ident":"17612535",
"ident_type":"org", "ident_type":"org",
"ident_country_code":"EE", "ident_country_code":"EE",
"phone":"+372.1234567", "phone":"+372.1234567",
@ -147,6 +149,8 @@ Content-Type: application/json
"admin_contacts":[ "admin_contacts":[
{ {
"code":"EE:A1", "code":"EE:A1",
"name":"Admin Contact",
"ident":"17612535376",
"ident_type":"priv", "ident_type":"priv",
"ident_country_code":"EE", "ident_country_code":"EE",
"phone":"+372.7654321", "phone":"+372.7654321",
@ -164,6 +168,8 @@ Content-Type: application/json
"tech_contacts":[ "tech_contacts":[
{ {
"code":"EE:T1", "code":"EE:T1",
"name":"Tech Contact",
"ident":"17612536",
"ident_type":"org", "ident_type":"org",
"ident_country_code":"EE", "ident_country_code":"EE",
"phone":"+372.7654321", "phone":"+372.7654321",

View file

@ -22,7 +22,10 @@
schemaLocation="epp-1.0.xsd"/> schemaLocation="epp-1.0.xsd"/>
<!-- EPP protocol extension: DNSSEC --> <!-- EPP protocol extension: DNSSEC -->
<import namespace="urn:ietf:params:xml:ns:secDNS-1.1" <import namespace="urn:ietf:params:xml:ns:secDNS-1.1"
schemaLocation="secNDS-1.1.xsd"/> schemaLocation="secDNS-1.1.xsd"/>
<!-- EPP protocol extension: DNSSEC keyrelay -->
<import namespace="urn:ietf:params:xml:ns:keyrelay-1.0"
schemaLocation="keyrelay-1.0.xsd"/>
<import namespace="urn:ietf:params:xml:ns:host-1.0" <import namespace="urn:ietf:params:xml:ns:host-1.0"
schemaLocation="host-1.0.xsd"/> schemaLocation="host-1.0.xsd"/>
<!-- EPP protocol extension: .ee specific --> <!-- EPP protocol extension: .ee specific -->

View file

@ -1,447 +1,458 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="https://epp.tld.ee/schema/domain-eis-1.0.xsd" <schema targetNamespace="https://epp.tld.ee/schema/domain-eis-1.0.xsd"
xmlns:domain="https://epp.tld.ee/schema/domain-eis-1.0.xsd" xmlns:domain="https://epp.tld.ee/schema/domain-eis-1.0.xsd"
xmlns:host="urn:ietf:params:xml:ns:host-1.0" xmlns:host="urn:ietf:params:xml:ns:host-1.0"
xmlns:epp="urn:ietf:params:xml:ns:epp-1.0" xmlns:epp="urn:ietf:params:xml:ns:epp-1.0"
xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0" xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0"
xmlns="http://www.w3.org/2001/XMLSchema" xmlns="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"> elementFormDefault="qualified">
<!-- <!--
Import common element types. Import common element types.
--> -->
<import namespace="urn:ietf:params:xml:ns:eppcom-1.0"/> <import namespace="urn:ietf:params:xml:ns:eppcom-1.0"/>
<import namespace="urn:ietf:params:xml:ns:epp-1.0"/> <import namespace="urn:ietf:params:xml:ns:epp-1.0"/>
<import namespace="urn:ietf:params:xml:ns:host-1.0"/> <import namespace="urn:ietf:params:xml:ns:host-1.0"/>
<import namespace="urn:ietf:params:xml:ns:secDNS-1.1"/> <import namespace="urn:ietf:params:xml:ns:secDNS-1.1"/>
<import namespace="https://epp.tld.ee/schema/eis-1.0.xsd"/> <import namespace="https://epp.tld.ee/schema/eis-1.0.xsd"/>
<annotation> <annotation>
<documentation> <documentation>
Extensible Provisioning Protocol v1.0 Extensible Provisioning Protocol v1.0
domain provisioning schema. domain provisioning schema.
</documentation> </documentation>
</annotation> </annotation>
<!-- <!--
Child elements found in EPP commands. Child elements found in EPP commands.
--> -->
<element name="check" type="domain:mNameType"/> <element name="check" type="domain:mNameType"/>
<element name="create" type="domain:createType"/> <element name="create" type="domain:createType"/>
<element name="delete" type="domain:sNameType"/> <element name="delete" type="domain:deleteType"/>
<element name="info" type="domain:infoType"/> <element name="info" type="domain:infoType"/>
<element name="renew" type="domain:renewType"/> <element name="renew" type="domain:renewType"/>
<element name="transfer" type="domain:transferType"/> <element name="transfer" type="domain:transferType"/>
<element name="update" type="domain:updateType"/> <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> Child elements of the <create> command.
<extension base="domain:pLimitType"> -->
<attribute name="unit" type="domain:pUnitType" <complexType name="createType">
use="required"/> <sequence>
</extension> <element name="name" type="eppcom:labelType"/>
</simpleContent> <element name="period" type="domain:periodType"
</complexType> 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>
<simpleType name="pLimitType"> <complexType name="periodType">
<restriction base="unsignedShort"> <simpleContent>
<minInclusive value="1"/> <extension base="domain:pLimitType">
<maxInclusive value="1095"/> <attribute name="unit" type="domain:pUnitType"
</restriction> use="required"/>
</simpleType> </extension>
</simpleContent>
</complexType>
<simpleType name="pUnitType"> <simpleType name="pLimitType">
<restriction base="token"> <restriction base="unsignedShort">
<enumeration value="y"/> <minInclusive value="1"/>
<enumeration value="m"/> <maxInclusive value="1095"/>
<enumeration value="d"/> </restriction>
</restriction> </simpleType>
</simpleType>
<complexType name="nsType"> <simpleType name="pUnitType">
<choice> <restriction base="token">
<element name="hostObj" type="eppcom:labelType" <enumeration value="y"/>
maxOccurs="unbounded"/> <enumeration value="m"/>
<element name="hostAttr" type="domain:hostAttrType" <enumeration value="d"/>
maxOccurs="unbounded"/> </restriction>
</choice> </simpleType>
</complexType>
<!--
Name servers are either host objects or attributes.
-->
<complexType name="hostAttrType"> <complexType name="nsType">
<sequence> <choice>
<element name="hostName" type="eppcom:labelType"/> <element name="hostObj" type="eppcom:labelType"
<element name="hostAddr" type="host:addrType" maxOccurs="unbounded"/>
minOccurs="0" maxOccurs="unbounded"/> <element name="hostAttr" type="domain:hostAttrType"
</sequence> maxOccurs="unbounded"/>
</complexType> </choice>
<!-- </complexType>
If attributes, addresses are optional and follow the <!--
structure defined in the host mapping. Name servers are either host objects or attributes.
--> -->
<complexType name="contactType"> <complexType name="hostAttrType">
<simpleContent> <sequence>
<extension base="eppcom:clIDType"> <element name="hostName" type="eppcom:labelType"/>
<attribute name="type" type="domain:contactAttrType"/> <element name="hostAddr" type="host:addrType"
</extension> minOccurs="0" maxOccurs="unbounded"/>
</simpleContent> </sequence>
</complexType> </complexType>
<!--
If attributes, addresses are optional and follow the
structure defined in the host mapping.
-->
<simpleType name="contactAttrType"> <complexType name="contactType">
<restriction base="token"> <simpleContent>
<enumeration value="admin"/> <extension base="eppcom:clIDType">
<enumeration value="billing"/> <attribute name="type" type="domain:contactAttrType"/>
<enumeration value="tech"/> </extension>
</restriction> </simpleContent>
</simpleType> </complexType>
<complexType name="authInfoType"> <simpleType name="contactAttrType">
<choice> <restriction base="token">
<element name="pw" type="eppcom:pwAuthInfoType"/> <enumeration value="admin"/>
<element name="ext" type="eppcom:extAuthInfoType"/> <enumeration value="billing"/>
</choice> <enumeration value="tech"/>
</complexType> </restriction>
</simpleType>
<!-- <complexType name="authInfoType">
Child element of commands that require a single name. <choice>
--> <element name="pw" type="eppcom:pwAuthInfoType"/>
<complexType name="sNameType"> <element name="ext" type="eppcom:extAuthInfoType"/>
<sequence> </choice>
<element name="name" type="eppcom:labelType"/> </complexType>
</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. Child element of commands that require a single name.
--> -->
<complexType name="infoType"> <complexType name="sNameType">
<sequence> <sequence>
<element name="name" type="domain:infoNameType"/> <element name="name" type="eppcom:labelType"/>
<element name="authInfo" type="domain:authInfoType" </sequence>
minOccurs="0"/> </complexType>
</sequence> <!--
</complexType> Child element of commands that accept multiple names.
-->
<complexType name="mNameType">
<sequence>
<element name="name" type="eppcom:labelType"
maxOccurs="unbounded"/>
</sequence>
</complexType>
<complexType name="infoNameType"> <!--
<simpleContent> Child element of the <delete> command - .ee specific (verified)
<extension base = "eppcom:labelType"> -->
<attribute name="hosts" type="domain:hostsType" <complexType name="deleteType">
default="all"/> <sequence>
</extension> <element name="name" type="eppcom:labelType"/>
</simpleContent> </sequence>
</complexType> <attribute name="verified" type="domain:verifiedType"
use="optional"/>
</complexType>
<simpleType name="hostsType"> <!--
<restriction base="token"> Child elements of the <info> command.
<enumeration value="all"/> -->
<enumeration value="del"/> <complexType name="infoType">
<enumeration value="none"/> <sequence>
<enumeration value="sub"/> <element name="name" type="domain:infoNameType"/>
</restriction> <element name="authInfo" type="domain:authInfoType"
</simpleType> minOccurs="0"/>
</sequence>
</complexType>
<!-- <complexType name="infoNameType">
Child elements of the <renew> command. <simpleContent>
--> <extension base = "eppcom:labelType">
<complexType name="renewType"> <attribute name="hosts" type="domain:hostsType"
<sequence> default="all"/>
<element name="name" type="eppcom:labelType"/> </extension>
<element name="curExpDate" type="date"/> </simpleContent>
<element name="period" type="domain:periodType" </complexType>
minOccurs="0"/>
</sequence>
</complexType>
<!-- <simpleType name="hostsType">
Child elements of the <transfer> command. <restriction base="token">
--> <enumeration value="all"/>
<complexType name="transferType"> <enumeration value="del"/>
<sequence> <enumeration value="none"/>
<element name="name" type="eppcom:labelType"/> <enumeration value="sub"/>
<element name="period" type="domain:periodType" </restriction>
minOccurs="0"/> </simpleType>
<element name="authInfo" type="domain:authInfoType"
minOccurs="0"/>
</sequence>
</complexType>
<!-- <!--
Child elements of the <update> command. Child elements of the <renew> command.
--> -->
<complexType name="updateType"> <complexType name="renewType">
<sequence> <sequence>
<element name="name" type="eppcom:labelType"/> <element name="name" type="eppcom:labelType"/>
<element name="add" type="domain:addRemType" <element name="curExpDate" type="date"/>
minOccurs="0"/> <element name="period" type="domain:periodType"
<element name="rem" type="domain:addRemType" minOccurs="0"/>
minOccurs="0"/> </sequence>
<element name="chg" type="domain:chgType" </complexType>
minOccurs="0"/>
</sequence>
</complexType>
<!-- <!--
Data elements that can be added or removed. Child elements of the <transfer> command.
--> -->
<complexType name="addRemType"> <complexType name="transferType">
<sequence> <sequence>
<element name="ns" type="domain:nsType" <element name="name" type="eppcom:labelType"/>
minOccurs="0"/> <element name="period" type="domain:periodType"
<element name="contact" type="domain:contactType" minOccurs="0"/>
minOccurs="0" maxOccurs="unbounded"/> <element name="authInfo" type="domain:authInfoType"
<element name="status" type="domain:statusType" minOccurs="0"/>
minOccurs="0" maxOccurs="11"/> </sequence>
</sequence> </complexType>
</complexType>
<!-- <!--
Data elements that can be changed. Child elements of the <update> command.
--> -->
<complexType name="chgType"> <complexType name="updateType">
<sequence> <sequence>
<element name="registrant" type="domain:clIDChgType" <element name="name" type="eppcom:labelType"/>
minOccurs="0"/> <element name="add" type="domain:addRemType"
<element name="authInfo" type="domain:authInfoChgType" minOccurs="0"/>
minOccurs="0"/> <element name="rem" type="domain:addRemType"
</sequence> minOccurs="0"/>
</complexType> <element name="chg" type="domain:chgType"
minOccurs="0"/>
</sequence>
</complexType>
<!-- <!--
Allow the registrant value to be nullified by changing the Data elements that can be added or removed.
minLength restriction to "0". -->
--> <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>
<complexType name="clIDChgType"> <!--
<simpleContent> Data elements that can be changed.
<extension base="domain:clIDChgSimpleType"> -->
<attribute name="verified" type="domain:verifiedType"/> <complexType name="chgType">
</extension> <sequence>
</simpleContent> <element name="registrant" type="domain:clIDChgType"
</complexType> minOccurs="0"/>
<element name="authInfo" type="domain:authInfoChgType"
minOccurs="0"/>
</sequence>
</complexType>
<simpleType name="clIDChgSimpleType"> <!--
<restriction base="token"> Allow the registrant value to be nullified by changing the
<minLength value="0"/> minLength restriction to "0".
</restriction> -->
</simpleType>
<simpleType name="verifiedType"> <complexType name="clIDChgType">
<restriction base="token"> <simpleContent>
<enumeration value="yes"/> <extension base="domain:clIDChgSimpleType">
<enumeration value="no"/> <attribute name="verified" type="domain:verifiedType"/>
</restriction> </extension>
</simpleType> </simpleContent>
</complexType>
<simpleType name="clIDChgSimpleType">
<restriction base="token">
<minLength value="0"/>
</restriction>
</simpleType>
<!-- <simpleType name="verifiedType">
Allow the authInfo value to be nullified by including an <restriction base="token">
empty element within the choice. <enumeration value="yes"/>
--> <enumeration value="no"/>
<complexType name="authInfoChgType"> </restriction>
<choice> </simpleType>
<element name="pw" type="eppcom:pwAuthInfoType"/>
<element name="ext" type="eppcom:extAuthInfoType"/>
<element name="null"/>
</choice>
</complexType>
<!-- <!--
Child response elements. Allow the authInfo value to be nullified by including an
--> empty element within the choice.
<element name="chkData" type="domain:chkDataType"/> -->
<element name="creData" type="domain:creDataType"/> <complexType name="authInfoChgType">
<element name="infData" type="domain:infDataType"/> <choice>
<element name="panData" type="domain:panDataType"/> <element name="pw" type="eppcom:pwAuthInfoType"/>
<element name="renData" type="domain:renDataType"/> <element name="ext" type="eppcom:extAuthInfoType"/>
<element name="trnData" type="domain:trnDataType"/> <element name="null"/>
</choice>
</complexType>
<!-- <!--
<check> response elements. Child response elements.
--> -->
<complexType name="chkDataType"> <element name="chkData" type="domain:chkDataType"/>
<sequence> <element name="creData" type="domain:creDataType"/>
<element name="cd" type="domain:checkType" <element name="infData" type="domain:infDataType"/>
maxOccurs="unbounded"/> <element name="panData" type="domain:panDataType"/>
</sequence> <element name="renData" type="domain:renDataType"/>
</complexType> <element name="trnData" type="domain:trnDataType"/>
<complexType name="checkType"> <!--
<sequence> <check> response elements.
<element name="name" type="domain:checkNameType"/> -->
<element name="reason" type="eppcom:reasonType" <complexType name="chkDataType">
minOccurs="0"/> <sequence>
</sequence> <element name="cd" type="domain:checkType"
</complexType> maxOccurs="unbounded"/>
</sequence>
</complexType>
<complexType name="checkNameType"> <complexType name="checkType">
<simpleContent> <sequence>
<extension base="eppcom:labelType"> <element name="name" type="domain:checkNameType"/>
<attribute name="avail" type="boolean" <element name="reason" type="eppcom:reasonType"
use="required"/> minOccurs="0"/>
</extension> </sequence>
</simpleContent> </complexType>
</complexType>
<!-- <complexType name="checkNameType">
<create> response elements. <simpleContent>
--> <extension base="eppcom:labelType">
<complexType name="creDataType"> <attribute name="avail" type="boolean"
<sequence> use="required"/>
<element name="name" type="eppcom:labelType"/> </extension>
<element name="crDate" type="dateTime"/> </simpleContent>
<element name="exDate" type="dateTime" </complexType>
minOccurs="0"/>
</sequence>
</complexType>
<!-- <!--
<info> response elements. <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>
<complexType name="infDataType"> <!--
<sequence> <info> response elements.
<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>
<!-- <complexType name="infDataType">
Status is a combination of attributes and an optional <sequence>
human-readable message that may be expressed in languages other <element name="name" type="eppcom:labelType"/>
than English. <element name="roid" type="eppcom:roidType"/>
--> <element name="status" type="domain:statusType"
<complexType name="statusType"> minOccurs="0" maxOccurs="11"/>
<simpleContent> <element name="registrant" type="eppcom:clIDType"
<extension base="normalizedString"> minOccurs="0"/>
<attribute name="s" type="domain:statusValueType" <element name="contact" type="domain:contactType"
use="required"/> minOccurs="0" maxOccurs="unbounded"/>
<attribute name="lang" type="language" <element name="ns" type="domain:nsType"
default="en"/> minOccurs="0"/>
</extension> <element name="host" type="eppcom:labelType"
</simpleContent> minOccurs="0" maxOccurs="unbounded"/>
</complexType> <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>
<simpleType name="statusValueType"> <!--
<restriction base="token"> Status is a combination of attributes and an optional
<enumeration value="clientDeleteProhibited"/> human-readable message that may be expressed in languages other
<enumeration value="clientHold"/> than English.
<enumeration value="clientRenewProhibited"/> -->
<enumeration value="clientTransferProhibited"/> <complexType name="statusType">
<enumeration value="clientUpdateProhibited"/> <simpleContent>
<enumeration value="inactive"/> <extension base="normalizedString">
<enumeration value="ok"/> <attribute name="s" type="domain:statusValueType"
<enumeration value="expired"/> use="required"/>
<enumeration value="pendingCreate"/> <attribute name="lang" type="language"
<enumeration value="pendingDelete"/> default="en"/>
<enumeration value="pendingRenew"/> </extension>
<enumeration value="pendingTransfer"/> </simpleContent>
<enumeration value="pendingUpdate"/> </complexType>
<enumeration value="pendingDeleteConfirmation"/>
<enumeration value="serverDeleteProhibited"/>
<enumeration value="serverHold"/>
<enumeration value="serverRenewProhibited"/>
<enumeration value="serverTransferProhibited"/>
<enumeration value="serverUpdateProhibited"/>
<enumeration value="serverForceDelete"/>
<enumeration value="serverManualInzone"/>
<enumeration value="serverRegistrantChangeProhibited"/>
<enumeration value="serverAdminChangeProhibited"/>
<enumeration value="serverTechChangeProhibited"/>
<enumeration value="deleteCandidate"/>
</restriction>
</simpleType>
<!-- <simpleType name="statusValueType">
Pending action notification response elements. <restriction base="token">
--> <enumeration value="clientDeleteProhibited"/>
<complexType name="panDataType"> <enumeration value="clientHold"/>
<sequence> <enumeration value="clientRenewProhibited"/>
<element name="name" type="domain:paNameType"/> <enumeration value="clientTransferProhibited"/>
<element name="paTRID" type="epp:trIDType"/> <enumeration value="clientUpdateProhibited"/>
<element name="paDate" type="dateTime"/> <enumeration value="inactive"/>
</sequence> <enumeration value="ok"/>
</complexType> <enumeration value="expired"/>
<enumeration value="pendingCreate"/>
<enumeration value="pendingDelete"/>
<enumeration value="pendingRenew"/>
<enumeration value="pendingTransfer"/>
<enumeration value="pendingUpdate"/>
<enumeration value="pendingDeleteConfirmation"/>
<enumeration value="serverDeleteProhibited"/>
<enumeration value="serverHold"/>
<enumeration value="serverRenewProhibited"/>
<enumeration value="serverTransferProhibited"/>
<enumeration value="serverUpdateProhibited"/>
<enumeration value="serverForceDelete"/>
<enumeration value="serverManualInzone"/>
<enumeration value="serverRegistrantChangeProhibited"/>
<enumeration value="serverAdminChangeProhibited"/>
<enumeration value="serverTechChangeProhibited"/>
<enumeration value="deleteCandidate"/>
</restriction>
</simpleType>
<complexType name="paNameType"> <!--
<simpleContent> Pending action notification response elements.
<extension base="eppcom:labelType"> -->
<attribute name="paResult" type="boolean" <complexType name="panDataType">
use="required"/> <sequence>
</extension> <element name="name" type="domain:paNameType"/>
</simpleContent> <element name="paTRID" type="epp:trIDType"/>
</complexType> <element name="paDate" type="dateTime"/>
</sequence>
</complexType>
<!-- <complexType name="paNameType">
<renew> response elements. <simpleContent>
--> <extension base="eppcom:labelType">
<complexType name="renDataType"> <attribute name="paResult" type="boolean"
<sequence> use="required"/>
</extension>
</simpleContent>
</complexType>
<!--
<renew> response elements.
-->
<complexType name="renDataType">
<sequence>
<element name="name" type="eppcom:labelType"/> <element name="name" type="eppcom:labelType"/>
<element name="exDate" type="dateTime" <element name="exDate" type="dateTime"
minOccurs="0"/> minOccurs="0"/>
</sequence> </sequence>
</complexType> </complexType>
<!-- <!--
<transfer> response elements. <transfer> response elements.
--> -->
<complexType name="trnDataType"> <complexType name="trnDataType">
<sequence> <sequence>
<element name="name" type="eppcom:labelType"/> <element name="name" type="eppcom:labelType"/>
<element name="trStatus" type="eppcom:trStatusType"/> <element name="trStatus" type="eppcom:trStatusType"/>
<element name="reID" type="eppcom:clIDType"/> <element name="reID" type="eppcom:clIDType"/>
@ -450,9 +461,10 @@
<element name="acDate" type="dateTime"/> <element name="acDate" type="dateTime"/>
<element name="exDate" type="dateTime" <element name="exDate" type="dateTime"
minOccurs="0"/> minOccurs="0"/>
</sequence> </sequence>
</complexType> </complexType>
<!--
End of schema. <!--
--> End of schema.
</schema> -->
</schema>

View file

@ -53,7 +53,7 @@ Abstract client and object identifier type.
<simpleType name="clIDType"> <simpleType name="clIDType">
<restriction base="token"> <restriction base="token">
<minLength value="3"/> <minLength value="3"/>
<maxLength value="16"/> <!-- <maxLength value="16"/> -->
</restriction> </restriction>
</simpleType> </simpleType>
@ -102,4 +102,4 @@ Transfer status identifiers.
<!-- <!--
End of schema. End of schema.
--> -->
</schema> </schema>

View file

@ -0,0 +1,63 @@
<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="urn:ietf:params:xml:ns:keyrelay-1.0"
xmlns:keyrelay="urn:ietf:params:xml:ns:keyrelay-1.0"
xmlns:epp="urn:ietf:params:xml:ns:epp-1.0"
xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0"
xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1"
xmlns:domain="urn:ietf:params:xml:ns:domain-1.0"
xmlns="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<annotation>
<documentation>
Extensible Provisioning Protocol v1.0 protocol
extension schema for relaying DNSSEC key material.
</documentation>
</annotation>
<import namespace="urn:ietf:params:xml:ns:epp-1.0"/>
<import namespace="urn:ietf:params:xml:ns:eppcom-1.0"/>
<import namespace="urn:ietf:params:xml:ns:secDNS-1.1"/>
<import namespace="urn:ietf:params:xml:ns:domain-1.0"/>
<element name="keyRelayData" type="keyrelay:keyRelayDataType" />
<element name="infData" type="keyrelay:infDataType" />
<element name="create" type="keyrelay:createType" />
<complexType name="createType">
<sequence>
<element name="name" type="eppcom:labelType"/>
<!-- <element name="authInfo" type="domain:authInfoType"/> -->
<element name="keyRelayData" type="keyrelay:keyRelayDataType"
maxOccurs="unbounded"/>
</sequence>
</complexType>
<complexType name="infDataType">
<sequence>
<element name="name" type="eppcom:labelType"/>
<!-- <element name="authInfo" type="domain:authInfoType"/> -->
<element name="keyRelayData" type="keyrelay:keyRelayDataType"
maxOccurs="unbounded"/>
<element name="crDate" type="dateTime"/>
<element name="reID" type="eppcom:clIDType" />
<element name="acID" type="eppcom:clIDType" />
</sequence>
</complexType>
<complexType name="keyRelayDataType">
<sequence>
<element name="keyData" type="secDNS:keyDataType" />
<element name="expiry" type="keyrelay:keyRelayExpiryType"
minOccurs="0" />
</sequence>
</complexType>
<complexType name="keyRelayExpiryType">
<choice>
<element name="absolute" type="dateTime" />
<element name="relative" type="duration" />
</choice>
</complexType>
</schema>

View file

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
This schema imports other schemas used for Estonian ccTLD
.ee EPP queries and responses.
-->
<schema targetNamespace="https://epp.tld.ee/schema/all-ee-1.0"
xmlns:all="https://epp.tld.ee/schema/all-ee-1.0"
xmlns="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<!--
Import all schemas related to .ee EPP protocol.
Anytime the version of any imported schema is raised, the version of
'all' schema is also raised.
eppcom and epp schemas never change the version. This would result
in incompatibility with EPP standard.
-->
<import namespace="urn:ietf:params:xml:ns:eppcom-1.0"
schemaLocation="lib/schemas/eppcom-1.0.xsd"/>
<import namespace="urn:ietf:params:xml:ns:epp-1.0"
schemaLocation="lib/schemas/epp-1.0.xsd"/>
<!-- EPP protocol extension: DNSSEC -->
<import namespace="urn:ietf:params:xml:ns:secDNS-1.1"
schemaLocation="lib/schemas/secDNS-1.1.xsd"/>
<!-- EPP protocol extension: DNSSEC keyrelay -->
<import namespace="urn:ietf:params:xml:ns:keyrelay-1.0"
schemaLocation="lib/schemas/keyrelay-1.0.xsd"/>
<import namespace="urn:ietf:params:xml:ns:host-1.0"
schemaLocation="lib/schemas/host-1.0.xsd"/>
<!-- EPP protocol extension: .ee specific -->
<import namespace="https://epp.tld.ee/schema/eis-1.0"
schemaLocation="lib/schemas/eis-1.0.xsd"/>
<import namespace="https://epp.tld.ee/schema/contact-eis-1.0"
schemaLocation="lib/schemas/contact-eis-1.0.xsd"/>
<import namespace="https://epp.tld.ee/schema/domain-eis-1.0"
schemaLocation="lib/schemas/domain-eis-1.0.xsd"/>
<annotation>
<documentation>
Extensible Provisioning Protocol v1.0
all schema's grouped together
</documentation>
</annotation>
</schema>

388
lib/schemas/contact-1.0.xsd Normal file
View file

@ -0,0 +1,388 @@
<?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"/>
<import namespace="urn:ietf:params:xml:ns:epp-1.0"/>
<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:sIDType"/>
<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"/>
<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"/>
<element name="disclose" type="contact:discloseType"
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"
use="required"/>
</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="discloseType">
<sequence>
<element name="name" type="contact:intLocType"
minOccurs="0" maxOccurs="2"/>
<element name="org" type="contact:intLocType"
minOccurs="0" maxOccurs="2"/>
<element name="addr" type="contact:intLocType"
minOccurs="0" maxOccurs="2"/>
<element name="voice" minOccurs="0"/>
<element name="fax" minOccurs="0"/>
<element name="email" minOccurs="0"/>
</sequence>
<attribute name="flag" type="boolean" use="required"/>
</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"/>
<element name="disclose" type="contact:discloseType"
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"
use="required"/>
</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"/>
<element name="disclose" type="contact:discloseType"
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>

View file

@ -10,9 +10,9 @@
<!-- <!--
Import common element types. Import common element types.
--> -->
<import namespace="urn:ietf:params:xml:ns:eppcom-1.0" schemaLocation="lib/schemas/eppcom-1.0.xsd"/> <import namespace="urn:ietf:params:xml:ns:eppcom-1.0"/>
<import namespace="urn:ietf:params:xml:ns:epp-1.0" schemaLocation="lib/schemas/epp-1.0.xsd"/> <import namespace="urn:ietf:params:xml:ns:epp-1.0"/>
<import namespace="https://epp.tld.ee/schema/eis-1.0.xsd" schemaLocation="lib/schemas/eis-1.0.xsd"/> <import namespace="https://epp.tld.ee/schema/eis-1.0.xsd"/>
<annotation> <annotation>
<documentation> <documentation>

432
lib/schemas/domain-1.0.xsd Normal file
View file

@ -0,0 +1,432 @@
<?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"/>
<import namespace="urn:ietf:params:xml:ns:epp-1.0"/>
<import namespace="urn:ietf:params:xml:ns:host-1.0"/>
<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"/>
</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="99"/>
</restriction>
</simpleType>
<simpleType name="pUnitType">
<restriction base="token">
<enumeration value="y"/>
<enumeration value="m"/>
</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".
-->
<simpleType name="clIDChgType">
<restriction base="token">
<minLength value="0"/>
<maxLength value="16"/>
</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>

View file

@ -1,460 +1,458 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="https://epp.tld.ee/schema/domain-eis-1.0.xsd" <schema targetNamespace="https://epp.tld.ee/schema/domain-eis-1.0.xsd"
xmlns:domain="https://epp.tld.ee/schema/domain-eis-1.0.xsd" xmlns:domain="https://epp.tld.ee/schema/domain-eis-1.0.xsd"
xmlns:host="urn:ietf:params:xml:ns:host-1.0" xmlns:host="urn:ietf:params:xml:ns:host-1.0"
xmlns:epp="urn:ietf:params:xml:ns:epp-1.0" xmlns:epp="urn:ietf:params:xml:ns:epp-1.0"
xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0" xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0"
xmlns="http://www.w3.org/2001/XMLSchema" xmlns="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"> elementFormDefault="qualified">
<!-- <!--
Import common element types. Import common element types.
--> -->
<import namespace="urn:ietf:params:xml:ns:eppcom-1.0" schemaLocation="lib/schemas/eppcom-1.0.xsd"/> <import namespace="urn:ietf:params:xml:ns:eppcom-1.0"/>
<import namespace="urn:ietf:params:xml:ns:epp-1.0" schemaLocation="lib/schemas/epp-1.0.xsd"/> <import namespace="urn:ietf:params:xml:ns:epp-1.0"/>
<import namespace="urn:ietf:params:xml:ns:host-1.0" schemaLocation="lib/schemas/host-1.0.xsd"/> <import namespace="urn:ietf:params:xml:ns:host-1.0"/>
<import namespace="urn:ietf:params:xml:ns:secDNS-1.1" schemaLocation="lib/schemas/secDNS-1.1.xsd"/> <import namespace="urn:ietf:params:xml:ns:secDNS-1.1"/>
<import namespace="https://epp.tld.ee/schema/eis-1.0.xsd" schemaLocation="lib/schemas/eis-1.0.xsd"/> <import namespace="https://epp.tld.ee/schema/eis-1.0.xsd"/>
<annotation> <annotation>
<documentation> <documentation>
Extensible Provisioning Protocol v1.0 Extensible Provisioning Protocol v1.0
domain provisioning schema. domain provisioning schema.
</documentation> </documentation>
</annotation> </annotation>
<!-- <!--
Child elements found in EPP commands. Child elements found in EPP commands.
--> -->
<element name="check" type="domain:mNameType"/> <element name="check" type="domain:mNameType"/>
<element name="create" type="domain:createType"/> <element name="create" type="domain:createType"/>
<element name="delete" type="domain:verifiedDeleteType"/> <element name="delete" type="domain:deleteType"/>
<element name="info" type="domain:infoType"/> <element name="info" type="domain:infoType"/>
<element name="renew" type="domain:renewType"/> <element name="renew" type="domain:renewType"/>
<element name="transfer" type="domain:transferType"/> <element name="transfer" type="domain:transferType"/>
<element name="update" type="domain:updateType"/> <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> Child elements of the <create> command.
<extension base="domain:pLimitType"> -->
<attribute name="unit" type="domain:pUnitType" <complexType name="createType">
use="required"/> <sequence>
</extension> <element name="name" type="eppcom:labelType"/>
</simpleContent> <element name="period" type="domain:periodType"
</complexType> 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>
<simpleType name="pLimitType"> <complexType name="periodType">
<restriction base="unsignedShort"> <simpleContent>
<minInclusive value="1"/> <extension base="domain:pLimitType">
<maxInclusive value="1095"/> <attribute name="unit" type="domain:pUnitType"
</restriction> use="required"/>
</simpleType> </extension>
</simpleContent>
</complexType>
<simpleType name="pUnitType"> <simpleType name="pLimitType">
<restriction base="token"> <restriction base="unsignedShort">
<enumeration value="y"/> <minInclusive value="1"/>
<enumeration value="m"/> <maxInclusive value="1095"/>
<enumeration value="d"/> </restriction>
</restriction> </simpleType>
</simpleType>
<complexType name="nsType"> <simpleType name="pUnitType">
<choice> <restriction base="token">
<element name="hostObj" type="eppcom:labelType" <enumeration value="y"/>
maxOccurs="unbounded"/> <enumeration value="m"/>
<element name="hostAttr" type="domain:hostAttrType" <enumeration value="d"/>
maxOccurs="unbounded"/> </restriction>
</choice> </simpleType>
</complexType>
<!--
Name servers are either host objects or attributes.
-->
<complexType name="hostAttrType"> <complexType name="nsType">
<sequence> <choice>
<element name="hostName" type="eppcom:labelType"/> <element name="hostObj" type="eppcom:labelType"
<element name="hostAddr" type="host:addrType" maxOccurs="unbounded"/>
<element name="hostAttr" type="domain:hostAttrType"
maxOccurs="unbounded"/>
</choice>
</complexType>
<!--
Name servers are either host objects or attributes.
-->
minOccurs="0" maxOccurs="unbounded"/> <complexType name="hostAttrType">
</sequence> <sequence>
</complexType> <element name="hostName" type="eppcom:labelType"/>
<!-- <element name="hostAddr" type="host:addrType"
If attributes, addresses are optional and follow the minOccurs="0" maxOccurs="unbounded"/>
structure defined in the host mapping. </sequence>
--> </complexType>
<!--
If attributes, addresses are optional and follow the
structure defined in the host mapping.
-->
<complexType name="contactType"> <complexType name="contactType">
<simpleContent> <simpleContent>
<extension base="eppcom:clIDType"> <extension base="eppcom:clIDType">
<attribute name="type" type="domain:contactAttrType"/> <attribute name="type" type="domain:contactAttrType"/>
</extension> </extension>
</simpleContent> </simpleContent>
</complexType> </complexType>
<simpleType name="contactAttrType"> <simpleType name="contactAttrType">
<restriction base="token"> <restriction base="token">
<enumeration value="admin"/> <enumeration value="admin"/>
<enumeration value="billing"/> <enumeration value="billing"/>
<enumeration value="tech"/> <enumeration value="tech"/>
</restriction> </restriction>
</simpleType> </simpleType>
<complexType name="authInfoType"> <complexType name="authInfoType">
<choice> <choice>
<element name="pw" type="eppcom:pwAuthInfoType"/> <element name="pw" type="eppcom:pwAuthInfoType"/>
<element name="ext" type="eppcom:extAuthInfoType"/> <element name="ext" type="eppcom:extAuthInfoType"/>
</choice> </choice>
</complexType> </complexType>
<!-- <!--
Child element of commands that require a single name. Child element of commands that require a single name.
--> -->
<complexType name="sNameType"> <complexType name="sNameType">
<sequence> <sequence>
<element name="name" type="eppcom:labelType"/> <element name="name" type="eppcom:labelType"/>
</sequence> </sequence>
</complexType> </complexType>
<!-- <!--
Extended delete with verified attribute and include single name content Child element of commands that accept multiple names.
--> -->
<complexType name="verifiedDeleteType"> <complexType name="mNameType">
<sequence> <sequence>
<element name="name" type="eppcom:labelType"/> <element name="name" type="eppcom:labelType"
</sequence> maxOccurs="unbounded"/>
<attribute name="verified" use="optional"> </sequence>
<simpleType> </complexType>
<restriction base="string">
<enumeration value="yes"/>
<enumeration value="no"/>
</restriction>
</simpleType>
</attribute>
</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. Child element of the <delete> command - .ee specific (verified)
--> -->
<complexType name="infoType"> <complexType name="deleteType">
<sequence> <sequence>
<element name="name" type="domain:infoNameType"/> <element name="name" type="eppcom:labelType"/>
<element name="authInfo" type="domain:authInfoType" </sequence>
minOccurs="0"/> <attribute name="verified" type="domain:verifiedType"
</sequence> use="optional"/>
</complexType> </complexType>
<complexType name="infoNameType"> <!--
<simpleContent> Child elements of the <info> command.
<extension base = "eppcom:labelType"> -->
<attribute name="hosts" type="domain:hostsType" <complexType name="infoType">
default="all"/> <sequence>
</extension> <element name="name" type="domain:infoNameType"/>
</simpleContent> <element name="authInfo" type="domain:authInfoType"
</complexType> minOccurs="0"/>
</sequence>
</complexType>
<simpleType name="hostsType"> <complexType name="infoNameType">
<restriction base="token"> <simpleContent>
<enumeration value="all"/> <extension base = "eppcom:labelType">
<enumeration value="del"/> <attribute name="hosts" type="domain:hostsType"
<enumeration value="none"/> default="all"/>
<enumeration value="sub"/> </extension>
</restriction> </simpleContent>
</simpleType> </complexType>
<!-- <simpleType name="hostsType">
Child elements of the <renew> command. <restriction base="token">
--> <enumeration value="all"/>
<complexType name="renewType"> <enumeration value="del"/>
<sequence> <enumeration value="none"/>
<element name="name" type="eppcom:labelType"/> <enumeration value="sub"/>
<element name="curExpDate" type="date"/> </restriction>
<element name="period" type="domain:periodType" </simpleType>
minOccurs="0"/>
</sequence>
</complexType>
<!-- <!--
Child elements of the <transfer> command. Child elements of the <renew> command.
--> -->
<complexType name="transferType"> <complexType name="renewType">
<sequence> <sequence>
<element name="name" type="eppcom:labelType"/> <element name="name" type="eppcom:labelType"/>
<element name="period" type="domain:periodType" <element name="curExpDate" type="date"/>
minOccurs="0"/> <element name="period" type="domain:periodType"
<element name="authInfo" type="domain:authInfoType" minOccurs="0"/>
minOccurs="0"/> </sequence>
</sequence> </complexType>
</complexType>
<!-- <!--
Child elements of the <update> command. Child elements of the <transfer> command.
--> -->
<complexType name="updateType"> <complexType name="transferType">
<sequence> <sequence>
<element name="name" type="eppcom:labelType"/> <element name="name" type="eppcom:labelType"/>
<element name="add" type="domain:addRemType" <element name="period" type="domain:periodType"
minOccurs="0"/> minOccurs="0"/>
<element name="rem" type="domain:addRemType" <element name="authInfo" type="domain:authInfoType"
minOccurs="0"/> minOccurs="0"/>
<element name="chg" type="domain:chgType" </sequence>
minOccurs="0"/> </complexType>
</sequence>
</complexType>
<!-- <!--
Data elements that can be added or removed. Child elements of the <update> command.
--> -->
<complexType name="addRemType"> <complexType name="updateType">
<sequence> <sequence>
<element name="ns" type="domain:nsType" <element name="name" type="eppcom:labelType"/>
minOccurs="0"/> <element name="add" type="domain:addRemType"
<element name="contact" type="domain:contactType" minOccurs="0"/>
minOccurs="0" maxOccurs="unbounded"/> <element name="rem" type="domain:addRemType"
<element name="status" type="domain:statusType" minOccurs="0"/>
minOccurs="0" maxOccurs="11"/> <element name="chg" type="domain:chgType"
</sequence> minOccurs="0"/>
</complexType> </sequence>
</complexType>
<!-- <!--
Data elements that can be changed. Data elements that can be added or removed.
--> -->
<complexType name="chgType"> <complexType name="addRemType">
<sequence> <sequence>
<element name="registrant" type="domain:clIDChgType" <element name="ns" type="domain:nsType"
minOccurs="0"/> minOccurs="0"/>
<element name="authInfo" type="domain:authInfoChgType" <element name="contact" type="domain:contactType"
minOccurs="0"/> minOccurs="0" maxOccurs="unbounded"/>
</sequence> <element name="status" type="domain:statusType"
</complexType> minOccurs="0" maxOccurs="11"/>
</sequence>
</complexType>
<!-- <!--
Allow the registrant value to be nullified by changing the Data elements that can be changed.
minLength restriction to "0". -->
--> <complexType name="chgType">
<sequence>
<element name="registrant" type="domain:clIDChgType"
minOccurs="0"/>
<element name="authInfo" type="domain:authInfoChgType"
minOccurs="0"/>
</sequence>
</complexType>
<complexType name="clIDChgType"> <!--
<simpleContent> Allow the registrant value to be nullified by changing the
<extension base="domain:clIDChgSimpleType"> minLength restriction to "0".
<attribute name="verified" type="domain:verifiedType"/> -->
</extension>
</simpleContent>
</complexType>
<simpleType name="clIDChgSimpleType"> <complexType name="clIDChgType">
<restriction base="token"> <simpleContent>
<minLength value="0"/> <extension base="domain:clIDChgSimpleType">
</restriction> <attribute name="verified" type="domain:verifiedType"/>
</simpleType> </extension>
</simpleContent>
</complexType>
<simpleType name="verifiedType"> <simpleType name="clIDChgSimpleType">
<restriction base="token"> <restriction base="token">
<enumeration value="yes"/> <minLength value="0"/>
<enumeration value="no"/> </restriction>
</restriction> </simpleType>
</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 Allow the authInfo value to be nullified by including an
empty element within the choice. empty element within the choice.
--> -->
<complexType name="authInfoChgType"> <complexType name="authInfoChgType">
<choice> <choice>
<element name="pw" type="eppcom:pwAuthInfoType"/> <element name="pw" type="eppcom:pwAuthInfoType"/>
<element name="ext" type="eppcom:extAuthInfoType"/> <element name="ext" type="eppcom:extAuthInfoType"/>
<element name="null"/> <element name="null"/>
</choice> </choice>
</complexType> </complexType>
<!-- <!--
Child response elements. Child response elements.
--> -->
<element name="chkData" type="domain:chkDataType"/> <element name="chkData" type="domain:chkDataType"/>
<element name="creData" type="domain:creDataType"/> <element name="creData" type="domain:creDataType"/>
<element name="infData" type="domain:infDataType"/> <element name="infData" type="domain:infDataType"/>
<element name="panData" type="domain:panDataType"/> <element name="panData" type="domain:panDataType"/>
<element name="renData" type="domain:renDataType"/> <element name="renData" type="domain:renDataType"/>
<element name="trnData" type="domain:trnDataType"/> <element name="trnData" type="domain:trnDataType"/>
<!-- <!--
<check> response elements. <check> response elements.
--> -->
<complexType name="chkDataType"> <complexType name="chkDataType">
<sequence> <sequence>
<element name="cd" type="domain:checkType" <element name="cd" type="domain:checkType"
maxOccurs="unbounded"/> maxOccurs="unbounded"/>
</sequence> </sequence>
</complexType> </complexType>
<complexType name="checkType"> <complexType name="checkType">
<sequence> <sequence>
<element name="name" type="domain:checkNameType"/> <element name="name" type="domain:checkNameType"/>
<element name="reason" type="eppcom:reasonType" <element name="reason" type="eppcom:reasonType"
minOccurs="0"/> minOccurs="0"/>
</sequence> </sequence>
</complexType> </complexType>
<complexType name="checkNameType"> <complexType name="checkNameType">
<simpleContent> <simpleContent>
<extension base="eppcom:labelType"> <extension base="eppcom:labelType">
<attribute name="avail" type="boolean" <attribute name="avail" type="boolean"
use="required"/> use="required"/>
</extension> </extension>
</simpleContent> </simpleContent>
</complexType> </complexType>
<!-- <!--
<create> response elements. <create> response elements.
--> -->
<complexType name="creDataType"> <complexType name="creDataType">
<sequence> <sequence>
<element name="name" type="eppcom:labelType"/> <element name="name" type="eppcom:labelType"/>
<element name="crDate" type="dateTime"/> <element name="crDate" type="dateTime"/>
<element name="exDate" type="dateTime" <element name="exDate" type="dateTime"
minOccurs="0"/> minOccurs="0"/>
</sequence> </sequence>
</complexType> </complexType>
<!-- <!--
<info> response elements. <info> response elements.
--> -->
<complexType name="infDataType"> <complexType name="infDataType">
<sequence> <sequence>
<element name="name" type="eppcom:labelType"/> <element name="name" type="eppcom:labelType"/>
<element name="roid" type="eppcom:roidType"/> <element name="roid" type="eppcom:roidType"/>
<element name="status" type="domain:statusType" <element name="status" type="domain:statusType"
minOccurs="0" maxOccurs="11"/> minOccurs="0" maxOccurs="11"/>
<element name="registrant" type="eppcom:clIDType" <element name="registrant" type="eppcom:clIDType"
minOccurs="0"/> minOccurs="0"/>
<element name="contact" type="domain:contactType" <element name="contact" type="domain:contactType"
minOccurs="0" maxOccurs="unbounded"/> minOccurs="0" maxOccurs="unbounded"/>
<element name="ns" type="domain:nsType" <element name="ns" type="domain:nsType"
minOccurs="0"/> minOccurs="0"/>
<element name="host" type="eppcom:labelType" <element name="host" type="eppcom:labelType"
minOccurs="0" maxOccurs="unbounded"/> minOccurs="0" maxOccurs="unbounded"/>
<element name="clID" type="eppcom:clIDType"/> <element name="clID" type="eppcom:clIDType"/>
<element name="crID" type="eppcom:clIDType" <element name="crID" type="eppcom:clIDType"
minOccurs="0"/> minOccurs="0"/>
<element name="crDate" type="dateTime" <element name="crDate" type="dateTime"
minOccurs="0"/> minOccurs="0"/>
<element name="upID" type="eppcom:clIDType" <element name="upID" type="eppcom:clIDType"
minOccurs="0"/> minOccurs="0"/>
<element name="upDate" type="dateTime" <element name="upDate" type="dateTime"
minOccurs="0"/> minOccurs="0"/>
<element name="exDate" type="dateTime" <element name="exDate" type="dateTime"
minOccurs="0"/> minOccurs="0"/>
<element name="trDate" type="dateTime" <element name="trDate" type="dateTime"
minOccurs="0"/> minOccurs="0"/>
<element name="authInfo" type="domain:authInfoType" <element name="authInfo" type="domain:authInfoType"
minOccurs="0"/> minOccurs="0"/>
</sequence> </sequence>
</complexType> </complexType>
<!-- <!--
Status is a combination of attributes and an optional Status is a combination of attributes and an optional
human-readable message that may be expressed in languages other human-readable message that may be expressed in languages other
than English. than English.
--> -->
<complexType name="statusType"> <complexType name="statusType">
<simpleContent> <simpleContent>
<extension base="normalizedString"> <extension base="normalizedString">
<attribute name="s" type="domain:statusValueType" <attribute name="s" type="domain:statusValueType"
use="required"/> use="required"/>
<attribute name="lang" type="language" <attribute name="lang" type="language"
default="en"/> default="en"/>
</extension> </extension>
</simpleContent> </simpleContent>
</complexType> </complexType>
<simpleType name="statusValueType"> <simpleType name="statusValueType">
<restriction base="token"> <restriction base="token">
<enumeration value="clientDeleteProhibited"/> <enumeration value="clientDeleteProhibited"/>
<enumeration value="clientHold"/> <enumeration value="clientHold"/>
<enumeration value="clientRenewProhibited"/> <enumeration value="clientRenewProhibited"/>
<enumeration value="clientTransferProhibited"/> <enumeration value="clientTransferProhibited"/>
<enumeration value="clientUpdateProhibited"/> <enumeration value="clientUpdateProhibited"/>
<enumeration value="inactive"/> <enumeration value="inactive"/>
<enumeration value="ok"/> <enumeration value="ok"/>
<enumeration value="pendingCreate"/> <enumeration value="expired"/>
<enumeration value="pendingDelete"/> <enumeration value="pendingCreate"/>
<enumeration value="pendingRenew"/> <enumeration value="pendingDelete"/>
<enumeration value="pendingTransfer"/> <enumeration value="pendingRenew"/>
<enumeration value="pendingUpdate"/> <enumeration value="pendingTransfer"/>
<enumeration value="serverDeleteProhibited"/> <enumeration value="pendingUpdate"/>
<enumeration value="serverHold"/> <enumeration value="pendingDeleteConfirmation"/>
<enumeration value="serverRenewProhibited"/> <enumeration value="serverDeleteProhibited"/>
<enumeration value="serverTransferProhibited"/> <enumeration value="serverHold"/>
<enumeration value="serverUpdateProhibited"/> <enumeration value="serverRenewProhibited"/>
<!-- Custom EIS domain status values --> <enumeration value="serverTransferProhibited"/>
<enumeration value="serverTechChangeProhibited"/> <enumeration value="serverUpdateProhibited"/>
<enumeration value="serverAdminChangeProhibited"/> <enumeration value="serverForceDelete"/>
<enumeration value="serverRegistrantChangeProhibited"/> <enumeration value="serverManualInzone"/>
</restriction> <enumeration value="serverRegistrantChangeProhibited"/>
</simpleType> <enumeration value="serverAdminChangeProhibited"/>
<enumeration value="serverTechChangeProhibited"/>
<enumeration value="deleteCandidate"/>
</restriction>
</simpleType>
<!-- <!--
Pending action notification response elements. Pending action notification response elements.
--> -->
<complexType name="panDataType"> <complexType name="panDataType">
<sequence> <sequence>
<element name="name" type="domain:paNameType"/> <element name="name" type="domain:paNameType"/>
<element name="paTRID" type="epp:trIDType"/> <element name="paTRID" type="epp:trIDType"/>
<element name="paDate" type="dateTime"/> <element name="paDate" type="dateTime"/>
</sequence> </sequence>
</complexType> </complexType>
<complexType name="paNameType"> <complexType name="paNameType">
<simpleContent> <simpleContent>
<extension base="eppcom:labelType"> <extension base="eppcom:labelType">
<attribute name="paResult" type="boolean" <attribute name="paResult" type="boolean"
use="required"/> use="required"/>
</extension> </extension>
</simpleContent> </simpleContent>
</complexType> </complexType>
<!-- <!--
<renew> response elements. <renew> response elements.
--> -->
<complexType name="renDataType"> <complexType name="renDataType">
<sequence> <sequence>
<element name="name" type="eppcom:labelType"/> <element name="name" type="eppcom:labelType"/>
<element name="exDate" type="dateTime" <element name="exDate" type="dateTime"
minOccurs="0"/> minOccurs="0"/>
</sequence> </sequence>
</complexType> </complexType>
<!-- <!--
<transfer> response elements. <transfer> response elements.
--> -->
<complexType name="trnDataType"> <complexType name="trnDataType">
<sequence> <sequence>
<element name="name" type="eppcom:labelType"/> <element name="name" type="eppcom:labelType"/>
<element name="trStatus" type="eppcom:trStatusType"/> <element name="trStatus" type="eppcom:trStatusType"/>
<element name="reID" type="eppcom:clIDType"/> <element name="reID" type="eppcom:clIDType"/>
@ -463,9 +461,10 @@
<element name="acDate" type="dateTime"/> <element name="acDate" type="dateTime"/>
<element name="exDate" type="dateTime" <element name="exDate" type="dateTime"
minOccurs="0"/> minOccurs="0"/>
</sequence> </sequence>
</complexType> </complexType>
<!--
End of schema. <!--
--> End of schema.
</schema> -->
</schema>

View file

@ -83,7 +83,7 @@
<simpleContent> <simpleContent>
<extension base="normalizedString"> <extension base="normalizedString">
<attribute name="type" type="eis:identEnumType" use="required"/> <attribute name="type" type="eis:identEnumType" use="required"/>
<attribute name="cc" type="eis:ccType" use="required"/> <attribute name="cc" type="eis:ccType"/>
</extension> </extension>
</simpleContent> </simpleContent>
</complexType> </complexType>

View file

@ -1,443 +1,446 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="urn:ietf:params:xml:ns:epp-1.0" <schema targetNamespace="urn:ietf:params:xml:ns:epp-1.0"
xmlns:epp="urn:ietf:params:xml:ns:epp-1.0" xmlns:epp="urn:ietf:params:xml:ns:epp-1.0"
xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0" xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0"
xmlns="http://www.w3.org/2001/XMLSchema" xmlns="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"> elementFormDefault="qualified">
<!-- <!--
Import common element types. Import common element types.
--> -->
<import namespace="urn:ietf:params:xml:ns:eppcom-1.0" schemaLocation="lib/schemas/eppcom-1.0.xsd" />
<annotation> <import namespace="urn:ietf:params:xml:ns:eppcom-1.0"/>
<documentation>
Extensible Provisioning Protocol v1.0 schema.
</documentation>
</annotation>
<!-- <annotation>
Every EPP XML instance must begin with this element. <documentation>
--> Extensible Provisioning Protocol v1.0 schema.
<element name="epp" type="epp:eppType"/> </documentation>
</annotation>
<!-- <!--
An EPP XML instance must contain a greeting, hello, command, Every EPP XML instance must begin with this element.
response, or extension. -->
--> <element name="epp" type="epp:eppType"/>
<complexType name="eppType">
<choice>
<element name="greeting" type="epp:greetingType"/>
<element name="hello"/>
<element name="command" type="epp:commandType"/>
<element name="response" type="epp:responseType"/>
<element name="extension" type="epp:extAnyType"/>
</choice>
</complexType>
<!-- <!--
A greeting is sent by a server in response to a client connection An EPP XML instance must contain a greeting, hello, command,
or <hello>. response, or extension.
--> -->
<complexType name="greetingType"> <complexType name="eppType">
<sequence> <choice>
<element name="svID" type="epp:sIDType"/> <element name="greeting" type="epp:greetingType"/>
<element name="svDate" type="dateTime"/> <element name="hello"/>
<element name="svcMenu" type="epp:svcMenuType"/> <element name="command" type="epp:commandType"/>
<element name="dcp" type="epp:dcpType"/> <element name="response" type="epp:responseType"/>
</sequence> <element name="extension" type="epp:extAnyType"/>
</complexType> </choice>
</complexType>
<!-- <!--
Server IDs are strings with minimum and maximum length restrictions. A greeting is sent by a server in response to a client connection
--> or <hello>.
<simpleType name="sIDType"> -->
<restriction base="normalizedString"> <complexType name="greetingType">
<minLength value="3"/> <sequence>
<maxLength value="64"/> <element name="svID" type="epp:sIDType"/>
</restriction> <element name="svDate" type="dateTime"/>
</simpleType> <element name="svcMenu" type="epp:svcMenuType"/>
<element name="dcp" type="epp:dcpType"/>
</sequence>
</complexType>
<!-- <!--
A server greeting identifies available object services. Server IDs are strings with minimum and maximum length restrictions.
--> -->
<complexType name="svcMenuType"> <simpleType name="sIDType">
<sequence> <restriction base="normalizedString">
<element name="version" type="epp:versionType" <minLength value="3"/>
maxOccurs="unbounded"/> <maxLength value="64"/>
<element name="lang" type="language" </restriction>
maxOccurs="unbounded"/> </simpleType>
<element name="objURI" type="anyURI"
maxOccurs="unbounded"/>
<element name="svcExtension" type="epp:extURIType"
minOccurs="0"/>
</sequence>
</complexType>
<!-- <!--
Data Collection Policy types. A server greeting identifies available object services.
--> -->
<complexType name="dcpType"> <complexType name="svcMenuType">
<sequence> <sequence>
<element name="access" type="epp:dcpAccessType"/> <element name="version" type="epp:versionType"
<element name="statement" type="epp:dcpStatementType" maxOccurs="unbounded"/>
maxOccurs="unbounded"/> <element name="lang" type="language"
<element name="expiry" type="epp:dcpExpiryType" maxOccurs="unbounded"/>
minOccurs="0"/> <element name="objURI" type="anyURI"
</sequence> maxOccurs="unbounded"/>
</complexType> <element name="svcExtension" type="epp:extURIType"
minOccurs="0"/>
</sequence>
</complexType>
<complexType name="dcpAccessType"> <!--
<choice> Data Collection Policy types.
<element name="all"/> -->
<element name="none"/> <complexType name="dcpType">
<element name="null"/> <sequence>
<element name="other"/> <element name="access" type="epp:dcpAccessType"/>
<element name="personal"/> <element name="statement" type="epp:dcpStatementType"
<element name="personalAndOther"/> maxOccurs="unbounded"/>
</choice> <element name="expiry" type="epp:dcpExpiryType"
</complexType> minOccurs="0"/>
</sequence>
</complexType>
<complexType name="dcpStatementType"> <complexType name="dcpAccessType">
<sequence> <choice>
<element name="purpose" type="epp:dcpPurposeType"/> <element name="all"/>
<element name="recipient" type="epp:dcpRecipientType"/> <element name="none"/>
<element name="retention" type="epp:dcpRetentionType"/> <element name="null"/>
</sequence> <element name="other"/>
</complexType> <element name="personal"/>
<element name="personalAndOther"/>
</choice>
</complexType>
<complexType name="dcpPurposeType"> <complexType name="dcpStatementType">
<sequence> <sequence>
<element name="admin" <element name="purpose" type="epp:dcpPurposeType"/>
minOccurs="0"/> <element name="recipient" type="epp:dcpRecipientType"/>
<element name="contact" <element name="retention" type="epp:dcpRetentionType"/>
minOccurs="0"/> </sequence>
<element name="other" </complexType>
minOccurs="0"/>
<element name="prov"
minOccurs="0"/>
</sequence>
</complexType>
<complexType name="dcpRecipientType"> <complexType name="dcpPurposeType">
<sequence> <sequence>
<element name="other" <element name="admin"
minOccurs="0"/> minOccurs="0"/>
<element name="ours" type="epp:dcpOursType" <element name="contact"
minOccurs="0" maxOccurs="unbounded"/> minOccurs="0"/>
<element name="public" <element name="other"
minOccurs="0"/> minOccurs="0"/>
<element name="same" <element name="prov"
minOccurs="0"/> minOccurs="0"/>
<element name="unrelated" </sequence>
minOccurs="0"/> </complexType>
</sequence>
</complexType>
<complexType name="dcpOursType"> <complexType name="dcpRecipientType">
<sequence> <sequence>
<element name="recDesc" type="epp:dcpRecDescType" <element name="other"
minOccurs="0"/> minOccurs="0"/>
</sequence> <element name="ours" type="epp:dcpOursType"
</complexType> minOccurs="0" maxOccurs="unbounded"/>
<element name="public"
minOccurs="0"/>
<element name="same"
minOccurs="0"/>
<element name="unrelated"
minOccurs="0"/>
</sequence>
</complexType>
<simpleType name="dcpRecDescType"> <complexType name="dcpOursType">
<restriction base="token"> <sequence>
<minLength value="1"/> <element name="recDesc" type="epp:dcpRecDescType"
<maxLength value="255"/> minOccurs="0"/>
</restriction> </sequence>
</simpleType> </complexType>
<complexType name="dcpRetentionType"> <simpleType name="dcpRecDescType">
<choice> <restriction base="token">
<element name="business"/> <minLength value="1"/>
<element name="indefinite"/> <maxLength value="255"/>
<element name="legal"/> </restriction>
<element name="none"/> </simpleType>
<element name="stated"/>
</choice>
</complexType>
<complexType name="dcpExpiryType"> <complexType name="dcpRetentionType">
<choice> <choice>
<element name="absolute" type="dateTime"/> <element name="business"/>
<element name="relative" type="duration"/> <element name="indefinite"/>
</choice> <element name="legal"/>
</complexType> <element name="none"/>
<element name="stated"/>
</choice>
</complexType>
<!-- <complexType name="dcpExpiryType">
Extension framework types. <choice>
--> <element name="absolute" type="dateTime"/>
<complexType name="extAnyType"> <element name="relative" type="duration"/>
<sequence> </choice>
<any namespace="##other" </complexType>
maxOccurs="unbounded"/>
</sequence>
</complexType>
<complexType name="extURIType"> <!--
<sequence> Extension framework types.
<element name="extURI" type="anyURI" -->
maxOccurs="unbounded"/> <complexType name="extAnyType">
</sequence> <sequence>
</complexType> <any namespace="##other"
maxOccurs="unbounded"/>
</sequence>
</complexType>
<!-- <complexType name="extURIType">
An EPP version number is a dotted pair of decimal numbers. <sequence>
--> <element name="extURI" type="anyURI"
<simpleType name="versionType"> maxOccurs="unbounded"/>
<restriction base="token"> </sequence>
<pattern value="[1-9]+\.[0-9]+"/> </complexType>
<enumeration value="1.0"/>
</restriction>
</simpleType>
<!-- <!--
Command types. An EPP version number is a dotted pair of decimal numbers.
--> -->
<complexType name="commandType"> <simpleType name="versionType">
<sequence> <restriction base="token">
<choice> <pattern value="[1-9]+\.[0-9]+"/>
<element name="check" type="epp:readWriteType"/> <enumeration value="1.0"/>
<element name="create" type="epp:readWriteType"/> </restriction>
<element name="delete" type="epp:readWriteType"/> </simpleType>
<element name="info" type="epp:readWriteType"/>
<element name="login" type="epp:loginType"/>
<element name="logout"/>
<element name="poll" type="epp:pollType"/>
<element name="renew" type="epp:readWriteType"/>
<element name="transfer" type="epp:transferType"/>
<element name="update" type="epp:readWriteType"/>
</choice>
<element name="extension" type="epp:extAnyType"
minOccurs="0"/>
<element name="clTRID" type="epp:trIDStringType"
minOccurs="0"/>
</sequence>
</complexType>
<!-- <!--
The <login> command. Command types.
--> -->
<complexType name="loginType"> <complexType name="commandType">
<sequence> <sequence>
<element name="clID" type="eppcom:clIDType"/> <choice>
<element name="pw" type="epp:pwType"/> <element name="check" type="epp:readWriteType"/>
<element name="newPW" type="epp:pwType" <element name="create" type="epp:readWriteType"/>
minOccurs="0"/> <element name="delete" type="epp:readWriteType"/>
<element name="options" type="epp:credsOptionsType"/> <element name="info" type="epp:readWriteType"/>
<element name="svcs" type="epp:loginSvcType"/> <element name="login" type="epp:loginType"/>
</sequence> <element name="logout"/>
</complexType> <element name="poll" type="epp:pollType"/>
<element name="renew" type="epp:readWriteType"/>
<element name="transfer" type="epp:transferType"/>
<element name="update" type="epp:readWriteType"/>
</choice>
<element name="extension" type="epp:extAnyType"
minOccurs="0"/>
<element name="clTRID" type="epp:trIDStringType"
minOccurs="0"/>
</sequence>
</complexType>
<complexType name="credsOptionsType"> <!--
<sequence> The <login> command.
<element name="version" type="epp:versionType"/> -->
<element name="lang" type="language"/> <complexType name="loginType">
</sequence> <sequence>
</complexType> <element name="clID" type="eppcom:clIDType"/>
<element name="pw" type="epp:pwType"/>
<element name="newPW" type="epp:pwType"
minOccurs="0"/>
<element name="options" type="epp:credsOptionsType"/>
<element name="svcs" type="epp:loginSvcType"/>
</sequence>
</complexType>
<simpleType name="pwType"> <complexType name="credsOptionsType">
<restriction base="token"> <sequence>
<minLength value="6"/> <element name="version" type="epp:versionType"/>
<maxLength value="16"/> <element name="lang" type="language"/>
</restriction> </sequence>
</simpleType> </complexType>
<complexType name="loginSvcType"> <simpleType name="pwType">
<sequence> <restriction base="token">
<element name="objURI" type="anyURI" <minLength value="6"/>
maxOccurs="unbounded"/> <maxLength value="16"/>
<element name="svcExtension" type="epp:extURIType" </restriction>
minOccurs="0"/> </simpleType>
</sequence>
</complexType>
<!-- <complexType name="loginSvcType">
The <poll> command. <sequence>
--> <element name="objURI" type="anyURI"
<complexType name="pollType"> maxOccurs="unbounded"/>
<attribute name="op" type="epp:pollOpType" <element name="svcExtension" type="epp:extURIType"
use="required"/> minOccurs="0"/>
<attribute name="msgID" type="token"/> </sequence>
</complexType> </complexType>
<simpleType name="pollOpType"> <!--
<restriction base="token"> The <poll> command.
<enumeration value="ack"/> -->
<enumeration value="req"/> <complexType name="pollType">
</restriction> <attribute name="op" type="epp:pollOpType"
</simpleType> use="required"/>
<attribute name="msgID" type="token"/>
</complexType>
<!-- <simpleType name="pollOpType">
The <transfer> command. This is object-specific, and uses attributes <restriction base="token">
to identify the requested operation. <enumeration value="ack"/>
--> <enumeration value="req"/>
<complexType name="transferType"> </restriction>
<sequence> </simpleType>
<any namespace="##other"/>
</sequence>
<attribute name="op" type="epp:transferOpType"
use="required"/>
</complexType>
<simpleType name="transferOpType"> <!--
<restriction base="token"> The <transfer> command. This is object-specific, and uses attributes
<enumeration value="approve"/> to identify the requested operation.
<enumeration value="cancel"/> -->
<enumeration value="query"/> <complexType name="transferType">
<enumeration value="reject"/> <sequence>
<enumeration value="request"/> <any namespace="##other"/>
</restriction> </sequence>
</simpleType> <attribute name="op" type="epp:transferOpType"
use="required"/>
</complexType>
<!-- <simpleType name="transferOpType">
All other object-centric commands. EPP doesn't specify the syntax or <restriction base="token">
semantics of object-centric command elements. The elements MUST be <enumeration value="approve"/>
described in detail in another schema specific to the object. <enumeration value="cancel"/>
--> <enumeration value="query"/>
<complexType name="readWriteType"> <enumeration value="reject"/>
<sequence> <enumeration value="request"/>
<any namespace="##other"/> </restriction>
</sequence> </simpleType>
</complexType>
<complexType name="trIDType"> <!--
<sequence> All other object-centric commands. EPP doesn't specify the syntax or
<element name="clTRID" type="epp:trIDStringType" semantics of object-centric command elements. The elements MUST be
minOccurs="0"/> described in detail in another schema specific to the object.
<element name="svTRID" type="epp:trIDStringType"/> -->
</sequence> <complexType name="readWriteType">
</complexType> <sequence>
<any namespace="##other"/>
</sequence>
</complexType>
<simpleType name="trIDStringType"> <complexType name="trIDType">
<restriction base="token"> <sequence>
<minLength value="3"/> <element name="clTRID" type="epp:trIDStringType"
<maxLength value="64"/> minOccurs="0"/>
</restriction> <element name="svTRID" type="epp:trIDStringType"/>
</simpleType> </sequence>
</complexType>
<!-- <simpleType name="trIDStringType">
Response types. <restriction base="token">
--> <minLength value="3"/>
<complexType name="responseType"> <maxLength value="64"/>
<sequence> </restriction>
<element name="result" type="epp:resultType" </simpleType>
maxOccurs="unbounded"/>
<element name="msgQ" type="epp:msgQType"
minOccurs="0"/>
<element name="resData" type="epp:extAnyType" <!--
minOccurs="0"/> Response types.
<element name="extension" type="epp:extAnyType" -->
minOccurs="0"/> <complexType name="responseType">
<element name="trID" type="epp:trIDType"/> <sequence>
</sequence> <element name="result" type="epp:resultType"
</complexType> maxOccurs="unbounded"/>
<element name="msgQ" type="epp:msgQType"
minOccurs="0"/>
<element name="resData" type="epp:extAnyType"
minOccurs="0"/>
<element name="extension" type="epp:extAnyType"
minOccurs="0"/>
<element name="trID" type="epp:trIDType"/>
</sequence>
</complexType>
<complexType name="resultType"> <complexType name="resultType">
<sequence> <sequence>
<element name="msg" type="epp:msgType"/> <element name="msg" type="epp:msgType"/>
<choice minOccurs="0" maxOccurs="unbounded"> <choice minOccurs="0" maxOccurs="unbounded">
<element name="value" type="epp:errValueType"/> <element name="value" type="epp:errValueType"/>
<element name="extValue" type="epp:extErrValueType"/> <element name="extValue" type="epp:extErrValueType"/>
</choice> </choice>
</sequence> </sequence>
<attribute name="code" type="epp:resultCodeType" <attribute name="code" type="epp:resultCodeType"
use="required"/> use="required"/>
</complexType> </complexType>
<complexType name="errValueType" mixed="true"> <complexType name="errValueType" mixed="true">
<sequence> <sequence>
<any namespace="##any" processContents="skip"/> <any namespace="##any" processContents="skip"/>
</sequence> </sequence>
<anyAttribute namespace="##any" processContents="skip"/> <anyAttribute namespace="##any" processContents="skip"/>
</complexType> </complexType>
<complexType name="extErrValueType">
<sequence>
<element name="value" type="epp:errValueType"/>
<element name="reason" type="epp:msgType"/>
</sequence>
</complexType>
<complexType name="msgQType"> <complexType name="extErrValueType">
<sequence> <sequence>
<element name="qDate" type="dateTime" <element name="value" type="epp:errValueType"/>
minOccurs="0"/> <element name="reason" type="epp:msgType"/>
<element name="msg" type="epp:mixedMsgType" </sequence>
minOccurs="0"/> </complexType>
</sequence>
<attribute name="count" type="unsignedLong"
use="required"/>
<attribute name="id" type="eppcom:minTokenType"
use="required"/>
</complexType>
<complexType name="mixedMsgType" mixed="true"> <complexType name="msgQType">
<sequence> <sequence>
<any processContents="skip" <element name="qDate" type="dateTime"
minOccurs="0" maxOccurs="unbounded"/> minOccurs="0"/>
</sequence> <element name="msg" type="epp:mixedMsgType"
<attribute name="lang" type="language" minOccurs="0"/>
default="en"/> </sequence>
</complexType> <attribute name="count" type="unsignedLong"
use="required"/>
<attribute name="id" type="eppcom:minTokenType"
use="required"/>
</complexType>
<!-- <complexType name="mixedMsgType" mixed="true">
Human-readable text may be expressed in languages other than English. <sequence>
--> <any processContents="skip"
<complexType name="msgType"> minOccurs="0" maxOccurs="unbounded"/>
<simpleContent> </sequence>
<extension base="normalizedString"> <attribute name="lang" type="language"
<attribute name="lang" type="language" default="en"/>
default="en"/> </complexType>
</extension>
</simpleContent> <!--
</complexType> Human-readable text may be expressed in languages other than English.
-->
<complexType name="msgType">
<simpleContent>
<extension base="normalizedString">
<attribute name="lang" type="language"
default="en"/>
</extension>
</simpleContent>
</complexType>
<!--
EPP result codes.
-->
<simpleType name="resultCodeType">
<restriction base="unsignedShort">
<enumeration value="1000"/>
<enumeration value="1001"/>
<enumeration value="1300"/>
<enumeration value="1301"/>
<enumeration value="1500"/>
<enumeration value="2000"/>
<enumeration value="2001"/>
<enumeration value="2002"/>
<enumeration value="2003"/>
<enumeration value="2004"/>
<enumeration value="2005"/>
<enumeration value="2100"/>
<enumeration value="2101"/>
<enumeration value="2102"/>
<enumeration value="2103"/>
<enumeration value="2104"/>
<enumeration value="2105"/>
<enumeration value="2106"/>
<enumeration value="2200"/>
<enumeration value="2201"/>
<enumeration value="2202"/>
<enumeration value="2300"/>
<enumeration value="2301"/>
<enumeration value="2302"/>
<enumeration value="2303"/>
<enumeration value="2304"/>
<enumeration value="2305"/>
<enumeration value="2306"/>
<enumeration value="2307"/>
<enumeration value="2308"/>
<enumeration value="2400"/>
<enumeration value="2500"/>
<enumeration value="2501"/>
<enumeration value="2502"/>
</restriction>
</simpleType>
<!--
End of schema.
-->
</schema>
<!--
EPP result codes.
-->
<simpleType name="resultCodeType">
<restriction base="unsignedShort">
<enumeration value="1000"/>
<enumeration value="1001"/>
<enumeration value="1300"/>
<enumeration value="1301"/>
<enumeration value="1500"/>
<enumeration value="2000"/>
<enumeration value="2001"/>
<enumeration value="2002"/>
<enumeration value="2003"/>
<enumeration value="2004"/>
<enumeration value="2005"/>
<enumeration value="2100"/>
<enumeration value="2101"/>
<enumeration value="2102"/>
<enumeration value="2103"/>
<enumeration value="2104"/>
<enumeration value="2105"/>
<enumeration value="2106"/>
<enumeration value="2200"/>
<enumeration value="2201"/>
<enumeration value="2202"/>
<enumeration value="2300"/>
<enumeration value="2301"/>
<enumeration value="2302"/>
<enumeration value="2303"/>
<enumeration value="2304"/>
<enumeration value="2305"/>
<enumeration value="2306"/>
<enumeration value="2307"/>
<enumeration value="2308"/>
<enumeration value="2400"/>
<enumeration value="2500"/>
<enumeration value="2501"/>
<enumeration value="2502"/>
</restriction>
</simpleType>
<!--
End of schema.
-->
</schema>

View file

@ -53,6 +53,7 @@ Abstract client and object identifier type.
<simpleType name="clIDType"> <simpleType name="clIDType">
<restriction base="token"> <restriction base="token">
<minLength value="3"/> <minLength value="3"/>
<!-- <maxLength value="16"/> -->
</restriction> </restriction>
</simpleType> </simpleType>

View file

@ -1,244 +1,238 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="urn:ietf:params:xml:ns:host-1.0" <schema targetNamespace="urn:ietf:params:xml:ns:host-1.0"
xmlns:host="urn:ietf:params:xml:ns:host-1.0" xmlns:host="urn:ietf:params:xml:ns:host-1.0"
xmlns:epp="urn:ietf:params:xml:ns:epp-1.0" xmlns:epp="urn:ietf:params:xml:ns:epp-1.0"
xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0" xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0"
xmlns="http://www.w3.org/2001/XMLSchema" xmlns="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"> elementFormDefault="qualified">
<!-- <!--
Import common element types. Import common element types.
--> -->
<import namespace="urn:ietf:params:xml:ns:eppcom-1.0" <import namespace="urn:ietf:params:xml:ns:eppcom-1.0"/>
schemaLocation="eppcom-1.0.xsd"/> <import namespace="urn:ietf:params:xml:ns:epp-1.0"/>
<import namespace="urn:ietf:params:xml:ns:epp-1.0"
schemaLocation="epp-1.0.xsd"/>
<annotation> <annotation>
<documentation> <documentation>
Extensible Provisioning Protocol v1.0 Extensible Provisioning Protocol v1.0
host provisioning schema. host provisioning schema.
</documentation> </documentation>
</annotation> </annotation>
<!-- <!--
Child elements found in EPP commands. Child elements found in EPP commands.
--> -->
<element name="check" type="host:mNameType"/> <element name="check" type="host:mNameType"/>
<element name="create" type="host:createType"/> <element name="create" type="host:createType"/>
<element name="delete" type="host:sNameType"/> <element name="delete" type="host:sNameType"/>
<element name="info" type="host:sNameType"/> <element name="info" type="host:sNameType"/>
<element name="update" type="host:updateType"/> <element name="update" type="host:updateType"/>
<!-- <!--
Child elements of the <create> command. Child elements of the <create> command.
--> -->
<complexType name="createType"> <complexType name="createType">
<sequence> <sequence>
<element name="name" type="eppcom:labelType"/> <element name="name" type="eppcom:labelType"/>
<element name="addr" type="host:addrType" <element name="addr" type="host:addrType"
minOccurs="0" maxOccurs="unbounded"/> minOccurs="0" maxOccurs="unbounded"/>
</sequence> </sequence>
</complexType> </complexType>
<complexType name="addrType"> <complexType name="addrType">
<simpleContent> <simpleContent>
<extension base="host:addrStringType"> <extension base="host:addrStringType">
<attribute name="ip" type="host:ipType" <attribute name="ip" type="host:ipType"
default="v4"/> default="v4"/>
</extension> </extension>
</simpleContent> </simpleContent>
</complexType> </complexType>
<simpleType name="addrStringType"> <simpleType name="addrStringType">
<restriction base="token"> <restriction base="token">
<minLength value="3"/> <minLength value="3"/>
<maxLength value="45"/> <maxLength value="45"/>
</restriction> </restriction>
</simpleType> </simpleType>
<simpleType name="ipType">
<simpleType name="ipType"> <restriction base="token">
<restriction base="token"> <enumeration value="v4"/>
<enumeration value="v4"/> <enumeration value="v6"/>
<enumeration value="v6"/> </restriction>
</restriction> </simpleType>
</simpleType>
<!-- <!--
Child elements of the <delete> and <info> commands. Child elements of the <delete> and <info> commands.
--> -->
<complexType name="sNameType"> <complexType name="sNameType">
<sequence> <sequence>
<element name="name" type="eppcom:labelType"/> <element name="name" type="eppcom:labelType"/>
</sequence> </sequence>
</complexType> </complexType>
<!-- <!--
Child element of commands that accept multiple names. Child element of commands that accept multiple names.
--> -->
<complexType name="mNameType"> <complexType name="mNameType">
<sequence> <sequence>
<element name="name" type="eppcom:labelType" <element name="name" type="eppcom:labelType"
maxOccurs="unbounded"/> maxOccurs="unbounded"/>
</sequence> </sequence>
</complexType> </complexType>
<!-- <!--
Child elements of the <update> command. Child elements of the <update> command.
--> -->
<complexType name="updateType"> <complexType name="updateType">
<sequence> <sequence>
<element name="name" type="eppcom:labelType"/> <element name="name" type="eppcom:labelType"/>
<element name="add" type="host:addRemType" <element name="add" type="host:addRemType"
minOccurs="0"/> minOccurs="0"/>
<element name="rem" type="host:addRemType" <element name="rem" type="host:addRemType"
minOccurs="0"/> minOccurs="0"/>
<element name="chg" type="host:chgType" <element name="chg" type="host:chgType"
minOccurs="0"/> minOccurs="0"/>
</sequence> </sequence>
</complexType> </complexType>
<!-- <!--
Data elements that can be added or removed. Data elements that can be added or removed.
--> -->
<complexType name="addRemType"> <complexType name="addRemType">
<sequence> <sequence>
<element name="addr" type="host:addrType" <element name="addr" type="host:addrType"
minOccurs="0" maxOccurs="unbounded"/> minOccurs="0" maxOccurs="unbounded"/>
<element name="status" type="host:statusType" <element name="status" type="host:statusType"
minOccurs="0" maxOccurs="7"/> minOccurs="0" maxOccurs="7"/>
</sequence> </sequence>
</complexType> </complexType>
<!-- <!--
Data elements that can be changed. Data elements that can be changed.
--> -->
<complexType name="chgType"> <complexType name="chgType">
<sequence> <sequence>
<element name="name" type="eppcom:labelType"/> <element name="name" type="eppcom:labelType"/>
</sequence> </sequence>
</complexType> </complexType>
<!-- <!--
Child response elements. Child response elements.
--> -->
<element name="chkData" type="host:chkDataType"/> <element name="chkData" type="host:chkDataType"/>
<element name="creData" type="host:creDataType"/> <element name="creData" type="host:creDataType"/>
<element name="infData" type="host:infDataType"/> <element name="infData" type="host:infDataType"/>
<element name="panData" type="host:panDataType"/> <element name="panData" type="host:panDataType"/>
<!-- <!--
<check> response elements. <check> response elements.
--> -->
<complexType name="chkDataType"> <complexType name="chkDataType">
<sequence> <sequence>
<element name="cd" type="host:checkType" <element name="cd" type="host:checkType"
maxOccurs="unbounded"/> maxOccurs="unbounded"/>
</sequence> </sequence>
</complexType> </complexType>
<complexType name="checkType"> <complexType name="checkType">
<sequence> <sequence>
<element name="name" type="host:checkNameType"/> <element name="name" type="host:checkNameType"/>
<element name="reason" type="eppcom:reasonType" <element name="reason" type="eppcom:reasonType"
minOccurs="0"/> minOccurs="0"/>
</sequence> </sequence>
</complexType> </complexType>
<complexType name="checkNameType"> <complexType name="checkNameType">
<simpleContent> <simpleContent>
<extension base="eppcom:labelType"> <extension base="eppcom:labelType">
<attribute name="avail" type="boolean" <attribute name="avail" type="boolean"
use="required"/> use="required"/>
</extension> </extension>
</simpleContent> </simpleContent>
</complexType> </complexType>
<!-- <!--
<create> response elements. <create> response elements.
--> -->
<complexType name="creDataType"> <complexType name="creDataType">
<sequence> <sequence>
<element name="name" type="eppcom:labelType"/> <element name="name" type="eppcom:labelType"/>
<element name="crDate" type="dateTime"/> <element name="crDate" type="dateTime"/>
</sequence> </sequence>
</complexType> </complexType>
<!-- <!--
<info> response elements. <info> response elements.
--> -->
<complexType name="infDataType"> <complexType name="infDataType">
<sequence> <sequence>
<element name="name" type="eppcom:labelType"/> <element name="name" type="eppcom:labelType"/>
<element name="roid" type="eppcom:roidType"/> <element name="roid" type="eppcom:roidType"/>
<element name="status" type="host:statusType" <element name="status" type="host:statusType"
maxOccurs="7"/> maxOccurs="7"/>
<element name="addr" type="host:addrType" <element name="addr" type="host:addrType"
minOccurs="0" maxOccurs="unbounded"/> minOccurs="0" maxOccurs="unbounded"/>
<element name="clID" type="eppcom:clIDType"/> <element name="clID" type="eppcom:clIDType"/>
<element name="crID" type="eppcom:clIDType"/> <element name="crID" type="eppcom:clIDType"/>
<element name="crDate" type="dateTime"/> <element name="crDate" type="dateTime"/>
<element name="upID" type="eppcom:clIDType" <element name="upID" type="eppcom:clIDType"
minOccurs="0"/> minOccurs="0"/>
<element name="upDate" type="dateTime" <element name="upDate" type="dateTime"
minOccurs="0"/> minOccurs="0"/>
<element name="trDate" type="dateTime" <element name="trDate" type="dateTime"
minOccurs="0"/> minOccurs="0"/>
</sequence> </sequence>
</complexType> </complexType>
<!-- <!--
Status is a combination of attributes and an optional human-readable Status is a combination of attributes and an optional human-readable
message that may be expressed in languages other than English. message that may be expressed in languages other than English.
--> -->
<complexType name="statusType"> <complexType name="statusType">
<simpleContent> <simpleContent>
<extension base="normalizedString"> <extension base="normalizedString">
<attribute name="s" type="host:statusValueType" <attribute name="s" type="host:statusValueType"
use="required"/> use="required"/>
<attribute name="lang" type="language" <attribute name="lang" type="language"
default="en"/> default="en"/>
</extension> </extension>
</simpleContent> </simpleContent>
</complexType> </complexType>
<simpleType name="statusValueType"> <simpleType name="statusValueType">
<restriction base="token"> <restriction base="token">
<enumeration value="clientDeleteProhibited"/> <enumeration value="clientDeleteProhibited"/>
<enumeration value="clientUpdateProhibited"/> <enumeration value="clientUpdateProhibited"/>
<enumeration value="linked"/> <enumeration value="linked"/>
<enumeration value="ok"/> <enumeration value="ok"/>
<enumeration value="pendingCreate"/> <enumeration value="pendingCreate"/>
<enumeration value="pendingDelete"/> <enumeration value="pendingDelete"/>
<enumeration value="pendingTransfer"/> <enumeration value="pendingTransfer"/>
<enumeration value="pendingUpdate"/> <enumeration value="pendingUpdate"/>
<enumeration value="serverDeleteProhibited"/> <enumeration value="serverDeleteProhibited"/>
<enumeration value="serverUpdateProhibited"/> <enumeration value="serverUpdateProhibited"/>
</restriction> </restriction>
</simpleType> </simpleType>
<!-- <!--
Pending action notification response elements. Pending action notification response elements.
--> -->
<complexType name="panDataType"> <complexType name="panDataType">
<sequence> <sequence>
<element name="name" type="host:paNameType"/> <element name="name" type="host:paNameType"/>
<element name="paTRID" type="epp:trIDType"/> <element name="paTRID" type="epp:trIDType"/>
<element name="paDate" type="dateTime"/> <element name="paDate" type="dateTime"/>
</sequence> </sequence>
</complexType> </complexType>
<complexType name="paNameType">
<complexType name="paNameType"> <simpleContent>
<simpleContent> <extension base="eppcom:labelType">
<extension base="eppcom:labelType"> <attribute name="paResult" type="boolean"
<attribute name="paResult" type="boolean" use="required"/>
use="required"/> </extension>
</extension> </simpleContent>
</simpleContent> </complexType>
</complexType>
<!-- <!--
End of schema. End of schema.
--> -->
</schema> </schema>

View file

@ -0,0 +1,63 @@
<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="urn:ietf:params:xml:ns:keyrelay-1.0"
xmlns:keyrelay="urn:ietf:params:xml:ns:keyrelay-1.0"
xmlns:epp="urn:ietf:params:xml:ns:epp-1.0"
xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0"
xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1"
xmlns:domain="urn:ietf:params:xml:ns:domain-1.0"
xmlns="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<annotation>
<documentation>
Extensible Provisioning Protocol v1.0 protocol
extension schema for relaying DNSSEC key material.
</documentation>
</annotation>
<import namespace="urn:ietf:params:xml:ns:epp-1.0"/>
<import namespace="urn:ietf:params:xml:ns:eppcom-1.0"/>
<import namespace="urn:ietf:params:xml:ns:secDNS-1.1"/>
<import namespace="urn:ietf:params:xml:ns:domain-1.0"/>
<element name="keyRelayData" type="keyrelay:keyRelayDataType" />
<element name="infData" type="keyrelay:infDataType" />
<element name="create" type="keyrelay:createType" />
<complexType name="createType">
<sequence>
<element name="name" type="eppcom:labelType"/>
<!-- <element name="authInfo" type="domain:authInfoType"/> -->
<element name="keyRelayData" type="keyrelay:keyRelayDataType"
maxOccurs="unbounded"/>
</sequence>
</complexType>
<complexType name="infDataType">
<sequence>
<element name="name" type="eppcom:labelType"/>
<!-- <element name="authInfo" type="domain:authInfoType"/> -->
<element name="keyRelayData" type="keyrelay:keyRelayDataType"
maxOccurs="unbounded"/>
<element name="crDate" type="dateTime"/>
<element name="reID" type="eppcom:clIDType" />
<element name="acID" type="eppcom:clIDType" />
</sequence>
</complexType>
<complexType name="keyRelayDataType">
<sequence>
<element name="keyData" type="secDNS:keyDataType" />
<element name="expiry" type="keyrelay:keyRelayExpiryType"
minOccurs="0" />
</sequence>
</complexType>
<complexType name="keyRelayExpiryType">
<choice>
<element name="absolute" type="dateTime" />
<element name="relative" type="duration" />
</choice>
</complexType>
</schema>

View file

@ -1,130 +1,134 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<schema <schema
targetNamespace="urn:ietf:params:xml:ns:secDNS-1.1" targetNamespace="urn:ietf:params:xml:ns:secDNS-1.1"
xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1" xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1"
xmlns="http://www.w3.org/2001/XMLSchema" xmlns="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"> elementFormDefault="qualified">
<annotation> <annotation>
<documentation> <documentation>
Extensible Provisioning Protocol v1.0 Extensible Provisioning Protocol v1.0
domain name extension schema domain name extension schema
for provisioning DNS security (DNSSEC) extensions. for provisioning DNS security (DNSSEC) extensions.
</documentation> </documentation>
</annotation> </annotation>
<!-- <!--
Child elements found in EPP commands. Child elements found in EPP commands.
--> -->
<element name="create" type="secDNS:dsOrKeyType"/> <element name="create" type="secDNS:dsOrKeyType"/>
<element name="update" type="secDNS:updateType"/> <element name="update" type="secDNS:updateType"/>
<!--
Child elements supporting either the
dsData or the keyData interface.
-->
<complexType name="dsOrKeyType">
<sequence>
<element name="maxSigLife" type="secDNS:maxSigLifeType"
minOccurs="0"/>
<choice>
<element name="dsData" type="secDNS:dsDataType"
maxOccurs="unbounded"/>
<element name="keyData" type="secDNS:keyDataType"
maxOccurs="unbounded"/>
</choice>
</sequence>
</complexType>
<!-- <!--
Definition for the maximum signature lifetime (maxSigLife) Child elements supporting either the
--> dsData or the keyData interface.
<simpleType name="maxSigLifeType"> -->
<restriction base="int"> <complexType name="dsOrKeyType">
<minInclusive value="1"/> <sequence>
</restriction> <element name="maxSigLife" type="secDNS:maxSigLifeType"
</simpleType> minOccurs="0"/>
<choice>
<element name="dsData" type="secDNS:dsDataType"
maxOccurs="unbounded"/>
<element name="keyData" type="secDNS:keyDataType"
maxOccurs="unbounded"/>
</choice>
</sequence>
</complexType>
<!--
Child elements of dsData used for dsData interface
-->
<complexType name="dsDataType">
<sequence>
<element name="keyTag" type="unsignedShort"/>
<element name="alg" type="unsignedByte"/>
<element name="digestType" type="unsignedByte"/>
<element name="digest" type="hexBinary"/>
<element name="keyData" type="secDNS:keyDataType"
minOccurs="0"/>
</sequence>
</complexType>
<!--
Child elements of keyData used for keyData interface
and optionally with dsData interface
-->
<complexType name="keyDataType">
<sequence> <!--
<element name="flags" type="unsignedShort"/> Definition for the maximum signature life (maxSigLife)
<element name="protocol" type="unsignedByte"/> -->
<element name="alg" type="unsignedByte"/> <simpleType name="maxSigLifeType">
<element name="pubKey" type="secDNS:keyType"/> <restriction base="int">
</sequence> <minInclusive value="1"/>
</complexType> </restriction>
</simpleType>
<!--
Definition for the public key
-->
<simpleType name="keyType">
<restriction base="base64Binary">
<minLength value="1"/>
</restriction>
</simpleType>
<!-- <!--
Child elements of the <update> element. Child elements of dsData used for dsData interface
--> -->
<complexType name="updateType"> <complexType name="dsDataType">
<sequence> <sequence>
<element name="rem" type="secDNS:remType" <element name="keyTag" type="unsignedShort"/>
minOccurs="0"/> <element name="alg" type="unsignedByte"/>
<element name="add" type="secDNS:dsOrKeyType" <element name="digestType" type="unsignedByte"/>
minOccurs="0"/> <element name="digest" type="hexBinary"/>
<element name="chg" type="secDNS:chgType" <element name="keyData" type="secDNS:keyDataType"
minOccurs="0"/> minOccurs="0"/>
</sequence> </sequence>
<attribute name="urgent" type="boolean" default="false"/> </complexType>
</complexType>
<!--
Child elements of the <rem> command.
-->
<complexType name="remType">
<choice>
<element name="all" type="boolean"/>
<element name="dsData" type="secDNS:dsDataType"
maxOccurs="unbounded"/>
<element name="keyData" type="secDNS:keyDataType"
maxOccurs="unbounded"/>
</choice>
</complexType>
<!-- <!--
Child elements supporting the <chg> element. Child elements of keyData used for keyData interface
--> and optionally with dsData interface
-->
<complexType name="keyDataType">
<sequence>
<element name="flags" type="unsignedShort"/>
<element name="protocol" type="unsignedByte"/>
<element name="alg" type="unsignedByte"/>
<element name="pubKey" type="secDNS:keyType"/>
</sequence>
</complexType>
<complexType name="chgType"> <!--
<sequence> Definition for the public key
<element name="maxSigLife" type="secDNS:maxSigLifeType" -->
minOccurs="0"/> <simpleType name="keyType">
</sequence> <restriction base="base64Binary">
</complexType> <minLength value="1"/>
</restriction>
</simpleType>
<!-- <!--
Child response elements. Child elements of the <update> element.
--> -->
<element name="infData" type="secDNS:dsOrKeyType"/> <complexType name="updateType">
<sequence>
<element name="rem" type="secDNS:remType"
minOccurs="0"/>
<element name="add" type="secDNS:dsOrKeyType"
minOccurs="0"/>
<element name="chg" type="secDNS:chgType"
minOccurs="0"/>
</sequence>
<attribute name="urgent" type="boolean" default="false"/>
</complexType>
<!--
Child elements of the <rem> command.
-->
<complexType name="remType">
<choice>
<element name="all" type="boolean"/>
<element name="dsData" type="secDNS:dsDataType"
maxOccurs="unbounded"/>
<element name="keyData" type="secDNS:keyDataType"
maxOccurs="unbounded"/>
</choice>
</complexType>
<!--
Child elements supporting the <chg> element.
-->
<complexType name="chgType">
<sequence>
<element name="maxSigLife" type="secDNS:maxSigLifeType"
minOccurs="0"/>
</sequence>
</complexType>
<!--
Child response elements.
-->
<element name="infData" type="secDNS:dsOrKeyType"/>
</schema> </schema>

View file

@ -57,6 +57,7 @@ namespace :import do
Rake::Task['import:reserved'].invoke Rake::Task['import:reserved'].invoke
Rake::Task['import:domains'].invoke Rake::Task['import:domains'].invoke
Rake::Task['import:zones'].invoke Rake::Task['import:zones'].invoke
Rake::Task['zonefile:replace_procedure'].invoke
end end
desc 'Import registrars' desc 'Import registrars'
@ -172,11 +173,15 @@ namespace :import do
x.acl.all.each do |y| x.acl.all.each do |y|
next if existing_ips.include?(y.ipaddr) next if existing_ips.include?(y.ipaddr)
if !y.ipaddr.nil? && y.ipaddr != '' if !y.ipaddr.nil? && y.ipaddr != ''
ips << WhiteIp.new({
registrar_id: Registrar.find_by(legacy_id: x.try(:id)).try(:id), y.ipaddr.split(',').each do |ip|
ipv4: y.ipaddr, ips << WhiteIp.new({
interfaces: ['api', 'registrar'] registrar_id: Registrar.find_by(legacy_id: x.try(:id)).try(:id),
}) ipv4: ip,
interfaces: ['api', 'registrar']
})
end
end end
end end
end end

View file

@ -103,8 +103,8 @@ namespace :zonefile do
SELECT array_to_string( SELECT array_to_string(
array( array(
SELECT concat( SELECT concat(
d.name_puny, '. IN DS ', dk.ds_key_tag, ' ', d.name_puny, '. 3600 IN DS ', dk.ds_key_tag, ' ',
dk.ds_alg, ' ', dk.ds_digest_type, ' ( ', dk.ds_digest, ' )' dk.ds_alg, ' ', dk.ds_digest_type, ' ', dk.ds_digest
) )
FROM domains d FROM domains d
JOIN dnskeys dk ON dk.domain_id = d.id JOIN dnskeys dk ON dk.domain_id = d.id