mirror of
https://github.com/google/nomulus.git
synced 2025-05-30 17:24:03 +02:00
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:
parent
363c812d10
commit
ab26b288c1
29 changed files with 804 additions and 90 deletions
|
@ -27,6 +27,7 @@ import com.google.domain.registry.config.ConfigModule.Config;
|
|||
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.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;
|
||||
|
@ -76,8 +77,8 @@ public class RdapEntitySearchAction 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 {
|
||||
// RDAP syntax example: /rdap/entities?fn=Bobby%20Joe*.
|
||||
// The pathSearchString is not used by search commands.
|
||||
if (pathSearchString.length() > 0) {
|
||||
|
@ -97,7 +98,10 @@ public class RdapEntitySearchAction extends RdapActionBase {
|
|||
if (results.isEmpty()) {
|
||||
throw new NotFoundException("No entities found");
|
||||
}
|
||||
return ImmutableMap.<String, Object>of("entitySearchResults", results);
|
||||
ImmutableMap.Builder<String, Object> builder = new ImmutableMap.Builder<>();
|
||||
builder.put("entitySearchResults", results);
|
||||
RdapJsonFormatter.addTopLevelEntries(builder, BoilerplateType.OTHER, null, rdapLinkBase);
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
/** Searches for entities by handle, returning a JSON array of entity info maps. */
|
||||
|
@ -114,13 +118,14 @@ public class RdapEntitySearchAction extends RdapActionBase {
|
|||
if ((contactResource != null) && contactResource.getDeletionTime().isEqual(END_OF_TIME)) {
|
||||
builder.add(RdapJsonFormatter.makeRdapJsonForContact(
|
||||
contactResource,
|
||||
false,
|
||||
Optional.<DesignatedContact.Type>absent(),
|
||||
rdapLinkBase,
|
||||
rdapWhoisServer));
|
||||
}
|
||||
if ((registrar != null) && registrar.isActiveAndPubliclyVisible()) {
|
||||
builder.add(RdapJsonFormatter.makeRdapJsonForRegistrar(
|
||||
registrar, rdapLinkBase, rdapWhoisServer));
|
||||
registrar, false, rdapLinkBase, rdapWhoisServer));
|
||||
}
|
||||
return builder.build();
|
||||
// Handle queries with a wildcard, but no suffix. For contact resources, the deletion time will
|
||||
|
@ -139,6 +144,7 @@ public class RdapEntitySearchAction extends RdapActionBase {
|
|||
for (ContactResource contactResource : query) {
|
||||
builder.add(RdapJsonFormatter.makeRdapJsonForContact(
|
||||
contactResource,
|
||||
false,
|
||||
Optional.<DesignatedContact.Type>absent(),
|
||||
rdapLinkBase,
|
||||
rdapWhoisServer));
|
||||
|
@ -150,7 +156,7 @@ public class RdapEntitySearchAction extends RdapActionBase {
|
|||
rdapResultSetMaxSize)) {
|
||||
if (registrar.isActiveAndPubliclyVisible()) {
|
||||
builder.add(RdapJsonFormatter.makeRdapJsonForRegistrar(
|
||||
registrar, rdapLinkBase, rdapWhoisServer));
|
||||
registrar, false, rdapLinkBase, rdapWhoisServer));
|
||||
}
|
||||
}
|
||||
// In theory, there could be more results than our max size, so limit the size.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue