From c25cfa626b14e8e666268221aecbb483b1ff932a Mon Sep 17 00:00:00 2001 From: mountford Date: Fri, 18 Mar 2016 10:04:36 -0700 Subject: [PATCH] RDAP: Include remarks only in object classes The APNIC conformance checker points out that, according to RFC 7483, RDAP remarks should be included only as part of object classes such as domains, nameservers and entities, not in help responses and so on. Note that something is amiss here -- If RFC 7483 is read strictly, the remarks boilerplate for domain, nameserver and entity search results should appear not at the top level, as we currently do, but as part of each constituent object. However, the conformance checker does not seem to complain about that. So I have added this to the RDAP questions list, and am leaving the boilerplate at the top level for now. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=117557594 --- .../registry/rdap/RdapEntitySearchAction.java | 2 +- .../rdap/RdapIcannStandardInformation.java | 4 +-- .../registry/rdap/RdapJsonFormatter.java | 30 +++++++++++++------ .../rdap/RdapNameserverSearchAction.java | 2 +- .../registry/rdap/RdapActionBaseTest.java | 2 +- .../rdap/testdata/rdap_help_index.json | 9 ------ .../registry/rdap/testdata/rdap_help_tos.json | 9 ------ .../rdap/testdata/rdapjson_toplevel.json | 9 ------ 8 files changed, 26 insertions(+), 41 deletions(-) diff --git a/java/com/google/domain/registry/rdap/RdapEntitySearchAction.java b/java/com/google/domain/registry/rdap/RdapEntitySearchAction.java index 0d832a161..bba3b9ff6 100644 --- a/java/com/google/domain/registry/rdap/RdapEntitySearchAction.java +++ b/java/com/google/domain/registry/rdap/RdapEntitySearchAction.java @@ -99,7 +99,7 @@ public class RdapEntitySearchAction extends RdapActionBase { } ImmutableMap.Builder builder = new ImmutableMap.Builder<>(); builder.put("entitySearchResults", results); - RdapJsonFormatter.addTopLevelEntries(builder, BoilerplateType.OTHER, null, rdapLinkBase); + RdapJsonFormatter.addTopLevelEntries(builder, BoilerplateType.ENTITY, null, rdapLinkBase); return builder.build(); } diff --git a/java/com/google/domain/registry/rdap/RdapIcannStandardInformation.java b/java/com/google/domain/registry/rdap/RdapIcannStandardInformation.java index d2b95c5b0..0c78cc9fc 100644 --- a/java/com/google/domain/registry/rdap/RdapIcannStandardInformation.java +++ b/java/com/google/domain/registry/rdap/RdapIcannStandardInformation.java @@ -68,7 +68,7 @@ public class RdapIcannStandardInformation { ImmutableList.of( CONFORMANCE_REMARK, DOMAIN_STATUS_CODES_REMARK, INACCURACY_COMPLAINT_FORM_REMARK); - /** Boilerplate remarks required by non-domain responses. */ - static final ImmutableList> nonDomainBoilerplateRemarks = + /** Boilerplate remarks required by nameserver and entity responses. */ + static final ImmutableList> nameserverAndEntityBoilerplateRemarks = ImmutableList.of(CONFORMANCE_REMARK); } diff --git a/java/com/google/domain/registry/rdap/RdapJsonFormatter.java b/java/com/google/domain/registry/rdap/RdapJsonFormatter.java index 0f6cd49a6..a02aeb74f 100644 --- a/java/com/google/domain/registry/rdap/RdapJsonFormatter.java +++ b/java/com/google/domain/registry/rdap/RdapJsonFormatter.java @@ -77,12 +77,16 @@ import javax.annotation.Nullable; public class RdapJsonFormatter { /** - * What type of boilerplate notices are required for the RDAP JSON messages? The ICANN RDAP - * Profile specifies that, for instance, domain name responses should include a remark about - * domain status codes. So we need to know when to include such boilerplate. + * Indication of what type of boilerplate notices are required for the RDAP JSON messages. The + * ICANN RDAP Profile specifies that, for instance, domain name responses should include a remark + * about domain status codes. So we need to know when to include such boilerplate. On the other + * hand, remarks are not allowed except in domain, nameserver and entity objects, so we need to + * suppress them for other types of responses (e.g. help). */ public enum BoilerplateType { DOMAIN, + NAMESERVER, + ENTITY, OTHER } @@ -279,9 +283,17 @@ public class RdapJsonFormatter { noticesBuilder.add(tosNotice); } builder.put(NOTICES, noticesBuilder.build()); - builder.put(REMARKS, (boilerplateType == BoilerplateType.DOMAIN) - ? RdapIcannStandardInformation.domainBoilerplateRemarks - : RdapIcannStandardInformation.nonDomainBoilerplateRemarks); + switch (boilerplateType) { + case DOMAIN: + builder.put(REMARKS, RdapIcannStandardInformation.domainBoilerplateRemarks); + break; + case NAMESERVER: + case ENTITY: + builder.put(REMARKS, RdapIcannStandardInformation.nameserverAndEntityBoilerplateRemarks); + break; + default: // things other than domains, nameservers and entities cannot contain remarks + break; + } } /** AutoValue class to build parameters to {@link #makeRdapJsonNotice}. */ @@ -507,7 +519,7 @@ public class RdapJsonFormatter { builder.put("port43", whoisServer); } if (isTopLevel) { - addTopLevelEntries(builder, BoilerplateType.OTHER, null, linkBase); + addTopLevelEntries(builder, BoilerplateType.NAMESERVER, null, linkBase); } return builder.build(); } @@ -576,7 +588,7 @@ public class RdapJsonFormatter { builder.put("port43", whoisServer); } if (isTopLevel) { - addTopLevelEntries(builder, BoilerplateType.OTHER, null, linkBase); + addTopLevelEntries(builder, BoilerplateType.ENTITY, null, linkBase); } return builder.build(); } @@ -656,7 +668,7 @@ public class RdapJsonFormatter { builder.put("port43", whoisServer); } if (isTopLevel) { - addTopLevelEntries(builder, BoilerplateType.OTHER, null, linkBase); + addTopLevelEntries(builder, BoilerplateType.ENTITY, null, linkBase); } return builder.build(); } diff --git a/java/com/google/domain/registry/rdap/RdapNameserverSearchAction.java b/java/com/google/domain/registry/rdap/RdapNameserverSearchAction.java index b5dd9c56c..186b34dfd 100644 --- a/java/com/google/domain/registry/rdap/RdapNameserverSearchAction.java +++ b/java/com/google/domain/registry/rdap/RdapNameserverSearchAction.java @@ -107,7 +107,7 @@ public class RdapNameserverSearchAction extends RdapActionBase { } ImmutableMap.Builder builder = new ImmutableMap.Builder<>(); builder.put("nameserverSearchResults", results); - RdapJsonFormatter.addTopLevelEntries(builder, BoilerplateType.OTHER, null, rdapLinkBase); + RdapJsonFormatter.addTopLevelEntries(builder, BoilerplateType.NAMESERVER, null, rdapLinkBase); return builder.build(); } diff --git a/javatests/com/google/domain/registry/rdap/RdapActionBaseTest.java b/javatests/com/google/domain/registry/rdap/RdapActionBaseTest.java index 57fa4efc8..be1e081d5 100644 --- a/javatests/com/google/domain/registry/rdap/RdapActionBaseTest.java +++ b/javatests/com/google/domain/registry/rdap/RdapActionBaseTest.java @@ -137,7 +137,7 @@ public class RdapActionBaseTest { @Test public void testValidName_works() throws Exception { assertThat(generateActualJson("no.thing")).isEqualTo(JSONValue.parse( - loadFileWithSubstitutions(this.getClass(), "rdapjson_toplevel.json", null))); + loadFileWithSubstitutions(this.getClass(), "rdapjson_toplevel.json", null))); assertThat(response.getStatus()).isEqualTo(200); } diff --git a/javatests/com/google/domain/registry/rdap/testdata/rdap_help_index.json b/javatests/com/google/domain/registry/rdap/testdata/rdap_help_index.json index 63b916c77..4940cf883 100644 --- a/javatests/com/google/domain/registry/rdap/testdata/rdap_help_index.json +++ b/javatests/com/google/domain/registry/rdap/testdata/rdap_help_index.json @@ -45,14 +45,5 @@ } ] } - ], - "remarks" : - [ - { - "description" : - [ - "This response conforms to the RDAP Operational Profile for gTLD Registries and Registrars version 1.0" - ] - } ] } diff --git a/javatests/com/google/domain/registry/rdap/testdata/rdap_help_tos.json b/javatests/com/google/domain/registry/rdap/testdata/rdap_help_tos.json index 54dd9823f..74b0e7133 100644 --- a/javatests/com/google/domain/registry/rdap/testdata/rdap_help_tos.json +++ b/javatests/com/google/domain/registry/rdap/testdata/rdap_help_tos.json @@ -27,14 +27,5 @@ } ] } - ], - "remarks" : - [ - { - "description" : - [ - "This response conforms to the RDAP Operational Profile for gTLD Registries and Registrars version 1.0" - ] - } ] } diff --git a/javatests/com/google/domain/registry/rdap/testdata/rdapjson_toplevel.json b/javatests/com/google/domain/registry/rdap/testdata/rdapjson_toplevel.json index 9d681a921..6b1a71517 100644 --- a/javatests/com/google/domain/registry/rdap/testdata/rdapjson_toplevel.json +++ b/javatests/com/google/domain/registry/rdap/testdata/rdapjson_toplevel.json @@ -31,14 +31,5 @@ } ] } - ], - "remarks" : - [ - { - "description" : - [ - "This response conforms to the RDAP Operational Profile for gTLD Registries and Registrars version 1.0" - ] - } ] }