RFC 8334
Launch Phase Mapping for the Extensible Provisioning Protocol (EPP)
Launch Phase Mapping for the Extensible Provisioning Protocol (EPP) β¨
Okay bestie, let's get into it π¦. This RFC is from the IETF, which is basically the group that writes the rulebook for how the Internet's protocols work. It's a Standards Track document, which means it's officially a real spec and not just a vibe. It's published as RFC 8334 and dated March 2018 π.
The authors are J. Gould (VeriSign, Inc.), W. Tan (Cloud Registry), and G. Brown (CentralNic Ltd) π«Ά. They're all giving serious main character energy in the protocol world. The ISSN is 2070-1721, if you're into that kind of thing π .
This document doesn't obsolete or update any other RFCs, so it's a fresh start, no drama π.
The whole point of this document is to describe an Extensible Provisioning Protocol (EPP) extension mapping for managing domain name registrations and applications during the launch of a domain name registry π. Basically, it's about how a brand-new registry handles the early rush of people trying to grab domain names π.
Abstract
This document describes an Extensible Provisioning Protocol (EPP) extension mapping for the provisioning and management of domain name registrations and applications during the launch of a domain name registry.
Status of This Memo
This is an Internet Standards Track document, so it's the real deal β¨.
It's a product of the IETF and it represents the consensus of the IETF community π«Ά. It got public review and was approved for publication by the Internet Engineering Steering Group (IESG). If you want more info on Internet Standards, check out Section 2 of RFC 7841 π.
For the current status, any errata, and feedback, head to https://www.rfc-editor.org/info/rfc8334 π₯.
Copyright Notice
Copyright (c) 2018 IETF Trust and the persons identified as the document authors. All rights reserved π .
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication. Please actually read these, because they spell out your rights and restrictions π. Code Components pulled out of this document must include Simplified BSD License text, as described in Section 4.e of the Trust Legal Provisions, and they come without warranty as described in the Simplified BSD License π.
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1. Conventions Used in This Document . . . . . . . . . . . . 3
2. Object Attributes . . . . . . . . . . . . . . . . . . . . . . 4
2.1. Application Identifier . . . . . . . . . . . . . . . . . 4
2.2. Validator Identifier . . . . . . . . . . . . . . . . . . 5
2.3. Launch Phases . . . . . . . . . . . . . . . . . . . . . . 5
2.3.1. Trademark Claims Phase . . . . . . . . . . . . . . . 6
2.4. Status Values . . . . . . . . . . . . . . . . . . . . . . 9
2.4.1. State Transition . . . . . . . . . . . . . . . . . . 11
2.5. Poll Messaging . . . . . . . . . . . . . . . . . . . . . 12
2.6. Mark Validation Models . . . . . . . . . . . . . . . . . 14
2.6.1. <launch:codeMark> Element . . . . . . . . . . . . . . 15
2.6.2. <mark:mark> Element . . . . . . . . . . . . . . . . . 16
2.6.3. Digital Signature . . . . . . . . . . . . . . . . . . 16
2.6.3.1. <smd:signedMark> Element . . . . . . . . . . . . 16
2.6.3.2. <smd:encodedSignedMark> Element . . . . . . . . . 16
3. EPP Command Mapping . . . . . . . . . . . . . . . . . . . . . 17
3.1. EPP <check> Command . . . . . . . . . . . . . . . . . . . 17
3.1.1. Claims Check Form . . . . . . . . . . . . . . . . . . 17
3.1.2. Availability Check Form . . . . . . . . . . . . . . . 22
3.1.3. Trademark Check Form . . . . . . . . . . . . . . . . 23
3.2. EPP <info> Command . . . . . . . . . . . . . . . . . . . 26
3.3. EPP <create> Command . . . . . . . . . . . . . . . . . . 30
3.3.1. Sunrise Create Form . . . . . . . . . . . . . . . . . 30
3.3.2. Claims Create Form . . . . . . . . . . . . . . . . . 36
3.3.3. General Create Form . . . . . . . . . . . . . . . . . 39
3.3.4. Mixed Create Form . . . . . . . . . . . . . . . . . . 40
3.3.5. Create Response . . . . . . . . . . . . . . . . . . . 42
3.4. EPP <update> Command . . . . . . . . . . . . . . . . . . 43
3.5. EPP <delete> Command . . . . . . . . . . . . . . . . . . 44
3.6. EPP <renew> Command . . . . . . . . . . . . . . . . . . . 46
3.7. EPP <transfer> Command . . . . . . . . . . . . . . . . . 46
4. Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . . 46
4.1. Launch Schema . . . . . . . . . . . . . . . . . . . . . . 46
5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 54
5.1. XML Namespace . . . . . . . . . . . . . . . . . . . . . . 54
5.2. EPP Extension Registry . . . . . . . . . . . . . . . . . 55
6. Security Considerations . . . . . . . . . . . . . . . . . . . 55
7. References . . . . . . . . . . . . . . . . . . . . . . . . . 56
7.1. Normative References . . . . . . . . . . . . . . . . . . 56
7.2. Informative References . . . . . . . . . . . . . . . . . 57
Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 57
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 58
1. Introduction πΈ
This document describes an extension mapping for version 1.0 of the Extensible Provisioning Protocol (EPP) [RFC5730] π§. This EPP mapping gives you a flexible schema that can handle several common use cases for provisioning and managing domain name registrations and applications during the launch of a domain name registry. Slay π.
Registries usually run in special modes when they first start up, so they can hand out domain names in a fair way, often with special rules π. This document uses the term "launch phase" (or just "launch") for that kind of period. A registry can have multiple launch phases and multiple models to make its launch happen. The server policy decides what's supported and validated π . The server policy usually gets communicated through an out-of-band mechanism, which this document doesn't specify π.
The EPP domain name mapping [RFC5731] is built for the steady-state operation of a registry π¦. During a launch, the model might be totally different from what that mapping defines π. For example, registries often accept multiple applications for the same domain name during the "sunrise" launch phase, and those are called Launch Applications π₯. A Launch Registration is a registration made during a launch phase when the server uses a "first-come, first-served" model π. Even with "first-come, first-served," extra steps and info might still be needed, like trademark info β¨. Also, RFC 7848 [RFC7848] defines a registry interface for the Trademark Claims (or "claims") launch phase, which includes presenting a Trademark Claims Notice to the registrant π«Ά. This document proposes an extension to the domain name mapping so there's one uniform interface for managing Launch Applications and Launch Registrations during launch phases π.
1.1. Conventions Used in This Document
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here π.
XML [W3C.REC-xml11-20060816] is case sensitive π. Unless it says otherwise, XML specs and examples in this document MUST be interpreted in the character case presented, so you can build a conforming implementation π .
In examples, "C:" means lines sent by a protocol client and "S:" means lines returned by a protocol server π. Indentation and whitespace in examples are only there to show how elements relate, and they are not a REQUIRED feature of this protocol β¨. The "..." is shorthand for elements defined outside this document π§.
A Launch Registration is a domain name registration during a launch phase when the server uses a "first-come, first-served" model. Only a single registration for a domain name can exist on the server at a time π¦.
A Launch Application represents the intent to register a domain name during a launch phase when the server accepts multiple applications for a domain name, and the server later picks one of those applications to allocate as a registration. Many Launch Applications for a domain name can exist on the server at a time π₯.
The XML namespace prefix "launch" is used for the namespace "urn:ietf:params:xml:ns:launch-1.0", but implementations MUST NOT depend on it. Instead, they employ a proper namespace-aware XML parser and serializer to interpret and output the XML documents π.
The XML namespace prefix "smd" is used for the namespace "urn:ietf:params:xml:ns:signedMark-1.0" [RFC7848], but implementations MUST NOT depend on it. Instead, they employ a proper namespace-aware XML parser and serializer to interpret and output the XML documents π.
The XML namespace prefix "mark" is used for the namespace "urn:ietf:params:xml:ns:mark-1.0" [RFC7848], but implementations MUST NOT depend on it. Instead, they employ a proper namespace-aware XML parser and serializer to interpret and output the XML documents π.
2. Object Attributes β
This extension adds extra elements to the EPP domain name mapping [RFC5731]. Only those new elements get described here π .
2.1. Application Identifier π¦
Servers MAY allow multiple applications, called a Launch Application, for the same domain name during its launch phase operations πΈ. When a server gets a valid <domain:create> command to create a Launch Application, it MUST create an application object for that request, assign an application identifier to the Launch Application, set the pendingCreate status [RFC5731], and send the application identifier back to the client in the <launch:applicationID> element π. To keep everything correlated, every later launch operation on the Launch Application MUST be qualified by that previously assigned application identifier, using the <launch:applicationID> element π«Ά.
Part 1 of 10. Keep your seatbelts on, bestie, more is coming ππ
2.2. Validator Identifier β¨
Okay so the Validator Identifier is unique to the server π It's the ID for a Trademark Validator, which checks marks and keeps its own repository of validated marks. The OPTIONAL "validatorID" attribute is how you define the Validator Identifier of the Trademark Validator. Registries MAY support more than one third-party Trademark Validator. Which set of Validator Identifier values the server supports is up to server policy. The Internet Corporation for Assigned Names and Numbers (ICANN) Trademark Clearinghouse (TMCH) is the default Trademark Validator, and it's reserved for the Validator Identifier of "tmch" π If the ICANN TMCH isn't used, or multiple Trademark Validators are used, the Validator Identifier MUST be defined using the "validatorID" attribute.
The Validator Identifier MAY be related to one or more issuer identifiers of the <mark:id> and <smd:id> elements defined in [RFC7848]. Both the Validator Identifier and the Issuer Identifier used MUST be unique in the server. If the ICANN TMCH is not used or multiple Trademark Validators are used, the server MUST define the list of supported validator identifiers and MUST make this information available to clients using a mutually acceptable, out-of-band mechanism. π«Ά
The Validator Identifier may define a non-Trademark Validator that supports a form of claims, where claims and a Validator Identifier can be used for purposes beyond trademarks. π
2.3. Launch Phases π
The server MAY support multiple launch phases, either sequentially or simultaneously. The <launch:phase> element MUST be included by the client to define the target launch phase of the command. The server SHOULD validate the phase, and it MAY validate the sub-phase of the <launch:phase> element against the active phase and OPTIONAL sub-phase of the server. If there's a mismatch, it returns an EPP error result code of 2306 [RFC5730]. π
These are the launch phase values that are defined:
- sunrise: The phase during which trademark holders can submit registrations or applications with trademark information that can be validated by the server. πΈ
- landrush: A post-"sunrise" launch phase when non-trademark holders are allowed to register domain names, with steps taken to address a large volume of initial registrations. π
- claims: The phase, as defined in Section 2.3.1, in which a claims notice must be displayed to a prospective registrant of a domain name that matches trademarks. π
- open: A phase that is also referred to as "steady state". Servers may require additional trademark protection during this phase. π¦
- custom: A custom server launch phase that is defined using the "name" attribute. β¨
For extensibility, the <launch:phase> element includes an OPTIONAL "name" attribute that can define a sub-phase, or the full name of the phase when the <launch:phase> element has the "custom" value. For example, the "claims" launch phase could have two sub-phases, "landrush" and "open". π§
Launch phases MAY overlap to support the "claims" launch phase, defined in Section 2.3.1, and to support a traditional "landrush" launch phase. The overlap of the "claims" and "landrush" launch phases SHOULD be handled by setting "claims" as the <launch:phase> value and setting "landrush" as the sub-phase with the "name" attribute. For example, the <launch:phase> element should be <launch:phase name="landrush">claims</launch:phase>. π
2.3.1. Trademark Claims Phase
The Trademark Claims Phase is when a claims notice must be displayed to a prospective registrant of a domain name that matches trademarks. Check [ICANN-TMCH] for the extra details of trademark claims handling. The source of the trademarks is a Trademark Validator, and the source of the claims notice information is a Claims Notice Information Service (CNIS), which may be directly linked to a Trademark Validator. The client talks to 1) the server to find out if a trademark exists for a domain name, 2) a CNIS to get the claims notice information, and 3) the server again to pass the claims notice acceptance information in a create command. This document supports the Trademark Claims Phase in two ways, including:
- Claims Check Form: Defined in Section 3.1.1, this is used to determine whether or not there are any matching trademarks for a domain name. If at least one matching trademark exists for the domain name, a claims key is returned. The mapping of domain names and claims keys is based on an out-of-band interface between the server and the Trademark Validator. The CNIS associated with the claims key Validator Identifier (Section 2.2) MUST accept the claims key as the basis for retrieving the claims information. π
- Claims Create Form: Defined in Section 3.3.2, this is used to pass the claims notice acceptance information in a create command. The notice identifier (
<launch:noticeID>) format, validation rules, and server processing are up to the interface between the server and the Trademark Validator. The CNIS associated with the Validator Identifier (Section 2.2) MUST generate a notice identifier compliant with the<launch:noticeID>element. π
Here's the Trademark Claims Phase registration flow, bestie π
.------------. .--------. .--------. .------.
| Registrant | | Client | | Server | | CNIS |
'------------' '--------' '--------' '------'
| Request Domain | | |
| Registration | | |
|--------------->| Domain Check | |
| |--------------------------->| |
| Domain | Domain Unavailable .------------. |
| Unavailable |<---------------------( Available? ) |
|<---------------| No '------------' |
| | Domain Available | Yes |
| |<---------------------------| |
| | Domain Claims Check | |
| |--------------------------->| |
| | .---------. |
| | Claims Don't Exist / Does \ |
| |<--------------------( Domain have ) |
| | No \ Claims? / |
| | '---------' |
| | Domain Create | | Yes |
| |--------------------------->| | |
| Domain | Domain Registered | | |
| Registered |<---------------------------| | |
|<---------------| | |
| | |
| | Claims Exist with Claims Keys | |
| |<------------------------------' |
| | |
.-----. | | Request Claims Info with Claims Key |
|Abort| | Display |-------------------------------------->|
'-----' | Claims | Return Claims Info |
^ | Notice |<--------------------------------------|
| No |<---------------| |
| .------. Yes | |
'-( Ack? )----------->| Domain Claims Create Form | |
'------' |--------------------------->| |
| Registration | Error .----------------------. |
| Error |<-----------( Validation Successful? ) |
|<---------------| No '----------------------' |
| | | Yes |
| Domain | Domain Registered | |
| Registered |<---------------------------| |
|<---------------| | |
Figure 1
2.4. Status Values π
A Launch Application or Launch Registration object MAY have a launch status value. The <launch:status> element is used to convey the launch status pertaining to the object, beyond what is specified in the object mapping. A Launch Application or Launch Registration MUST set the "pendingCreate" status [RFC5731] if a launch status is supported and is not one of the final statuses ("allocated" and "rejected"). π
These status values are defined using the required "s" attribute:
- pendingValidation: The initial state of a newly created application or registration object. The application or registration requires validation, but the validation process has not yet completed. β³
- validated: The application or registration meets relevant registry rules. β
- invalid: The application or registration does not validate according to registry rules. Server policies permitting, it may transition back into "pendingValidation" for revalidation, after modifications are made to ostensibly correct the attributes that caused the validation failure. π
- pendingAllocation: The allocation of the application or registration is pending based on the results of some out-of-band process (for example, an auction). π¨
- allocated: The object corresponding to the application or registration has been provisioned. This is a possible end state of an application or registration object. π
- rejected: The application or registration object was not provisioned. This is a possible end state of an application or registration object. π
- custom: A custom status that is defined using the "name" attribute. β¨
Each status value MAY be accompanied by a string of human-readable text that describes the rationale for the status applied to the object. The OPTIONAL "lang" attribute, as defined in [RFC5646], MAY be present to identify the language if the negotiated value is something other than the default value of "en" (English). π
For extensibility, the <launch:status> element includes an OPTIONAL "name" attribute that can define a sub-status, or the full name of the status when the status value is "custom". The server SHOULD use one of the non-"custom" status values. π§
Status values MAY be skipped. For example, an application or registration MAY immediately start at the "allocated" status, or an application or registration MAY skip the "pendingAllocation" status. If the launch phase does not require validation of a request, an application or registration MAY immediately skip to "pendingAllocation". π¦
2.4.1. State Transition β¨
okay so the way statuses hop between each other is totally up to server policy π this diagram is just ONE possible set of allowed moves, not the only vibe.
| request
|
| +--------------------------+
| | |
v v |
+-------------------+ |
| | |
| pendingValidation +--------------+ |
| | | |
+---------+---------+ | |
| | |
| | |
v v |
+-----------+ +---------+ |
| | | | |
| validated | | invalid +--+
| | | |
+-----+-----+ +----+----+
| |
| |
v |
+-------------------+ |
| | |
| pendingAllocation +-----------+ |
| | | |
+---------+---------+ | |
| | |
| | |
| | |
| | |
| | |
v v v
+---------+ +--------+
/ \ / \
| allocated | | rejected |
\ / \ /
+---------+ +--------+
Figure 2
2.5. Poll Messaging π¬
okay bestie, a Launch Application MUST be handled as an EPP domain name object as specified in RFC 5731 [RFC5731], using the "pendingCreate" status and the launch status values from Section 2.4. A Launch Registration MAY be handled the same way, as an EPP domain name object from RFC 5731 [RFC5731], with the "pendingCreate" status and those same launch status values from Section 2.4. π
as a Launch Application or Launch Registration moves between the status values in Section 2.4, the server SHOULD insert poll messages per [RFC5730] for the in-between statuses, like "pendingValidation", "validated", "pendingAllocation", and "invalid". these use the <domain:infData> element with the <launch:infData> extension π§ the <domain:infData> element MAY contain non-mandatory info, like contact and name server details. extensions that would normally show up in a <domain:info> response (per [RFC5731]) MAY be included too π
for the final statuses, "allocated" and "rejected", the server MUST insert a <domain:panData> poll message per [RFC5731], with the <launch:infData> extension π₯
here's an example poll message for a Launch Application that just moved to "pendingAllocation" π
S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
S: <response>
S: <result code="1301">
S: <msg>Command completed successfully; ack to dequeue</msg>
S: </result>
S: <msgQ count="5" id="12345">
S: <qDate>2013-04-04T22:01:00.0Z</qDate>
S: <msg>Application pendingAllocation.</msg>
S: </msgQ>
S: <resData>
S: <domain:infData
S: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
S: <domain:name>domain.example</domain:name>
S: ...
S: </domain:infData>
S: </resData>
S: <extension>
S: <launch:infData
S: xmlns:launch="urn:ietf:params:xml:ns:launch-1.0">
S: <launch:phase>sunrise</launch:phase>
S: <launch:applicationID>abc123</launch:applicationID>
S: <launch:status s="pendingAllocation"/>
S: </launch:infData>
S: </extension>
S: <trID>
S: <clTRID>ABC-12345</clTRID>
S: <svTRID>54322-XYZ</svTRID>
S: </trID>
S: </response>
S:</epp>
next up is an example <domain:panData> poll message for an "allocated" Launch Application π¦
S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
S: <response>
S: <result code="1301">
S: <msg>Command completed successfully; ack to dequeue</msg>
S: </result>
S: <msgQ count="5" id="12345">
S: <qDate>2013-04-04T22:01:00.0Z</qDate>
S: <msg>Application successfully allocated.</msg>
S: </msgQ>
S: <resData>
S: <domain:panData
S: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
S: <domain:name paResult="1">domain.example</domain:name>
S: <domain:paTRID>
S: <clTRID>ABC-12345</clTRID>
S: <svTRID>54321-XYZ</svTRID>
S: </domain:paTRID>
S: <domain:paDate>2013-04-04T22:00:00.0Z</domain:paDate>
S: </domain:panData>
S: </resData>
S: <extension>
S: <launch:infData
S: xmlns:launch="urn:ietf:params:xml:ns:launch-1.0">
S: <launch:phase>sunrise</launch:phase>
S: <launch:applicationID>abc123</launch:applicationID>
S: <launch:status s="allocated"/>
S: </launch:infData>
S: </extension>
S: <trID>
S: <clTRID>BCD-23456</clTRID>
S: <svTRID>65432-WXY</svTRID>
S: </trID>
S: </response>
S:</epp>
and now the same kind of <domain:panData> poll message, but for an "allocated" Launch Registration πΈ
S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
S: <response>
S: <result code="1301">
S: <msg>Command completed successfully; ack to dequeue</msg>
S: </result>
S: <msgQ count="5" id="12345">
S: <qDate>2013-04-04T22:01:00.0Z</qDate>
S: <msg>Registration successfully allocated.</msg>
S: </msgQ>
S: <resData>
S: <domain:panData
S: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
S: <domain:name paResult="1">domain.example</domain:name>
S: <domain:paTRID>
S: <clTRID>ABC-12345</clTRID>
S: <svTRID>54321-XYZ</svTRID>
S: </domain:paTRID>
S: <domain:paDate>2013-04-04T22:00:00.0Z</domain:paDate>
S: </domain:panData>
S: </resData>
S: <extension>
S: <launch:infData
S: xmlns:launch="urn:ietf:params:xml:ns:launch-1.0">
S: <launch:phase>sunrise</launch:phase>
S: <launch:status s="allocated"/>
S: </launch:infData>
S: </extension>
S: <trID>
S: <clTRID>BCD-23456</clTRID>
S: <svTRID>65432-WXY</svTRID>
S: </trID>
S: </response>
S:</epp>
2.6. Mark Validation Models π
bestie, a server MUST support at least one of these models for validating trademark info:
code: just a mark code by itself, used to check that the mark matches the domain name. This model uses the<launch:codeMark>element with only the<launch:code>element inside.mark: the mark info gets passed in with no other validation element. The server runs its own custom validation to confirm the mark info is authentic. This model uses the<launch:codeMark>element with only the<mark:mark>(Section 2.6.2) element inside.code with mark: a code and the mark info are used together, and the server checks them with an external party. The code is a kind of secret that matches the mark info that was passed. This model uses the<launch:codeMark>element containing BOTH the<launch:code>and<mark:mark>(Section 2.6.2) elements.signed mark: the mark info is digitally signed, as described in the Digital Signature section (Section 2.6.3). The server can directly validate the signature using the public key of the external party who made the signed mark with its private key. This model uses the<smd:signedMark>(Section 2.6.3.1) and<smd:encodedSignedMark>(Section 2.6.3.2) elements.
more than one <launch:codeMark>, <smd:signedMark> (Section 2.6.3.1), or <smd:encodedSignedMark> (Section 2.6.3.2) element MAY be specified. how many marks a domain name can have is up to server policy π
2.6.1. <launch:codeMark> Element π
the <launch:codeMark> element is used by the "code", "mark", and "code with mark" validation models, and it has these child elements:
<launch:code>: OPTIONAL mark code used to validate the<mark:mark>(Section 2.6.2) info. The mark code is a mark-specific secret that the server can verify against a third party. The OPTIONAL "validatorID" attribute is the Validator Identifier (Section 2.2), and its value shows which Trademark Validator the code came from. It has no default value.<mark:mark>: OPTIONAL mark info, with child elements defined in the Mark section (Section 2.6.2).
here's an example <launch:codeMark> element with both a <launch:code> and a <mark:mark> (Section 2.6.2) element π
<launch:codeMark>
<launch:code validatorID="sample">
49FD46E6C4B45C55D4AC</launch:code>
<mark:mark xmlns:mark="urn:ietf:params:xml:ns:mark-1.0">
...
</mark:mark>
</launch:codeMark>
2.6.2. <mark:mark> Element π
a <mark:mark> element describes an applicant's prior right to a given domain name. it's used with the "mark", "mark with code", and "signed mark" validation models. the <mark:mark> element is defined in [RFC7848]. a new mark format can be supported by making a new XML schema for the mark, with an element that substitutes for the <mark:abstractMark> element from [RFC7848] β¨
2.6.3. Digital Signature π¦
digital signatures MAY be used by the server to validate the mark info when using the "signed mark" validation model with the <smd:signedMark> (Section 2.6.3.1) and <smd:encodedSignedMark> (Section 2.6.3.2) elements. when digital signatures are used, the server MUST validate the digital signature π₯
2.6.3.1. <smd:signedMark> Element π
the <smd:signedMark> element contains the digitally signed mark info. it is defined in [RFC7848]. a new signed mark format can be supported by making a new XML schema for the signed mark, with an element that substitutes for the <smd:abstractSignedMark> element from [RFC7848] π§
2.6.3.2. <smd:encodedSignedMark> Element π«Ά
the <smd:encodedSignedMark> element contains an encoded form of the digitally signed <smd:signedMark> (Section 2.6.3.1) element. it is defined in [RFC7848]. a new encoded signed mark format can be supported by making a new XML schema for the encoded signed mark, with an element that substitutes for the <smd:encodedSignedMark> element from [RFC7848] π
3. EPP Command Mapping β¨
okay so bestie, the full EPP syntax and semantics live in the EPP core protocol spec [RFC5730] π These command mappings are specifically for the Launch Phase Extension π
This mapping is built to be flexible, so it only asks for a minimum set of required elements π§ It's meant to serve a bunch of use cases, but it doesn't prescribe any interpretation by the client or server. That processing is super policy dependent, so it's specific to each implementation π
Operations on application objects happen through one or more of the existing EPP commands from the EPP domain name mapping [RFC5731]. Registries MAY choose to support a subset of the operations π
3.1. EPP <check> Command
there are three forms of the extension to the EPP <check> command, and they're giving variety π¦ The Claims Check Form (Section 3.1.1), the Availability Check Form (Section 3.1.2), and the Trademark Check Form (Section 3.1.3). The <launch:check> element's "type" attribute picks the form: "claims" for the Claims Check Form (Section 3.1.1), "avail" for the Availability Check Form (Section 3.1.2), and "trademark" for the Trademark Check Form (Section 3.1.3). If you don't set it, the default is "claims" π Which forms the server supports is decided by server policy. If the server gets a check form it doesn't support, it MUST return an EPP error result code of 2307 [RFC5730] π
3.1.1. Claims Check Form
the Claims Check Form defines a brand new command called the Claims Check Command π It figures out whether there are any matching trademarks in the launch phase you name, for each domain name in the command, that need the "Claims Create Form" on a Domain Create Command. The availability check info from the EPP domain name mapping [RFC5731] MUST NOT be returned for the Claims Check Command, so no availability vibes here π
ββοΈ This is the default form, and the client MAY explicitly pick it by setting the <launch:check> "type" attribute to "claims" πΈ
Instead of saying whether a domain is available, the Claims Check Command tells you whether at least one matching trademark exists for the domain name, which means the "Claims Create Form" is needed on a Domain Create Command. If there's at least one matching trademark, a <launch:claimKey> element gets returned ποΈ The client MAY then use that <launch:claimKey> value to grab the info it needs to generate the Trademark Claims Notice from the Trademark Validator, based on the Validator Identifier (Section 2.2). And the unique notice identifier of the Trademark Claims Notice MUST be passed in the <launch:noticeID> element of the extension to the Create Command (Section 3.3) β¨
The <domain:name> elements in the EPP <check> command of the EPP domain name mapping [RFC5731] define which domain names get checked for matching trademarks. The <launch:check> element has this child element:
<launch:phase>: contains the value of the server's active launch phase. The server SHOULD validate the value according to Section 2.3 π
Here's an example Claims Check Command using the <check> domain command and the <launch:check> extension, with "type" explicitly set to "claims". It's checking whether "domain1.example", "domain2.example", and "domain3.example" need claims notices during the "claims" launch phase π§
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
C: <command>
C: <check>
C: <domain:check
C: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
C: <domain:name>domain1.example</domain:name>
C: <domain:name>domain2.example</domain:name>
C: <domain:name>domain3.example</domain:name>
C: </domain:check>
C: </check>
C: <extension>
C: <launch:check
C: xmlns:launch="urn:ietf:params:xml:ns:launch-1.0"
C: type="claims">
C: <launch:phase>claims</launch:phase>
C: </launch:check>
C: </extension>
C: <clTRID>ABC-12345</clTRID>
C: </command>
C:</epp>
If the <check> command gets processed successfully, the EPP <response> MUST contain an <extension> <launch:chkData> element that identifies the launch namespace π The <launch:chkData> element has these child elements:
<launch:phase>: the phase, mirroring the<launch:phase>element included in the<launch:check>π<launch:cd>: one or more<launch:cd>elements, each containing these child elements:<launch:name>: contains the fully qualified name of the queried domain name. This element MUST contain an "exists" attribute whose value shows whether a matching trademark exists for the domain name that needs the "Claims Create Form" on a Domain Create Command. A value of "1" (or "true") means a matching trademark does exist and the "Claims Create Form" is required on a Domain Create Command. A value of "0" (or "false") means a matching trademark does not exist, or that the "Claims Create Form" is NOT required on a Domain Create Command π<launch:claimKey>: zero or more OPTIONAL claim keys that MAY be passed to a third-party Trademark Validator, such as the ICANN TMCH, to query the info needed to generate a Trademark Claims Notice. The<launch:claimKey>is used as the key for the query in place of the domain name, so the service gets queried securely without using a well-known value like a domain name π The OPTIONAL "validatorID" attribute is the Validator Identifier (Section 2.2) that says which Trademark Validator to query for the claims notice info. The default is the ICANN TMCH. The "validatorID" attribute MAY reference a non-trademark claims clearinghouse identifier to support other forms of claims notices π¦
Here's an example Claims Check response for a domain where a claims notice in the "claims" launch phase is NOT required for domain1.example, is required for domain2.example in the "tmch", and is required for domain3.example in both the "tmch" and "custom-tmch" π
S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
S: <response>
S: <result code="1000">
S: <msg>Command completed successfully</msg>
S: </result>
S: <extension>
S: <launch:chkData
S: xmlns:launch="urn:ietf:params:xml:ns:launch-1.0">
S: <launch:phase>claims</launch:phase>
S: <launch:cd>
S: <launch:name exists="0">domain1.example</launch:name>
S: </launch:cd>
S: <launch:cd>
S: <launch:name exists="1">domain2.example</launch:name>
S: <launch:claimKey validatorID="tmch">
S: 2013041500/2/6/9/rJ1NrDO92vDsAzf7EQzgjX4R0000000001
S: </launch:claimKey>
S: </launch:cd>
S: <launch:cd>
S: <launch:name exists="1">domain3.example</launch:name>
S: <launch:claimKey validatorID="tmch">
S: 2013041500/2/6/9/rJ1NrDO92vDsAzf7EQzgjX4R0000000001
S: </launch:claimKey>
S: <launch:claimKey validatorID="custom-tmch">
S: 20140423200/1/2/3/rJ1Nr2vDsAzasdff7EasdfgjX4R000000002
S: </launch:claimKey>
S: </launch:cd>
S: </launch:chkData>
S: </extension>
S: <trID>
S: <clTRID>ABC-12345</clTRID>
S: <svTRID>54321-XYZ</svTRID>
S: </trID>
S: </response>
S:</epp>
3.1.2. Availability Check Form
the Availability Check Form adds extra elements to the EPP <check> command from the EPP domain name mapping [RFC5731] π¦ No extra elements are defined for the EPP <check> response, so this one's chill. This form MUST be identified by setting the <launch:check> "type" attribute to "avail" β
The EPP <check> command is used to figure out whether an object can be provisioned in a repository. Domain names can only be made available in unique launch phases, and they stay unavailable during concurrent launch phases π°οΈ On top of the elements in <domain:check>, the command gets extended with a <launch:check> element that has this child element:
<launch:phase>: the launch phase you want to determine availability for. The server SHOULD validate the value and return an EPP error result code of 2306 [RFC5730] if it's invalid π¨
Here's an example Availability Check Form Command using the <check> domain command and the <launch:check> extension, with "type" set to "avail". It checks the availability of two domain names in the "idn-release" custom launch phase π·
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
C: <command>
C: <check>
C: <domain:check
C: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
C: <domain:name>domain1.example</domain:name>
C: <domain:name>domain2.example</domain:name>
C: </domain:check>
C: </check>
C: <extension>
C: <launch:check
C: xmlns:launch="urn:ietf:params:xml:ns:launch-1.0"
C: type="avail">
C: <launch:phase name="idn-release">custom</launch:phase>
C: </launch:check>
C: </extension>
C: <clTRID>ABC-12345</clTRID>
C: </command>
C:</epp>
The Availability Check Form doesn't define any extension to the response of a <check> domain command π«Ά After processing the command, the server replies with a standard EPP response, as defined in the EPP domain name mapping [RFC5731] π
3.1.3. Trademark Check Form
okay so the Trademark Check Form defines a brand new command called the Trademark Check Command π
Its whole job is to figure out whether there are any matching trademarks for each domain name you pass in, no matter what launch phase the server is in or whether the "Claims Create Form" is needed on a Domain Create Command π¦ The availability check info from the EPP domain name mapping [RFC5731] MUST NOT be returned for the Trademark Check Command π This form MUST be identified by setting the <launch:check> "type" attribute to "trademark" π
Instead of telling you whether the domain is available, this command tells you whether at least one matching trademark exists for the domain name πΈ If there's at least one, a <launch:claimKey> element comes back. The client MAY then use that value to get Trademark Claims Notice information from the Trademark Validator, based on the Validator Identifier (Section 2.2) π«Ά
The <domain:name> elements in the EPP <check> command of EPP domain name mapping [RFC5731] are the domain names being checked for matching trademarks. The <launch:check> element does not contain any child elements with the "Trademark Check Form":
The following is an example Trademark Check Command using the <check> domain command and the <launch:check> extension with "type" set to "trademark", to see if "domain1.example", "domain2.example", and "domain3.example" have any matching trademarks π
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
C: <command>
C: <check>
C: <domain:check
C: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
C: <domain:name>domain1.example</domain:name>
C: <domain:name>domain2.example</domain:name>
C: <domain:name>domain3.example</domain:name>
C: </domain:check>
C: </check>
C: <extension>
C: <launch:check
C: xmlns:launch="urn:ietf:params:xml:ns:launch-1.0"
C: type="trademark"/>
C: </extension>
C: <clTRID>ABC-12345</clTRID>
C: </command>
C:</epp>
If the <check> command has been processed successfully, the EPP <response> MUST contain an <extension> <launch:chkData> element that identifies the launch namespace. The <launch:chkData> element contains the following child elements:
<launch:cd>: One or more<launch:cd>elements that contain the following child elements:<launch:name>: Contains the fully qualified name of the queried domain name. This element MUST contain an "exists" attribute whose value indicates if a matching trademark exists for the domain name. A value of "1" (or "true") means that a matching trademark does exist. A value of "0" (or "false") means that a matching trademark does not exist.<launch:claimKey>: Zero or more OPTIONAL claim keys that MAY be passed to a third-party Trademark Validator such as the ICANN TMCH for querying the information needed to generate a Trademark Claims Notice. The<launch:claimKey>is used as the key for the query in place of the domain name to securely query the service without using a well-known value like a domain name. The OPTIONAL "validatorID" attribute is the Validator Identifier (Section 2.2) whose value indicates which Trademark Validator to query for the claims notice information, with the default being the ICANN TMCH. The "validatorID" attribute MAY reference a non-trademark claims clearinghouse identifier to support other forms of claims notices.
The following is an example Trademark Check response for the "claims" launch phase when no matching trademarks are found for the domain name domain1.example, matching trademarks are found for the domain name domain2.example in the "tmch", and matching trademarks are found for domain name domain3.example in the "tmch" and "custom-tmch" π§
S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
S: <response>
S: <result code="1000">
S: <msg>Command completed successfully</msg>
S: </result>
S: <extension>
S: <launch:chkData
S: xmlns:launch="urn:ietf:params:xml:ns:launch-1.0">
S: <launch:cd>
S: <launch:name exists="0">domain1.example</launch:name>
S: </launch:cd>
S: <launch:cd>
S: <launch:name exists="1">domain2.example</launch:name>
S: <launch:claimKey validatorID="tmch">
S: 2013041500/2/6/9/rJ1NrDO92vDsAzf7EQzgjX4R0000000001
S: </launch:claimKey>
S: </launch:cd>
S: <launch:cd>
S: <launch:name exists="1">domain3.example</launch:name>
S: <launch:claimKey validatorID="tmch">
S: 2013041500/2/6/9/rJ1NrDO92vDsAzf7EQzgjX4R0000000001
S: </launch:claimKey>
S: <launch:claimKey validatorID="custom-tmch">
S: 20140423200/1/2/3/rJ1Nr2vDsAzasdff7EasdfgjX4R000000002
S: </launch:claimKey>
S: </launch:cd>
S: </launch:chkData>
S: </extension>
S: <trID>
S: <clTRID>ABC-12345</clTRID>
S: <svTRID>54321-XYZ</svTRID>
S: </trID>
S: </response>
S:</epp>
3.2. EPP <info> Command
This extension adds extra elements to the EPP <info> command and response, to be used together with the EPP domain name mapping [RFC5731] β¨
The EPP <info> command is used to retrieve information for a Launch Registration or Launch Application π The Application Identifier (Section 2.1) returned in the <launch:creData> element of the create response (Section 3.3) can be used to retrieve information for a Launch Application. A <launch:info> element is sent along with the regular <info> domain command. The <launch:info> element includes an OPTIONAL "includeMark" boolean attribute, with a default value of "false", to indicate whether or not to include the mark in the response. The <launch:info> element contains the following child elements:
<launch:phase>: The phase during which the application or registration was submitted or is associated with. Server policy defines the phases that are supported. The server SHOULD validate the value and return an EPP error result code of 2306 [RFC5730] if it is invalid.<launch:applicationID>: OPTIONAL application identifier of the Launch Application.
The following is an example <info> domain command with the <launch:info> extension to retrieve information for the sunrise application for domain.example and application identifier "abc123" π
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
C: <command>
C: <info>
C: <domain:info
C: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
C: <domain:name>domain.example</domain:name>
C: </domain:info>
C: </info>
C: <extension>
C: <launch:info
C: xmlns:launch="urn:ietf:params:xml:ns:launch-1.0"
C: includeMark="true">
C: <launch:phase>sunrise</launch:phase>
C: <launch:applicationID>abc123</launch:applicationID>
C: </launch:info>
C: </extension>
C: <clTRID>ABC-12345</clTRID>
C: </command>
C:</epp>
The following is an example <info> domain command with the <launch:info> extension to retrieve information for the sunrise registration for domain.example π¦
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
C: <command>
C: <info>
C: <domain:info
C: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
C: <domain:name>domain.example</domain:name>
C: </domain:info>
C: </info>
C: <extension>
C: <launch:info
C: xmlns:launch="urn:ietf:params:xml:ns:launch-1.0">
C: <launch:phase>sunrise</launch:phase>
C: </launch:info>
C: </extension>
C: <clTRID>ABC-12345</clTRID>
C: </command>
C:</epp>
If the query was successful, the server replies with a <launch:infData> element along with the regular EPP <resData>. The <launch:infData> contains the following child elements:
<launch:phase>: The phase during which the application was submitted or is associated with, matching the<launch:phase>of the associated<info>command.<launch:applicationID>: OPTIONAL Application Identifier of the Launch Application.<launch:status>: OPTIONAL status of the Launch Application using one of the supported status values (Section 2.4).<mark:mark>: Zero or more<mark:mark>(Section 2.6.2) elements only if the "includeMark" attribute is "true" in the command.
The following is an example <info> domain response using the <launch:infData> extension with the mark information π
S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
S: <response>
S: <result code="1000">
S: <msg>Command completed successfully</msg>
S: </result>
S: <resData>
S: <domain:infData
S: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
S: <domain:name>domain.example</domain:name>
S: <domain:roid>EXAMPLE1-REP</domain:roid>
S: <domain:status s="pendingCreate"/>
S: <domain:registrant>jd1234</domain:registrant>
S: <domain:contact type="admin">sh8013</domain:contact>
S: <domain:contact type="tech">sh8013</domain:contact>
S: <domain:clID>ClientX</domain:clID>
S: <domain:crID>ClientY</domain:crID>
S: <domain:crDate>2012-04-03T22:00:00.0Z</domain:crDate>
S: <domain:authInfo>
S: <domain:pw>2fooBAR</domain:pw>
S: </domain:authInfo>
S: </domain:infData>
S: </resData>
S: <extension>
S: <launch:infData
S: xmlns:launch="urn:ietf:params:xml:ns:launch-1.0">
S: <launch:phase>sunrise</launch:phase>
S: <launch:applicationID>abc123</launch:applicationID>
S: <launch:status s="pendingValidation"/>
S: <mark:mark
S: xmlns:mark="urn:ietf:params:xml:ns:mark-1.0">
S: ...
S: </mark:mark>
S: </launch:infData>
S: </extension>
S: <trID>
S: <clTRID>ABC-12345</clTRID>
S: <svTRID>54321-XYZ</svTRID>
S: </trID>
S: </response>
S:</epp>
3.3. EPP <create> Command β¨
Okay bestie, the EPP <create> command comes in four forms π: the Sunrise Create Form (Section 3.3.1), the Claims Create Form (Section 3.3.2), the General Create Form (Section 3.3.3), and the Mixed Create Form (Section 3.3.4). Which one you use depends on the launch phases (Section 2.3) the server supports. Here's the breakdown π
- sunrise: The EPP <create> command in the "sunrise" launch phase submits a registration with trademark info that the server can verify against the <domain:name> value. The Sunrise Create Form (Section 3.3.1) is used for the "sunrise" launch phase. πΈ
- landrush: The EPP <create> command in the "landrush" launch phase MAY use the General Create Form (Section 3.3.3) to explicitly specify the phase and optionally define the expected type of object to create. π¦
- claims: The EPP <create> command in the "claims" launch phase carries the info about presenting and accepting the claims notice. The Claims Create Form (Section 3.3.2) is used, and the General Create Form (Section 3.3.3) MAY be used for the "claims" launch phase. π
- open: The EPP <create> command in the "open" launch phase is undefined, so whatever form the server supports is up to server policy. The Claims Create Form (Section 3.3.2) MAY be used to pass the claims notice presentation and acceptance info if it's required for the domain name. π§
- custom: The EPP <create> command in the "custom" launch phase is undefined too, so the form supported is up to server policy. π
3.3.1. Sunrise Create Form π₯
The Sunrise Create Form is an extension to the EPP domain name mapping [RFC5731]. It carries the verifiable trademark info the server matches against the domain name to authorize the domain create. A server MUST support one of the four models in Mark Validation Models (Section 2.6) to verify the trademark info the client passes in. π
A <launch:create> element gets sent alongside the regular <create> domain command π. It has an OPTIONAL "type" attribute that says what kind of object ("application" or "registration") is being created. The server SHOULD check the "type" attribute, when it's passed, against the object that's actually going to be created, and return EPP error result code 2306 [RFC5730] if the type is wrong π. The <launch:create> element holds these child elements:
<launch:phase>: The identifier for the launch phase. The server SHOULD validate the value according to Section 2.3. β¨<launch:codeMark>or<smd:signedMark>or<smd:encodedSignedMark>:<launch:codeMark>: Zero or more <launch:codeMark> elements. The <launch:codeMark> child elements are defined in "<launch:codeMark> Element" (Section 2.6.1). π<smd:signedMark>: Zero or more <smd:signedMark> elements. The <smd:signedMark> child elements are defined in "<smd:signedMark> Element" (Section 2.6.3.1). π<smd:encodedSignedMark>: Zero or more <smd:encodedSignedMark> elements. The <smd:encodedSignedMark> child elements are defined in "<smd:encodedSignedMark> Element" (Section 2.6.3.2). π«Ά
Here's an example <create> domain command using the <launch:create> extension, following the "code" validation model, with multiple sunrise codes π¦:
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
C: <command>
C: <create>
C: <domain:create
C: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
C: <domain:name>domain.example</domain:name>
C: <domain:registrant>jd1234</domain:registrant>
C: <domain:contact type="admin">sh8013</domain:contact>
C: <domain:contact type="tech">sh8013</domain:contact>
C: <domain:authInfo>
C: <domain:pw>2fooBAR</domain:pw>
C: </domain:authInfo>
C: </domain:create>
C: </create>
C: <extension>
C: <launch:create
C: xmlns:launch="urn:ietf:params:xml:ns:launch-1.0">
C: <launch:phase>sunrise</launch:phase>
C: <launch:codeMark>
C: <launch:code validatorID="sample1">
C: 49FD46E6C4B45C55D4AC</launch:code>
C: </launch:codeMark>
C: <launch:codeMark>
C: <launch:code>49FD46E6C4B45C55D4AD</launch:code>
C: </launch:codeMark>
C: <launch:codeMark>
C: <launch:code validatorID="sample2">
C: 49FD46E6C4B45C55D4AE</launch:code>
C: </launch:codeMark>
C: </launch:create>
C: </extension>
C: <clTRID>ABC-12345</clTRID>
C: </command>
C:</epp>
Here's another example, following the "mark" validation model, with the mark info π:
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
C: <command>
C: <create>
C: <domain:create
C: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
C: <domain:name>domainone.example</domain:name>
C: <domain:registrant>jd1234</domain:registrant>
C: <domain:contact type="admin">sh8013</domain:contact>
C: <domain:contact type="tech">sh8013</domain:contact>
C: <domain:authInfo>
C: <domain:pw>2fooBAR</domain:pw>
C: </domain:authInfo>
C: </domain:create>
C: </create>
C: <extension>
C: <launch:create
C: xmlns:launch="urn:ietf:params:xml:ns:launch-1.0">
C: <launch:phase>sunrise</launch:phase>
C: <launch:codeMark>
C: <mark:mark
C: xmlns:mark="urn:ietf:params:xml:ns:mark-1.0">
C: ...
C: </mark:mark>
C: </launch:codeMark>
C: </launch:create>
C: </extension>
C: <clTRID>ABC-12345</clTRID>
C: </command>
C:</epp>
And one following the "code with mark" validation model, with the code and mark info together π:
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
C: <command>
C: <create>
C: <domain:create
C: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
C: <domain:name>domain.example</domain:name>
C: <domain:registrant>jd1234</domain:registrant>
C: <domain:contact type="admin">sh8013</domain:contact>
C: <domain:contact type="tech">sh8013</domain:contact>
C: <domain:authInfo>
C: <domain:pw>2fooBAR</domain:pw>
C: </domain:authInfo>
C: </domain:create>
C: </create>
C: <extension>
C: <launch:create
C: xmlns:launch="urn:ietf:params:xml:ns:launch-1.0">
C: <launch:phase>sunrise</launch:phase>
C: <launch:codeMark>
C: <launch:code validatorID="sample">
C: 49FD46E6C4B45C55D4AC</launch:code>
C: <mark:mark
C: xmlns:mark="urn:ietf:params:xml:ns:mark-1.0">
C: ...
C: </mark:mark>
C: </launch:codeMark>
C: </launch:create>
C: </extension>
C: <clTRID>ABC-12345</clTRID>
C: </command>
C:</epp>
Next up is the "signed mark" validation model, with the signed mark info for a sunrise application π₯:
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
C: <command>
C: <create>
C: <domain:create
C: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
C: <domain:name>domainone.example</domain:name>
C: <domain:registrant>jd1234</domain:registrant>
C: <domain:contact type="admin">sh8013</domain:contact>
C: <domain:contact type="tech">sh8013</domain:contact>
C: <domain:authInfo>
C: <domain:pw>2fooBAR</domain:pw>
C: </domain:authInfo>
C: </domain:create>
C: </create>
C: <extension>
C: <launch:create
C: xmlns:launch="urn:ietf:params:xml:ns:launch-1.0"
C: type="application">
C: <launch:phase>sunrise</launch:phase>
C: <smd:signedMark id="signedMark"
C: xmlns:smd="urn:ietf:params:xml:ns:signedMark-1.0">
C: ...
C: </smd:signedMark>
C: </launch:create>
C: </extension>
C: <clTRID>ABC-12345</clTRID>
C: </command>
C:</epp>
Last one in this bit: the "signed mark" model again, but with the base64-encoded signed mark info π§:
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
C: <command>
C: <create>
C: <domain:create
C: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
C: <domain:name>domainone.example</domain:name>
C: <domain:registrant>jd1234</domain:registrant>
C: <domain:contact type="admin">sh8013</domain:contact>
C: <domain:contact type="tech">sh8013</domain:contact>
C: <domain:authInfo>
C: <domain:pw>2fooBAR</domain:pw>
C: </domain:authInfo>
C: </domain:create>
C: </create>
C: <extension>
C: <launch:create
C: xmlns:launch="urn:ietf:params:xml:ns:launch-1.0">
C: <launch:phase>sunrise</launch:phase>
C: <smd:encodedSignedMark
C: xmlns:smd="urn:ietf:params:xml:ns:signedMark-1.0">
C: ...
C: </smd:encodedSignedMark>
C: </launch:create>
C: </extension>
C: <clTRID>ABC-12345</clTRID>
C: </command>
C:</epp>
3.3.2. Claims Create Form π
okay so this is the form where the registrant basically says "yep, I accept the claims notice" π It's the Claims Create Form of the extension to the EPP domain name mapping [RFC5731], and it carries all the info about that acceptance π«Ά
A <launch:create> element gets sent along with the regular <create> domain command π The <launch:create> element has an OPTIONAL "type" attribute that says what kind of object you're creating ("application" or "registration") π§ The server SHOULD validate the "type" attribute, when it's passed, against the type of object that will actually be created, and it returns an EPP error result code of 2306 [RFC5730] if the type is wrong β¨ The <launch:create> element has these child elements:
<launch:phase>: contains the value of the server's active launch phase πΈ The server SHOULD validate the value according to Section 2.3.<launch:notice>: one or more<launch:notice>elements, each containing these child elements:<launch:noticeID>: the unique notice identifier for the claims notice π₯ This element has an OPTIONAL"validatorID"attribute, which is used to define the Validator Identifier (Section 2.2). Its value tells you which Trademark Validator is the source of the claims notice, and the default is the ICANN TMCH π<launch:notAfter>: the expiry of the claims notice β³<launch:acceptedDate>: the date and time that the claims notice was accepted π¦
Here's an example <create> domain command using the <launch:create> extension, with the <launch:notice> info for the "tmch" and "custom-tmch" validators, for the "claims" launch phase π
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
C: <command>
C: <create>
C: <domain:create
C: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
C: <domain:name>domain.example</domain:name>
C: <domain:registrant>jd1234</domain:registrant>
C: <domain:contact type="admin">sh8013</domain:contact>
C: <domain:contact type="tech">sh8013</domain:contact>
C: <domain:authInfo>
C: <domain:pw>2fooBAR</domain:pw>
C: </domain:authInfo>
C: </domain:create>
C: </create>
C: <extension>
C: <launch:create
C: xmlns:launch="urn:ietf:params:xml:ns:launch-1.0">
C: <launch:phase>claims</launch:phase>
C: <launch:notice>
C: <launch:noticeID validatorID="tmch">
C: 370d0b7c9223372036854775807</launch:noticeID>
C: <launch:notAfter>2014-06-19T10:00:00.0Z
C: </launch:notAfter>
C: <launch:acceptedDate>2014-06-19T09:00:00.0Z
C: </launch:acceptedDate>
C: </launch:notice>
C: <launch:notice>
C: <launch:noticeID validatorID="custom-tmch">
C: 470d0b7c9223654313275808</launch:noticeID>
C: <launch:notAfter>2014-06-19T10:00:00.0Z
C: </launch:notAfter>
C: <launch:acceptedDate>2014-06-19T09:00:30.0Z
C: </launch:acceptedDate>
C: </launch:notice>
C: </launch:create>
C: </extension>
C: <clTRID>ABC-12345</clTRID>
C: </command>
C:</epp>
3.3.3. General Create Form β¨
The General Create Form of the extension to the EPP domain name mapping [RFC5731] is the simpler glow-up π It includes the launch phase and, if you want, the object type to create. The OPTIONAL "type" attribute defines the expected type of object ("application" or "registration") to create. The server SHOULD validate the "type" attribute, when it's passed, against the type of object that will be created, and return an EPP error result code of 2306 [RFC5730] if the type is incorrect π
A <launch:create> element is sent along with the regular <create> domain command. The <launch:create> element has just this one child element:
<launch:phase>: contains the value of the server's active launch phase πΈ The server SHOULD validate the value according to Section 2.3.
Here's an example <create> domain command using the <launch:create> extension for a "landrush" launch phase application π
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
C: <command>
C: <create>
C: <domain:create
C: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
C: <domain:name>domain.example</domain:name>
C: <domain:registrant>jd1234</domain:registrant>
C: <domain:contact type="admin">sh8013</domain:contact>
C: <domain:contact type="tech">sh8013</domain:contact>
C: <domain:authInfo>
C: <domain:pw>2fooBAR</domain:pw>
C: </domain:authInfo>
C: </domain:create>
C: </create>
C: <extension>
C: <launch:create
C: xmlns:launch="urn:ietf:params:xml:ns:launch-1.0"
C: type="application">
C: <launch:phase>landrush</launch:phase>
C: </launch:create>
C: </extension>
C: <clTRID>ABC-12345</clTRID>
C: </command>
C:</epp>
3.3.4. Mixed Create Form π¦
The Mixed Create Form is the mix-and-match one π It supports a blend of the create forms where, for example, the Sunrise Create Form (Section 3.3.1) and the Claims Create Form (Section 3.3.2) MAY be supported in a single command, by including both the verified trademark information and the info about the registrant's acceptance of the claims notice π The server MAY support the Mixed Create Form β¨ When you're using the Mixed Create Form, the "custom" launch phase SHOULD be used π
Here's an example <create> domain command using the <launch:create> extension, with a mix of the Sunrise Create Form (Section 3.3.1) and the Claims Create Form (Section 3.3.2), including both a mark and a notice π§
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
C: <command>
C: <create>
C: <domain:create
C: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
C: <domain:name>domainone.example</domain:name>
C: <domain:registrant>jd1234</domain:registrant>
C: <domain:contact type="admin">sh8013</domain:contact>
C: <domain:contact type="tech">sh8013</domain:contact>
C: <domain:authInfo>
C: <domain:pw>2fooBAR</domain:pw>
C: </domain:authInfo>
C: </domain:create>
C: </create>
C: <extension>
C: <launch:create
C: xmlns:launch="urn:ietf:params:xml:ns:launch-1.0"
C: type="application">
C: <launch:phase name="non-tmch-sunrise">custom</launch:phase>
C: <launch:codeMark>
C: <mark:mark
C: xmlns:mark="urn:ietf:params:xml:ns:mark-1.0">
C: ...
C: </mark:mark>
C: </launch:codeMark>
C: <launch:notice>
C: <launch:noticeID validatorID="tmch">
C: 49FD46E6C4B45C55D4AC
C: </launch:noticeID>
C: <launch:notAfter>2012-06-19T10:00:10.0Z
C: </launch:notAfter>
C: <launch:acceptedDate>2012-06-19T09:01:30.0Z
C: </launch:acceptedDate>
C: </launch:notice>
C: </launch:create>
C: </extension>
C: <clTRID>ABC-12345</clTRID>
C: </command>
C:</epp>
3.3.5. Create Response π
If the create was successful, the server MAY add a <launch:creData> element to the regular EPP <resData> to show that it generated an Application Identifier (Section 2.1). This happens when multiple applications of a given domain name are supported. Otherwise, no extension is included with the regular EPP <resData> π«Ά The <launch:creData> element has these child elements:
<launch:phase>: the phase of the application, which mirrors the<launch:phase>element included in the<launch:create>πΈ<launch:applicationID>: the application identifier of the application π₯
Here's an example response when the server supports multiple overlapping applications π
S:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
S:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
S: <response>
S: <result code="1001">
S: <msg>Command completed successfully; action pending</msg>
S: </result>
S: <resData>
S: <domain:creData
S: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
S: <domain:name>domain.example</domain:name>
S: <domain:crDate>2010-08-10T15:38:26.623854Z</domain:crDate>
S: </domain:creData>
S: </resData>
S: <extension>
S: <launch:creData
S: xmlns:launch="urn:ietf:params:xml:ns:launch-1.0">
S: <launch:phase>sunrise</launch:phase>
S: <launch:applicationID>2393-9323-E08C-03B1
S: </launch:applicationID>
S: </launch:creData>
S: </extension>
S: <trID>
S: <clTRID>ABC-12345</clTRID>
S: <svTRID>54321-XYZ</svTRID>
S: </trID>
S: </response>
S:</epp>
3.4. EPP <update> Command π
This extension defines extra elements that extend the EPP <update> command for use with the domain name mapping β¨
When an EPP <update> command with the extension is sent to a server that does not support Launch Applications, it will fail π A server that does not support Launch Applications during its launch phase MUST return an EPP error result code of 2102 [RFC5730] when it receives an EPP <update> command with the extension π₯
Registry policies permitting, clients may update an application object by submitting an EPP <update> command along with a <launch:update> element, which indicates the application object to be updated π¦ The <launch:update> element has these child elements:
<launch:phase>: the phase during which the application was submitted or is associated with πΈ The server SHOULD validate the value and return an EPP error result code of 2306 [RFC5730] if it is invalid.<launch:applicationID>: the application identifier that the client wishes to update π§
Here's an example <update> domain command with the <launch:update> extension, adding and removing a name server for a sunrise application with the application identifier "abc123" π
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
C: <command>
C: <update>
C: <domain:update
C: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
C: <domain:name>domain.example</domain:name>
C: <domain:add>
C: <domain:ns>
C: <domain:hostObj>ns2.domain.example</domain:hostObj>
C: </domain:ns>
C: </domain:add>
C: <domain:rem>
C: <domain:ns>
C: <domain:hostObj>ns1.domain.example</domain:hostObj>
C: </domain:ns>
C: </domain:rem>
C: </domain:update>
C: </update>
C: <extension>
C: <launch:update
C: xmlns:launch="urn:ietf:params:xml:ns:launch-1.0">
C: <launch:phase>sunrise</launch:phase>
C: <launch:applicationID>abc123</launch:applicationID>
C: </launch:update>
C: </extension>
C: <clTRID>ABC-12345</clTRID>
C: </command>
C:</epp>
This extension doesn't define any extension to the response of an <update> domain command π After processing the command, the server replies with a standard EPP response, as defined in the EPP domain name mapping [RFC5731] π
3.5. EPP <delete> Command π§Ή
okay so this extension adds some extra bits to the EPP <delete> command so it can vibe with the domain name mapping π
Here's the big rule, bestie: a client MUST NOT send this extension on an EPP <delete> command to a server that doesn't support Launch Applications π ββοΈ. And if a server doesn't support Launch Applications during its launch phase and still gets a <delete> command with the extension, it MUST return EPP error result code 2102 [RFC5730] π not the vibe at all.
Registry policies permitting, clients MAY withdraw an application by sending an EPP <delete> command with a <launch:delete> element, which tells the server exactly which application object to delete β¨ The <launch:delete> element has two child elements:
<launch:phase>: the phase during which the application was submitted or is associated with. The server SHOULD validate the value and return EPP error result code 2306 [RFC5730] if it's invalid π«Ά<launch:applicationID>: the application identifier that the client wants to delete π¦
Here's an example of a domain <delete> command with the <launch:delete> extension, iykyk π
C:<?xml version="1.0" encoding="UTF-8" standalone="no"?>
C:<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
C: <command>
C: <delete>
C: <domain:delete
C: xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
C: <domain:name>domain.example</domain:name>
C: </domain:delete>
C: </delete>
C: <extension>
C: <launch:delete
C: xmlns:launch="urn:ietf:params:xml:ns:launch-1.0">
C: <launch:phase>sunrise</launch:phase>
C: <launch:applicationID>abc123</launch:applicationID>
C: </launch:delete>
C: </extension>
C: <clTRID>ABC-12345</clTRID>
C: </command>
C:</epp>
This extension does not define any extension to the response of a <delete> domain command πΈ After processing the command, the server replies with a standard EPP response as defined in the EPP domain name mapping [RFC5731]. Easy peasy π§
3.6. EPP <renew> Command π
This extension does not define any extension to the EPP <renew> command or response described in the EPP domain name mapping [RFC5731]. No notes, no drama π
3.7. EPP <transfer> Command π¦
This extension does not define any extension to the EPP <transfer> command or response described in the EPP domain name mapping [RFC5731]. Same energy as <renew>, literally nothing new here π
4. Formal Syntax π
The EPP Launch Phase Mapping schema is presented in Section 4.1. It's giving official spec. β¨
The formal syntax presented is a complete schema representation of the object mapping, suitable for automated validation of EPP XML instances. The BEGIN and END tags are not part of the schema π they're just there to mark where the schema starts and ends for URI registration purposes.
4.1. Launch Schema π
okay bestie, first up is the legal stuff π«Ά the copyright notice and license terms, kept word for word so nothing gets lost:
Copyright (c) 2018 IETF Trust and the persons identified as authors
of the code. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
o Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
o Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in
the documentation and/or other materials provided with the
distribution.
o Neither the name of Internet Society, IETF or IETF Trust, nor the
names of specific contributors, may be used to endorse or promote
products derived from this software without specific prior written
permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Now the good part π the actual schema for the launch phase extension. It's the XML that all the launch-phase EPP stuff is built on, and it's giving structure β¨
BEGIN
<?xml version="1.0" encoding="UTF-8"?>
<schema
targetNamespace="urn:ietf:params:xml:ns:launch-1.0"
xmlns:launch="urn:ietf:params:xml:ns:launch-1.0"
xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0"
xmlns:mark="urn:ietf:params:xml:ns:mark-1.0"
xmlns:smd="urn:ietf:params:xml:ns:signedMark-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:mark-1.0"/>
<import namespace="urn:ietf:params:xml:ns:signedMark-1.0"/>
<annotation>
<documentation>
Extensible Provisioning Protocol v1.0
domain name
extension schema
for the launch phase processing.
</documentation>
</annotation>
<!-- Child elements found in EPP commands -->
<element
name="check"
type="launch:checkType"/>
<element
name="info"
type="launch:infoType"/>
<element
name="create"
type="launch:createType"/>
<element
name="update"
type="launch:idContainerType"/>
<element
name="delete"
type="launch:idContainerType"/>
<!-- Common container of id (identifier) element -->
<complexType name="idContainerType">
<sequence>
<element
name="phase"
type="launch:phaseType"/>
<element
name="applicationID"
type="launch:applicationIDType"/>
</sequence>
</complexType>
<!-- Definition for application identifier -->
<simpleType name="applicationIDType">
<restriction base="token"/>
</simpleType>
<!-- Definition for launch phase. Name is an
optional attribute used to extend the phase type.
For example, when using the phase type value
of "custom", the "name" can be used to specify the
custom phase. -->
<complexType name="phaseType">
<simpleContent>
<extension base="launch:phaseTypeValue">
<attribute
name="name"
type="token"/>
</extension>
</simpleContent>
</complexType>
<!-- Enumeration of launch phase values -->
<simpleType name="phaseTypeValue">
<restriction base="token">
<enumeration value="sunrise"/>
<enumeration value="landrush"/>
<enumeration value="claims"/>
<enumeration value="open"/>
<enumeration value="custom"/>
</restriction>
</simpleType>
<!-- Definition for the sunrise code -->
<simpleType name="codeValue">
<restriction base="token">
<minLength value="1"/>
</restriction>
</simpleType>
<complexType name="codeType">
<simpleContent>
<extension base="launch:codeValue">
<attribute
name="validatorID"
type="launch:validatorIDType"
use="optional"/>
</extension>
</simpleContent>
</complexType>
<!-- Definition for the notice identifier -->
<simpleType name="noticeIDValue">
<restriction base="token">
<minLength value="1"/>
</restriction>
</simpleType>
<complexType name="noticeIDType">
<simpleContent>
<extension base="launch:noticeIDValue">
<attribute
name="validatorID"
type="launch:validatorIDType"
use="optional"/>
</extension>
</simpleContent>
</complexType>
<!-- Definition for the validator identifier -->
<simpleType name="validatorIDType">
<restriction base="token">
<minLength value="1"/>
</restriction>
</simpleType>
<!-- Possible status values for sunrise application -->
<simpleType name="statusValueType">
<restriction base="token">
<enumeration value="pendingValidation"/>
<enumeration value="validated"/>
<enumeration value="invalid"/>
<enumeration value="pendingAllocation"/>
<enumeration value="allocated"/>
<enumeration value="rejected"/>
<enumeration value="custom"/>
</restriction>
</simpleType>
<!-- Status type definition -->
<complexType name="statusType">
<simpleContent>
<extension base="normalizedString">
<attribute
name="s"
type="launch:statusValueType"
use="required"/>
<attribute
name="lang"
type="language"
default="en"/>
<attribute
name="name"
type="token"/>
</extension>
</simpleContent>
</complexType>
<!-- codeMark Type that contains an optional
code with mark information -->
<complexType name="codeMarkType">
<sequence>
<element
name="code"
type="launch:codeType"
minOccurs="0"/>
<element
ref="mark:abstractMark"
minOccurs="0"/>
</sequence>
</complexType>
<!-- Child elements for the create command -->
<complexType name="createType">
<sequence>
<element
name="phase"
type="launch:phaseType"/>
<choice minOccurs="0">
<element
name="codeMark"
type="launch:codeMarkType"
maxOccurs="unbounded"/>
<element
ref="smd:abstractSignedMark"
maxOccurs="unbounded"/>
<element
ref="smd:encodedSignedMark"
maxOccurs="unbounded"/>
</choice>
<element
name="notice"
type="launch:createNoticeType"
minOccurs="0"
maxOccurs="unbounded"/>
</sequence>
<attribute
name="type"
type="launch:objectType"/>
</complexType>
<!-- Type of launch object -->
<simpleType name="objectType">
<restriction base="token">
<enumeration value="application"/>
<enumeration value="registration"/>
</restriction>
</simpleType>
<!-- Child elements of the create notice element -->
<complexType name="createNoticeType">
<sequence>
<element
name="noticeID"
type="launch:noticeIDType"/>
<element
name="notAfter"
type="dateTime"/>
<element
name="acceptedDate"
type="dateTime"/>
</sequence>
</complexType>
<!-- Child elements of check (Claims Check Command) -->
<complexType name="checkType">
<sequence>
<element
name="phase"
type="launch:phaseType"
minOccurs="0"/>
</sequence>
<attribute
name="type"
type="launch:checkFormType"
default="claims"/>
</complexType>
<!-- Type of check form (Claims Check or Availability Check) -->
<simpleType name="checkFormType">
<restriction base="token">
<enumeration value="claims"/>
<enumeration value="avail"/>
<enumeration value="trademark"/>
</restriction>
</simpleType>
<!-- Child elements of info command -->
<complexType name="infoType">
<sequence>
<element
name="phase"
type="launch:phaseType"/>
<element
name="applicationID"
type="launch:applicationIDType"
minOccurs="0"/>
</sequence>
<attribute
name="includeMark"
type="boolean"
default="false"/>
</complexType>
<!-- Child response elements -->
<element
name="chkData"
type="launch:chkDataType"/>
<element
name="creData"
type="launch:idContainerType"/>
<element
name="infData"
type="launch:infDataType"/>
<!-- <check> response elements -->
<complexType name="chkDataType">
<sequence>
<element
name="phase"
type="launch:phaseType"
minOccurs="0"/>
<element
name="cd"
type="launch:cdType"
maxOccurs="unbounded"/>
</sequence>
</complexType>
<complexType name="cdType">
<sequence>
<element
name="name"
type="launch:cdNameType"/>
<element
name="claimKey"
type="launch:claimKeyType"
minOccurs="0"
maxOccurs="unbounded"/>
</sequence>
</complexType>
<complexType name="cdNameType">
<simpleContent>
<extension base="eppcom:labelType">
<attribute
name="exists"
type="boolean"
use="required"/>
</extension>
</simpleContent>
</complexType>
<complexType name="claimKeyType">
<simpleContent>
<extension base="token">
<attribute
name="validatorID"
type="launch:validatorIDType"
use="optional"/>
</extension>
</simpleContent>
</complexType>
<!-- <info> response elements -->
<complexType name="infDataType">
<sequence>
<element
name="phase"
type="launch:phaseType"/>
<element
name="applicationID"
type="launch:applicationIDType"
minOccurs="0"/>
<element
name="status"
type="launch:statusType"
minOccurs="0"/>
<element
ref="mark:abstractMark"
minOccurs="0"
maxOccurs="unbounded"/>
</sequence>
</complexType>
</schema>
END
5. IANA Considerations β¨
5.1. XML Namespace
okay so this part is all about where the XML namespace and schema live, bestie π§ this doc uses URNs to name XML namespaces and XML schemas that follow the registry mechanism from [RFC3688], which is giving organized energy π
IANA registered the launch namespace like this:
URI: urn:ietf:params:xml:ns:launch-1.0
Registrant Contact: IESG
XML: None. Namespace URIs do not represent an XML specification.
and the launch XML schema like this:
URI: urn:ietf:params:xml:schema:launch-1.0
Registrant Contact: IESG
XML: See the "Formal Syntax" section of this document.
the namespace is the name tag and the schema is the actual rulebook, so they're separate entries and both are slay π
5.2. EPP Extension Registry
okay now the extension gets its own spot in the registry π¦ IANA registered this EPP extension in the "Extensions for the Extensible Provisioning Protocol (EPP)" registry from [RFC7451], and the registration details are:
Name of Extension: "Launch Phase Mapping for the Extensible
Provisioning Protocol (EPP)"
Document Status: Standards Track
Reference: RFC 8334
Registrant Name and Email Address: IESG, <iesg@ietf.org>
TLDs: Any
IPR Disclosure: None
Status: Active
Notes: None
so yeah it's official, active, applies to any TLD, and it's giving fully registered π
6. Security Considerations β¨
okay bestie, this part is serious, so read it carefully π The mapping extensions in this document don't give you any security services beyond what [RFC5730], the EPP domain name mapping in [RFC5731], and the protocol layers EPP uses already provide. The security considerations in those other specs apply here too, no cap.
Updating or deleting an application object MUST be restricted to clients that are authorized to do that operation on that object. No exceptions, no vibes-based access control π ββοΈ
Here's the tea: the information inside an application, or even the fact that an application exists at all, might be confidential π€« So if an unauthorized client tries to operate on an application object, the request MUST be rejected with an EPP 2201 (authorization error) return code. Full stop.
Server policy MAY allow an info operation to return filtered output to clients other than the sponsoring client. If the server does that, the<domain:infData>and<launch:infData>responses SHOULD be filtered so they only include fields that are publicly accessible. (the word is SHOULD, so it's a strong suggestion, but not an absolute must)
7. References
7.1. Normative References
These are the must-read specs the doc leans on π
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/info/rfc2119>.
[RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688,
DOI 10.17487/RFC3688, January 2004,
<https://www.rfc-editor.org/info/rfc3688>.
[RFC5646] Phillips, A., Ed. and M. Davis, Ed., "Tags for Identifying
Languages", BCP 47, RFC 5646, DOI 10.17487/RFC5646,
September 2009, <https://www.rfc-editor.org/info/rfc5646>.
[RFC5730] Hollenbeck, S., "Extensible Provisioning Protocol (EPP)",
STD 69, RFC 5730, DOI 10.17487/RFC5730, August 2009,
<https://www.rfc-editor.org/info/rfc5730>.
[RFC5731] Hollenbeck, S., "Extensible Provisioning Protocol (EPP)
Domain Name Mapping", STD 69, RFC 5731,
DOI 10.17487/RFC5731, August 2009,
<https://www.rfc-editor.org/info/rfc5731>.
[RFC7848] Lozano, G., "Mark and Signed Mark Objects Mapping",
RFC 7848, DOI 10.17487/RFC7848, June 2016,
<https://www.rfc-editor.org/info/rfc7848>.
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
May 2017, <https://www.rfc-editor.org/info/rfc8174>.
[W3C.REC-xml11-20060816]
Bray, T., Paoli, J., Sperberg-McQueen, M., Maler, E.,
Yergeau, F., and J. Cowan, "Extensible Markup Language
(XML) 1.1 (Second Edition)", World Wide Web Consortium
Recommendation REC-xml11-20060816, August 2006,
<http://www.w3.org/TR/2006/REC-xml11-20060816>.
7.2. Informative References
these ones are just for context, not required reading πΈ
[ICANN-TMCH]
Lozano, G., "ICANN TMCH functional specifications", Work
in Progress, draft-ietf-regext-tmch-func-spec-03, July
2017.
[RFC7451] Hollenbeck, S., "Extension Registry for the Extensible
Provisioning Protocol", RFC 7451, DOI 10.17487/RFC7451,
February 2015, <https://www.rfc-editor.org/info/rfc7451>.
Acknowledgements
big thank you energy π«Ά The authors want to shout out the leading participants of the Community TMCH Model, whose work led to a lot of the changes in this doc: Chris Wright, Jeff Neuman, Jeff Eckhaus, and Will Shorter. π
Special suggestions that made it into the doc came from Harald Alvestrand, Ben Campbell, Spencer Dawkins, Jothan Frakes, Keith Gaughan, Seth Goldman, Scott Hollenbeck, Michael Holloway, Jan Jansen, Rubens Kuhl, Mirja Kuehlewind, Warren Kumari, Ben Levac, Gustavo Lozano, Klaus Malorny, Alexander Mayrhofer, Alexey Melnikov, Patrick Mevzek, James Mitchell, Francisco Obispo, Mike O'Connell, Eric Rescorla, Bernhard Reutner-Fischer, Sabrina Tanamal, Trung Tran, Ulrich Wisser, and Sharon Wodjenski. literally iconic π
Some of the Trademark Claims Phase description was based on Gustavo Lozano's work on the ICANN TMCH functional specifications β¨
Authors' Addresses
meet the authors π
James Gould
VeriSign, Inc.
12061 Bluemont Way
Reston, VA 20190
United States of America
Email: jgould@verisign.com
URI: http://www.verisign.com
Wil Tan
Cloud Registry
Suite 32 Seabridge House
377 Kent St
Sydney, NSW 2000
Australia
Phone: +61 414 710899
Email: wil@cloudregistry.net
URI: http://www.cloudregistry.net
Gavin Brown
CentralNic Ltd
35-39 Mooregate
London, England EC2R 6AR
United Kingdom
Phone: +44 20 33 88 0600
Email: gavin.brown@centralnic.com
URI: https://www.centralnic.com
π¦ where this page comes from
- ietf: rfc8334 2018-03
- π girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms