diff --git a/core/src/main/java/google/registry/rdap/RdapActionBase.java b/core/src/main/java/google/registry/rdap/RdapActionBase.java index 4ccc734e4..2b23be750 100644 --- a/core/src/main/java/google/registry/rdap/RdapActionBase.java +++ b/core/src/main/java/google/registry/rdap/RdapActionBase.java @@ -55,7 +55,7 @@ import java.util.Optional; import org.joda.time.DateTime; /** - * Base RDAP (new WHOIS) action for all requests. + * Base RDAP action for all requests. * * @see RFC 9082: Registration Data Access Protocol * (RDAP) Query Format @@ -138,7 +138,7 @@ public abstract class RdapActionBase implements Runnable { // RFC7480 4.2 - servers receiving an RDAP request return an entity with a Content-Type header // containing the RDAP-specific JSON media type. response.setContentType(RESPONSE_MEDIA_TYPE); - // RDAP Technical Implementation Guide 1.13 - when responding to RDAP valid requests, we MUST + // RDAP Technical Implementation Guide 1.14 - when responding to RDAP valid requests, we MUST // include the Access-Control-Allow-Origin, which MUST be "*" unless otherwise specified. response.setHeader(ACCESS_CONTROL_ALLOW_ORIGIN, "*"); try { diff --git a/core/src/main/java/google/registry/rdap/RdapAutnumAction.java b/core/src/main/java/google/registry/rdap/RdapAutnumAction.java index 30b9da327..bb1ef8fed 100644 --- a/core/src/main/java/google/registry/rdap/RdapAutnumAction.java +++ b/core/src/main/java/google/registry/rdap/RdapAutnumAction.java @@ -26,7 +26,7 @@ import google.registry.request.auth.Auth; import jakarta.inject.Inject; /** - * RDAP (new WHOIS) action for RDAP autonomous system number requests. + * RDAP action for RDAP autonomous system number requests. * *

This feature is not implemented because it's only necessary for address registries like * ARIN, not domain registries. diff --git a/core/src/main/java/google/registry/rdap/RdapDataStructures.java b/core/src/main/java/google/registry/rdap/RdapDataStructures.java index 2947dcf2c..6bb2a3410 100644 --- a/core/src/main/java/google/registry/rdap/RdapDataStructures.java +++ b/core/src/main/java/google/registry/rdap/RdapDataStructures.java @@ -41,14 +41,13 @@ final class RdapDataStructures { // Conformance to RFC 9083 jsonArray.add("rdap_level_0"); - // Conformance to the RDAP Response Profile V2.1 + // Conformance to the RDAP Response Profile V2.2 (February 2024) + // (see section 1.2) + jsonArray.add("icann_rdap_response_profile_1"); + + // Conformance to the RDAP Technical Implementation Guide V2.2 (February 2024) // (see section 1.3) - jsonArray.add("icann_rdap_response_profile_0"); - - // Conformance to the RDAP Technical Implementation Guide V2.1 - // (see section 1.14) - jsonArray.add("icann_rdap_technical_implementation_guide_0"); - + jsonArray.add("icann_rdap_technical_implementation_guide_1"); return jsonArray; } } diff --git a/core/src/main/java/google/registry/rdap/RdapDomainAction.java b/core/src/main/java/google/registry/rdap/RdapDomainAction.java index 681abc858..6b96b3ec2 100644 --- a/core/src/main/java/google/registry/rdap/RdapDomainAction.java +++ b/core/src/main/java/google/registry/rdap/RdapDomainAction.java @@ -36,7 +36,7 @@ import google.registry.request.auth.Auth; import jakarta.inject.Inject; import java.util.Optional; -/** RDAP (new WHOIS) action for domain requests. */ +/** RDAP action for domain requests. */ @Action( service = GaeService.PUBAPI, path = "/rdap/domain/", diff --git a/core/src/main/java/google/registry/rdap/RdapDomainSearchAction.java b/core/src/main/java/google/registry/rdap/RdapDomainSearchAction.java index 28cd8c91c..7917feaa8 100644 --- a/core/src/main/java/google/registry/rdap/RdapDomainSearchAction.java +++ b/core/src/main/java/google/registry/rdap/RdapDomainSearchAction.java @@ -51,6 +51,7 @@ import google.registry.request.Parameter; import google.registry.request.auth.Auth; import google.registry.util.NonFinalForTesting; import jakarta.inject.Inject; +import jakarta.persistence.Query; import jakarta.persistence.criteria.CriteriaBuilder; import java.net.InetAddress; import java.util.Comparator; @@ -60,17 +61,15 @@ import java.util.stream.Stream; import org.hibernate.Hibernate; /** - * RDAP (new WHOIS) action for domain search requests. + * RDAP action for domain search requests. * - *

All commands and responses conform to the RDAP spec as defined in RFCs 7480 through 7485. + *

All commands and responses conform to the RDAP spec as defined in STD 95 and its RFCs. * * @see RFC 9082: Registration Data Access Protocol * (RDAP) Query Format * @see RFC 9083: JSON Responses for the Registration * Data Access Protocol (RDAP) */ -// TODO: This isn't required by the RDAP Technical Implementation Guide, and hence should be -// deleted, at least until it's actually required. @Action( service = GaeService.PUBAPI, path = "/rdap/domains", @@ -442,7 +441,7 @@ public class RdapDomainSearchAction extends RdapSearchActionBase { replicaTm() .transact( () -> { - jakarta.persistence.Query query = + Query query = replicaTm() .getEntityManager() .createNativeQuery(queryBuilder.toString()) diff --git a/core/src/main/java/google/registry/rdap/RdapEntityAction.java b/core/src/main/java/google/registry/rdap/RdapEntityAction.java index e0c29dfd3..91bf592c6 100644 --- a/core/src/main/java/google/registry/rdap/RdapEntityAction.java +++ b/core/src/main/java/google/registry/rdap/RdapEntityAction.java @@ -37,14 +37,12 @@ import jakarta.inject.Inject; import java.util.Optional; /** - * RDAP (new WHOIS) action for entity (contact and registrar) requests. the ICANN operational - * profile dictates that the "handle" for registrars is to be the IANA registrar ID: + * RDAP action for entity (contact and registrar) requests. the ICANN operational profile dictates + * that the "handle" for registrars is to be the IANA registrar ID: * - *

2.8.3. Registries MUST support lookup for entities with the registrar role within other - * objects using the handle (as described in 3.1.5 of RFC 9082). The handle of the entity with the - * registrar role MUST be equal to IANA Registrar ID. The entity with the registrar role in the RDAP - * response MUST contain a publicIDs member to identify the IANA Registrar ID from the IANA’s - * Registrar ID registry. The type value of the publicID object MUST be equal to IANA Registrar ID. + *

2.4.1.Registry RDAP servers MUST support Registrar object lookup using an entity path request + * for entities with the registrar role using the handle (as described in 3.1.5 of RFC9082) where + * the handle of the entity with the registrar role is be [sic] equal to the IANA Registrar ID. */ @Action( service = GaeService.PUBAPI, @@ -104,7 +102,7 @@ public class RdapEntityAction extends RdapActionBase { // query, it MUST reply with 404 response code. // // Note we don't do RFC7480 5.3 - returning a different code if we wish to say "this info - // exists but we don't want to show it to you", because we DON'T wish to say that. + // exists, but we don't want to show it to you", because we DON'T wish to say that. throw new NotFoundException(pathSearchString + " not found"); } } diff --git a/core/src/main/java/google/registry/rdap/RdapEntitySearchAction.java b/core/src/main/java/google/registry/rdap/RdapEntitySearchAction.java index 1c55d1d9e..c5f8745ef 100644 --- a/core/src/main/java/google/registry/rdap/RdapEntitySearchAction.java +++ b/core/src/main/java/google/registry/rdap/RdapEntitySearchAction.java @@ -49,9 +49,9 @@ import java.util.List; import java.util.Optional; /** - * RDAP (new WHOIS) action for entity (contact and registrar) search requests. + * RDAP action for entity (contact and registrar) search requests. * - *

All commands and responses conform to the RDAP spec as defined in RFCs 7480 through 7485. + *

All commands and responses conform to the RDAP spec as defined in STD 95 and its RFCs. * *

The RDAP specification lumps contacts and registrars together and calls them "entities", which * is confusing for us, because "entity" means something else in SQL. But here, when we use the @@ -76,8 +76,6 @@ import java.util.Optional; * @see RFC 9083: JSON Responses for the Registration * Data Access Protocol (RDAP) */ -// TODO: This isn't required by the RDAP Technical Implementation Guide, and hence should be -// deleted, at least until it's actually required. @Action( service = GaeService.PUBAPI, path = "/rdap/entities", diff --git a/core/src/main/java/google/registry/rdap/RdapHelpAction.java b/core/src/main/java/google/registry/rdap/RdapHelpAction.java index 1d7849fe2..9b64bf875 100644 --- a/core/src/main/java/google/registry/rdap/RdapHelpAction.java +++ b/core/src/main/java/google/registry/rdap/RdapHelpAction.java @@ -28,7 +28,7 @@ import google.registry.request.auth.Auth; import jakarta.inject.Inject; import java.util.Optional; -/** RDAP (new WHOIS) action for help requests. */ +/** RDAP action for help requests. */ @Action( service = GaeService.PUBAPI, path = RdapHelpAction.PATH, diff --git a/core/src/main/java/google/registry/rdap/RdapIcannStandardInformation.java b/core/src/main/java/google/registry/rdap/RdapIcannStandardInformation.java index c1b3479b3..103a38237 100644 --- a/core/src/main/java/google/registry/rdap/RdapIcannStandardInformation.java +++ b/core/src/main/java/google/registry/rdap/RdapIcannStandardInformation.java @@ -22,26 +22,18 @@ import google.registry.rdap.RdapDataStructures.Remark; /** * This file contains boilerplate required by the ICANN RDAP Profile. * - * @see RDAP - * Operational Profile for gTLD Registries and Registrars + * @see + * RDAP Response Profile */ public class RdapIcannStandardInformation { - /** Required by ICANN RDAP Profile section 1.4.10. */ - private static final Notice CONFORMANCE_NOTICE = - Notice.builder() - .setDescription( - "This response conforms to the RDAP Operational Profile for gTLD Registries and" - + " Registrars version 1.0") - .build(); - - /** Required by ICANN RDAP Profile section 1.5.18. */ + /** Required by RDAP Response Profile section 2.6.3. */ private static final Notice DOMAIN_STATUS_CODES_NOTICE = Notice.builder() .setTitle("Status Codes") .setDescription( - "For more information on domain status codes, please visit" - + " https://icann.org/epp") + "For more information on domain status codes, please visit https://icann.org/epp") .addLink( Link.builder() .setRel("glossary") @@ -50,7 +42,7 @@ public class RdapIcannStandardInformation { .build()) .build(); - /** Required by ICANN RDAP Response Profile section 2.11. */ + /** Required by RDAP Response Profile section 2.10. */ private static final Notice INACCURACY_COMPLAINT_FORM_NOTICE = Notice.builder() .setTitle("RDDS Inaccuracy Complaint Form") @@ -79,28 +71,16 @@ public class RdapIcannStandardInformation { /** Boilerplate notices required by domain responses. */ static final ImmutableList DOMAIN_BOILERPLATE_NOTICES = ImmutableList.of( - CONFORMANCE_NOTICE, // RDAP Response Profile 2.6.3 DOMAIN_STATUS_CODES_NOTICE, - // RDAP Response Profile 2.11 + // RDAP Response Profile 2.10 INACCURACY_COMPLAINT_FORM_NOTICE); /** Boilerplate notice for when a domain is blocked by BSA. */ static final ImmutableList DOMAIN_BLOCKED_BY_BSA_BOILERPLATE_NOTICES = ImmutableList.of(DOMAIN_BLOCKED_BY_BSA_NOTICE); - /** Boilerplate remarks required by nameserver and entity responses. */ - static final ImmutableList NAMESERVER_AND_ENTITY_BOILERPLATE_NOTICES = - ImmutableList.of(CONFORMANCE_NOTICE); - - /** - * Required by ICANN RDAP Profile section 1.4.9, as corrected by Gustavo Lozano of ICANN. - * - *

Also mentioned in the RDAP Technical Implementation Guide 3.6. - * - * @see Questions about - * the ICANN RDAP Profile - */ + /** Required by the RDAP Technical Implementation Guide 3.6. */ static final Remark SUMMARY_DATA_REMARK = Remark.builder() .setTitle("Incomplete Data") @@ -109,14 +89,7 @@ public class RdapIcannStandardInformation { .setType(Remark.Type.OBJECT_TRUNCATED_UNEXPLAINABLE) .build(); - /** - * Required by ICANN RDAP Profile section 1.4.8, as corrected by Gustavo Lozano of ICANN. - * - *

Also mentioned in the RDAP Technical Implementation Guide 3.5. - * - * @see Questions about - * the ICANN RDAP Profile - */ + /** Required by the RDAP Technical Implementation Guide 3.5. */ static final Notice TRUNCATED_RESULT_SET_NOTICE = Notice.builder() .setTitle("Search Policy") @@ -148,7 +121,9 @@ public class RdapIcannStandardInformation { /** * Included when requester is not logged in as the owner of the contact being returned. * - *

Format required by ICANN RDAP Response Profile 15feb19 section 2.7.4.3. + *

>Note: if we were keeping this around, we'd want/need to implement the official RDAP redaction spec for contacts. + * We are getting rid of contacts in 2025 though so this should be unnecessary. */ static final Remark CONTACT_PERSONAL_DATA_HIDDEN_DATA_REMARK = Remark.builder() @@ -169,10 +144,9 @@ public class RdapIcannStandardInformation { /** * Included in ALL contact responses, even if the user is authorized. * - *

Format required by ICANN RDAP Response Profile 15feb19 section 2.7.5.3. - * - *

NOTE that unlike other redacted fields, there's no allowance to give the email to authorized - * users or allow for registrar consent. + *

>Note: if we were keeping this around, we'd want/need to implement the official RDAP redaction spec for contacts. + * We are getting rid of contacts in 2025 though so this should be unnecessary. */ static final Remark CONTACT_EMAIL_REDACTED_FOR_DOMAIN = Remark.builder() diff --git a/core/src/main/java/google/registry/rdap/RdapIpAction.java b/core/src/main/java/google/registry/rdap/RdapIpAction.java index a5f6c3826..36d468cb4 100644 --- a/core/src/main/java/google/registry/rdap/RdapIpAction.java +++ b/core/src/main/java/google/registry/rdap/RdapIpAction.java @@ -26,7 +26,7 @@ import google.registry.request.auth.Auth; import jakarta.inject.Inject; /** - * RDAP (new WHOIS) action for RDAP IP address requests. + * RDAP action for RDAP IP address requests. * *

This feature is not implemented because it's only necessary for address registries like * ARIN, not domain registries. diff --git a/core/src/main/java/google/registry/rdap/RdapJsonFormatter.java b/core/src/main/java/google/registry/rdap/RdapJsonFormatter.java index 192463827..be794e31d 100644 --- a/core/src/main/java/google/registry/rdap/RdapJsonFormatter.java +++ b/core/src/main/java/google/registry/rdap/RdapJsonFormatter.java @@ -221,7 +221,7 @@ public class RdapJsonFormatter { * Map of EPP event values to the RDAP equivalents. * *

Only has entries for optional events, either stated as optional in the RDAP Response Profile - * 15feb19, or not mentioned at all but thought to be useful anyway. + * section 2.3.2, or not mentioned at all but thought to be useful anyway. * *

Any required event should be added elsewhere, preferably without using HistoryEntries (so * that we don't need to load HistoryEntries for "summary" responses). @@ -292,8 +292,8 @@ public class RdapJsonFormatter { * Creates a JSON object for a {@link Domain}. * *

NOTE that domain searches aren't in the spec yet - they're in the RFC 9082 that describes - * the query format, but they aren't in the RDAP Technical Implementation Guide 15feb19, meaning - * we don't have to implement them yet and the RDAP Response Profile doesn't apply to them. + * the query format, but they aren't in the RDAP Technical Implementation Guide, meaning we don't + * have to implement them yet and the RDAP Response Profile doesn't apply to them. * *

We're implementing domain searches anyway, BUT we won't have the response for searches * conform to the RDAP Response Profile. @@ -307,9 +307,9 @@ public class RdapJsonFormatter { if (outputDataType != OutputDataType.FULL) { builder.remarksBuilder().add(RdapIcannStandardInformation.SUMMARY_DATA_REMARK); } - // RDAP Response Profile 15feb19 section 2.1 discusses the domain name. + // RDAP Response Profile section 2.1 discusses the domain name. builder.setLdhName(domain.getDomainName()); - // RDAP Response Profile 15feb19 section 2.2: + // RDAP Response Profile section 2.2: // The domain handle MUST be the ROID builder.setHandle(domain.getRepoId()); // If this is a summary (search result) - we'll return now. Since there's no requirement for @@ -317,9 +317,9 @@ public class RdapJsonFormatter { if (outputDataType == OutputDataType.SUMMARY) { return builder.build(); } - // RDAP Response Profile 15feb19 section 2.3.1: + // RDAP Response Profile section 2.3.1: // The domain object in the RDAP response MUST contain the following events: - // [registration, expiration, last update of RDAP database] + // [registration, expiration] builder .eventsBuilder() .add( @@ -333,14 +333,18 @@ public class RdapJsonFormatter { .setEventAction(EventAction.EXPIRATION) .setEventDate(domain.getRegistrationExpirationTime()) .build(), + // RDAP response profile section 1.5: + // The topmost object in the RDAP response MUST contain an event of "eventAction" type + // "last update of RDAP database" with a value equal to the timestamp when the RDAP + // database was last updated Event.builder() .setEventAction(EventAction.LAST_UPDATE_OF_RDAP_DATABASE) .setEventDate(getRequestTime()) .build()); - // RDAP Response Profile 15feb19 section 2.3.2 discusses optional events. We add some of those + // RDAP Response Profile section 2.3.2 discusses optional events. We add some of those // here. We also add a few others we find interesting. builder.eventsBuilder().addAll(makeOptionalEvents(domain)); - // RDAP Response Profile 15feb19 section 2.4.1: + // RDAP Response Profile section 2.4.1: // The domain object in the RDAP response MUST contain an entity with the Registrar role. // // See {@link createRdapRegistrarEntity} for details of section 2.4 conformance @@ -378,8 +382,6 @@ public class RdapJsonFormatter { // RDAP Response Profile 2.6.3, must have a notice about statuses. That is in {@link // RdapIcannStandardInformation#domainBoilerplateNotices} - // Kick off the database loads of the nameservers that we will need, so it can load - // asynchronously while we load and process the contacts. ImmutableSet loadedHosts = replicaTm() .transact( @@ -424,12 +426,12 @@ public class RdapJsonFormatter { } // Add the nameservers to the data; the load was kicked off above for efficiency. - // RDAP Response Profile 2.9: we MUST have the nameservers + // RDAP Response Profile 2.8: we MUST have the nameservers for (Host host : HOST_RESOURCE_ORDERING.immutableSortedCopy(loadedHosts)) { builder.nameserversBuilder().add(createRdapNameserver(host, OutputDataType.INTERNAL)); } - // RDAP Response Profile 2.10 - MUST contain a secureDns member including at least a + // RDAP Response Profile 2.9 - MUST contain a secureDns member including at least a // delegationSigned element. Other elements (e.g. dsData) MUST be included if the domain name is // signed and the elements are stored in the Registry // @@ -454,13 +456,13 @@ public class RdapJsonFormatter { builder.remarksBuilder().add(RdapIcannStandardInformation.SUMMARY_DATA_REMARK); } - // We need the ldhName: RDAP Response Profile 2.9.1, 4.1 + // We need the ldhName: RDAP Response Profile 2.8.1, 4.1 builder.setLdhName(host.getHostName()); // Handle is optional, but if given it MUST be the ROID. // We will set it always as it's important as a "self link" builder.setHandle(host.getRepoId()); - // Status is optional for internal Nameservers - RDAP Response Profile 2.9.2 + // Status is optional for internal Nameservers - RDAP Response Profile 2.8.2 // It isn't mentioned at all anywhere else. So we can just not put it at all? // // To be safe, we'll put it on the "FULL" version anyway @@ -492,7 +494,7 @@ public class RdapJsonFormatter { // For query responses - we MUST have all the ip addresses: RDAP Response Profile 4.2. // - // However, it is optional for internal responses: RDAP Response Profile 2.9.2 + // However, it is optional for internal responses: RDAP Response Profile 2.8.2 if (outputDataType != OutputDataType.INTERNAL) { for (InetAddress inetAddress : host.getInetAddresses()) { if (inetAddress instanceof Inet4Address) { @@ -510,7 +512,7 @@ public class RdapJsonFormatter { builder.entitiesBuilder().add(createRdapRegistrarEntity(registrar, OutputDataType.INTERNAL)); } if (outputDataType != OutputDataType.INTERNAL) { - // Rdap Response Profile 4.4, must have "last update of RDAP database" response. But this is + // Rdap Response Profile 1.5, must have "last update of RDAP database" response. But this is // only for direct query responses and not for internal objects. builder.setLastUpdateOfRdapDatabaseEvent( Event.builder() @@ -535,10 +537,7 @@ public class RdapJsonFormatter { Contact contact, Iterable roles, OutputDataType outputDataType) { RdapContactEntity.Builder contactBuilder = RdapContactEntity.builder(); - // RDAP Response Profile 2.7.1, 2.7.3 - we MUST have the contacts. 2.7.4 discusses censoring of - // fields we don't want to show (as opposed to not having contacts at all) because of GDPR etc. - // - // 2.8 allows for unredacted output for authorized people. + // RDAP Response Profile 2.7.1, 2.7.3 - we MUST have the contacts boolean isAuthorized = rdapAuthorization.isAuthorizedForRegistrar(contact.getCurrentSponsorRegistrarId()); @@ -578,7 +577,7 @@ public class RdapJsonFormatter { .add(RdapIcannStandardInformation.CONTACT_EMAIL_REDACTED_FOR_DOMAIN); if (outputDataType != OutputDataType.INTERNAL) { - // Rdap Response Profile 2.7.6 must have "last update of RDAP database" response. But this is + // Rdap Response Profile 1.5 must have "last update of RDAP database" response. But this is // only for direct query responses and not for internal objects. I'm not sure why it's in that // section at all... contactBuilder.setLastUpdateOfRdapDatabaseEvent( @@ -656,8 +655,8 @@ public class RdapJsonFormatter { * Creates a JSON object for a {@link Registrar}. * *

This object can be INTERNAL to the Domain and Nameserver responses, with requirements - * discussed in the RDAP Response Profile 15feb19 sections 2.4 (internal to Domain) and 4.3 - * (internal to Namesever) + * discussed in the RDAP Response Profile sections 2.4 (internal to Domain) and 4.3 (internal to + * Namesever) * * @param registrar the registrar object from which the RDAP response * @param outputDataType whether to generate FULL, SUMMARY, or INTERNAL data. @@ -755,7 +754,6 @@ public class RdapJsonFormatter { // // Write the minimum, meaning only ABUSE for INTERNAL registrars, nothing for SUMMARY and // everything for FULL. - // if (outputDataType != OutputDataType.SUMMARY) { ImmutableList registrarContacts = registrar.getContactsFromReplica().stream() @@ -776,7 +774,7 @@ public class RdapJsonFormatter { builder.entitiesBuilder().addAll(registrarContacts); } - // Rdap Response Profile 3.3, must have "last update of RDAP database" response. But this is + // Rdap Response Profile 1.5, must have "last update of RDAP database" response. But this is // only for direct query responses and not for internal objects. if (outputDataType != OutputDataType.INTERNAL) { builder.setLastUpdateOfRdapDatabaseEvent( @@ -934,8 +932,8 @@ public class RdapJsonFormatter { * Creates the list of optional events to list in domain, nameserver, or contact replies. * *

Only has entries for optional events that won't be shown in "SUMMARY" versions of these - * objects. These are either stated as optional in the RDAP Response Profile 15feb19, or not - * mentioned at all but thought to be useful anyway. + * objects. These are either stated as optional in the RDAP Response Profile, or not mentioned at + * all but thought to be useful anyway. * *

Any required event should be added elsewhere, preferably without using HistoryEntries (so * that we don't need to load HistoryEntries for "summary" responses). @@ -974,7 +972,7 @@ public class RdapJsonFormatter { lastChangeTime = modificationTime; } } - // RDAP Response Profile 15feb19 section 2.3.2.2: + // RDAP Response Profile section 2.3.2.2: // The event of eventAction type last changed MUST be omitted if the domain name has not been // updated since it was created if (lastChangeTime.isAfter(creationTime)) { @@ -991,7 +989,7 @@ public class RdapJsonFormatter { /** * Creates a vCard address entry: array of strings specifying the components of the address. * - *

Rdap Response Profile 3.1.1: MUST contain the following fields: Street, City, Country Rdap + *

RDAP Response Profile 3.1.1: MUST contain the following fields: Street, City, Country Rdap * Response Profile 3.1.2: optional fields: State/Province, Postal Code, Fax Number * * @see RFC 7095: jCard: The JSON Format for diff --git a/core/src/main/java/google/registry/rdap/RdapNameserverAction.java b/core/src/main/java/google/registry/rdap/RdapNameserverAction.java index d61da7aac..82608a0dd 100644 --- a/core/src/main/java/google/registry/rdap/RdapNameserverAction.java +++ b/core/src/main/java/google/registry/rdap/RdapNameserverAction.java @@ -33,7 +33,7 @@ import google.registry.request.auth.Auth; import jakarta.inject.Inject; import java.util.Optional; -/** RDAP (new WHOIS) action for nameserver requests. */ +/** RDAP action for nameserver requests. */ @Action( service = GaeService.PUBAPI, path = "/rdap/nameserver/", @@ -48,7 +48,7 @@ public class RdapNameserverAction extends RdapActionBase { @Override public RdapNameserver getJsonObjectForResource(String pathSearchString, boolean isHeadRequest) { - // RDAP Technical Implementation Guide 2.2.1 - we must support A-label (Punycode) and U-label + // RDAP Technical Implementation Guide 2.1.1 - we must support A-label (Punycode) and U-label // (Unicode) formats. canonicalizeName will transform Unicode to Punycode so we support both. pathSearchString = canonicalizeName(pathSearchString); // The RDAP syntax is /rdap/nameserver/ns1.mydomain.com. diff --git a/core/src/main/java/google/registry/rdap/RdapNameserverSearchAction.java b/core/src/main/java/google/registry/rdap/RdapNameserverSearchAction.java index 1a98a4628..c7fef6248 100644 --- a/core/src/main/java/google/registry/rdap/RdapNameserverSearchAction.java +++ b/core/src/main/java/google/registry/rdap/RdapNameserverSearchAction.java @@ -47,9 +47,9 @@ import java.util.List; import java.util.Optional; /** - * RDAP (new WHOIS) action for nameserver search requests. + * RDAP action for nameserver search requests. * - *

All commands and responses conform to the RDAP spec as defined in RFCs 7480 through 7485. + *

All commands and responses conform to the RDAP spec as defined in STD 95 and its RFCs. * * @see RFC 9082: Registration Data Access Protocol * (RDAP) Query Format diff --git a/core/src/main/java/google/registry/rdap/RdapObjectClasses.java b/core/src/main/java/google/registry/rdap/RdapObjectClasses.java index 1a54e0fb1..1328f2457 100644 --- a/core/src/main/java/google/registry/rdap/RdapObjectClasses.java +++ b/core/src/main/java/google/registry/rdap/RdapObjectClasses.java @@ -45,11 +45,7 @@ import java.util.Optional; /** Object Classes defined in RFC 9083 section 5. */ final class RdapObjectClasses { - /** - * Temporary implementation of VCards. - * - *

Will create a better implementation soon. - */ + /** Rough implementation of VCards. */ @RestrictJsonNames({}) @AutoValue public abstract static class Vcard implements Jsonable { @@ -140,8 +136,8 @@ final class RdapObjectClasses { public enum BoilerplateType { DOMAIN(RdapIcannStandardInformation.DOMAIN_BOILERPLATE_NOTICES), DOMAIN_BLOCKED_BY_BSA(RdapIcannStandardInformation.DOMAIN_BLOCKED_BY_BSA_BOILERPLATE_NOTICES), - NAMESERVER(RdapIcannStandardInformation.NAMESERVER_AND_ENTITY_BOILERPLATE_NOTICES), - ENTITY(RdapIcannStandardInformation.NAMESERVER_AND_ENTITY_BOILERPLATE_NOTICES), + NAMESERVER(ImmutableList.of()), + ENTITY(ImmutableList.of()), OTHER(ImmutableList.of()); @SuppressWarnings("ImmutableEnumChecker") // immutable lists are, in fact, immutable @@ -173,8 +169,8 @@ final class RdapObjectClasses { * The Top Level JSON reply, Adds the required top-level boilerplate to a ReplyPayloadBase. * *

RFC 9083 specifies that the top-level object should include an entry indicating the - * conformance level. ICANN RDAP spec for 15feb19 mandates several additional entries, in sections - * 2.6.3, 2.11 of the Response Profile and 3.3, 3.5, of the Technical Implementation Guide. + * conformance level. The RDAP spec mandates several additional entries, in sections 2.6.3, 2.10 + * of the Response Profile and 3.3, 3.5, of the Technical Implementation Guide. */ @AutoValue @RestrictJsonNames({}) @@ -353,7 +349,7 @@ final class RdapObjectClasses { * *

Takes care of the name and unicode field. * - *

See RDAP Response Profile 15feb19 sections 2.1 and 4.1. + *

See RDAP Response Profile sections 2.1 and 4.1. * *

Note the ldhName field is only required for non-IDN names or IDN names when the query was an * A-label. It is optional for IDN names when the query was a U-label. Because we don't want to @@ -471,7 +467,7 @@ final class RdapObjectClasses { } /** - * an integer representing the signature lifetime in seconds to be used when creating the RRSIG + * An integer representing the signature lifetime in seconds to be used when creating the RRSIG * DS record in the parent zone [RFC5910]. * *

Note that although it isn't given as optional in RFC 9083, in RFC5910 it's mentioned as diff --git a/core/src/main/java/google/registry/rdap/RdapSearchActionBase.java b/core/src/main/java/google/registry/rdap/RdapSearchActionBase.java index 2daa836c8..6d05ee9cb 100644 --- a/core/src/main/java/google/registry/rdap/RdapSearchActionBase.java +++ b/core/src/main/java/google/registry/rdap/RdapSearchActionBase.java @@ -44,7 +44,7 @@ import java.util.Objects; import java.util.Optional; /** - * Base RDAP (new WHOIS) action for domain, nameserver and entity search requests. + * Base RDAP action for domain, nameserver and entity search requests. * * @see RFC 9082: Registration Data Access Protocol * (RDAP) Query Format @@ -155,7 +155,6 @@ public abstract class RdapSearchActionBase extends RdapActionBase { */ RdapResultSet getMatchingResources( CriteriaQueryBuilder builder, boolean checkForVisibility, int querySizeLimit) { - replicaTm().assertInTransaction(); Optional desiredRegistrar = getDesiredRegistrar(); if (desiredRegistrar.isPresent()) { builder = diff --git a/core/src/main/java/google/registry/rdap/RdapSearchPattern.java b/core/src/main/java/google/registry/rdap/RdapSearchPattern.java index d96b92004..1b25292e3 100644 --- a/core/src/main/java/google/registry/rdap/RdapSearchPattern.java +++ b/core/src/main/java/google/registry/rdap/RdapSearchPattern.java @@ -39,8 +39,8 @@ public final class RdapSearchPattern { /** * Pattern for allowed LDH searches. * - *

Based on RFC 9082 4.1. Must contains only alphanumeric plus dots and hyphens. A single - * whildcard asterix is allowed - but if exists must be the last character of a domain name label + *

Based on RFC 9082 4.1. Must contain only alphanumeric plus dots and hyphens. A single + * wildcard asterix is allowed - but if exists must be the last character of a domain name label * (so exam* and exam*.com are allowed, but exam*le.com isn't allowd) * *

The prefix is in group(1), and the suffix without the dot (if it exists) is in group(4). If @@ -123,7 +123,7 @@ public final class RdapSearchPattern { * Creates a SearchPattern using the provided domain search pattern in LDH format. * *

The domain search pattern can have a single wildcard asterix that can match 0 or more - * charecters. If such an asterix exists - it must be at the end of a domain label. + * characters. If such an asterix exists - it must be at the end of a domain label. * * @param searchQuery the string containing the partial match pattern * @throws UnprocessableEntityException if {@code pattern} does not meet the requirements of RFC @@ -150,7 +150,7 @@ public final class RdapSearchPattern { * Creates a SearchPattern using the provided domain search pattern in LDH or Unicode format. * *

The domain search pattern can have a single wildcard asterix that can match 0 or more - * charecters. If such an asterix exists - it must be at the end of a domain label. + * characters. If such an asterix exists - it must be at the end of a domain label. * *

In theory, according to RFC 9082 4.1 - we should make some checks about partial matching in * unicode queries. We don't, but we might want to just disable partial matches for unicode inputs diff --git a/core/src/main/java/google/registry/rdap/RdapUtils.java b/core/src/main/java/google/registry/rdap/RdapUtils.java index d925d4f9c..6ceca11e1 100644 --- a/core/src/main/java/google/registry/rdap/RdapUtils.java +++ b/core/src/main/java/google/registry/rdap/RdapUtils.java @@ -37,7 +37,7 @@ public final class RdapUtils { * *

Used for RDAP Technical Implementation Guide 2.4.2 - search of registrar by the fn element. * - *

For convenience, we use case insensitive search. + *

For convenience, we use case-insensitive search. */ static Optional getRegistrarByName(String registrarName) { return Streams.stream(Registrar.loadAllCached()) diff --git a/core/src/test/java/google/registry/rdap/RdapActionBaseTestCase.java b/core/src/test/java/google/registry/rdap/RdapActionBaseTestCase.java index a7232101b..05387ba4a 100644 --- a/core/src/test/java/google/registry/rdap/RdapActionBaseTestCase.java +++ b/core/src/test/java/google/registry/rdap/RdapActionBaseTestCase.java @@ -205,16 +205,6 @@ have failed to comply with these terms.", } JsonArray notices = jsonObject.getAsJsonArray("notices"); notices.add(createTosNotice()); - notices.add( - JsonParser.parseString( -""" -{ - "description": [ - "This response conforms to the RDAP Operational Profile for gTLD Registries and Registrars \ -version 1.0" - ] -} -""")); return jsonObject; } diff --git a/core/src/test/java/google/registry/rdap/RdapDataStructuresTest.java b/core/src/test/java/google/registry/rdap/RdapDataStructuresTest.java index 6d742dcb2..068e462bb 100644 --- a/core/src/test/java/google/registry/rdap/RdapDataStructuresTest.java +++ b/core/src/test/java/google/registry/rdap/RdapDataStructuresTest.java @@ -43,12 +43,13 @@ final class RdapDataStructuresTest { @Test void testRdapConformance() { assertThat(RdapConformance.INSTANCE.toJson()) - .isEqualTo(createJson( - "[", - " 'rdap_level_0',", - " 'icann_rdap_response_profile_0',", - " 'icann_rdap_technical_implementation_guide_0'", - "]")); + .isEqualTo( + createJson( + "[", + " 'rdap_level_0',", + " 'icann_rdap_response_profile_1',", + " 'icann_rdap_technical_implementation_guide_1'", + "]")); } @Test diff --git a/core/src/test/resources/google/registry/rdap/rdap_associated_contact.json b/core/src/test/resources/google/registry/rdap/rdap_associated_contact.json index b9e183650..fe62d141e 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_associated_contact.json +++ b/core/src/test/resources/google/registry/rdap/rdap_associated_contact.json @@ -1,8 +1,8 @@ { "rdapConformance": [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "objectClassName": "entity", "handle": "%CONTACT_HANDLE_1%", diff --git a/core/src/test/resources/google/registry/rdap/rdap_associated_contact_no_personal_data.json b/core/src/test/resources/google/registry/rdap/rdap_associated_contact_no_personal_data.json index e7fc98921..bd6ba22b4 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_associated_contact_no_personal_data.json +++ b/core/src/test/resources/google/registry/rdap/rdap_associated_contact_no_personal_data.json @@ -1,8 +1,8 @@ { "rdapConformance": [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "objectClassName" : "entity", "handle" : "", diff --git a/core/src/test/resources/google/registry/rdap/rdap_contact.json b/core/src/test/resources/google/registry/rdap/rdap_contact.json index 9c0d92069..4979387d6 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_contact.json +++ b/core/src/test/resources/google/registry/rdap/rdap_contact.json @@ -1,8 +1,8 @@ { "rdapConformance": [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "objectClassName" : "entity", "handle" : "%CONTACT_HANDLE_1%", diff --git a/core/src/test/resources/google/registry/rdap/rdap_contact_deleted.json b/core/src/test/resources/google/registry/rdap/rdap_contact_deleted.json index e907fc6b0..f758aa3a1 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_contact_deleted.json +++ b/core/src/test/resources/google/registry/rdap/rdap_contact_deleted.json @@ -1,8 +1,8 @@ { "rdapConformance": [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "objectClassName" : "entity", "handle" : "%CONTACT_HANDLE_1%", diff --git a/core/src/test/resources/google/registry/rdap/rdap_contact_no_personal_data_with_remark.json b/core/src/test/resources/google/registry/rdap/rdap_contact_no_personal_data_with_remark.json index c40a046e3..d7dfbe0a4 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_contact_no_personal_data_with_remark.json +++ b/core/src/test/resources/google/registry/rdap/rdap_contact_no_personal_data_with_remark.json @@ -1,8 +1,8 @@ { "rdapConformance": [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "objectClassName" : "entity", "handle" : "", diff --git a/core/src/test/resources/google/registry/rdap/rdap_domain.json b/core/src/test/resources/google/registry/rdap/rdap_domain.json index d87dcef4e..11b0ae055 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_domain.json +++ b/core/src/test/resources/google/registry/rdap/rdap_domain.json @@ -4,8 +4,8 @@ "handle": "%DOMAIN_HANDLE_1%", "rdapConformance": [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "status": [ "client delete prohibited", diff --git a/core/src/test/resources/google/registry/rdap/rdap_domain_add_grace_period.json b/core/src/test/resources/google/registry/rdap/rdap_domain_add_grace_period.json index 7e5fc2985..56b5448f9 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_domain_add_grace_period.json +++ b/core/src/test/resources/google/registry/rdap/rdap_domain_add_grace_period.json @@ -1,8 +1,8 @@ { "rdapConformance": [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "objectClassName": "domain", "entities": [ diff --git a/core/src/test/resources/google/registry/rdap/rdap_domain_auto_renew_grace_period.json b/core/src/test/resources/google/registry/rdap/rdap_domain_auto_renew_grace_period.json index b40eadaf3..3275cba95 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_domain_auto_renew_grace_period.json +++ b/core/src/test/resources/google/registry/rdap/rdap_domain_auto_renew_grace_period.json @@ -1,8 +1,8 @@ { "rdapConformance": [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "objectClassName": "domain", "entities": [ diff --git a/core/src/test/resources/google/registry/rdap/rdap_domain_cat2.json b/core/src/test/resources/google/registry/rdap/rdap_domain_cat2.json index ef36ea7d8..b763e54a2 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_domain_cat2.json +++ b/core/src/test/resources/google/registry/rdap/rdap_domain_cat2.json @@ -1,8 +1,8 @@ { "rdapConformance": [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "objectClassName": "domain", "handle": "%DOMAIN_HANDLE_1%", diff --git a/core/src/test/resources/google/registry/rdap/rdap_domain_deleted.json b/core/src/test/resources/google/registry/rdap/rdap_domain_deleted.json index 3aee16abe..0a7cbdc36 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_domain_deleted.json +++ b/core/src/test/resources/google/registry/rdap/rdap_domain_deleted.json @@ -1,8 +1,8 @@ { "rdapConformance": [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "objectClassName": "domain", "ldhName": "%DOMAIN_PUNYCODE_NAME_1%", diff --git a/core/src/test/resources/google/registry/rdap/rdap_domain_explicit_renew_grace_period.json b/core/src/test/resources/google/registry/rdap/rdap_domain_explicit_renew_grace_period.json index a05832925..f6fa74ac0 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_domain_explicit_renew_grace_period.json +++ b/core/src/test/resources/google/registry/rdap/rdap_domain_explicit_renew_grace_period.json @@ -1,8 +1,8 @@ { "rdapConformance": [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "objectClassName": "domain", "entities": [ diff --git a/core/src/test/resources/google/registry/rdap/rdap_domain_no_contacts_exist_with_remark.json b/core/src/test/resources/google/registry/rdap/rdap_domain_no_contacts_exist_with_remark.json index 0fdbba138..edcde4004 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_domain_no_contacts_exist_with_remark.json +++ b/core/src/test/resources/google/registry/rdap/rdap_domain_no_contacts_exist_with_remark.json @@ -1,8 +1,8 @@ { "rdapConformance": [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "objectClassName": "domain", "handle": "%DOMAIN_HANDLE_1%", diff --git a/core/src/test/resources/google/registry/rdap/rdap_domain_no_registrant_with_remark.json b/core/src/test/resources/google/registry/rdap/rdap_domain_no_registrant_with_remark.json index 77a7c91ac..fc71edf5b 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_domain_no_registrant_with_remark.json +++ b/core/src/test/resources/google/registry/rdap/rdap_domain_no_registrant_with_remark.json @@ -1,8 +1,8 @@ { "rdapConformance": [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "objectClassName": "domain", "handle": "%DOMAIN_HANDLE_1%", diff --git a/core/src/test/resources/google/registry/rdap/rdap_domain_pending_delete_redemption_grace_period.json b/core/src/test/resources/google/registry/rdap/rdap_domain_pending_delete_redemption_grace_period.json index a0ba8ebba..465e2ad07 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_domain_pending_delete_redemption_grace_period.json +++ b/core/src/test/resources/google/registry/rdap/rdap_domain_pending_delete_redemption_grace_period.json @@ -1,8 +1,8 @@ { "rdapConformance": [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "objectClassName": "domain", "entities": [ diff --git a/core/src/test/resources/google/registry/rdap/rdap_domain_redacted_contacts_with_remark.json b/core/src/test/resources/google/registry/rdap/rdap_domain_redacted_contacts_with_remark.json index 7f5effd65..a6090cc75 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_domain_redacted_contacts_with_remark.json +++ b/core/src/test/resources/google/registry/rdap/rdap_domain_redacted_contacts_with_remark.json @@ -1,8 +1,8 @@ { "rdapConformance": [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "objectClassName": "domain", "handle": "%DOMAIN_HANDLE_1%", diff --git a/core/src/test/resources/google/registry/rdap/rdap_domain_transfer_grace_period.json b/core/src/test/resources/google/registry/rdap/rdap_domain_transfer_grace_period.json index 3fa17a91b..c4b8ca19e 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_domain_transfer_grace_period.json +++ b/core/src/test/resources/google/registry/rdap/rdap_domain_transfer_grace_period.json @@ -1,8 +1,8 @@ { "rdapConformance": [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "objectClassName": "domain", "entities": [ diff --git a/core/src/test/resources/google/registry/rdap/rdap_domain_unicode.json b/core/src/test/resources/google/registry/rdap/rdap_domain_unicode.json index 942665b00..ccdb07292 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_domain_unicode.json +++ b/core/src/test/resources/google/registry/rdap/rdap_domain_unicode.json @@ -5,8 +5,8 @@ "handle": "%DOMAIN_HANDLE_1%", "rdapConformance": [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "status": [ "client delete prohibited", diff --git a/core/src/test/resources/google/registry/rdap/rdap_domain_unicode_no_contacts_with_remark.json b/core/src/test/resources/google/registry/rdap/rdap_domain_unicode_no_contacts_with_remark.json index 9e741aeca..7fbca66eb 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_domain_unicode_no_contacts_with_remark.json +++ b/core/src/test/resources/google/registry/rdap/rdap_domain_unicode_no_contacts_with_remark.json @@ -1,8 +1,8 @@ { "rdapConformance": [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "objectClassName": "domain", "handle": "%DOMAIN_HANDLE_1%", diff --git a/core/src/test/resources/google/registry/rdap/rdap_domains_four_truncated.json b/core/src/test/resources/google/registry/rdap/rdap_domains_four_truncated.json index a01817b3d..8fece2403 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_domains_four_truncated.json +++ b/core/src/test/resources/google/registry/rdap/rdap_domains_four_truncated.json @@ -83,8 +83,8 @@ ], "rdapConformance": [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "notices" : [ @@ -140,12 +140,6 @@ } ] }, - { - "description" : - [ - "This response conforms to the RDAP Operational Profile for gTLD Registries and Registrars version 1.0" - ] - }, { "title" : "Status Codes", "description" : diff --git a/core/src/test/resources/google/registry/rdap/rdap_domains_four_with_one_unicode.json b/core/src/test/resources/google/registry/rdap/rdap_domains_four_with_one_unicode.json index d8c9d8575..d04e631b5 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_domains_four_with_one_unicode.json +++ b/core/src/test/resources/google/registry/rdap/rdap_domains_four_with_one_unicode.json @@ -84,8 +84,8 @@ ], "rdapConformance": [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "notices" : [ @@ -120,12 +120,6 @@ } ] }, - { - "description" : - [ - "This response conforms to the RDAP Operational Profile for gTLD Registries and Registrars version 1.0" - ] - }, { "title" : "Status Codes", "description" : diff --git a/core/src/test/resources/google/registry/rdap/rdap_domains_four_with_one_unicode_truncated.json b/core/src/test/resources/google/registry/rdap/rdap_domains_four_with_one_unicode_truncated.json index 6a12e574f..9b69212d7 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_domains_four_with_one_unicode_truncated.json +++ b/core/src/test/resources/google/registry/rdap/rdap_domains_four_with_one_unicode_truncated.json @@ -84,8 +84,8 @@ ], "rdapConformance": [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "notices" : [ @@ -141,12 +141,6 @@ } ] }, - { - "description" : - [ - "This response conforms to the RDAP Operational Profile for gTLD Registries and Registrars version 1.0" - ] - }, { "title" : "Status Codes", "description" : diff --git a/core/src/test/resources/google/registry/rdap/rdap_domains_two.json b/core/src/test/resources/google/registry/rdap/rdap_domains_two.json index e182ff7ff..414eaa6cc 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_domains_two.json +++ b/core/src/test/resources/google/registry/rdap/rdap_domains_two.json @@ -1,8 +1,8 @@ { "rdapConformance": [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "domainSearchResults": [ { @@ -82,9 +82,6 @@ } ] }, - { - "description": ["This response conforms to the RDAP Operational Profile for gTLD Registries and Registrars version 1.0"] - }, { "title": "Status Codes", "description": ["For more information on domain status codes, please visit https://icann.org/epp"], diff --git a/core/src/test/resources/google/registry/rdap/rdap_error.json b/core/src/test/resources/google/registry/rdap/rdap_error.json index 3ae825b10..77fd1ff76 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_error.json +++ b/core/src/test/resources/google/registry/rdap/rdap_error.json @@ -7,8 +7,8 @@ ], "rdapConformance": [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "notices": [ { diff --git a/core/src/test/resources/google/registry/rdap/rdap_help_index.json b/core/src/test/resources/google/registry/rdap/rdap_help_index.json index f4da0fbbe..5fbac5ebf 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_help_index.json +++ b/core/src/test/resources/google/registry/rdap/rdap_help_index.json @@ -1,8 +1,8 @@ { "rdapConformance" : [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "notices" : [ diff --git a/core/src/test/resources/google/registry/rdap/rdap_help_tos.json b/core/src/test/resources/google/registry/rdap/rdap_help_tos.json index 24f90b187..1e772821b 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_help_tos.json +++ b/core/src/test/resources/google/registry/rdap/rdap_help_tos.json @@ -1,8 +1,8 @@ { "rdapConformance" : [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "notices" : [ diff --git a/core/src/test/resources/google/registry/rdap/rdap_host.json b/core/src/test/resources/google/registry/rdap/rdap_host.json index 6e1bd22ed..4334bf651 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_host.json +++ b/core/src/test/resources/google/registry/rdap/rdap_host.json @@ -1,8 +1,8 @@ { "rdapConformance": [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "objectClassName": "nameserver", "handle": "%NAMESERVER_HANDLE_1%", diff --git a/core/src/test/resources/google/registry/rdap/rdap_host_external.json b/core/src/test/resources/google/registry/rdap/rdap_host_external.json index 1b49074c4..f34cabead 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_host_external.json +++ b/core/src/test/resources/google/registry/rdap/rdap_host_external.json @@ -1,8 +1,8 @@ { "rdapConformance": [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "status": [ "active" diff --git a/core/src/test/resources/google/registry/rdap/rdap_host_linked.json b/core/src/test/resources/google/registry/rdap/rdap_host_linked.json index 14bc390c6..9e7e6d2db 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_host_linked.json +++ b/core/src/test/resources/google/registry/rdap/rdap_host_linked.json @@ -1,8 +1,8 @@ { "rdapConformance": [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "objectClassName": "nameserver", "handle": "%NAMESERVER_HANDLE_1%", diff --git a/core/src/test/resources/google/registry/rdap/rdap_host_unicode.json b/core/src/test/resources/google/registry/rdap/rdap_host_unicode.json index 849f7484c..cdf04f8d5 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_host_unicode.json +++ b/core/src/test/resources/google/registry/rdap/rdap_host_unicode.json @@ -1,8 +1,8 @@ { "rdapConformance": [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "objectClassName": "nameserver", "handle": "%NAMESERVER_HANDLE_1%", diff --git a/core/src/test/resources/google/registry/rdap/rdap_incomplete_domain_result_set.json b/core/src/test/resources/google/registry/rdap/rdap_incomplete_domain_result_set.json index ec60c53a0..a85611f13 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_incomplete_domain_result_set.json +++ b/core/src/test/resources/google/registry/rdap/rdap_incomplete_domain_result_set.json @@ -112,12 +112,6 @@ ], "title":"RDAP Terms of Service" }, - { - "description": - [ - "This response conforms to the RDAP Operational Profile for gTLD Registries and Registrars version 1.0" - ] - }, { "description": [ @@ -150,7 +144,7 @@ ], "rdapConformance": [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ] } diff --git a/core/src/test/resources/google/registry/rdap/rdap_incomplete_domains.json b/core/src/test/resources/google/registry/rdap/rdap_incomplete_domains.json index f3f1fa773..6aaafa76d 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_incomplete_domains.json +++ b/core/src/test/resources/google/registry/rdap/rdap_incomplete_domains.json @@ -82,11 +82,6 @@ } ] }, - { - "description":[ - "This response conforms to the RDAP Operational Profile for gTLD Registries and Registrars version 1.0" - ] - }, { "title":"Status Codes", "description":[ @@ -116,7 +111,7 @@ ], "rdapConformance":[ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ] } diff --git a/core/src/test/resources/google/registry/rdap/rdap_multiple_contacts.json b/core/src/test/resources/google/registry/rdap/rdap_multiple_contacts.json index e9d884670..2ede59d32 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_multiple_contacts.json +++ b/core/src/test/resources/google/registry/rdap/rdap_multiple_contacts.json @@ -101,8 +101,8 @@ ], "rdapConformance": [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "notices" : [ @@ -134,12 +134,6 @@ "type": "text/html" } ] - }, - { - "description" : - [ - "This response conforms to the RDAP Operational Profile for gTLD Registries and Registrars version 1.0" - ] } ] } diff --git a/core/src/test/resources/google/registry/rdap/rdap_multiple_contacts2.json b/core/src/test/resources/google/registry/rdap/rdap_multiple_contacts2.json index 542efc98d..8ed87eb3c 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_multiple_contacts2.json +++ b/core/src/test/resources/google/registry/rdap/rdap_multiple_contacts2.json @@ -118,8 +118,8 @@ ], "rdapConformance": [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "notices" : [ @@ -153,12 +153,6 @@ "value": "https://example.tld/rdap/entities" } ] - }, - { - "description" : - [ - "This response conforms to the RDAP Operational Profile for gTLD Registries and Registrars version 1.0" - ] } ] } diff --git a/core/src/test/resources/google/registry/rdap/rdap_multiple_hosts.json b/core/src/test/resources/google/registry/rdap/rdap_multiple_hosts.json index b5f4945c9..5d8259a7b 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_multiple_hosts.json +++ b/core/src/test/resources/google/registry/rdap/rdap_multiple_hosts.json @@ -71,8 +71,8 @@ ], "rdapConformance" : [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "notices" : [ @@ -106,12 +106,6 @@ "value": "https://example.tld/rdap/nameservers" } ] - }, - { - "description" : - [ - "This response conforms to the RDAP Operational Profile for gTLD Registries and Registrars version 1.0" - ] } ] } diff --git a/core/src/test/resources/google/registry/rdap/rdap_nontruncated_contacts.json b/core/src/test/resources/google/registry/rdap/rdap_nontruncated_contacts.json index 025272aab..346b67e88 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_nontruncated_contacts.json +++ b/core/src/test/resources/google/registry/rdap/rdap_nontruncated_contacts.json @@ -232,8 +232,8 @@ ], "rdapConformance": [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "notices" : [ @@ -267,12 +267,6 @@ "value": "https://example.tld/rdap/entities" } ] - }, - { - "description" : - [ - "This response conforms to the RDAP Operational Profile for gTLD Registries and Registrars version 1.0" - ] } ] } diff --git a/core/src/test/resources/google/registry/rdap/rdap_nontruncated_domains.json b/core/src/test/resources/google/registry/rdap/rdap_nontruncated_domains.json index 098beae6b..aa87f4cf2 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_nontruncated_domains.json +++ b/core/src/test/resources/google/registry/rdap/rdap_nontruncated_domains.json @@ -91,8 +91,8 @@ ], "rdapConformance": [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "notices" : [ @@ -127,12 +127,6 @@ } ] }, - { - "description" : - [ - "This response conforms to the RDAP Operational Profile for gTLD Registries and Registrars version 1.0" - ] - }, { "title" : "Status Codes", "description" : diff --git a/core/src/test/resources/google/registry/rdap/rdap_nontruncated_hosts.json b/core/src/test/resources/google/registry/rdap/rdap_nontruncated_hosts.json index cbd367944..f2010f671 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_nontruncated_hosts.json +++ b/core/src/test/resources/google/registry/rdap/rdap_nontruncated_hosts.json @@ -136,8 +136,8 @@ ], "rdapConformance" : [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "notices" : [ @@ -171,12 +171,6 @@ "value": "https://example.tld/rdap/nameservers" } ] - }, - { - "description" : - [ - "This response conforms to the RDAP Operational Profile for gTLD Registries and Registrars version 1.0" - ] } ] } diff --git a/core/src/test/resources/google/registry/rdap/rdap_nontruncated_registrars.json b/core/src/test/resources/google/registry/rdap/rdap_nontruncated_registrars.json index 7b7702ba7..39aa2aef7 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_nontruncated_registrars.json +++ b/core/src/test/resources/google/registry/rdap/rdap_nontruncated_registrars.json @@ -260,8 +260,8 @@ ], "rdapConformance": [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "notices": [ @@ -295,12 +295,6 @@ "value": "https://example.tld/rdap/entities" } ] - }, - { - "description": - [ - "This response conforms to the RDAP Operational Profile for gTLD Registries and Registrars version 1.0" - ] } ] } diff --git a/core/src/test/resources/google/registry/rdap/rdap_registrar.json b/core/src/test/resources/google/registry/rdap/rdap_registrar.json index 7b76e5cd9..33dc8701c 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_registrar.json +++ b/core/src/test/resources/google/registry/rdap/rdap_registrar.json @@ -1,8 +1,8 @@ { "rdapConformance": [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "objectClassName" : "entity", "handle" : "%REGISTRAR_HANDLE_1%", diff --git a/core/src/test/resources/google/registry/rdap/rdap_registrar_test.json b/core/src/test/resources/google/registry/rdap/rdap_registrar_test.json index e8a9803c0..0fbfccf0e 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_registrar_test.json +++ b/core/src/test/resources/google/registry/rdap/rdap_registrar_test.json @@ -1,8 +1,8 @@ { "rdapConformance": [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "objectClassName" : "entity", "handle" : "%REGISTRAR_HANDLE_1%", diff --git a/core/src/test/resources/google/registry/rdap/rdap_truncated_contacts.json b/core/src/test/resources/google/registry/rdap/rdap_truncated_contacts.json index d22b71ce9..1d282e669 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_truncated_contacts.json +++ b/core/src/test/resources/google/registry/rdap/rdap_truncated_contacts.json @@ -232,8 +232,8 @@ ], "rdapConformance": [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "notices": [ @@ -288,12 +288,6 @@ "value": "https://example.tld/rdap/entities" } ] - }, - { - "description": - [ - "This response conforms to the RDAP Operational Profile for gTLD Registries and Registrars version 1.0" - ] } ] } diff --git a/core/src/test/resources/google/registry/rdap/rdap_truncated_hosts.json b/core/src/test/resources/google/registry/rdap/rdap_truncated_hosts.json index 35c9bcf07..17145b112 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_truncated_hosts.json +++ b/core/src/test/resources/google/registry/rdap/rdap_truncated_hosts.json @@ -136,8 +136,8 @@ ], "rdapConformance" : [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "notices" : [ @@ -192,12 +192,6 @@ "value": "https://example.tld/rdap/nameservers" } ] - }, - { - "description" : - [ - "This response conforms to the RDAP Operational Profile for gTLD Registries and Registrars version 1.0" - ] } ] } diff --git a/core/src/test/resources/google/registry/rdap/rdap_truncated_mixed_entities.json b/core/src/test/resources/google/registry/rdap/rdap_truncated_mixed_entities.json index a683b2e30..8db451f98 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_truncated_mixed_entities.json +++ b/core/src/test/resources/google/registry/rdap/rdap_truncated_mixed_entities.json @@ -239,8 +239,8 @@ ], "rdapConformance": [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "notices" : [ @@ -295,12 +295,6 @@ "value": "https://example.tld/rdap/entities" } ] - }, - { - "description" : - [ - "This response conforms to the RDAP Operational Profile for gTLD Registries and Registrars version 1.0" - ] } ] } diff --git a/core/src/test/resources/google/registry/rdap/rdap_truncated_registrars.json b/core/src/test/resources/google/registry/rdap/rdap_truncated_registrars.json index 9180217ad..dd1b3e211 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_truncated_registrars.json +++ b/core/src/test/resources/google/registry/rdap/rdap_truncated_registrars.json @@ -260,8 +260,8 @@ ], "rdapConformance": [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "notices" : [ @@ -316,12 +316,6 @@ "value": "https://example.tld/rdap/entities" } ] - }, - { - "description" : - [ - "This response conforms to the RDAP Operational Profile for gTLD Registries and Registrars version 1.0" - ] } ] } diff --git a/core/src/test/resources/google/registry/rdap/rdap_unformatted_output.json b/core/src/test/resources/google/registry/rdap/rdap_unformatted_output.json index d6f15f978..3acd573f0 100644 --- a/core/src/test/resources/google/registry/rdap/rdap_unformatted_output.json +++ b/core/src/test/resources/google/registry/rdap/rdap_unformatted_output.json @@ -1 +1 @@ -{"key":"value","rdapConformance":["rdap_level_0","icann_rdap_response_profile_0","icann_rdap_technical_implementation_guide_0"],"notices":[{"title":"RDAP Terms of Service","links":[{"href":"https:\/\/www.example.tld\/about\/rdap\/tos.html","rel":"alternate","type":"text\/html","value":"http:\/\/myserver.example.com\/help\/tos"}],"description":["By querying our Domain Database, you are agreeing to comply with these terms so please read them carefully.","Any information provided is 'as is' without any guarantee of accuracy.","Please do not misuse the Domain Database. It is intended solely for query-based access.","Don't use the Domain Database to allow, enable, or otherwise support the transmission of mass unsolicited, commercial advertising or solicitations.","Don't access our Domain Database through the use of high volume, automated electronic processes that send queries or data to the systems of any ICANN-accredited registrar.","You may only use the information contained in the Domain Database for lawful purposes.","Do not compile, repackage, disseminate, or otherwise use the information contained in the Domain Database in its entirety, or in any substantial portion, without our prior written permission.","We may retain certain details about queries to our Domain Database for the purposes of detecting and preventing misuse.","We reserve the right to restrict or deny your access to the database if we suspect that you have failed to comply with these terms.","We reserve the right to modify this agreement at any time."]}]} +{"key":"value","rdapConformance":["rdap_level_0","icann_rdap_response_profile_1","icann_rdap_technical_implementation_guide_1"],"notices":[{"title":"RDAP Terms of Service","links":[{"href":"https:\/\/www.example.tld\/about\/rdap\/tos.html","rel":"alternate","type":"text\/html","value":"http:\/\/myserver.example.com\/help\/tos"}],"description":["By querying our Domain Database, you are agreeing to comply with these terms so please read them carefully.","Any information provided is 'as is' without any guarantee of accuracy.","Please do not misuse the Domain Database. It is intended solely for query-based access.","Don't use the Domain Database to allow, enable, or otherwise support the transmission of mass unsolicited, commercial advertising or solicitations.","Don't access our Domain Database through the use of high volume, automated electronic processes that send queries or data to the systems of any ICANN-accredited registrar.","You may only use the information contained in the Domain Database for lawful purposes.","Do not compile, repackage, disseminate, or otherwise use the information contained in the Domain Database in its entirety, or in any substantial portion, without our prior written permission.","We may retain certain details about queries to our Domain Database for the purposes of detecting and preventing misuse.","We reserve the right to restrict or deny your access to the database if we suspect that you have failed to comply with these terms.","We reserve the right to modify this agreement at any time."]}]} diff --git a/core/src/test/resources/google/registry/rdap/rdapjson_toplevel.json b/core/src/test/resources/google/registry/rdap/rdapjson_toplevel.json index 3c9cb480f..ca2d01f3d 100644 --- a/core/src/test/resources/google/registry/rdap/rdapjson_toplevel.json +++ b/core/src/test/resources/google/registry/rdap/rdapjson_toplevel.json @@ -2,8 +2,8 @@ "key" : "value", "rdapConformance" : [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "notices" : [ diff --git a/core/src/test/resources/google/registry/rdap/rdapjson_toplevel_domain.json b/core/src/test/resources/google/registry/rdap/rdapjson_toplevel_domain.json index ccbb68fcf..cde08db17 100644 --- a/core/src/test/resources/google/registry/rdap/rdapjson_toplevel_domain.json +++ b/core/src/test/resources/google/registry/rdap/rdapjson_toplevel_domain.json @@ -2,8 +2,8 @@ "key": "value", "rdapConformance": [ "rdap_level_0", - "icann_rdap_response_profile_0", - "icann_rdap_technical_implementation_guide_0" + "icann_rdap_response_profile_1", + "icann_rdap_technical_implementation_guide_1" ], "notices": [ @@ -36,12 +36,6 @@ } ] }, - { - "description": - [ - "This response conforms to the RDAP Operational Profile for gTLD Registries and Registrars version 1.0" - ] - }, { "title": "Status Codes", "description": diff --git a/docs/coding-faq.md b/docs/coding-faq.md index 713b07758..0baa116f0 100644 --- a/docs/coding-faq.md +++ b/docs/coding-faq.md @@ -48,23 +48,22 @@ much internally for this reason. ## Do you support RDAP? -We are working on an implementation of the Registry Data Access Protocol (RDAP), -ICANN's proposed successor to WHOIS, which provides similar data to WHOIS, but -in a structured format. The standard is defined in RFCs 7480 through 7484: +We provide an implementation of the Registry Data Access Protocol (RDAP) which provides +similar data to the outdated WHOIS protocol, but in a structured format. The +standard is defined in STD 95 and its RFCs: * [RFC 7480: HTTP Usage in the Registration Data Access Protocol (RDAP)](https://tools.ietf.org/html/rfc7480) * [RFC 7481: Security Services for the Registration Data Access Protocol (RDAP)](https://tools.ietf.org/html/rfc7481) -* [RFC 7482: Registration Data Access Protocol (RDAP) Query - Format](https://tools.ietf.org/html/rfc7482) -* [RFC 7483: JSON Responses for the Registration Data Access Protocol - (RDAP)](https://tools.ietf.org/html/rfc7483) -* [RFC 7484: Finding the Authoritative Registration Data (RDAP) - Service](https://tools.ietf.org/html/rfc7484) +* [RFC 9082: Registration Data Access Protocol (RDAP) Query + Format](https://tools.ietf.org/html/rfc9082) +* [RFC 9083: JSON Responses for the Registration Data Access Protocol + (RDAP)](https://tools.ietf.org/html/rfc9083) +* [RFC 9224: Finding the Authoritative Registration Data (RDAP) + Service](https://tools.ietf.org/html/rfc9224) -Some gaps in the implementation remain, but most of the functionality is -currently available. If you access this endpoint on a running Nomulus system: +If you access this endpoint on a running Nomulus system: `https://{PROJECT-ID}.appspot.com/rdap/domains?name=ex*` @@ -97,5 +96,4 @@ can specify a TLD after the domain name wildcard (e.g. abc*.tld), and you can specify .domain.tld after the nameserver wildcard (e.g. ns*.domain.tld). But you can't do anything else, like searching for nameservers with ns*.tld. When using a wildcard, we currently require a prefix of at least two characters, to avoid -having someone search for *. There are other limitations to the system which we -plan to address in the future. \ No newline at end of file +having someone search for *.