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

@ -24,6 +24,7 @@ import com.google.domain.registry.model.contact.ContactResource;
import com.google.domain.registry.model.domain.DesignatedContact;
import com.google.domain.registry.model.registrar.Registrar;
import com.google.domain.registry.request.Action;
import com.google.domain.registry.request.HttpException;
import com.google.domain.registry.request.HttpException.BadRequestException;
import com.google.domain.registry.request.HttpException.NotFoundException;
import com.google.domain.registry.util.Clock;
@ -58,7 +59,8 @@ public class RdapEntityAction extends RdapActionBase {
}
@Override
public ImmutableMap<String, Object> getJsonObjectForResource(String pathSearchString) {
public ImmutableMap<String, Object> getJsonObjectForResource(
String pathSearchString, boolean isHeadRequest, String linkBase) throws HttpException {
// The query string is not used; the RDAP syntax is /rdap/entity/handle (the handle is the roid
// for contacts and the client identifier for registrars). Since RDAP's concept of an entity
// includes both contacts and registrars, search for one first, then the other.
@ -70,6 +72,7 @@ public class RdapEntityAction extends RdapActionBase {
if ((contactResource != null) && clock.nowUtc().isBefore(contactResource.getDeletionTime())) {
return RdapJsonFormatter.makeRdapJsonForContact(
contactResource,
true,
Optional.<DesignatedContact.Type>absent(),
rdapLinkBase,
rdapWhoisServer);
@ -80,7 +83,8 @@ public class RdapEntityAction extends RdapActionBase {
wasValidKey = true;
Registrar registrar = Registrar.loadByClientId(clientId);
if ((registrar != null) && registrar.isActiveAndPubliclyVisible()) {
return RdapJsonFormatter.makeRdapJsonForRegistrar(registrar, rdapLinkBase, rdapWhoisServer);
return RdapJsonFormatter.makeRdapJsonForRegistrar(
registrar, true, rdapLinkBase, rdapWhoisServer);
}
}
throw !wasValidKey