RDAP: Add boilerplate entries required by ICANN RDAP Profile

The ICANN RDAP Profile (dated 3 December 2015) requires certain boilerplate entries at the top level of the JSON object. Specifically:

1.4.4. The terms of service of the RDAP service MUST be specified in the
notices object in the topmost JSON object of the response. The notices
object MUST contain a links object [RFC7483]. The links object MUST
contain an URL of the contracted party providing the RDAP service.

1.4.10. An RDAP response MUST contain a remarks member with a description
containing the string “This response conforms to the RDAP Operational
Profile for gTLD Registries and Registrars version 1.0”.

1.5.18. A domain name RDAP response MUST contain a remarks member with
a title “EPP Status Codes”, a description containing the string “For
more information on domain status codes, please visit
https://icann.org/epp” and a links member with the
https://icann.org/epp URL.

1.5.20. A domain name RDAP response MUST contain a remarks member with
a title “Whois Inaccuracy Complaint Form”, a description containing
the string “URL of the ICANN Whois Inaccuracy Complaint Form:
https://www.icann.org/wicf” and a links member with the
https://www.icann.org/wicf URL.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=116389950
This commit is contained in:
mountford 2016-03-04 12:36:00 -08:00 committed by Justine Tunney
parent 363c812d10
commit ab26b288c1
29 changed files with 804 additions and 90 deletions

View file

@ -29,6 +29,7 @@ import com.google.common.collect.Iterables;
import com.google.common.primitives.Booleans;
import com.google.domain.registry.model.domain.DomainResource;
import com.google.domain.registry.model.host.HostResource;
import com.google.domain.registry.rdap.RdapJsonFormatter.BoilerplateType;
import com.google.domain.registry.request.Action;
import com.google.domain.registry.request.HttpException;
import com.google.domain.registry.request.HttpException.BadRequestException;
@ -82,8 +83,8 @@ public class RdapDomainSearchAction extends RdapActionBase {
/** Parses the parameters and calls the appropriate search function. */
@Override
public ImmutableMap<String, Object>
getJsonObjectForResource(final String pathSearchString) throws HttpException {
public ImmutableMap<String, Object> getJsonObjectForResource(
String pathSearchString, boolean isHeadRequest, String linkBase) throws HttpException {
DateTime now = clock.nowUtc();
// RDAP syntax example: /rdap/domains?name=exam*.com.
// The pathSearchString is not used by search commands.
@ -122,7 +123,10 @@ public class RdapDomainSearchAction extends RdapActionBase {
if (results.isEmpty()) {
throw new NotFoundException("No domains found");
}
return ImmutableMap.<String, Object>of("domainSearchResults", results);
ImmutableMap.Builder<String, Object> builder = new ImmutableMap.Builder<>();
builder.put("domainSearchResults", results);
RdapJsonFormatter.addTopLevelEntries(builder, BoilerplateType.DOMAIN, null, rdapLinkBase);
return builder.build();
}
/** Searches for domains by domain name, returning a JSON array of domain info maps. */
@ -136,7 +140,8 @@ public class RdapDomainSearchAction extends RdapActionBase {
return ImmutableList.of();
}
return ImmutableList.of(
RdapJsonFormatter.makeRdapJsonForDomain(domainResource, rdapLinkBase, rdapWhoisServer));
RdapJsonFormatter.makeRdapJsonForDomain(
domainResource, false, rdapLinkBase, rdapWhoisServer));
// Handle queries with a wildcard.
} else {
Query<DomainResource> query = ofy().load()
@ -153,7 +158,7 @@ public class RdapDomainSearchAction extends RdapActionBase {
if (domainResource.getDeletionTime().isAfter(now)) {
builder.add(
RdapJsonFormatter.makeRdapJsonForDomain(
domainResource, rdapLinkBase, rdapWhoisServer));
domainResource, false, rdapLinkBase, rdapWhoisServer));
}
}
return builder.build();
@ -262,7 +267,8 @@ public class RdapDomainSearchAction extends RdapActionBase {
.limit(1000);
for (DomainResource domainResource : query) {
builder.add(
RdapJsonFormatter.makeRdapJsonForDomain(domainResource, rdapLinkBase, rdapWhoisServer));
RdapJsonFormatter.makeRdapJsonForDomain(
domainResource, false, rdapLinkBase, rdapWhoisServer));
}
}
return builder.build();