mirror of
https://github.com/google/nomulus.git
synced 2025-05-13 07:57:13 +02:00
RDAP: Display truncation notice for large entity result sets
The ICAAN Operational Profile dictates that a notice be added to the RDAP search results response when there are more objects than the server's chosen result set size. This CL (hopefully the last one) handles the fixes for entity (contact and registrar) searches. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=135494283
This commit is contained in:
parent
49fd75300e
commit
b224a90a4c
10 changed files with 1354 additions and 29 deletions
|
@ -15,6 +15,7 @@
|
||||||
package google.registry.rdap;
|
package google.registry.rdap;
|
||||||
|
|
||||||
import static google.registry.model.ofy.ObjectifyService.ofy;
|
import static google.registry.model.ofy.ObjectifyService.ofy;
|
||||||
|
import static google.registry.rdap.RdapIcannStandardInformation.TRUNCATION_NOTICES;
|
||||||
import static google.registry.request.Action.Method.GET;
|
import static google.registry.request.Action.Method.GET;
|
||||||
import static google.registry.request.Action.Method.HEAD;
|
import static google.registry.request.Action.Method.HEAD;
|
||||||
import static google.registry.util.DateTimeUtils.END_OF_TIME;
|
import static google.registry.util.DateTimeUtils.END_OF_TIME;
|
||||||
|
@ -85,7 +86,7 @@ public class RdapEntitySearchAction extends RdapActionBase {
|
||||||
if (Booleans.countTrue(fnParam.isPresent(), handleParam.isPresent()) != 1) {
|
if (Booleans.countTrue(fnParam.isPresent(), handleParam.isPresent()) != 1) {
|
||||||
throw new BadRequestException("You must specify either fn=XXXX or handle=YYYY");
|
throw new BadRequestException("You must specify either fn=XXXX or handle=YYYY");
|
||||||
}
|
}
|
||||||
ImmutableList<ImmutableMap<String, Object>> results;
|
RdapSearchResults results;
|
||||||
if (fnParam.isPresent()) {
|
if (fnParam.isPresent()) {
|
||||||
// syntax: /rdap/entities?fn=Bobby%20Joe*
|
// syntax: /rdap/entities?fn=Bobby%20Joe*
|
||||||
// The name is the contact name or registrar name (not registrar contact name).
|
// The name is the contact name or registrar name (not registrar contact name).
|
||||||
|
@ -95,15 +96,16 @@ public class RdapEntitySearchAction extends RdapActionBase {
|
||||||
// The handle is either the contact roid or the registrar clientId.
|
// The handle is either the contact roid or the registrar clientId.
|
||||||
results = searchByHandle(RdapSearchPattern.create(handleParam.get(), false), now);
|
results = searchByHandle(RdapSearchPattern.create(handleParam.get(), false), now);
|
||||||
}
|
}
|
||||||
if (results.isEmpty()) {
|
if (results.jsonList().isEmpty()) {
|
||||||
throw new NotFoundException("No entities found");
|
throw new NotFoundException("No entities found");
|
||||||
}
|
}
|
||||||
ImmutableMap.Builder<String, Object> jsonBuilder = new ImmutableMap.Builder<>();
|
ImmutableMap.Builder<String, Object> jsonBuilder = new ImmutableMap.Builder<>();
|
||||||
jsonBuilder.put("entitySearchResults", results);
|
jsonBuilder.put("entitySearchResults", results.jsonList());
|
||||||
RdapJsonFormatter.addTopLevelEntries(
|
RdapJsonFormatter.addTopLevelEntries(
|
||||||
jsonBuilder,
|
jsonBuilder,
|
||||||
BoilerplateType.ENTITY,
|
BoilerplateType.ENTITY,
|
||||||
ImmutableList.<ImmutableMap<String, Object>>of(),
|
results.isTruncated()
|
||||||
|
? TRUNCATION_NOTICES : ImmutableList.<ImmutableMap<String, Object>>of(),
|
||||||
ImmutableList.<ImmutableMap<String, Object>>of(),
|
ImmutableList.<ImmutableMap<String, Object>>of(),
|
||||||
rdapLinkBase);
|
rdapLinkBase);
|
||||||
return jsonBuilder.build();
|
return jsonBuilder.build();
|
||||||
|
@ -123,8 +125,7 @@ public class RdapEntitySearchAction extends RdapActionBase {
|
||||||
* <p>According to RFC 7482 section 6.1, punycode is only used for domain name labels, so we can
|
* <p>According to RFC 7482 section 6.1, punycode is only used for domain name labels, so we can
|
||||||
* assume that entity names are regular unicode.
|
* assume that entity names are regular unicode.
|
||||||
*/
|
*/
|
||||||
private ImmutableList<ImmutableMap<String, Object>>
|
private RdapSearchResults searchByName(final RdapSearchPattern partialStringQuery, DateTime now) {
|
||||||
searchByName(final RdapSearchPattern partialStringQuery, DateTime now) {
|
|
||||||
// Don't allow suffixes in entity name search queries.
|
// Don't allow suffixes in entity name search queries.
|
||||||
if (!partialStringQuery.getHasWildcard() && (partialStringQuery.getSuffix() != null)) {
|
if (!partialStringQuery.getHasWildcard() && (partialStringQuery.getSuffix() != null)) {
|
||||||
throw new UnprocessableEntityException("Suffixes not allowed in entity name searches");
|
throw new UnprocessableEntityException("Suffixes not allowed in entity name searches");
|
||||||
|
@ -137,21 +138,23 @@ public class RdapEntitySearchAction extends RdapActionBase {
|
||||||
? ImmutableList.<Registrar>of()
|
? ImmutableList.<Registrar>of()
|
||||||
: ImmutableList.of(registrar);
|
: ImmutableList.of(registrar);
|
||||||
} else {
|
} else {
|
||||||
|
// Fetch an additional registrar, so we can detect result set truncation.
|
||||||
registrarMatches = ImmutableList.copyOf(Registrar.loadByNameRange(
|
registrarMatches = ImmutableList.copyOf(Registrar.loadByNameRange(
|
||||||
partialStringQuery.getInitialString(),
|
partialStringQuery.getInitialString(),
|
||||||
partialStringQuery.getNextInitialString(),
|
partialStringQuery.getNextInitialString(),
|
||||||
rdapResultSetMaxSize));
|
rdapResultSetMaxSize + 1));
|
||||||
}
|
}
|
||||||
// Get the contact matches and return the results.
|
// Get the contact matches and return the results, fetching an additional contact to detect
|
||||||
|
// truncation.
|
||||||
return makeSearchResults(
|
return makeSearchResults(
|
||||||
queryUndeleted(
|
queryUndeleted(
|
||||||
ContactResource.class, "searchName", partialStringQuery, rdapResultSetMaxSize).list(),
|
ContactResource.class, "searchName", partialStringQuery, rdapResultSetMaxSize + 1).list(),
|
||||||
registrarMatches,
|
registrarMatches,
|
||||||
now);
|
now);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Searches for entities by handle, returning a JSON array of entity info maps. */
|
/** Searches for entities by handle, returning a JSON array of entity info maps. */
|
||||||
private ImmutableList<ImmutableMap<String, Object>> searchByHandle(
|
private RdapSearchResults searchByHandle(
|
||||||
final RdapSearchPattern partialStringQuery, DateTime now) {
|
final RdapSearchPattern partialStringQuery, DateTime now) {
|
||||||
// Handle queries without a wildcard -- load by ID.
|
// Handle queries without a wildcard -- load by ID.
|
||||||
if (!partialStringQuery.getHasWildcard()) {
|
if (!partialStringQuery.getHasWildcard()) {
|
||||||
|
@ -170,7 +173,7 @@ public class RdapEntitySearchAction extends RdapActionBase {
|
||||||
// worry about deletion times in the future. That allows us to use an equality query for the
|
// worry about deletion times in the future. That allows us to use an equality query for the
|
||||||
// deletion time. Because the handle for registrars is the IANA identifier number, don't allow
|
// deletion time. Because the handle for registrars is the IANA identifier number, don't allow
|
||||||
// wildcard searches for registrars, by simply not searching for registrars if a wildcard is
|
// wildcard searches for registrars, by simply not searching for registrars if a wildcard is
|
||||||
// present.
|
// present. Fetch an extra contact to detect result set truncation.
|
||||||
} else if (partialStringQuery.getSuffix() == null) {
|
} else if (partialStringQuery.getSuffix() == null) {
|
||||||
return makeSearchResults(
|
return makeSearchResults(
|
||||||
ofy().load()
|
ofy().load()
|
||||||
|
@ -180,7 +183,7 @@ public class RdapEntitySearchAction extends RdapActionBase {
|
||||||
.filterKey(
|
.filterKey(
|
||||||
"<", Key.create(ContactResource.class, partialStringQuery.getNextInitialString()))
|
"<", Key.create(ContactResource.class, partialStringQuery.getNextInitialString()))
|
||||||
.filter("deletionTime", END_OF_TIME)
|
.filter("deletionTime", END_OF_TIME)
|
||||||
.limit(rdapResultSetMaxSize)
|
.limit(rdapResultSetMaxSize + 1)
|
||||||
.list(),
|
.list(),
|
||||||
ImmutableList.<Registrar>of(),
|
ImmutableList.<Registrar>of(),
|
||||||
now);
|
now);
|
||||||
|
@ -199,21 +202,20 @@ public class RdapEntitySearchAction extends RdapActionBase {
|
||||||
} catch (NumberFormatException e) {
|
} catch (NumberFormatException e) {
|
||||||
return ImmutableList.of();
|
return ImmutableList.of();
|
||||||
}
|
}
|
||||||
|
// Fetch an additional registrar to detect result set truncation.
|
||||||
return ImmutableList.copyOf(Registrar.loadByIanaIdentifierRange(
|
return ImmutableList.copyOf(Registrar.loadByIanaIdentifierRange(
|
||||||
ianaIdentifier, ianaIdentifier + 1, rdapResultSetMaxSize));
|
ianaIdentifier, ianaIdentifier + 1, rdapResultSetMaxSize + 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Builds a JSON array of entity info maps based on the specified contacts and registrars. */
|
/** Builds a JSON array of entity info maps based on the specified contacts and registrars. */
|
||||||
private ImmutableList<ImmutableMap<String, Object>> makeSearchResults(
|
private RdapSearchResults makeSearchResults(
|
||||||
List<ContactResource> contacts,
|
List<ContactResource> contacts, List<Registrar> registrars, DateTime now) {
|
||||||
List<Registrar> registrars,
|
|
||||||
DateTime now) {
|
|
||||||
|
|
||||||
// Determine what output data type to use, depending on whether more than one entity will be
|
// Determine what output data type to use, depending on whether more than one entity will be
|
||||||
// returned.
|
// returned.
|
||||||
int numEntities = contacts.size();
|
int numEntities = contacts.size();
|
||||||
OutputDataType outputDataType;
|
OutputDataType outputDataType;
|
||||||
// If there's more than one contact, then we know already that we need SUMMARY mode.
|
// If there's more than one contact, then we know already we need SUMMARY mode.
|
||||||
if (numEntities > 1) {
|
if (numEntities > 1) {
|
||||||
outputDataType = OutputDataType.SUMMARY;
|
outputDataType = OutputDataType.SUMMARY;
|
||||||
// If there are fewer than two contacts, loop through and compute the total number of contacts
|
// If there are fewer than two contacts, loop through and compute the total number of contacts
|
||||||
|
@ -231,11 +233,13 @@ public class RdapEntitySearchAction extends RdapActionBase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// There can be more results than our max size, partially because we have two pools to draw from
|
||||||
|
// (contacts and registrars), and partially because we try to fetch one more than the max size,
|
||||||
|
// so we can tell whether to display the truncation notification.
|
||||||
List<ImmutableMap<String, Object>> jsonOutputList = new ArrayList<>();
|
List<ImmutableMap<String, Object>> jsonOutputList = new ArrayList<>();
|
||||||
// In theory, there could be more results than our max size, so limit the size.
|
|
||||||
for (ContactResource contact : contacts) {
|
for (ContactResource contact : contacts) {
|
||||||
if (jsonOutputList.size() >= rdapResultSetMaxSize) {
|
if (jsonOutputList.size() >= rdapResultSetMaxSize) {
|
||||||
break;
|
return RdapSearchResults.create(ImmutableList.copyOf(jsonOutputList), true);
|
||||||
}
|
}
|
||||||
// As per Andy Newton on the regext mailing list, contacts by themselves have no role, since
|
// As per Andy Newton on the regext mailing list, contacts by themselves have no role, since
|
||||||
// they are global, and might have different roles for different domains.
|
// they are global, and might have different roles for different domains.
|
||||||
|
@ -249,14 +253,14 @@ public class RdapEntitySearchAction extends RdapActionBase {
|
||||||
outputDataType));
|
outputDataType));
|
||||||
}
|
}
|
||||||
for (Registrar registrar : registrars) {
|
for (Registrar registrar : registrars) {
|
||||||
if (jsonOutputList.size() >= rdapResultSetMaxSize) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (registrar.isActiveAndPubliclyVisible()) {
|
if (registrar.isActiveAndPubliclyVisible()) {
|
||||||
|
if (jsonOutputList.size() >= rdapResultSetMaxSize) {
|
||||||
|
return RdapSearchResults.create(ImmutableList.copyOf(jsonOutputList), true);
|
||||||
|
}
|
||||||
jsonOutputList.add(RdapJsonFormatter.makeRdapJsonForRegistrar(
|
jsonOutputList.add(RdapJsonFormatter.makeRdapJsonForRegistrar(
|
||||||
registrar, false, rdapLinkBase, rdapWhoisServer, now, outputDataType));
|
registrar, false, rdapLinkBase, rdapWhoisServer, now, outputDataType));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ImmutableList.copyOf(jsonOutputList);
|
return RdapSearchResults.create(ImmutableList.copyOf(jsonOutputList));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -128,8 +128,7 @@ public class RdapNameserverSearchAction extends RdapActionBase {
|
||||||
return RdapSearchResults.create(
|
return RdapSearchResults.create(
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
RdapJsonFormatter.makeRdapJsonForHost(
|
RdapJsonFormatter.makeRdapJsonForHost(
|
||||||
hostResource, false, rdapLinkBase, rdapWhoisServer, now, OutputDataType.FULL)),
|
hostResource, false, rdapLinkBase, rdapWhoisServer, now, OutputDataType.FULL)));
|
||||||
false);
|
|
||||||
// Handle queries with a wildcard, but no suffix. There are no pending deletes for hosts, so we
|
// Handle queries with a wildcard, but no suffix. There are no pending deletes for hosts, so we
|
||||||
// can call queryUndeleted.
|
// can call queryUndeleted.
|
||||||
} else if (partialStringQuery.getSuffix() == null) {
|
} else if (partialStringQuery.getSuffix() == null) {
|
||||||
|
|
|
@ -17,6 +17,7 @@ package google.registry.rdap;
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
import static google.registry.testing.DatastoreHelper.createTld;
|
import static google.registry.testing.DatastoreHelper.createTld;
|
||||||
import static google.registry.testing.DatastoreHelper.persistResource;
|
import static google.registry.testing.DatastoreHelper.persistResource;
|
||||||
|
import static google.registry.testing.DatastoreHelper.persistResources;
|
||||||
import static google.registry.testing.DatastoreHelper.persistSimpleResources;
|
import static google.registry.testing.DatastoreHelper.persistSimpleResources;
|
||||||
import static google.registry.testing.FullFieldsTestEntityHelper.makeAndPersistContactResource;
|
import static google.registry.testing.FullFieldsTestEntityHelper.makeAndPersistContactResource;
|
||||||
import static google.registry.testing.FullFieldsTestEntityHelper.makeContactResource;
|
import static google.registry.testing.FullFieldsTestEntityHelper.makeContactResource;
|
||||||
|
@ -27,6 +28,7 @@ import static google.registry.testing.TestDataHelper.loadFileWithSubstitutions;
|
||||||
import com.google.common.base.Optional;
|
import com.google.common.base.Optional;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
import google.registry.model.ImmutableObject;
|
||||||
import google.registry.model.contact.ContactResource;
|
import google.registry.model.contact.ContactResource;
|
||||||
import google.registry.model.ofy.Ofy;
|
import google.registry.model.ofy.Ofy;
|
||||||
import google.registry.model.registrar.Registrar;
|
import google.registry.model.registrar.Registrar;
|
||||||
|
@ -34,6 +36,8 @@ import google.registry.testing.AppEngineRule;
|
||||||
import google.registry.testing.FakeClock;
|
import google.registry.testing.FakeClock;
|
||||||
import google.registry.testing.FakeResponse;
|
import google.registry.testing.FakeResponse;
|
||||||
import google.registry.testing.InjectRule;
|
import google.registry.testing.InjectRule;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import org.joda.time.DateTime;
|
import org.joda.time.DateTime;
|
||||||
import org.json.simple.JSONValue;
|
import org.json.simple.JSONValue;
|
||||||
|
@ -120,7 +124,7 @@ public class RdapEntitySearchActionTest {
|
||||||
action.clock = clock;
|
action.clock = clock;
|
||||||
action.requestPath = RdapEntitySearchAction.PATH;
|
action.requestPath = RdapEntitySearchAction.PATH;
|
||||||
action.response = response;
|
action.response = response;
|
||||||
action.rdapResultSetMaxSize = 100;
|
action.rdapResultSetMaxSize = 4;
|
||||||
action.rdapLinkBase = "https://example.com/rdap/";
|
action.rdapLinkBase = "https://example.com/rdap/";
|
||||||
action.rdapWhoisServer = null;
|
action.rdapWhoisServer = null;
|
||||||
action.fnParam = Optional.absent();
|
action.fnParam = Optional.absent();
|
||||||
|
@ -177,6 +181,38 @@ public class RdapEntitySearchActionTest {
|
||||||
return builder.build();
|
return builder.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void createManyContactsAndRegistrars(int numContacts, int numRegistrars) {
|
||||||
|
ImmutableList.Builder<ImmutableObject> resourcesBuilder = new ImmutableList.Builder<>();
|
||||||
|
for (int i = 1; i <= numContacts; i++) {
|
||||||
|
resourcesBuilder.add(makeContactResource(
|
||||||
|
String.format("contact%d", i),
|
||||||
|
String.format("Entity %d", i),
|
||||||
|
String.format("contact%d@gmail.com", i)));
|
||||||
|
}
|
||||||
|
persistResources(resourcesBuilder.build());
|
||||||
|
for (int i = 1; i <= numRegistrars; i++) {
|
||||||
|
resourcesBuilder.add(
|
||||||
|
makeRegistrar(
|
||||||
|
String.format("registrar%d", i),
|
||||||
|
String.format("Entity %d", i + numContacts),
|
||||||
|
Registrar.State.ACTIVE,
|
||||||
|
300L + i));
|
||||||
|
}
|
||||||
|
persistResources(resourcesBuilder.build());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkNumberOfEntitiesInResult(Object obj, int expected) {
|
||||||
|
assertThat(obj).isInstanceOf(Map.class);
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
Map<String, Object> map = (Map<String, Object>) obj;
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
List<Object> domains = (List<Object>) map.get("entitySearchResults");
|
||||||
|
|
||||||
|
assertThat(domains).hasSize(expected);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testInvalidPath_rejected() throws Exception {
|
public void testInvalidPath_rejected() throws Exception {
|
||||||
action.requestPath = RdapEntitySearchAction.PATH + "/path";
|
action.requestPath = RdapEntitySearchAction.PATH + "/path";
|
||||||
|
@ -274,6 +310,62 @@ public class RdapEntitySearchActionTest {
|
||||||
assertThat(response.getStatus()).isEqualTo(200);
|
assertThat(response.getStatus()).isEqualTo(200);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testNameMatch_nonTruncatedContacts() throws Exception {
|
||||||
|
createManyContactsAndRegistrars(4, 0);
|
||||||
|
assertThat(generateActualJsonWithFullName("Entity *"))
|
||||||
|
.isEqualTo(generateExpectedJson("rdap_nontruncated_contacts.json"));
|
||||||
|
assertThat(response.getStatus()).isEqualTo(200);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testNameMatch_truncatedContacts() throws Exception {
|
||||||
|
createManyContactsAndRegistrars(5, 0);
|
||||||
|
assertThat(generateActualJsonWithFullName("Entity *"))
|
||||||
|
.isEqualTo(generateExpectedJson("rdap_truncated_contacts.json"));
|
||||||
|
assertThat(response.getStatus()).isEqualTo(200);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testNameMatch_reallyTruncatedContacts() throws Exception {
|
||||||
|
createManyContactsAndRegistrars(9, 0);
|
||||||
|
assertThat(generateActualJsonWithFullName("Entity *"))
|
||||||
|
.isEqualTo(generateExpectedJson("rdap_truncated_contacts.json"));
|
||||||
|
assertThat(response.getStatus()).isEqualTo(200);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testNameMatch_nonTruncatedRegistrars() throws Exception {
|
||||||
|
createManyContactsAndRegistrars(0, 4);
|
||||||
|
assertThat(generateActualJsonWithFullName("Entity *"))
|
||||||
|
.isEqualTo(generateExpectedJson("rdap_nontruncated_registrars.json"));
|
||||||
|
assertThat(response.getStatus()).isEqualTo(200);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testNameMatch_truncatedRegistrars() throws Exception {
|
||||||
|
createManyContactsAndRegistrars(0, 5);
|
||||||
|
assertThat(generateActualJsonWithFullName("Entity *"))
|
||||||
|
.isEqualTo(generateExpectedJson("rdap_truncated_registrars.json"));
|
||||||
|
assertThat(response.getStatus()).isEqualTo(200);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testNameMatch_reallyTruncatedRegistrars() throws Exception {
|
||||||
|
createManyContactsAndRegistrars(0, 9);
|
||||||
|
assertThat(generateActualJsonWithFullName("Entity *"))
|
||||||
|
.isEqualTo(generateExpectedJson("rdap_truncated_registrars.json"));
|
||||||
|
assertThat(response.getStatus()).isEqualTo(200);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testNameMatch_truncatedMixOfContactsAndRegistrars() throws Exception {
|
||||||
|
createManyContactsAndRegistrars(3, 3);
|
||||||
|
assertThat(generateActualJsonWithFullName("Entity *"))
|
||||||
|
.isEqualTo(generateExpectedJson("rdap_truncated_mixed_entities.json"));
|
||||||
|
assertThat(response.getStatus()).isEqualTo(200);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testHandleMatch_2roid_found() throws Exception {
|
public void testHandleMatch_2roid_found() throws Exception {
|
||||||
assertThat(generateActualJsonWithHandle("2-ROID"))
|
assertThat(generateActualJsonWithHandle("2-ROID"))
|
||||||
|
@ -352,4 +444,12 @@ public class RdapEntitySearchActionTest {
|
||||||
generateActualJsonWithHandle("3test*");
|
generateActualJsonWithHandle("3test*");
|
||||||
assertThat(response.getStatus()).isEqualTo(404);
|
assertThat(response.getStatus()).isEqualTo(404);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testHandleMatch_truncatedEntities() throws Exception {
|
||||||
|
createManyContactsAndRegistrars(300, 0);
|
||||||
|
Object obj = generateActualJsonWithHandle("10*");
|
||||||
|
assertThat(response.getStatus()).isEqualTo(200);
|
||||||
|
checkNumberOfEntitiesInResult(obj, 4);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -102,7 +102,7 @@
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"rdapConformance": [ "rdap_level_0" ],
|
"rdapConformance": [ "rdap_level_0" ],
|
||||||
"notices" :
|
"notices" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"title" : "RDAP Terms of Service",
|
"title" : "RDAP Terms of Service",
|
||||||
|
|
|
@ -95,7 +95,7 @@
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"rdapConformance": [ "rdap_level_0" ],
|
"rdapConformance": [ "rdap_level_0" ],
|
||||||
"notices" :
|
"notices" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"title" : "RDAP Terms of Service",
|
"title" : "RDAP Terms of Service",
|
||||||
|
|
227
javatests/google/registry/rdap/testdata/rdap_nontruncated_contacts.json
vendored
Normal file
227
javatests/google/registry/rdap/testdata/rdap_nontruncated_contacts.json
vendored
Normal file
|
@ -0,0 +1,227 @@
|
||||||
|
{
|
||||||
|
"entitySearchResults":
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"objectClassName" : "entity",
|
||||||
|
"handle" : "7-ROID",
|
||||||
|
"status" : ["active"],
|
||||||
|
"links" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"value" : "https://example.com/rdap/entity/7-ROID",
|
||||||
|
"rel" : "self",
|
||||||
|
"href": "https://example.com/rdap/entity/7-ROID",
|
||||||
|
"type" : "application/rdap+json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"remarks": [
|
||||||
|
{
|
||||||
|
"title": "Incomplete Data",
|
||||||
|
"description": [
|
||||||
|
"Summary data only. For complete data, send a specific query for the object."
|
||||||
|
],
|
||||||
|
"type": "object truncated due to unexplainable reasons"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"vcardArray" :
|
||||||
|
[
|
||||||
|
"vcard",
|
||||||
|
[
|
||||||
|
["version", {}, "text", "4.0"],
|
||||||
|
["fn", {}, "text", "Entity 1"],
|
||||||
|
["org", {}, "text", "GOOGLE INCORPORATED <script>"],
|
||||||
|
["adr", {}, "text",
|
||||||
|
[
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"123 Example Boulevard <script>",
|
||||||
|
"KOKOMO",
|
||||||
|
"BM",
|
||||||
|
"31337",
|
||||||
|
"United States"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2126660420"],
|
||||||
|
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"],
|
||||||
|
["email", {}, "text", "contact1@gmail.com"]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"objectClassName" : "entity",
|
||||||
|
"handle" : "8-ROID",
|
||||||
|
"status" : ["active"],
|
||||||
|
"links" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"value" : "https://example.com/rdap/entity/8-ROID",
|
||||||
|
"rel" : "self",
|
||||||
|
"href": "https://example.com/rdap/entity/8-ROID",
|
||||||
|
"type" : "application/rdap+json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"remarks": [
|
||||||
|
{
|
||||||
|
"title": "Incomplete Data",
|
||||||
|
"description": [
|
||||||
|
"Summary data only. For complete data, send a specific query for the object."
|
||||||
|
],
|
||||||
|
"type": "object truncated due to unexplainable reasons"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"vcardArray" :
|
||||||
|
[
|
||||||
|
"vcard",
|
||||||
|
[
|
||||||
|
["version", {}, "text", "4.0"],
|
||||||
|
["fn", {}, "text", "Entity 2"],
|
||||||
|
["org", {}, "text", "GOOGLE INCORPORATED <script>"],
|
||||||
|
["adr", {}, "text",
|
||||||
|
[
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"123 Example Boulevard <script>",
|
||||||
|
"KOKOMO",
|
||||||
|
"BM",
|
||||||
|
"31337",
|
||||||
|
"United States"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2126660420"],
|
||||||
|
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"],
|
||||||
|
["email", {}, "text", "contact2@gmail.com"]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"objectClassName" : "entity",
|
||||||
|
"handle" : "9-ROID",
|
||||||
|
"status" : ["active"],
|
||||||
|
"links" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"value" : "https://example.com/rdap/entity/9-ROID",
|
||||||
|
"rel" : "self",
|
||||||
|
"href": "https://example.com/rdap/entity/9-ROID",
|
||||||
|
"type" : "application/rdap+json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"remarks": [
|
||||||
|
{
|
||||||
|
"title": "Incomplete Data",
|
||||||
|
"description": [
|
||||||
|
"Summary data only. For complete data, send a specific query for the object."
|
||||||
|
],
|
||||||
|
"type": "object truncated due to unexplainable reasons"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"vcardArray" :
|
||||||
|
[
|
||||||
|
"vcard",
|
||||||
|
[
|
||||||
|
["version", {}, "text", "4.0"],
|
||||||
|
["fn", {}, "text", "Entity 3"],
|
||||||
|
["org", {}, "text", "GOOGLE INCORPORATED <script>"],
|
||||||
|
["adr", {}, "text",
|
||||||
|
[
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"123 Example Boulevard <script>",
|
||||||
|
"KOKOMO",
|
||||||
|
"BM",
|
||||||
|
"31337",
|
||||||
|
"United States"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2126660420"],
|
||||||
|
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"],
|
||||||
|
["email", {}, "text", "contact3@gmail.com"]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"objectClassName" : "entity",
|
||||||
|
"handle" : "A-ROID",
|
||||||
|
"status" : ["active"],
|
||||||
|
"links" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"value" : "https://example.com/rdap/entity/A-ROID",
|
||||||
|
"rel" : "self",
|
||||||
|
"href": "https://example.com/rdap/entity/A-ROID",
|
||||||
|
"type" : "application/rdap+json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"remarks": [
|
||||||
|
{
|
||||||
|
"title": "Incomplete Data",
|
||||||
|
"description": [
|
||||||
|
"Summary data only. For complete data, send a specific query for the object."
|
||||||
|
],
|
||||||
|
"type": "object truncated due to unexplainable reasons"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"vcardArray" :
|
||||||
|
[
|
||||||
|
"vcard",
|
||||||
|
[
|
||||||
|
["version", {}, "text", "4.0"],
|
||||||
|
["fn", {}, "text", "Entity 4"],
|
||||||
|
["org", {}, "text", "GOOGLE INCORPORATED <script>"],
|
||||||
|
["adr", {}, "text",
|
||||||
|
[
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"123 Example Boulevard <script>",
|
||||||
|
"KOKOMO",
|
||||||
|
"BM",
|
||||||
|
"31337",
|
||||||
|
"United States"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2126660420"],
|
||||||
|
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"],
|
||||||
|
["email", {}, "text", "contact4@gmail.com"]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"rdapConformance": [ "rdap_level_0" ],
|
||||||
|
"notices" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"title" : "RDAP Terms of Service",
|
||||||
|
"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 Charleston Road Registry or 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."
|
||||||
|
],
|
||||||
|
"links" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"value" : "https://example.com/rdap/help/tos",
|
||||||
|
"rel" : "alternate",
|
||||||
|
"href" : "https://www.registry.google/about/rdap/tos.html",
|
||||||
|
"type" : "text/html"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"remarks" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"description" :
|
||||||
|
[
|
||||||
|
"This response conforms to the RDAP Operational Profile for gTLD Registries and Registrars version 1.0"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
255
javatests/google/registry/rdap/testdata/rdap_nontruncated_registrars.json
vendored
Normal file
255
javatests/google/registry/rdap/testdata/rdap_nontruncated_registrars.json
vendored
Normal file
|
@ -0,0 +1,255 @@
|
||||||
|
{
|
||||||
|
"entitySearchResults":
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"objectClassName" : "entity",
|
||||||
|
"handle" : "301",
|
||||||
|
"status" : ["active"],
|
||||||
|
"links" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"value" : "https://example.com/rdap/entity/301",
|
||||||
|
"rel" : "self",
|
||||||
|
"href": "https://example.com/rdap/entity/301",
|
||||||
|
"type" : "application/rdap+json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"publicIds" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"type" : "IANA Registrar ID",
|
||||||
|
"identifier" : "301"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"remarks": [
|
||||||
|
{
|
||||||
|
"title": "Incomplete Data",
|
||||||
|
"description": [
|
||||||
|
"Summary data only. For complete data, send a specific query for the object."
|
||||||
|
],
|
||||||
|
"type": "object truncated due to unexplainable reasons"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"vcardArray" :
|
||||||
|
[
|
||||||
|
"vcard",
|
||||||
|
[
|
||||||
|
["version", {}, "text", "4.0"],
|
||||||
|
["fn", {}, "text", "Entity 1"],
|
||||||
|
["adr", {}, "text",
|
||||||
|
[
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"123 Example Boulevard <script>",
|
||||||
|
"Williamsburg <script>",
|
||||||
|
"NY",
|
||||||
|
"11211",
|
||||||
|
"United States"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2125551212"],
|
||||||
|
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2125551213"],
|
||||||
|
["email", {}, "text", "contact-us@example.com"]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"roles" : ["registrar"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"objectClassName" : "entity",
|
||||||
|
"handle" : "302",
|
||||||
|
"status" : ["active"],
|
||||||
|
"links" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"value" : "https://example.com/rdap/entity/302",
|
||||||
|
"rel" : "self",
|
||||||
|
"href": "https://example.com/rdap/entity/302",
|
||||||
|
"type" : "application/rdap+json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"publicIds" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"type" : "IANA Registrar ID",
|
||||||
|
"identifier" : "302"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"remarks": [
|
||||||
|
{
|
||||||
|
"title": "Incomplete Data",
|
||||||
|
"description": [
|
||||||
|
"Summary data only. For complete data, send a specific query for the object."
|
||||||
|
],
|
||||||
|
"type": "object truncated due to unexplainable reasons"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"vcardArray" :
|
||||||
|
[
|
||||||
|
"vcard",
|
||||||
|
[
|
||||||
|
["version", {}, "text", "4.0"],
|
||||||
|
["fn", {}, "text", "Entity 2"],
|
||||||
|
["adr", {}, "text",
|
||||||
|
[
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"123 Example Boulevard <script>",
|
||||||
|
"Williamsburg <script>",
|
||||||
|
"NY",
|
||||||
|
"11211",
|
||||||
|
"United States"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2125551212"],
|
||||||
|
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2125551213"],
|
||||||
|
["email", {}, "text", "contact-us@example.com"]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"roles" : ["registrar"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"objectClassName" : "entity",
|
||||||
|
"handle" : "303",
|
||||||
|
"status" : ["active"],
|
||||||
|
"links" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"value" : "https://example.com/rdap/entity/303",
|
||||||
|
"rel" : "self",
|
||||||
|
"href": "https://example.com/rdap/entity/303",
|
||||||
|
"type" : "application/rdap+json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"publicIds" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"type" : "IANA Registrar ID",
|
||||||
|
"identifier" : "303"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"remarks": [
|
||||||
|
{
|
||||||
|
"title": "Incomplete Data",
|
||||||
|
"description": [
|
||||||
|
"Summary data only. For complete data, send a specific query for the object."
|
||||||
|
],
|
||||||
|
"type": "object truncated due to unexplainable reasons"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"vcardArray" :
|
||||||
|
[
|
||||||
|
"vcard",
|
||||||
|
[
|
||||||
|
["version", {}, "text", "4.0"],
|
||||||
|
["fn", {}, "text", "Entity 3"],
|
||||||
|
["adr", {}, "text",
|
||||||
|
[
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"123 Example Boulevard <script>",
|
||||||
|
"Williamsburg <script>",
|
||||||
|
"NY",
|
||||||
|
"11211",
|
||||||
|
"United States"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2125551212"],
|
||||||
|
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2125551213"],
|
||||||
|
["email", {}, "text", "contact-us@example.com"]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"roles" : ["registrar"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"objectClassName" : "entity",
|
||||||
|
"handle" : "304",
|
||||||
|
"status" : ["active"],
|
||||||
|
"links" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"value" : "https://example.com/rdap/entity/304",
|
||||||
|
"rel" : "self",
|
||||||
|
"href": "https://example.com/rdap/entity/304",
|
||||||
|
"type" : "application/rdap+json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"publicIds" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"type" : "IANA Registrar ID",
|
||||||
|
"identifier" : "304"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"remarks": [
|
||||||
|
{
|
||||||
|
"title": "Incomplete Data",
|
||||||
|
"description": [
|
||||||
|
"Summary data only. For complete data, send a specific query for the object."
|
||||||
|
],
|
||||||
|
"type": "object truncated due to unexplainable reasons"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"vcardArray" :
|
||||||
|
[
|
||||||
|
"vcard",
|
||||||
|
[
|
||||||
|
["version", {}, "text", "4.0"],
|
||||||
|
["fn", {}, "text", "Entity 4"],
|
||||||
|
["adr", {}, "text",
|
||||||
|
[
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"123 Example Boulevard <script>",
|
||||||
|
"Williamsburg <script>",
|
||||||
|
"NY",
|
||||||
|
"11211",
|
||||||
|
"United States"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2125551212"],
|
||||||
|
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2125551213"],
|
||||||
|
["email", {}, "text", "contact-us@example.com"]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"roles" : ["registrar"]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"rdapConformance": [ "rdap_level_0" ],
|
||||||
|
"notices" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"title" : "RDAP Terms of Service",
|
||||||
|
"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 Charleston Road Registry or 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."
|
||||||
|
],
|
||||||
|
"links" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"value" : "https://example.com/rdap/help/tos",
|
||||||
|
"rel" : "alternate",
|
||||||
|
"href" : "https://www.registry.google/about/rdap/tos.html",
|
||||||
|
"type" : "text/html"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"remarks" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"description" :
|
||||||
|
[
|
||||||
|
"This response conforms to the RDAP Operational Profile for gTLD Registries and Registrars version 1.0"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
235
javatests/google/registry/rdap/testdata/rdap_truncated_contacts.json
vendored
Normal file
235
javatests/google/registry/rdap/testdata/rdap_truncated_contacts.json
vendored
Normal file
|
@ -0,0 +1,235 @@
|
||||||
|
{
|
||||||
|
"entitySearchResults":
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"objectClassName" : "entity",
|
||||||
|
"handle" : "7-ROID",
|
||||||
|
"status" : ["active"],
|
||||||
|
"links" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"value" : "https://example.com/rdap/entity/7-ROID",
|
||||||
|
"rel" : "self",
|
||||||
|
"href": "https://example.com/rdap/entity/7-ROID",
|
||||||
|
"type" : "application/rdap+json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"remarks": [
|
||||||
|
{
|
||||||
|
"title": "Incomplete Data",
|
||||||
|
"description": [
|
||||||
|
"Summary data only. For complete data, send a specific query for the object."
|
||||||
|
],
|
||||||
|
"type": "object truncated due to unexplainable reasons"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"vcardArray" :
|
||||||
|
[
|
||||||
|
"vcard",
|
||||||
|
[
|
||||||
|
["version", {}, "text", "4.0"],
|
||||||
|
["fn", {}, "text", "Entity 1"],
|
||||||
|
["org", {}, "text", "GOOGLE INCORPORATED <script>"],
|
||||||
|
["adr", {}, "text",
|
||||||
|
[
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"123 Example Boulevard <script>",
|
||||||
|
"KOKOMO",
|
||||||
|
"BM",
|
||||||
|
"31337",
|
||||||
|
"United States"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2126660420"],
|
||||||
|
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"],
|
||||||
|
["email", {}, "text", "contact1@gmail.com"]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"objectClassName" : "entity",
|
||||||
|
"handle" : "8-ROID",
|
||||||
|
"status" : ["active"],
|
||||||
|
"links" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"value" : "https://example.com/rdap/entity/8-ROID",
|
||||||
|
"rel" : "self",
|
||||||
|
"href": "https://example.com/rdap/entity/8-ROID",
|
||||||
|
"type" : "application/rdap+json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"remarks": [
|
||||||
|
{
|
||||||
|
"title": "Incomplete Data",
|
||||||
|
"description": [
|
||||||
|
"Summary data only. For complete data, send a specific query for the object."
|
||||||
|
],
|
||||||
|
"type": "object truncated due to unexplainable reasons"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"vcardArray" :
|
||||||
|
[
|
||||||
|
"vcard",
|
||||||
|
[
|
||||||
|
["version", {}, "text", "4.0"],
|
||||||
|
["fn", {}, "text", "Entity 2"],
|
||||||
|
["org", {}, "text", "GOOGLE INCORPORATED <script>"],
|
||||||
|
["adr", {}, "text",
|
||||||
|
[
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"123 Example Boulevard <script>",
|
||||||
|
"KOKOMO",
|
||||||
|
"BM",
|
||||||
|
"31337",
|
||||||
|
"United States"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2126660420"],
|
||||||
|
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"],
|
||||||
|
["email", {}, "text", "contact2@gmail.com"]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"objectClassName" : "entity",
|
||||||
|
"handle" : "9-ROID",
|
||||||
|
"status" : ["active"],
|
||||||
|
"links" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"value" : "https://example.com/rdap/entity/9-ROID",
|
||||||
|
"rel" : "self",
|
||||||
|
"href": "https://example.com/rdap/entity/9-ROID",
|
||||||
|
"type" : "application/rdap+json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"remarks": [
|
||||||
|
{
|
||||||
|
"title": "Incomplete Data",
|
||||||
|
"description": [
|
||||||
|
"Summary data only. For complete data, send a specific query for the object."
|
||||||
|
],
|
||||||
|
"type": "object truncated due to unexplainable reasons"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"vcardArray" :
|
||||||
|
[
|
||||||
|
"vcard",
|
||||||
|
[
|
||||||
|
["version", {}, "text", "4.0"],
|
||||||
|
["fn", {}, "text", "Entity 3"],
|
||||||
|
["org", {}, "text", "GOOGLE INCORPORATED <script>"],
|
||||||
|
["adr", {}, "text",
|
||||||
|
[
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"123 Example Boulevard <script>",
|
||||||
|
"KOKOMO",
|
||||||
|
"BM",
|
||||||
|
"31337",
|
||||||
|
"United States"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2126660420"],
|
||||||
|
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"],
|
||||||
|
["email", {}, "text", "contact3@gmail.com"]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"objectClassName" : "entity",
|
||||||
|
"handle" : "A-ROID",
|
||||||
|
"status" : ["active"],
|
||||||
|
"links" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"value" : "https://example.com/rdap/entity/A-ROID",
|
||||||
|
"rel" : "self",
|
||||||
|
"href": "https://example.com/rdap/entity/A-ROID",
|
||||||
|
"type" : "application/rdap+json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"remarks": [
|
||||||
|
{
|
||||||
|
"title": "Incomplete Data",
|
||||||
|
"description": [
|
||||||
|
"Summary data only. For complete data, send a specific query for the object."
|
||||||
|
],
|
||||||
|
"type": "object truncated due to unexplainable reasons"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"vcardArray" :
|
||||||
|
[
|
||||||
|
"vcard",
|
||||||
|
[
|
||||||
|
["version", {}, "text", "4.0"],
|
||||||
|
["fn", {}, "text", "Entity 4"],
|
||||||
|
["org", {}, "text", "GOOGLE INCORPORATED <script>"],
|
||||||
|
["adr", {}, "text",
|
||||||
|
[
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"123 Example Boulevard <script>",
|
||||||
|
"KOKOMO",
|
||||||
|
"BM",
|
||||||
|
"31337",
|
||||||
|
"United States"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2126660420"],
|
||||||
|
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"],
|
||||||
|
["email", {}, "text", "contact4@gmail.com"]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"rdapConformance": [ "rdap_level_0" ],
|
||||||
|
"notices" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"title" : "Search Policy",
|
||||||
|
"type" : "result set truncated due to unexplainable reasons",
|
||||||
|
"description" :
|
||||||
|
[
|
||||||
|
"Search results per query are limited."
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title" : "RDAP Terms of Service",
|
||||||
|
"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 Charleston Road Registry or 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."
|
||||||
|
],
|
||||||
|
"links" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"value" : "https://example.com/rdap/help/tos",
|
||||||
|
"rel" : "alternate",
|
||||||
|
"href" : "https://www.registry.google/about/rdap/tos.html",
|
||||||
|
"type" : "text/html"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"remarks" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"description" :
|
||||||
|
[
|
||||||
|
"This response conforms to the RDAP Operational Profile for gTLD Registries and Registrars version 1.0"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
242
javatests/google/registry/rdap/testdata/rdap_truncated_mixed_entities.json
vendored
Normal file
242
javatests/google/registry/rdap/testdata/rdap_truncated_mixed_entities.json
vendored
Normal file
|
@ -0,0 +1,242 @@
|
||||||
|
{
|
||||||
|
"entitySearchResults":
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"objectClassName" : "entity",
|
||||||
|
"handle" : "7-ROID",
|
||||||
|
"status" : ["active"],
|
||||||
|
"links" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"value" : "https://example.com/rdap/entity/7-ROID",
|
||||||
|
"rel" : "self",
|
||||||
|
"href": "https://example.com/rdap/entity/7-ROID",
|
||||||
|
"type" : "application/rdap+json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"remarks": [
|
||||||
|
{
|
||||||
|
"title": "Incomplete Data",
|
||||||
|
"description": [
|
||||||
|
"Summary data only. For complete data, send a specific query for the object."
|
||||||
|
],
|
||||||
|
"type": "object truncated due to unexplainable reasons"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"vcardArray" :
|
||||||
|
[
|
||||||
|
"vcard",
|
||||||
|
[
|
||||||
|
["version", {}, "text", "4.0"],
|
||||||
|
["fn", {}, "text", "Entity 1"],
|
||||||
|
["org", {}, "text", "GOOGLE INCORPORATED <script>"],
|
||||||
|
["adr", {}, "text",
|
||||||
|
[
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"123 Example Boulevard <script>",
|
||||||
|
"KOKOMO",
|
||||||
|
"BM",
|
||||||
|
"31337",
|
||||||
|
"United States"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2126660420"],
|
||||||
|
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"],
|
||||||
|
["email", {}, "text", "contact1@gmail.com"]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"objectClassName" : "entity",
|
||||||
|
"handle" : "8-ROID",
|
||||||
|
"status" : ["active"],
|
||||||
|
"links" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"value" : "https://example.com/rdap/entity/8-ROID",
|
||||||
|
"rel" : "self",
|
||||||
|
"href": "https://example.com/rdap/entity/8-ROID",
|
||||||
|
"type" : "application/rdap+json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"remarks": [
|
||||||
|
{
|
||||||
|
"title": "Incomplete Data",
|
||||||
|
"description": [
|
||||||
|
"Summary data only. For complete data, send a specific query for the object."
|
||||||
|
],
|
||||||
|
"type": "object truncated due to unexplainable reasons"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"vcardArray" :
|
||||||
|
[
|
||||||
|
"vcard",
|
||||||
|
[
|
||||||
|
["version", {}, "text", "4.0"],
|
||||||
|
["fn", {}, "text", "Entity 2"],
|
||||||
|
["org", {}, "text", "GOOGLE INCORPORATED <script>"],
|
||||||
|
["adr", {}, "text",
|
||||||
|
[
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"123 Example Boulevard <script>",
|
||||||
|
"KOKOMO",
|
||||||
|
"BM",
|
||||||
|
"31337",
|
||||||
|
"United States"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2126660420"],
|
||||||
|
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"],
|
||||||
|
["email", {}, "text", "contact2@gmail.com"]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"objectClassName" : "entity",
|
||||||
|
"handle" : "9-ROID",
|
||||||
|
"status" : ["active"],
|
||||||
|
"links" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"value" : "https://example.com/rdap/entity/9-ROID",
|
||||||
|
"rel" : "self",
|
||||||
|
"href": "https://example.com/rdap/entity/9-ROID",
|
||||||
|
"type" : "application/rdap+json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"remarks": [
|
||||||
|
{
|
||||||
|
"title": "Incomplete Data",
|
||||||
|
"description": [
|
||||||
|
"Summary data only. For complete data, send a specific query for the object."
|
||||||
|
],
|
||||||
|
"type": "object truncated due to unexplainable reasons"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"vcardArray" :
|
||||||
|
[
|
||||||
|
"vcard",
|
||||||
|
[
|
||||||
|
["version", {}, "text", "4.0"],
|
||||||
|
["fn", {}, "text", "Entity 3"],
|
||||||
|
["org", {}, "text", "GOOGLE INCORPORATED <script>"],
|
||||||
|
["adr", {}, "text",
|
||||||
|
[
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"123 Example Boulevard <script>",
|
||||||
|
"KOKOMO",
|
||||||
|
"BM",
|
||||||
|
"31337",
|
||||||
|
"United States"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2126660420"],
|
||||||
|
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"],
|
||||||
|
["email", {}, "text", "contact3@gmail.com"]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"objectClassName" : "entity",
|
||||||
|
"handle" : "301",
|
||||||
|
"status" : ["active"],
|
||||||
|
"links" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"value" : "https://example.com/rdap/entity/301",
|
||||||
|
"rel" : "self",
|
||||||
|
"href": "https://example.com/rdap/entity/301",
|
||||||
|
"type" : "application/rdap+json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"publicIds" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"type" : "IANA Registrar ID",
|
||||||
|
"identifier" : "301"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"remarks": [
|
||||||
|
{
|
||||||
|
"title": "Incomplete Data",
|
||||||
|
"description": [
|
||||||
|
"Summary data only. For complete data, send a specific query for the object."
|
||||||
|
],
|
||||||
|
"type": "object truncated due to unexplainable reasons"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"vcardArray" :
|
||||||
|
[
|
||||||
|
"vcard",
|
||||||
|
[
|
||||||
|
["version", {}, "text", "4.0"],
|
||||||
|
["fn", {}, "text", "Entity 4"],
|
||||||
|
["adr", {}, "text",
|
||||||
|
[
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"123 Example Boulevard <script>",
|
||||||
|
"Williamsburg <script>",
|
||||||
|
"NY",
|
||||||
|
"11211",
|
||||||
|
"United States"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2125551212"],
|
||||||
|
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2125551213"],
|
||||||
|
["email", {}, "text", "contact-us@example.com"]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"roles" : ["registrar"]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"rdapConformance": [ "rdap_level_0" ],
|
||||||
|
"notices" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"title" : "Search Policy",
|
||||||
|
"type" : "result set truncated due to unexplainable reasons",
|
||||||
|
"description" :
|
||||||
|
[
|
||||||
|
"Search results per query are limited."
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title" : "RDAP Terms of Service",
|
||||||
|
"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 Charleston Road Registry or 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."
|
||||||
|
],
|
||||||
|
"links" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"value" : "https://example.com/rdap/help/tos",
|
||||||
|
"rel" : "alternate",
|
||||||
|
"href" : "https://www.registry.google/about/rdap/tos.html",
|
||||||
|
"type" : "text/html"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"remarks" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"description" :
|
||||||
|
[
|
||||||
|
"This response conforms to the RDAP Operational Profile for gTLD Registries and Registrars version 1.0"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
263
javatests/google/registry/rdap/testdata/rdap_truncated_registrars.json
vendored
Normal file
263
javatests/google/registry/rdap/testdata/rdap_truncated_registrars.json
vendored
Normal file
|
@ -0,0 +1,263 @@
|
||||||
|
{
|
||||||
|
"entitySearchResults":
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"objectClassName" : "entity",
|
||||||
|
"handle" : "301",
|
||||||
|
"status" : ["active"],
|
||||||
|
"links" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"value" : "https://example.com/rdap/entity/301",
|
||||||
|
"rel" : "self",
|
||||||
|
"href": "https://example.com/rdap/entity/301",
|
||||||
|
"type" : "application/rdap+json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"publicIds" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"type" : "IANA Registrar ID",
|
||||||
|
"identifier" : "301"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"remarks": [
|
||||||
|
{
|
||||||
|
"title": "Incomplete Data",
|
||||||
|
"description": [
|
||||||
|
"Summary data only. For complete data, send a specific query for the object."
|
||||||
|
],
|
||||||
|
"type": "object truncated due to unexplainable reasons"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"vcardArray" :
|
||||||
|
[
|
||||||
|
"vcard",
|
||||||
|
[
|
||||||
|
["version", {}, "text", "4.0"],
|
||||||
|
["fn", {}, "text", "Entity 1"],
|
||||||
|
["adr", {}, "text",
|
||||||
|
[
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"123 Example Boulevard <script>",
|
||||||
|
"Williamsburg <script>",
|
||||||
|
"NY",
|
||||||
|
"11211",
|
||||||
|
"United States"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2125551212"],
|
||||||
|
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2125551213"],
|
||||||
|
["email", {}, "text", "contact-us@example.com"]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"roles" : ["registrar"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"objectClassName" : "entity",
|
||||||
|
"handle" : "302",
|
||||||
|
"status" : ["active"],
|
||||||
|
"links" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"value" : "https://example.com/rdap/entity/302",
|
||||||
|
"rel" : "self",
|
||||||
|
"href": "https://example.com/rdap/entity/302",
|
||||||
|
"type" : "application/rdap+json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"publicIds" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"type" : "IANA Registrar ID",
|
||||||
|
"identifier" : "302"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"remarks": [
|
||||||
|
{
|
||||||
|
"title": "Incomplete Data",
|
||||||
|
"description": [
|
||||||
|
"Summary data only. For complete data, send a specific query for the object."
|
||||||
|
],
|
||||||
|
"type": "object truncated due to unexplainable reasons"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"vcardArray" :
|
||||||
|
[
|
||||||
|
"vcard",
|
||||||
|
[
|
||||||
|
["version", {}, "text", "4.0"],
|
||||||
|
["fn", {}, "text", "Entity 2"],
|
||||||
|
["adr", {}, "text",
|
||||||
|
[
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"123 Example Boulevard <script>",
|
||||||
|
"Williamsburg <script>",
|
||||||
|
"NY",
|
||||||
|
"11211",
|
||||||
|
"United States"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2125551212"],
|
||||||
|
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2125551213"],
|
||||||
|
["email", {}, "text", "contact-us@example.com"]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"roles" : ["registrar"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"objectClassName" : "entity",
|
||||||
|
"handle" : "303",
|
||||||
|
"status" : ["active"],
|
||||||
|
"links" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"value" : "https://example.com/rdap/entity/303",
|
||||||
|
"rel" : "self",
|
||||||
|
"href": "https://example.com/rdap/entity/303",
|
||||||
|
"type" : "application/rdap+json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"publicIds" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"type" : "IANA Registrar ID",
|
||||||
|
"identifier" : "303"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"remarks": [
|
||||||
|
{
|
||||||
|
"title": "Incomplete Data",
|
||||||
|
"description": [
|
||||||
|
"Summary data only. For complete data, send a specific query for the object."
|
||||||
|
],
|
||||||
|
"type": "object truncated due to unexplainable reasons"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"vcardArray" :
|
||||||
|
[
|
||||||
|
"vcard",
|
||||||
|
[
|
||||||
|
["version", {}, "text", "4.0"],
|
||||||
|
["fn", {}, "text", "Entity 3"],
|
||||||
|
["adr", {}, "text",
|
||||||
|
[
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"123 Example Boulevard <script>",
|
||||||
|
"Williamsburg <script>",
|
||||||
|
"NY",
|
||||||
|
"11211",
|
||||||
|
"United States"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2125551212"],
|
||||||
|
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2125551213"],
|
||||||
|
["email", {}, "text", "contact-us@example.com"]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"roles" : ["registrar"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"objectClassName" : "entity",
|
||||||
|
"handle" : "304",
|
||||||
|
"status" : ["active"],
|
||||||
|
"links" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"value" : "https://example.com/rdap/entity/304",
|
||||||
|
"rel" : "self",
|
||||||
|
"href": "https://example.com/rdap/entity/304",
|
||||||
|
"type" : "application/rdap+json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"publicIds" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"type" : "IANA Registrar ID",
|
||||||
|
"identifier" : "304"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"remarks": [
|
||||||
|
{
|
||||||
|
"title": "Incomplete Data",
|
||||||
|
"description": [
|
||||||
|
"Summary data only. For complete data, send a specific query for the object."
|
||||||
|
],
|
||||||
|
"type": "object truncated due to unexplainable reasons"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"vcardArray" :
|
||||||
|
[
|
||||||
|
"vcard",
|
||||||
|
[
|
||||||
|
["version", {}, "text", "4.0"],
|
||||||
|
["fn", {}, "text", "Entity 4"],
|
||||||
|
["adr", {}, "text",
|
||||||
|
[
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"123 Example Boulevard <script>",
|
||||||
|
"Williamsburg <script>",
|
||||||
|
"NY",
|
||||||
|
"11211",
|
||||||
|
"United States"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2125551212"],
|
||||||
|
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2125551213"],
|
||||||
|
["email", {}, "text", "contact-us@example.com"]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"roles" : ["registrar"]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"rdapConformance": [ "rdap_level_0" ],
|
||||||
|
"notices" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"title" : "Search Policy",
|
||||||
|
"type" : "result set truncated due to unexplainable reasons",
|
||||||
|
"description" :
|
||||||
|
[
|
||||||
|
"Search results per query are limited."
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title" : "RDAP Terms of Service",
|
||||||
|
"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 Charleston Road Registry or 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."
|
||||||
|
],
|
||||||
|
"links" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"value" : "https://example.com/rdap/help/tos",
|
||||||
|
"rel" : "alternate",
|
||||||
|
"href" : "https://www.registry.google/about/rdap/tos.html",
|
||||||
|
"type" : "text/html"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"remarks" :
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"description" :
|
||||||
|
[
|
||||||
|
"This response conforms to the RDAP Operational Profile for gTLD Registries and Registrars version 1.0"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue