mirror of
https://github.com/google/nomulus.git
synced 2025-06-10 06:24:45 +02:00
Conform to RDAP Response Profile 15feb19
This is only about the Response Profile, not the Technical Implementation guide. The Response Profile can be found at https://www.icann.org/en/system/files/files/rdap-response-profile-15feb19-en.pdf ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=250277559
This commit is contained in:
parent
19a72ec89b
commit
a457b57621
89 changed files with 4102 additions and 5815 deletions
|
@ -32,6 +32,8 @@ import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
|
|||
@XmlType(name = "dsData")
|
||||
public class DelegationSignerData extends ImmutableObject {
|
||||
|
||||
private DelegationSignerData() {}
|
||||
|
||||
/** The identifier for this particular key in the domain. */
|
||||
int keyTag;
|
||||
|
||||
|
@ -74,6 +76,10 @@ public class DelegationSignerData extends ImmutableObject {
|
|||
return digest;
|
||||
}
|
||||
|
||||
public String getDigestAsString() {
|
||||
return digest == null ? "" : DatatypeConverter.printHexBinary(digest);
|
||||
}
|
||||
|
||||
public static DelegationSignerData create(
|
||||
int keyTag, int algorithm, int digestType, byte[] digest) {
|
||||
DelegationSignerData instance = new DelegationSignerData();
|
||||
|
@ -84,6 +90,11 @@ public class DelegationSignerData extends ImmutableObject {
|
|||
return instance;
|
||||
}
|
||||
|
||||
public static DelegationSignerData create(
|
||||
int keyTag, int algorithm, int digestType, String digestAsHex) {
|
||||
return create(keyTag, algorithm, digestType, DatatypeConverter.parseHexBinary(digestAsHex));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the presentation format of this DS record.
|
||||
*
|
||||
|
|
|
@ -14,6 +14,7 @@ java_library(
|
|||
"//java/google/registry/request",
|
||||
"//java/google/registry/request/auth",
|
||||
"//java/google/registry/util",
|
||||
"//third_party/jaxb",
|
||||
"//third_party/objectify:objectify-v4_1",
|
||||
"@com_google_auto_value",
|
||||
"@com_google_code_findbugs_jsr305",
|
||||
|
|
|
@ -162,8 +162,10 @@ public abstract class RdapActionBase implements Runnable {
|
|||
setPayload(replyObject);
|
||||
metricInformationBuilder.setStatusCode(SC_OK);
|
||||
} catch (HttpException e) {
|
||||
logger.atInfo().withCause(e).log("Error in RDAP");
|
||||
setError(e.getResponseCode(), e.getResponseCodeString(), e.getMessage());
|
||||
} catch (URISyntaxException | IllegalArgumentException e) {
|
||||
logger.atInfo().withCause(e).log("Bad request in RDAP");
|
||||
setError(SC_BAD_REQUEST, "Bad Request", "Not a valid " + getHumanReadableObjectTypeName());
|
||||
} catch (RuntimeException e) {
|
||||
setError(SC_INTERNAL_SERVER_ERROR, "Internal Server Error", "An error was encountered");
|
||||
|
@ -241,17 +243,16 @@ public abstract class RdapActionBase implements Runnable {
|
|||
boolean isAuthorized(EppResource eppResource) {
|
||||
return getRequestTime().isBefore(eppResource.getDeletionTime())
|
||||
|| (shouldIncludeDeleted()
|
||||
&& rdapAuthorization
|
||||
.isAuthorizedForClientId(eppResource.getPersistedCurrentSponsorClientId()));
|
||||
&& rdapAuthorization.isAuthorizedForClientId(
|
||||
eppResource.getPersistedCurrentSponsorClientId()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the EPP resource should be visible.
|
||||
*
|
||||
* <p>This is true iff:
|
||||
* 1. The resource is not deleted, or the request wants to see deleted items, and is authorized to
|
||||
* do so, and:
|
||||
* 2. The request did not specify a registrar to filter on, or the registrar matches.
|
||||
* <p>This is true iff: 1. The resource is not deleted, or the request wants to see deleted items,
|
||||
* and is authorized to do so, and: 2. The request did not specify a registrar to filter on, or
|
||||
* the registrar matches.
|
||||
*/
|
||||
boolean shouldBeVisible(EppResource eppResource) {
|
||||
return isAuthorized(eppResource)
|
||||
|
@ -262,10 +263,9 @@ public abstract class RdapActionBase implements Runnable {
|
|||
/**
|
||||
* Returns true if the EPP resource should be visible.
|
||||
*
|
||||
* <p>This is true iff:
|
||||
* 1. The passed in resource exists and is not deleted (deleted ones will have been projected
|
||||
* forward in time to empty),
|
||||
* 2. The request did not specify a registrar to filter on, or the registrar matches.
|
||||
* <p>This is true iff: 1. The passed in resource exists and is not deleted (deleted ones will
|
||||
* have been projected forward in time to empty), 2. The request did not specify a registrar to
|
||||
* filter on, or the registrar matches.
|
||||
*/
|
||||
boolean shouldBeVisible(Optional<? extends EppResource> eppResource) {
|
||||
return eppResource.isPresent() && shouldBeVisible(eppResource.get());
|
||||
|
@ -465,17 +465,17 @@ public abstract class RdapActionBase implements Runnable {
|
|||
* @param query an already-defined query to be run; a filter on currentSponsorClientId will be
|
||||
* added if appropriate
|
||||
* @param checkForVisibility true if the results should be checked to make sure they are visible;
|
||||
* normally this should be equal to the shouldIncludeDeleted setting, but in cases where
|
||||
* the query could not check deletion status (due to Datastore limitations such as the
|
||||
* limit of one field queried for inequality, for instance), it may need to be set to true
|
||||
* even when not including deleted records
|
||||
* normally this should be equal to the shouldIncludeDeleted setting, but in cases where the
|
||||
* query could not check deletion status (due to Datastore limitations such as the limit of
|
||||
* one field queried for inequality, for instance), it may need to be set to true even when
|
||||
* not including deleted records
|
||||
* @param querySizeLimit the maximum number of items the query is expected to return, usually
|
||||
* because the limit has been set
|
||||
* @return an {@link RdapResultSet} object containing the list of
|
||||
* resources and an incompleteness warning flag, which is set to MIGHT_BE_INCOMPLETE iff
|
||||
* any resources were excluded due to lack of visibility, and the resulting list of
|
||||
* resources is less than the maximum allowable, and the number of items returned by the
|
||||
* query is greater than or equal to the maximum number we might have expected
|
||||
* @return an {@link RdapResultSet} object containing the list of resources and an incompleteness
|
||||
* warning flag, which is set to MIGHT_BE_INCOMPLETE iff any resources were excluded due to
|
||||
* lack of visibility, and the resulting list of resources is less than the maximum allowable,
|
||||
* and the number of items returned by the query is greater than or equal to the maximum
|
||||
* number we might have expected
|
||||
*/
|
||||
<T extends EppResource> RdapResultSet<T> getMatchingResources(
|
||||
Query<T> query, boolean checkForVisibility, int querySizeLimit) {
|
||||
|
|
|
@ -43,9 +43,7 @@ final class RdapDataStructures {
|
|||
public JsonArray toJson() {
|
||||
JsonArray jsonArray = new JsonArray();
|
||||
// Conformance to RFC7483
|
||||
// TODO(b/127490882) check if we need to Add back the rdap_level_0 string, as I think that
|
||||
// just means we conform to the RFC, which we do
|
||||
// jsonArray.add("rdap_level_0");
|
||||
jsonArray.add("rdap_level_0");
|
||||
|
||||
// Conformance to the RDAP Response Profile V2.1
|
||||
// (see section 1.3)
|
||||
|
|
|
@ -65,8 +65,6 @@ public class RdapDomainAction extends RdapActionBase {
|
|||
if (!shouldBeVisible(domainBase)) {
|
||||
throw new NotFoundException(pathSearchString + " not found");
|
||||
}
|
||||
return rdapJsonFormatter.makeRdapJsonForDomain(
|
||||
domainBase.get(),
|
||||
OutputDataType.FULL);
|
||||
return rdapJsonFormatter.createRdapDomain(domainBase.get(), OutputDataType.FULL);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -122,7 +122,8 @@ public class RdapDomainSearchAction extends RdapSearchActionBase {
|
|||
if (!LDH_PATTERN.matcher(nsLdhNameParam.get()).matches()) {
|
||||
throw new BadRequestException("Invalid value of nsLdhName parameter");
|
||||
}
|
||||
results = searchByNameserverLdhName(
|
||||
results =
|
||||
searchByNameserverLdhName(
|
||||
recordWildcardType(RdapSearchPattern.create(nsLdhNameParam.get(), true)));
|
||||
} else {
|
||||
metricInformationBuilder.setSearchType(SearchType.BY_NAMESERVER_ADDRESS);
|
||||
|
@ -182,9 +183,7 @@ public class RdapDomainSearchAction extends RdapSearchActionBase {
|
|||
return searchByDomainNameByTld(partialStringQuery.getSuffix());
|
||||
}
|
||||
|
||||
/**
|
||||
* Searches for domains by domain name without a wildcard or interest in deleted entries.
|
||||
*/
|
||||
/** Searches for domains by domain name without a wildcard or interest in deleted entries. */
|
||||
private DomainSearchResponse searchByDomainNameWithoutWildcard(
|
||||
final RdapSearchPattern partialStringQuery) {
|
||||
Optional<DomainBase> domainBase =
|
||||
|
@ -388,15 +387,14 @@ public class RdapDomainSearchAction extends RdapSearchActionBase {
|
|||
* <p>In theory, we could have any number of hosts using the same IP address. To make sure we get
|
||||
* all the associated domains, we have to retrieve all of them, and use them to look up domains.
|
||||
* This could open us up to a kind of DoS attack if huge number of hosts are defined on a single
|
||||
* IP. To avoid this, fetch only the first {@link #maxNameserversInFirstStage} nameservers. In
|
||||
* all normal circumstances, this should be orders of magnitude more than there actually are. But
|
||||
* it could result in us missing some domains.
|
||||
* IP. To avoid this, fetch only the first {@link #maxNameserversInFirstStage} nameservers. In all
|
||||
* normal circumstances, this should be orders of magnitude more than there actually are. But it
|
||||
* could result in us missing some domains.
|
||||
*
|
||||
* <p>The includeDeleted parameter does NOT cause deleted nameservers to be searched, only deleted
|
||||
* domains which used to be connected to an undeleted nameserver.
|
||||
*/
|
||||
private DomainSearchResponse searchByNameserverIp(
|
||||
final InetAddress inetAddress) {
|
||||
private DomainSearchResponse searchByNameserverIp(final InetAddress inetAddress) {
|
||||
Query<HostResource> query =
|
||||
queryItems(
|
||||
HostResource.class,
|
||||
|
@ -419,8 +417,7 @@ public class RdapDomainSearchAction extends RdapSearchActionBase {
|
|||
* <p>This method is called by {@link #searchByNameserverLdhName} and {@link
|
||||
* #searchByNameserverIp} after they assemble the relevant host keys.
|
||||
*/
|
||||
private DomainSearchResponse searchByNameserverRefs(
|
||||
final Iterable<Key<HostResource>> hostKeys) {
|
||||
private DomainSearchResponse searchByNameserverRefs(final Iterable<Key<HostResource>> hostKeys) {
|
||||
// We must break the query up into chunks, because the in operator is limited to 30 subqueries.
|
||||
// Since it is possible for the same domain to show up more than once in our result list (if
|
||||
// we do a wildcard nameserver search that returns multiple nameservers used by the same
|
||||
|
@ -471,8 +468,7 @@ public class RdapDomainSearchAction extends RdapSearchActionBase {
|
|||
}
|
||||
|
||||
/** Output JSON from data in an {@link RdapResultSet} object. */
|
||||
private DomainSearchResponse makeSearchResults(
|
||||
RdapResultSet<DomainBase> resultSet) {
|
||||
private DomainSearchResponse makeSearchResults(RdapResultSet<DomainBase> resultSet) {
|
||||
return makeSearchResults(
|
||||
resultSet.resources(),
|
||||
resultSet.incompletenessWarningType(),
|
||||
|
@ -501,7 +497,7 @@ public class RdapDomainSearchAction extends RdapSearchActionBase {
|
|||
newCursor = Optional.of(domain.getFullyQualifiedDomainName());
|
||||
builder
|
||||
.domainSearchResultsBuilder()
|
||||
.add(rdapJsonFormatter.makeRdapJsonForDomain(domain, outputDataType));
|
||||
.add(rdapJsonFormatter.createRdapDomain(domain, outputDataType));
|
||||
}
|
||||
if (rdapResultSetMaxSize < domains.size()) {
|
||||
builder.setNextPageUri(createNavigationUri(newCursor.get()));
|
||||
|
|
|
@ -19,6 +19,7 @@ import static google.registry.rdap.RdapUtils.getRegistrarByIanaIdentifier;
|
|||
import static google.registry.request.Action.Method.GET;
|
||||
import static google.registry.request.Action.Method.HEAD;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.primitives.Longs;
|
||||
import com.google.re2j.Pattern;
|
||||
import com.googlecode.objectify.Key;
|
||||
|
@ -72,10 +73,8 @@ public class RdapEntityAction extends RdapActionBase {
|
|||
// 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.
|
||||
if ((contactResource != null) && shouldBeVisible(contactResource)) {
|
||||
return rdapJsonFormatter.makeRdapJsonForContact(
|
||||
contactResource,
|
||||
Optional.empty(),
|
||||
OutputDataType.FULL);
|
||||
return rdapJsonFormatter.createRdapContactEntity(
|
||||
contactResource, ImmutableSet.of(), OutputDataType.FULL);
|
||||
}
|
||||
}
|
||||
Long ianaIdentifier = Longs.tryParse(pathSearchString);
|
||||
|
@ -83,8 +82,7 @@ public class RdapEntityAction extends RdapActionBase {
|
|||
wasValidKey = true;
|
||||
Optional<Registrar> registrar = getRegistrarByIanaIdentifier(ianaIdentifier);
|
||||
if (registrar.isPresent() && shouldBeVisible(registrar.get())) {
|
||||
return rdapJsonFormatter.makeRdapJsonForRegistrar(
|
||||
registrar.get(), OutputDataType.FULL);
|
||||
return rdapJsonFormatter.createRdapRegistrarEntity(registrar.get(), OutputDataType.FULL);
|
||||
}
|
||||
}
|
||||
// At this point, we have failed to find either a contact or a registrar.
|
||||
|
|
|
@ -21,6 +21,7 @@ import static google.registry.request.Action.Method.GET;
|
|||
import static google.registry.request.Action.Method.HEAD;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Streams;
|
||||
import com.google.common.primitives.Booleans;
|
||||
|
@ -380,10 +381,7 @@ public class RdapEntitySearchAction extends RdapSearchActionBase {
|
|||
shouldIncludeDeleted(),
|
||||
querySizeLimit);
|
||||
}
|
||||
return makeSearchResults(
|
||||
contactResultSet,
|
||||
registrars,
|
||||
QueryType.HANDLE);
|
||||
return makeSearchResults(contactResultSet, registrars, QueryType.HANDLE);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -406,9 +404,7 @@ public class RdapEntitySearchAction extends RdapSearchActionBase {
|
|||
* properties of the {@link RdapResultSet} structure and passes them as separate arguments.
|
||||
*/
|
||||
private EntitySearchResponse makeSearchResults(
|
||||
RdapResultSet<ContactResource> resultSet,
|
||||
List<Registrar> registrars,
|
||||
QueryType queryType) {
|
||||
RdapResultSet<ContactResource> resultSet, List<Registrar> registrars, QueryType queryType) {
|
||||
return makeSearchResults(
|
||||
resultSet.resources(),
|
||||
resultSet.incompletenessWarningType(),
|
||||
|
@ -460,10 +456,11 @@ public class RdapEntitySearchAction extends RdapSearchActionBase {
|
|||
for (ContactResource contact : Iterables.limit(contacts, rdapResultSetMaxSize)) {
|
||||
// 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.
|
||||
builder.entitySearchResultsBuilder().add(rdapJsonFormatter.makeRdapJsonForContact(
|
||||
contact,
|
||||
Optional.empty(),
|
||||
outputDataType));
|
||||
builder
|
||||
.entitySearchResultsBuilder()
|
||||
.add(
|
||||
rdapJsonFormatter.createRdapContactEntity(
|
||||
contact, ImmutableSet.of(), outputDataType));
|
||||
newCursor =
|
||||
Optional.of(
|
||||
CONTACT_CURSOR_PREFIX
|
||||
|
@ -476,9 +473,7 @@ public class RdapEntitySearchAction extends RdapSearchActionBase {
|
|||
Iterables.limit(registrars, rdapResultSetMaxSize - contacts.size())) {
|
||||
builder
|
||||
.entitySearchResultsBuilder()
|
||||
.add(
|
||||
rdapJsonFormatter.makeRdapJsonForRegistrar(
|
||||
registrar, outputDataType));
|
||||
.add(rdapJsonFormatter.createRdapRegistrarEntity(registrar, outputDataType));
|
||||
newCursor = Optional.of(REGISTRAR_CURSOR_PREFIX + registrar.getRegistrarName());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -51,11 +51,12 @@ public class RdapIcannStandardInformation {
|
|||
.build())
|
||||
.build();
|
||||
|
||||
/** Required by ICANN RDAP Profile section 1.5.20. */
|
||||
/** Required by ICANN RDAP Response Profile section 2.11. */
|
||||
private static final Notice INACCURACY_COMPLAINT_FORM_NOTICE =
|
||||
Notice.builder()
|
||||
.setTitle("RDDS Inaccuracy Complaint Form")
|
||||
.setDescription(
|
||||
"URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf")
|
||||
"URL of the ICANN RDDS Inaccuracy Complaint Form: https://www.icann.org/wicf")
|
||||
.addLink(
|
||||
Link.builder()
|
||||
.setValue("https://www.icann.org/wicf")
|
||||
|
@ -71,6 +72,7 @@ public class RdapIcannStandardInformation {
|
|||
CONFORMANCE_NOTICE,
|
||||
// RDAP Response Profile 2.6.3
|
||||
DOMAIN_STATUS_CODES_NOTICE,
|
||||
// RDAP Response Profile 2.11
|
||||
INACCURACY_COMPLAINT_FORM_NOTICE);
|
||||
|
||||
/** Boilerplate remarks required by nameserver and entity responses. */
|
||||
|
@ -125,21 +127,14 @@ public class RdapIcannStandardInformation {
|
|||
static final ImmutableList<Notice> POSSIBLY_INCOMPLETE_NOTICES =
|
||||
ImmutableList.of(POSSIBLY_INCOMPLETE_RESULT_SET_NOTICE);
|
||||
|
||||
/** Included when the requester is not logged in as the owner of the domain being returned. */
|
||||
static final Remark DOMAIN_CONTACTS_HIDDEN_DATA_REMARK =
|
||||
Remark.builder()
|
||||
.setTitle("Contacts Hidden")
|
||||
.setDescription("Domain contacts are visible only to the owning registrar.")
|
||||
.setType(Remark.Type.OBJECT_TRUNCATED_UNEXPLAINABLE)
|
||||
.build();
|
||||
|
||||
/**
|
||||
* Included when requester is not logged in as the owner of the contact being returned. Format
|
||||
* required by ICANN RDAP Response Profile 15feb19 section 2.7.4.3.
|
||||
* Included when requester is not logged in as the owner of the contact being returned.
|
||||
*
|
||||
* <p>Format required by ICANN RDAP Response Profile 15feb19 section 2.7.4.3.
|
||||
*/
|
||||
static final Remark CONTACT_PERSONAL_DATA_HIDDEN_DATA_REMARK =
|
||||
Remark.builder()
|
||||
.setTitle("Redacted for Privacy")
|
||||
.setTitle("REDACTED FOR PRIVACY")
|
||||
.setDescription(
|
||||
"Some of the data in this object has been removed.",
|
||||
"Contact personal data is visible only to the owning registrar.")
|
||||
|
@ -154,4 +149,30 @@ public class RdapIcannStandardInformation {
|
|||
.setType("text/html")
|
||||
.build())
|
||||
.build();
|
||||
|
||||
/**
|
||||
* String that replaces GDPR redacted values.
|
||||
*
|
||||
* <p>GTLD Registration Data Temp Spec 17may18, Appendix A, 2.2: Fields required to be "redacted"
|
||||
* MUST privide in the value section text similar to "REDACTED FOR PRIVACY"
|
||||
*/
|
||||
static final String CONTACT_REDACTED_VALUE = "REDACTED FOR PRIVACY";
|
||||
|
||||
/**
|
||||
* Included in ALL contact responses, even if the user is authorized.
|
||||
*
|
||||
* <p>Format required by ICANN RDAP Response Profile 15feb19 section 2.7.5.3.
|
||||
*
|
||||
* <p>NOTE that unlike other redacted fields, there's no allowance to give the email to authorized
|
||||
* users or allow for registrar consent.
|
||||
*/
|
||||
static final Remark CONTACT_EMAIL_REDACTED_FOR_DOMAIN =
|
||||
Remark.builder()
|
||||
.setTitle("EMAIL REDACTED FOR PRIVACY")
|
||||
.setDescription(
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output"
|
||||
+ " for information on how to contact the Registrant of the queried domain"
|
||||
+ " name.")
|
||||
.setType(Remark.Type.OBJECT_REDACTED_AUTHORIZATION)
|
||||
.build();
|
||||
}
|
||||
|
|
|
@ -17,21 +17,27 @@ package google.registry.rdap;
|
|||
import static com.google.common.base.Predicates.not;
|
||||
import static com.google.common.base.Strings.nullToEmpty;
|
||||
import static com.google.common.collect.ImmutableList.toImmutableList;
|
||||
import static com.google.common.collect.ImmutableSet.toImmutableSet;
|
||||
import static com.google.common.collect.ImmutableSetMultimap.toImmutableSetMultimap;
|
||||
import static google.registry.model.EppResourceUtils.isLinked;
|
||||
import static google.registry.model.ofy.ObjectifyService.ofy;
|
||||
import static google.registry.rdap.RdapIcannStandardInformation.CONTACT_REDACTED_VALUE;
|
||||
import static google.registry.util.CollectionUtils.union;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.ImmutableSetMultimap;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.common.collect.Ordering;
|
||||
import com.google.common.collect.Streams;
|
||||
import com.google.common.flogger.FluentLogger;
|
||||
import com.google.common.net.InetAddresses;
|
||||
import com.google.gson.JsonArray;
|
||||
import com.googlecode.objectify.Key;
|
||||
import google.registry.config.RegistryConfig.Config;
|
||||
import google.registry.model.EppResource;
|
||||
import google.registry.model.contact.ContactAddress;
|
||||
import google.registry.model.contact.ContactPhoneNumber;
|
||||
import google.registry.model.contact.ContactResource;
|
||||
import google.registry.model.contact.PostalInfo;
|
||||
|
@ -51,9 +57,12 @@ import google.registry.rdap.RdapDataStructures.Link;
|
|||
import google.registry.rdap.RdapDataStructures.Notice;
|
||||
import google.registry.rdap.RdapDataStructures.PublicId;
|
||||
import google.registry.rdap.RdapDataStructures.RdapStatus;
|
||||
import google.registry.rdap.RdapObjectClasses.RdapContactEntity;
|
||||
import google.registry.rdap.RdapObjectClasses.RdapDomain;
|
||||
import google.registry.rdap.RdapObjectClasses.RdapEntity;
|
||||
import google.registry.rdap.RdapObjectClasses.RdapNameserver;
|
||||
import google.registry.rdap.RdapObjectClasses.RdapRegistrarEntity;
|
||||
import google.registry.rdap.RdapObjectClasses.SecureDns;
|
||||
import google.registry.rdap.RdapObjectClasses.Vcard;
|
||||
import google.registry.rdap.RdapObjectClasses.VcardArray;
|
||||
import google.registry.request.FullServletPath;
|
||||
|
@ -68,11 +77,11 @@ import java.util.HashMap;
|
|||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Stream;
|
||||
import javax.annotation.Nullable;
|
||||
import javax.inject.Inject;
|
||||
import org.joda.time.DateTime;
|
||||
import org.joda.time.DateTimeComparator;
|
||||
|
||||
/**
|
||||
* Helper class to create RDAP JSON objects for various registry entities and objects.
|
||||
|
@ -87,6 +96,8 @@ import org.joda.time.DateTimeComparator;
|
|||
*/
|
||||
public class RdapJsonFormatter {
|
||||
|
||||
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
|
||||
|
||||
private DateTime requestTime = null;
|
||||
|
||||
@Inject @Config("rdapTos") ImmutableList<String> rdapTos;
|
||||
|
@ -108,8 +119,35 @@ public class RdapJsonFormatter {
|
|||
* returned object indicating that it includes only summary data.
|
||||
*/
|
||||
public enum OutputDataType {
|
||||
/**
|
||||
* The full information about an RDAP object.
|
||||
*
|
||||
* <p>Reserved to cases when this object is the only result of a query - either queried
|
||||
* directly, or the sole result of a search query.
|
||||
*/
|
||||
FULL,
|
||||
SUMMARY
|
||||
/**
|
||||
* The minimal information about an RDAP object that is allowed as a reply.
|
||||
*
|
||||
* <p>Reserved to cases when this object is one of many results of a search query.
|
||||
*
|
||||
* <p>We want to minimize the size of the reply, and also minimize the Datastore queries needed
|
||||
* to generate these replies since we might have a lot of these objects to return.
|
||||
*
|
||||
* <p>Each object with a SUMMARY type will have a remark with a direct link to itself, which
|
||||
* will return the FULL result.
|
||||
*/
|
||||
SUMMARY,
|
||||
/**
|
||||
* The object isn't the subject of the query, but is rather a sub-object of the actual reply.
|
||||
*
|
||||
* <p>These objects have less required fields in the RDAP spec, and hence can be even smaller
|
||||
* than the SUMMARY objects.
|
||||
*
|
||||
* <p>Like SUMMARY objects, these objects will also have a remark with a direct link to itself,
|
||||
* which will return the FULL result.
|
||||
*/
|
||||
INTERNAL
|
||||
}
|
||||
|
||||
/** Map of EPP status values to the RDAP equivalents. */
|
||||
|
@ -144,12 +182,11 @@ public class RdapJsonFormatter {
|
|||
/**
|
||||
* Map of EPP event values to the RDAP equivalents.
|
||||
*
|
||||
* <p>Only has entries for the events we care about, according to the RDAP Response Profile
|
||||
* 15feb19.
|
||||
* <p>Only has entries for optional events, either stated as optional in the RDAP Response Profile
|
||||
* 15feb19, or not mentioned at all but thought to be useful anyway.
|
||||
*
|
||||
* There are additional events that don't have HistoryEntry equivalent and are created
|
||||
* differently. They will be in different locations in the code. These values are: EXPIRATION,
|
||||
* LAST_CHANGED, LAST_UPDATE_OF_RDAP_DATABASE.
|
||||
* <p>Any required event should be added elsewhere, preferably without using HistoryEntries (so
|
||||
* that we don't need to load HistoryEntries for "summary" responses).
|
||||
*/
|
||||
private static final ImmutableMap<HistoryEntry.Type, EventAction>
|
||||
HISTORY_ENTRY_TYPE_TO_RDAP_EVENT_ACTION_MAP =
|
||||
|
@ -160,8 +197,6 @@ public class RdapJsonFormatter {
|
|||
|
||||
/** Not in the Response Profile. */
|
||||
.put(HistoryEntry.Type.DOMAIN_AUTORENEW, EventAction.REREGISTRATION)
|
||||
/** Section 2.3.1.1, obligatory. */
|
||||
.put(HistoryEntry.Type.DOMAIN_CREATE, EventAction.REGISTRATION)
|
||||
/** Not in the Response Profile. */
|
||||
.put(HistoryEntry.Type.DOMAIN_DELETE, EventAction.DELETION)
|
||||
/** Not in the Response Profile. */
|
||||
|
@ -170,7 +205,6 @@ public class RdapJsonFormatter {
|
|||
.put(HistoryEntry.Type.DOMAIN_RESTORE, EventAction.REINSTANTIATION)
|
||||
/** Section 2.3.2.3, optional. */
|
||||
.put(HistoryEntry.Type.DOMAIN_TRANSFER_APPROVE, EventAction.TRANSFER)
|
||||
|
||||
.put(HistoryEntry.Type.HOST_CREATE, EventAction.REGISTRATION)
|
||||
.put(HistoryEntry.Type.HOST_DELETE, EventAction.DELETION)
|
||||
.build();
|
||||
|
@ -214,85 +248,134 @@ public class RdapJsonFormatter {
|
|||
/**
|
||||
* Creates a JSON object for a {@link DomainBase}.
|
||||
*
|
||||
* <p>NOTE that domain searches aren't in the spec yet - they're in the RFC7482 that describes the
|
||||
* query format, but they aren't in the RDAP Technical Implementation Guide 15feb19, meaning we
|
||||
* don't have to implement them yet and the RDAP Response Profile doesn't apply to them.
|
||||
*
|
||||
* <p>We're implementing domain searches anyway, BUT we won't have the response for searches
|
||||
* conform to the RDAP Response Profile.
|
||||
*
|
||||
* @param domainBase the domain resource object from which the JSON object should be created
|
||||
* @param outputDataType whether to generate full or summary data
|
||||
* @param outputDataType whether to generate FULL or SUMMARY data. Domains are never INTERNAL.
|
||||
*/
|
||||
RdapDomain makeRdapJsonForDomain(
|
||||
DomainBase domainBase,
|
||||
OutputDataType outputDataType) {
|
||||
RdapDomain createRdapDomain(DomainBase domainBase, OutputDataType outputDataType) {
|
||||
RdapDomain.Builder builder = RdapDomain.builder();
|
||||
builder.linksBuilder().add(makeSelfLink("domain", domainBase.getFullyQualifiedDomainName()));
|
||||
if (outputDataType != OutputDataType.FULL) {
|
||||
builder.remarksBuilder().add(RdapIcannStandardInformation.SUMMARY_DATA_REMARK);
|
||||
}
|
||||
// RDAP Response Profile 15feb19 section 2.1 discusses the domain name.
|
||||
builder.setLdhName(domainBase.getFullyQualifiedDomainName());
|
||||
// RDAP Response Profile 15feb19 section 2.2:
|
||||
// The domain handle MUST be the ROID
|
||||
builder.setHandle(domainBase.getRepoId());
|
||||
builder.setLdhName(domainBase.getFullyQualifiedDomainName());
|
||||
builder.statusBuilder().addAll(
|
||||
// If this is a summary (search result) - we'll return now. Since there's no requirement for
|
||||
// domain searches at all, having the name, handle, and self link is enough.
|
||||
if (outputDataType == OutputDataType.SUMMARY) {
|
||||
return builder.build();
|
||||
}
|
||||
// RDAP Response Profile 15feb19 section 2.3.1:
|
||||
// The domain object in the RDAP response MUST contain the following events:
|
||||
// [registration, expiration, last update of RDAP database]
|
||||
builder
|
||||
.eventsBuilder()
|
||||
.add(
|
||||
Event.builder()
|
||||
.setEventAction(EventAction.REGISTRATION)
|
||||
.setEventActor(
|
||||
Optional.ofNullable(domainBase.getCreationClientId()).orElse("(none)"))
|
||||
.setEventDate(domainBase.getCreationTime())
|
||||
.build(),
|
||||
Event.builder()
|
||||
.setEventAction(EventAction.EXPIRATION)
|
||||
.setEventDate(domainBase.getRegistrationExpirationTime())
|
||||
.build(),
|
||||
Event.builder()
|
||||
.setEventAction(EventAction.LAST_UPDATE_OF_RDAP_DATABASE)
|
||||
.setEventDate(getRequestTime())
|
||||
.build());
|
||||
// RDAP Response Profile 15feb19 section 2.3.2 discusses optional events. We add some of those
|
||||
// here. We also add a few others we find interesting.
|
||||
builder.eventsBuilder().addAll(makeOptionalEvents(domainBase));
|
||||
// RDAP Response Profile 15feb19 section 2.4.1:
|
||||
// The domain object in the RDAP response MUST contain an entity with the Registrar role.
|
||||
//
|
||||
// See {@link createRdapRegistrarEntity} for details of section 2.4 conformance
|
||||
builder
|
||||
.entitiesBuilder()
|
||||
.add(
|
||||
createRdapRegistrarEntity(
|
||||
domainBase.getCurrentSponsorClientId(), OutputDataType.INTERNAL));
|
||||
// RDAP Response Profile 2.6.1: must have at least one status member
|
||||
// makeStatusValueList should in theory always contain one of either "active" or "inactive".
|
||||
ImmutableSet<RdapStatus> status =
|
||||
makeStatusValueList(
|
||||
domainBase.getStatusValues(),
|
||||
false, // isRedacted
|
||||
domainBase.getDeletionTime().isBefore(getRequestTime())));
|
||||
builder.linksBuilder().add(
|
||||
makeSelfLink("domain", domainBase.getFullyQualifiedDomainName()));
|
||||
boolean displayContacts =
|
||||
rdapAuthorization.isAuthorizedForClientId(domainBase.getCurrentSponsorClientId());
|
||||
// If we are outputting all data (not just summary data), also add information about hosts,
|
||||
// contacts and events (history entries). If we are outputting summary data, instead add a
|
||||
// remark indicating that fact.
|
||||
if (outputDataType == OutputDataType.SUMMARY) {
|
||||
builder.remarksBuilder().add(RdapIcannStandardInformation.SUMMARY_DATA_REMARK);
|
||||
} else {
|
||||
ImmutableList<Event> events = makeEvents(domainBase);
|
||||
builder.eventsBuilder().addAll(events);
|
||||
domainBase.getDeletionTime().isBefore(getRequestTime()));
|
||||
builder.statusBuilder().addAll(status);
|
||||
if (status.isEmpty()) {
|
||||
logger.atWarning().log(
|
||||
"Domain %s (ROID %s) doesn't have any status",
|
||||
domainBase.getFullyQualifiedDomainName(), domainBase.getRepoId());
|
||||
}
|
||||
// RDAP Response Profile 2.6.3, must have a notice about statuses. That is in {@link
|
||||
// RdapIcannStandardInformation#domainBoilerplateNotices}
|
||||
|
||||
// Kick off the database loads of the nameservers that we will need, so it can load
|
||||
// asynchronously while we load and process the contacts.
|
||||
Map<Key<HostResource>, HostResource> loadedHosts =
|
||||
ofy().load().keys(domainBase.getNameservers());
|
||||
// Load the registrant and other contacts and add them to the data.
|
||||
if (!displayContacts) {
|
||||
builder
|
||||
.remarksBuilder()
|
||||
.add(RdapIcannStandardInformation.DOMAIN_CONTACTS_HIDDEN_DATA_REMARK);
|
||||
} else {
|
||||
Map<Key<ContactResource>, ContactResource> loadedContacts =
|
||||
ofy().load().keys(domainBase.getReferencedContacts());
|
||||
// RDAP Response Profile 2.7.3, A domain MUST have the REGISTRANT, ADMIN, TECH roles and MAY
|
||||
// have others. We also add the BILLING.
|
||||
//
|
||||
// RDAP Response Profile 2.7.1, 2.7.3 - we MUST have the contacts. 2.7.4 discusses redaction of
|
||||
// fields we don't want to show (as opposed to not having contacts at all) because of GDPR etc.
|
||||
//
|
||||
// the GDPR redaction is handled in createRdapContactEntity
|
||||
ImmutableSetMultimap<Key<ContactResource>, Type> contactsToRoles =
|
||||
Streams.concat(
|
||||
domainBase.getContacts().stream(),
|
||||
Stream.of(
|
||||
DesignatedContact.create(Type.REGISTRANT, domainBase.getRegistrant())))
|
||||
Stream.of(DesignatedContact.create(Type.REGISTRANT, domainBase.getRegistrant())))
|
||||
.sorted(DESIGNATED_CONTACT_ORDERING)
|
||||
.map(
|
||||
designatedContact ->
|
||||
makeRdapJsonForContact(
|
||||
loadedContacts.get(designatedContact.getContactKey()),
|
||||
Optional.of(designatedContact.getType()),
|
||||
outputDataType))
|
||||
.forEach(builder.entitiesBuilder()::add);
|
||||
.collect(
|
||||
toImmutableSetMultimap(
|
||||
DesignatedContact::getContactKey, DesignatedContact::getType));
|
||||
|
||||
for (Key<ContactResource> contactKey : contactsToRoles.keySet()) {
|
||||
Set<RdapEntity.Role> roles =
|
||||
contactsToRoles.get(contactKey).stream()
|
||||
.map(RdapJsonFormatter::convertContactTypeToRdapRole)
|
||||
.collect(toImmutableSet());
|
||||
if (roles.isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
builder
|
||||
.entitiesBuilder()
|
||||
.add(createInternalRegistrarEntity(domainBase.getCurrentSponsorClientId()));
|
||||
.add(
|
||||
createRdapContactEntity(
|
||||
loadedContacts.get(contactKey), roles, OutputDataType.INTERNAL));
|
||||
}
|
||||
// Add the nameservers to the data; the load was kicked off above for efficiency.
|
||||
for (HostResource hostResource
|
||||
: HOST_RESOURCE_ORDERING.immutableSortedCopy(loadedHosts.values())) {
|
||||
builder.nameserversBuilder().add(makeRdapJsonForHost(hostResource, outputDataType));
|
||||
}
|
||||
}
|
||||
return builder.build();
|
||||
// RDAP Response Profile 2.9: we MUST have the nameservers
|
||||
for (HostResource hostResource :
|
||||
HOST_RESOURCE_ORDERING.immutableSortedCopy(loadedHosts.values())) {
|
||||
builder.nameserversBuilder().add(createRdapNameserver(hostResource, OutputDataType.INTERNAL));
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a JSON object for the desired registrar to an existing list of JSON objects.
|
||||
*
|
||||
* @param clientId the registrar client ID
|
||||
*/
|
||||
RdapEntity createInternalRegistrarEntity(String clientId) {
|
||||
Optional<Registrar> registrar = Registrar.loadByClientIdCached(clientId);
|
||||
if (!registrar.isPresent()) {
|
||||
throw new InternalServerErrorException(
|
||||
String.format("Coudn't find registrar '%s'", clientId));
|
||||
}
|
||||
// TODO(b/130150723): we need to display the ABUSE contact for registrar object inside of Domain
|
||||
// responses. Currently, we use summary for any "internal" registrar.
|
||||
return makeRdapJsonForRegistrar(registrar.get(), OutputDataType.SUMMARY);
|
||||
// RDAP Response Profile 2.10 - MUST contain a secureDns member including at least a
|
||||
// delegationSigned element. Other elements (e.g. dsData) MUST be included if the domain name is
|
||||
// signed and the elements are stored in the Registry
|
||||
//
|
||||
// TODO(b/133310221): get the zoneSigned value from the config files.
|
||||
SecureDns.Builder secureDnsBuilder = SecureDns.builder().setZoneSigned(true);
|
||||
domainBase.getDsData().forEach(secureDnsBuilder::addDsData);
|
||||
builder.setSecureDns(secureDnsBuilder.build());
|
||||
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -301,13 +384,26 @@ public class RdapJsonFormatter {
|
|||
* @param hostResource the host resource object from which the JSON object should be created
|
||||
* @param outputDataType whether to generate full or summary data
|
||||
*/
|
||||
RdapNameserver makeRdapJsonForHost(
|
||||
HostResource hostResource,
|
||||
OutputDataType outputDataType) {
|
||||
RdapNameserver.Builder builder = RdapNameserver.builder()
|
||||
.setHandle(hostResource.getRepoId())
|
||||
.setLdhName(hostResource.getFullyQualifiedHostName());
|
||||
RdapNameserver createRdapNameserver(HostResource hostResource, OutputDataType outputDataType) {
|
||||
RdapNameserver.Builder builder = RdapNameserver.builder();
|
||||
builder
|
||||
.linksBuilder()
|
||||
.add(makeSelfLink("nameserver", hostResource.getFullyQualifiedHostName()));
|
||||
if (outputDataType != OutputDataType.FULL) {
|
||||
builder.remarksBuilder().add(RdapIcannStandardInformation.SUMMARY_DATA_REMARK);
|
||||
}
|
||||
|
||||
// We need the ldhName: RDAP Response Profile 2.9.1, 4.1
|
||||
builder.setLdhName(hostResource.getFullyQualifiedHostName());
|
||||
// Handle is optional, but if given it MUST be the ROID.
|
||||
// We will set it always as it's important as a "self link"
|
||||
builder.setHandle(hostResource.getRepoId());
|
||||
|
||||
// Status is optional for internal Nameservers - RDAP Response Profile 2.9.2
|
||||
// It isn't mentioned at all anywhere else. So we can just not put it at all?
|
||||
//
|
||||
// To be safe, we'll put it on the "FULL" version anyway
|
||||
if (outputDataType == OutputDataType.FULL) {
|
||||
ImmutableSet.Builder<StatusValue> statuses = new ImmutableSet.Builder<>();
|
||||
statuses.addAll(hostResource.getStatusValues());
|
||||
if (isLinked(Key.create(hostResource), getRequestTime())) {
|
||||
|
@ -330,19 +426,12 @@ public class RdapJsonFormatter {
|
|||
statuses.build(),
|
||||
false, // isRedacted
|
||||
hostResource.getDeletionTime().isBefore(getRequestTime())));
|
||||
builder
|
||||
.linksBuilder()
|
||||
.add(makeSelfLink("nameserver", hostResource.getFullyQualifiedHostName()));
|
||||
|
||||
// If we are outputting all data (not just summary data), also add events taken from the history
|
||||
// entries. If we are outputting summary data, instead add a remark indicating that fact.
|
||||
if (outputDataType == OutputDataType.SUMMARY) {
|
||||
builder.remarksBuilder().add(RdapIcannStandardInformation.SUMMARY_DATA_REMARK);
|
||||
} else {
|
||||
builder.eventsBuilder().addAll(makeEvents(hostResource));
|
||||
}
|
||||
|
||||
// We MUST have the ip addresses: RDAP Response Profile 4.2.
|
||||
// For query responses - we MUST have all the ip addresses: RDAP Response Profile 4.2.
|
||||
//
|
||||
// However, it is optional for internal responses: RDAP Response Profile 2.9.2
|
||||
if (outputDataType != OutputDataType.INTERNAL) {
|
||||
for (InetAddress inetAddress : hostResource.getInetAddresses()) {
|
||||
if (inetAddress instanceof Inet4Address) {
|
||||
builder.ipv4Builder().add(InetAddresses.toAddrString(inetAddress));
|
||||
|
@ -350,9 +439,25 @@ public class RdapJsonFormatter {
|
|||
builder.ipv6Builder().add(InetAddresses.toAddrString(inetAddress));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// RDAP Response Profile 4.3 - Registrar member is optional, so we only set it for FULL
|
||||
if (outputDataType == OutputDataType.FULL) {
|
||||
builder
|
||||
.entitiesBuilder()
|
||||
.add(createInternalRegistrarEntity(hostResource.getPersistedCurrentSponsorClientId()));
|
||||
.add(
|
||||
createRdapRegistrarEntity(
|
||||
hostResource.getPersistedCurrentSponsorClientId(), OutputDataType.INTERNAL));
|
||||
}
|
||||
if (outputDataType != OutputDataType.INTERNAL) {
|
||||
// Rdap Response Profile 4.4, must have "last update of RDAP database" response. But this is
|
||||
// only for direct query responses and not for internal objects.
|
||||
builder.setLastUpdateOfRdapDatabaseEvent(
|
||||
Event.builder()
|
||||
.setEventAction(EventAction.LAST_UPDATE_OF_RDAP_DATABASE)
|
||||
.setEventDate(getRequestTime())
|
||||
.build());
|
||||
}
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
|
@ -360,35 +465,104 @@ public class RdapJsonFormatter {
|
|||
* Creates a JSON object for a {@link ContactResource} and associated contact type.
|
||||
*
|
||||
* @param contactResource the contact resource object from which the JSON object should be created
|
||||
* @param contactType the contact type to map to an RDAP role; if absent, no role is listed
|
||||
* @param roles the roles of this contact
|
||||
* @param outputDataType whether to generate full or summary data
|
||||
*/
|
||||
RdapEntity makeRdapJsonForContact(
|
||||
RdapContactEntity createRdapContactEntity(
|
||||
ContactResource contactResource,
|
||||
Optional<DesignatedContact.Type> contactType,
|
||||
Iterable<RdapEntity.Role> roles,
|
||||
OutputDataType outputDataType) {
|
||||
RdapContactEntity.Builder contactBuilder = RdapContactEntity.builder();
|
||||
|
||||
// RDAP Response Profile 2.7.1, 2.7.3 - we MUST have the contacts. 2.7.4 discusses censoring of
|
||||
// fields we don't want to show (as opposed to not having contacts at all) because of GDPR etc.
|
||||
//
|
||||
// 2.8 allows for unredacted output for authorized people.
|
||||
boolean isAuthorized =
|
||||
rdapAuthorization.isAuthorizedForClientId(contactResource.getCurrentSponsorClientId());
|
||||
|
||||
RdapEntity.Builder entityBuilder =
|
||||
RdapEntity.builder()
|
||||
.setHandle(contactResource.getRepoId());
|
||||
entityBuilder
|
||||
// ROID needs to be redacted if we aren't authorized, so we can't have a self-link for
|
||||
// unauthorized users
|
||||
if (isAuthorized) {
|
||||
contactBuilder.linksBuilder().add(makeSelfLink("entity", contactResource.getRepoId()));
|
||||
}
|
||||
|
||||
// Only show the "summary data remark" if the user is authorized to see this data - because
|
||||
// unauthorized users don't have a self link meaning they can't navigate to the full data.
|
||||
if (outputDataType != OutputDataType.FULL && isAuthorized) {
|
||||
contactBuilder.remarksBuilder().add(RdapIcannStandardInformation.SUMMARY_DATA_REMARK);
|
||||
}
|
||||
|
||||
// GTLD Registration Data Temp Spec 17may18, Appendix A, 2.3, 2.4 and RDAP Response Profile
|
||||
// 2.7.4.1, 2.7.4.2 - the following fields must be redacted:
|
||||
// for REGISTRANT:
|
||||
// handle (ROID), FN (name), TEL (telephone/fax and extension), street, city, postal code
|
||||
// for ADMIN, TECH:
|
||||
// handle (ROID), FN (name), TEL (telephone/fax and extension), Organization, street, city,
|
||||
// state/province, postal code, country
|
||||
//
|
||||
// Note that in theory we have to show the Organization and state/province and country for the
|
||||
// REGISTRANT. For now we won't do that until we make sure it's really OK for GDPR
|
||||
//
|
||||
if (!isAuthorized) {
|
||||
// RDAP Response Profile 2.7.4.3: if we redact values from the contact, we MUST include a
|
||||
// remark
|
||||
contactBuilder
|
||||
.remarksBuilder()
|
||||
.add(RdapIcannStandardInformation.CONTACT_PERSONAL_DATA_HIDDEN_DATA_REMARK);
|
||||
// to make sure we don't accidentally display data we shouldn't - we replace the
|
||||
// contactResource with a safe resource. Then we can add any information we need (e.g. the
|
||||
// Organization / state / country of the registrant), although we currently don't do that.
|
||||
contactResource =
|
||||
new ContactResource.Builder()
|
||||
.setRepoId(CONTACT_REDACTED_VALUE)
|
||||
.setVoiceNumber(
|
||||
new ContactPhoneNumber.Builder().setPhoneNumber(CONTACT_REDACTED_VALUE).build())
|
||||
.setFaxNumber(
|
||||
new ContactPhoneNumber.Builder().setPhoneNumber(CONTACT_REDACTED_VALUE).build())
|
||||
.setInternationalizedPostalInfo(
|
||||
new PostalInfo.Builder()
|
||||
.setName(CONTACT_REDACTED_VALUE)
|
||||
.setOrg(CONTACT_REDACTED_VALUE)
|
||||
.setType(PostalInfo.Type.INTERNATIONALIZED)
|
||||
.setAddress(
|
||||
new ContactAddress.Builder()
|
||||
.setStreet(ImmutableList.of(CONTACT_REDACTED_VALUE))
|
||||
.setCity(CONTACT_REDACTED_VALUE)
|
||||
.setState(CONTACT_REDACTED_VALUE)
|
||||
.setZip(CONTACT_REDACTED_VALUE)
|
||||
.setCountryCode("XX")
|
||||
.build())
|
||||
.build())
|
||||
.build();
|
||||
}
|
||||
|
||||
// RDAP Response Profile 2.7.3 - we MUST provide a handle set with the ROID, subject to the
|
||||
// redaction above.
|
||||
contactBuilder.setHandle(contactResource.getRepoId());
|
||||
|
||||
// RDAP Response Profile doesn't mention status for contacts, so we only show it if we're both
|
||||
// FULL and Authorized.
|
||||
if (outputDataType == OutputDataType.FULL && isAuthorized) {
|
||||
contactBuilder
|
||||
.statusBuilder()
|
||||
.addAll(
|
||||
makeStatusValueList(
|
||||
isLinked(Key.create(contactResource), getRequestTime())
|
||||
? union(contactResource.getStatusValues(), StatusValue.LINKED)
|
||||
: contactResource.getStatusValues(),
|
||||
!isAuthorized,
|
||||
false,
|
||||
contactResource.getDeletionTime().isBefore(getRequestTime())));
|
||||
}
|
||||
|
||||
contactBuilder.rolesBuilder().addAll(roles);
|
||||
|
||||
contactType.ifPresent(
|
||||
type -> entityBuilder.rolesBuilder().add(convertContactTypeToRdapRole(type)));
|
||||
entityBuilder.linksBuilder().add(makeSelfLink("entity", contactResource.getRepoId()));
|
||||
// If we are logged in as the owner of this contact, create the vCard.
|
||||
if (isAuthorized) {
|
||||
VcardArray.Builder vcardBuilder = VcardArray.builder();
|
||||
// Adding the VCard members subject to the redaction above.
|
||||
//
|
||||
// RDAP Response Profile 2.7.3 - we MUST have FN, ADR, TEL, EMAIL.
|
||||
//
|
||||
// Note that 2.7.5 also says the EMAIL must be omitted, so we'll omit it
|
||||
PostalInfo postalInfo = contactResource.getInternationalizedPostalInfo();
|
||||
if (postalInfo == null) {
|
||||
postalInfo = contactResource.getLocalizedPostalInfo();
|
||||
|
@ -410,60 +584,71 @@ public class RdapJsonFormatter {
|
|||
if (faxPhoneNumber != null) {
|
||||
vcardBuilder.add(makePhoneEntry(PHONE_TYPE_FAX, makePhoneString(faxPhoneNumber)));
|
||||
}
|
||||
String emailAddress = contactResource.getEmailAddress();
|
||||
if (emailAddress != null) {
|
||||
vcardBuilder.add(Vcard.create("email", "text", emailAddress));
|
||||
}
|
||||
entityBuilder.setVcardArray(vcardBuilder.build());
|
||||
} else {
|
||||
entityBuilder
|
||||
// RDAP Response Profile 2.7.5.1, 2.7.5.3:
|
||||
// email MUST be omitted, and we MUST have a Remark saying so
|
||||
contactBuilder
|
||||
.remarksBuilder()
|
||||
.add(RdapIcannStandardInformation.CONTACT_PERSONAL_DATA_HIDDEN_DATA_REMARK);
|
||||
.add(RdapIcannStandardInformation.CONTACT_EMAIL_REDACTED_FOR_DOMAIN);
|
||||
contactBuilder.setVcardArray(vcardBuilder.build());
|
||||
|
||||
if (outputDataType != OutputDataType.INTERNAL) {
|
||||
// Rdap Response Profile 2.7.6 must have "last update of RDAP database" response. But this is
|
||||
// only for direct query responses and not for internal objects. I'm not sure why it's in that
|
||||
// section at all...
|
||||
contactBuilder.setLastUpdateOfRdapDatabaseEvent(
|
||||
Event.builder()
|
||||
.setEventAction(EventAction.LAST_UPDATE_OF_RDAP_DATABASE)
|
||||
.setEventDate(getRequestTime())
|
||||
.build());
|
||||
}
|
||||
|
||||
// If we are outputting all data (not just summary data), also add events taken from the history
|
||||
// entries. If we are outputting summary data, instead add a remark indicating that fact.
|
||||
if (outputDataType == OutputDataType.SUMMARY) {
|
||||
entityBuilder.remarksBuilder().add(RdapIcannStandardInformation.SUMMARY_DATA_REMARK);
|
||||
} else {
|
||||
entityBuilder.eventsBuilder().addAll(makeEvents(contactResource));
|
||||
// entries. This isn't strictly required.
|
||||
//
|
||||
// We also only add it for authorized users because millisecond times can fingerprint a user
|
||||
// just as much as the handle can.
|
||||
if (outputDataType == OutputDataType.FULL && isAuthorized) {
|
||||
contactBuilder.eventsBuilder().addAll(makeOptionalEvents(contactResource));
|
||||
}
|
||||
return entityBuilder.build();
|
||||
return contactBuilder.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a JSON object for a {@link Registrar}.
|
||||
*
|
||||
* @param registrar the registrar object from which the JSON object should be created
|
||||
* @param outputDataType whether to generate full or summary data
|
||||
* <p>This object can be INTERNAL to the Domain and Nameserver responses, with requirements
|
||||
* discussed in the RDAP Response Profile 15feb19 sections 2.4 (internal to Domain) and 4.3
|
||||
* (internal to Namesever)
|
||||
*
|
||||
* @param registrar the registrar object from which the RDAP response
|
||||
* @param outputDataType whether to generate FULL, SUMMARY, or INTERNAL data.
|
||||
*/
|
||||
RdapEntity makeRdapJsonForRegistrar(
|
||||
Registrar registrar,
|
||||
OutputDataType outputDataType) {
|
||||
RdapEntity.Builder builder = RdapEntity.builder();
|
||||
Long ianaIdentifier = registrar.getIanaIdentifier();
|
||||
// the handle MUST be the ianaIdentifier, RDAP Response Profile 2.4.2.
|
||||
builder.setHandle((ianaIdentifier == null) ? "(none)" : ianaIdentifier.toString());
|
||||
builder.statusBuilder().addAll(registrar.isLive() ? STATUS_LIST_ACTIVE : STATUS_LIST_INACTIVE);
|
||||
builder.rolesBuilder().add(RdapEntity.Role.REGISTRAR);
|
||||
if (ianaIdentifier != null) {
|
||||
builder.linksBuilder().add(makeSelfLink("entity", ianaIdentifier.toString()));
|
||||
// We MUST have a publicId with the ianaIdentifier, RDAP Response Profile 2.4.3, 4.3
|
||||
builder
|
||||
.publicIdsBuilder()
|
||||
.add(PublicId.create(PublicId.Type.IANA_REGISTRAR_ID, ianaIdentifier.toString()));
|
||||
RdapRegistrarEntity createRdapRegistrarEntity(
|
||||
Registrar registrar, OutputDataType outputDataType) {
|
||||
RdapRegistrarEntity.Builder builder = RdapRegistrarEntity.builder();
|
||||
if (outputDataType != OutputDataType.FULL) {
|
||||
builder.remarksBuilder().add(RdapIcannStandardInformation.SUMMARY_DATA_REMARK);
|
||||
}
|
||||
// Create the vCard.
|
||||
VcardArray.Builder vcardBuilder = VcardArray.builder();
|
||||
// Rdap Response Profile 2.4.1, 3.1 - The role must me "registrar" and a valid FN VCard must be
|
||||
// present (3.1 requires additional VCards, which will be added next)
|
||||
builder.rolesBuilder().add(RdapEntity.Role.REGISTRAR);
|
||||
String registrarName = registrar.getRegistrarName();
|
||||
if (registrarName != null) {
|
||||
// A valid fn member MUST be present: RDAP Response Profile 2.4.1.
|
||||
vcardBuilder.add(Vcard.create("fn", "text", registrarName));
|
||||
}
|
||||
vcardBuilder.add(Vcard.create("fn", "text", registrarName == null ? "(none)" : registrarName));
|
||||
|
||||
// Rdap Response Profile 3.1 says the response MUST have valid elements FN (already added), ADR,
|
||||
// TEL, EMAIL.
|
||||
// Other than FN (that we already added), these aren't required in INTERNAL responses.
|
||||
if (outputDataType != OutputDataType.INTERNAL) {
|
||||
// Rdap Response Profile 3.1.1 and 3.1.2 discuss the ADR field. See {@link
|
||||
// addVcardAddressEntry}
|
||||
RegistrarAddress address = registrar.getInternationalizedAddress();
|
||||
if (address == null) {
|
||||
address = registrar.getLocalizedAddress();
|
||||
}
|
||||
addVCardAddressEntry(vcardBuilder, address);
|
||||
// TEL fields can be phone or fax
|
||||
String voicePhoneNumber = registrar.getPhoneNumber();
|
||||
if (voicePhoneNumber != null) {
|
||||
vcardBuilder.add(makePhoneEntry(PHONE_TYPE_VOICE, "tel:" + voicePhoneNumber));
|
||||
|
@ -472,53 +657,148 @@ public class RdapJsonFormatter {
|
|||
if (faxPhoneNumber != null) {
|
||||
vcardBuilder.add(makePhoneEntry(PHONE_TYPE_FAX, "tel:" + faxPhoneNumber));
|
||||
}
|
||||
// EMAIL field
|
||||
String emailAddress = registrar.getEmailAddress();
|
||||
if (emailAddress != null) {
|
||||
vcardBuilder.add(Vcard.create("email", "text", emailAddress));
|
||||
}
|
||||
}
|
||||
|
||||
// RDAP Response Profile 2.4.2 and 4.3:
|
||||
// The handle MUST be the IANA ID
|
||||
// 4.3 also says that if no IANA ID exists (which should never be the case for a valid
|
||||
// registrar), the value must be "not applicable". 2.4 doesn't discuss this possibility.
|
||||
Long ianaIdentifier = registrar.getIanaIdentifier();
|
||||
builder.setHandle((ianaIdentifier == null) ? "not applicable" : ianaIdentifier.toString());
|
||||
// RDAP Response Profile 2.4.3 and 4.3:
|
||||
// MUST contain a publicId member with the IANA ID
|
||||
// 4.3 also says that if no IANA ID exists, the response MUST NOT contain the publicId member.
|
||||
// 2.4 doesn't discuss this possibility.
|
||||
if (ianaIdentifier != null) {
|
||||
builder
|
||||
.publicIdsBuilder()
|
||||
.add(PublicId.create(PublicId.Type.IANA_REGISTRAR_ID, ianaIdentifier.toString()));
|
||||
// We also add a self link if an IANA ID exists
|
||||
builder.linksBuilder().add(makeSelfLink("entity", ianaIdentifier.toString()));
|
||||
}
|
||||
|
||||
// There's no mention of the registrar STATUS in the RDAP Response Profile, so we'll only add it
|
||||
// for FULL response
|
||||
// We could probably not add it at all, but it could be useful for us internally
|
||||
if (outputDataType == OutputDataType.FULL) {
|
||||
builder
|
||||
.statusBuilder()
|
||||
.addAll(registrar.isLive() ? STATUS_LIST_ACTIVE : STATUS_LIST_INACTIVE);
|
||||
}
|
||||
|
||||
builder.setVcardArray(vcardBuilder.build());
|
||||
// If we are outputting all data (not just summary data), also add registrar contacts. If we are
|
||||
// outputting summary data, instead add a remark indicating that fact.
|
||||
if (outputDataType == OutputDataType.SUMMARY) {
|
||||
builder.remarksBuilder().add(RdapIcannStandardInformation.SUMMARY_DATA_REMARK);
|
||||
} else {
|
||||
builder.eventsBuilder().addAll(makeEvents(registrar));
|
||||
// include the registrar contacts as subentities
|
||||
ImmutableList<RdapEntity> registrarContacts =
|
||||
|
||||
// Registrar contacts are a bit complicated.
|
||||
//
|
||||
// Rdap Response Profile 3.2, we SHOULD have at least ADMIN and TECH contacts. It says
|
||||
// nothing about ABUSE at all.
|
||||
//
|
||||
// Rdap Response Profile 4.3 doesn't mention contacts at all, meaning probably we don't have to
|
||||
// have any contacts there. But the Registrar itself is Optional in that case, so we will just
|
||||
// skip it completely.
|
||||
//
|
||||
// Rdap Response Profile 2.4.5 says the Registrar inside a Domain response MUST include the
|
||||
// ABUSE contact, but doesn't require any other contact.
|
||||
//
|
||||
// In our current Datastore schema, to get the ABUSE contact we must go over all contacts.
|
||||
// However, there's something to be said about returning smaller JSON
|
||||
//
|
||||
// TODO(b/117242274): Need to decide between 2 options:
|
||||
// - Write the minimum, meaning only ABUSE for INTERNAL registrars, nothing for SUMMARY (also
|
||||
// saves resources for the RegistrarContact Datastore query!) and everything for FULL.
|
||||
// - Write everything for everything.
|
||||
//
|
||||
// For now we'll do the first.
|
||||
|
||||
if (outputDataType != OutputDataType.SUMMARY) {
|
||||
ImmutableList<RdapContactEntity> registrarContacts =
|
||||
registrar.getContacts().stream()
|
||||
.map(registrarContact -> makeRdapJsonForRegistrarContact(registrarContact))
|
||||
.filter(optional -> optional.isPresent())
|
||||
.map(optional -> optional.get())
|
||||
.filter(
|
||||
contact ->
|
||||
outputDataType == OutputDataType.FULL
|
||||
|| contact.roles().contains(RdapEntity.Role.ABUSE))
|
||||
.collect(toImmutableList());
|
||||
// TODO(b/117242274): add a warning (severe?) log if registrar has no ABUSE contact, as having
|
||||
// one is required by the RDAP response profile
|
||||
if (registrarContacts.stream()
|
||||
.noneMatch(contact -> contact.roles().contains(RdapEntity.Role.ABUSE))) {
|
||||
logger.atWarning().log(
|
||||
"Registrar '%s' (IANA ID %s) is missing ABUSE contact",
|
||||
registrar.getClientId(), registrar.getIanaIdentifier());
|
||||
}
|
||||
builder.entitiesBuilder().addAll(registrarContacts);
|
||||
}
|
||||
|
||||
// Rdap Response Profile 3.3, must have "last update of RDAP database" response. But this is
|
||||
// only for direct query responses and not for internal objects.
|
||||
if (outputDataType != OutputDataType.INTERNAL) {
|
||||
builder.setLastUpdateOfRdapDatabaseEvent(
|
||||
Event.builder()
|
||||
.setEventAction(EventAction.LAST_UPDATE_OF_RDAP_DATABASE)
|
||||
.setEventDate(getRequestTime())
|
||||
.build());
|
||||
}
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a JSON object for the desired registrar to an existing list of JSON objects.
|
||||
*
|
||||
* @param clientId the registrar client ID
|
||||
* @param outputDataType whether to generate FULL, SUMMARY, or INTERNAL data.
|
||||
*/
|
||||
RdapRegistrarEntity createRdapRegistrarEntity(String clientId, OutputDataType outputDataType) {
|
||||
Optional<Registrar> registrar = Registrar.loadByClientIdCached(clientId);
|
||||
if (!registrar.isPresent()) {
|
||||
throw new InternalServerErrorException(
|
||||
String.format("Couldn't find registrar '%s'", clientId));
|
||||
}
|
||||
return createRdapRegistrarEntity(registrar.get(), outputDataType);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a JSON object for a {@link RegistrarContact}.
|
||||
*
|
||||
* <p>Returns empty if this contact shouldn't be visible (doesn't have a role).
|
||||
*
|
||||
* <p>NOTE that registrar locations in the response require different roles and different VCard
|
||||
* members according to the spec. Currently, this function returns all the rolls and all the
|
||||
* members for every location, but we might consider refactoring it to allow the minimal required
|
||||
* roles and members.
|
||||
*
|
||||
* <p>Specifically:
|
||||
* <li>Registrar inside a Domain only requires the ABUSE role, and only the TEL and EMAIL members
|
||||
* (RDAP Response Profile 2.4.5)
|
||||
* <li>Registrar responses to direct query don't require any contact, but *should* have the TECH
|
||||
* and ADMIN roles, but require the FN, TEL and EMAIL members
|
||||
* <li>Registrar inside a Nameserver isn't required at all, and if given doesn't require any
|
||||
* contacts
|
||||
*
|
||||
* @param registrarContact the registrar contact for which the JSON object should be created
|
||||
*/
|
||||
static Optional<RdapEntity> makeRdapJsonForRegistrarContact(
|
||||
static Optional<RdapContactEntity> makeRdapJsonForRegistrarContact(
|
||||
RegistrarContact registrarContact) {
|
||||
ImmutableList<RdapEntity.Role> roles = makeRdapRoleList(registrarContact);
|
||||
if (roles.isEmpty()) {
|
||||
return Optional.empty();
|
||||
}
|
||||
RdapEntity.Builder builder = RdapEntity.builder();
|
||||
RdapContactEntity.Builder builder = RdapContactEntity.builder();
|
||||
builder.statusBuilder().addAll(STATUS_LIST_ACTIVE);
|
||||
builder.rolesBuilder().addAll(roles);
|
||||
// Create the vCard.
|
||||
VcardArray.Builder vcardBuilder = VcardArray.builder();
|
||||
// MUST include FN member: RDAP Response Profile 3.2
|
||||
String name = registrarContact.getName();
|
||||
if (name != null) {
|
||||
vcardBuilder.add(Vcard.create("fn", "text", name));
|
||||
}
|
||||
// MUST include TEL and EMAIL members: RDAP Response Profile 2.4.5, 3.2
|
||||
String voicePhoneNumber = registrarContact.getPhoneNumber();
|
||||
if (voicePhoneNumber != null) {
|
||||
vcardBuilder.add(makePhoneEntry(PHONE_TYPE_VOICE, "tel:" + voicePhoneNumber));
|
||||
|
@ -546,9 +826,8 @@ public class RdapJsonFormatter {
|
|||
return RdapEntity.Role.BILLING;
|
||||
case ADMIN:
|
||||
return RdapEntity.Role.ADMIN;
|
||||
default:
|
||||
throw new AssertionError();
|
||||
}
|
||||
throw new AssertionError();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -561,6 +840,8 @@ public class RdapJsonFormatter {
|
|||
* <p>2.4.5. Abuse Contact (email, phone) - an RDAP server MUST include an *entity* with the
|
||||
* *abuse* role within the registrar *entity* which MUST include *tel* and *email*, and MAY
|
||||
* include other members
|
||||
*
|
||||
* <p>3.2. For direct Registrar queries, we SHOULD have at least "admin" and "tech".
|
||||
*/
|
||||
private static ImmutableList<RdapEntity.Role> makeRdapRoleList(
|
||||
RegistrarContact registrarContact) {
|
||||
|
@ -578,9 +859,16 @@ public class RdapJsonFormatter {
|
|||
}
|
||||
|
||||
/**
|
||||
* Creates an event list for a domain, host or contact resource.
|
||||
* Creates the list of optional events to list in domain, nameserver, or contact replies.
|
||||
*
|
||||
* <p>Only has entries for optional events that won't be shown in "SUMMARY" versions of these
|
||||
* objects. These are either stated as optional in the RDAP Response Profile 15feb19, or not
|
||||
* mentioned at all but thought to be useful anyway.
|
||||
*
|
||||
* <p>Any required event should be added elsewhere, preferably without using HistoryEntries (so
|
||||
* that we don't need to load HistoryEntries for "summary" responses).
|
||||
*/
|
||||
private ImmutableList<Event> makeEvents(EppResource resource) {
|
||||
private ImmutableList<Event> makeOptionalEvents(EppResource resource) {
|
||||
HashMap<EventAction, HistoryEntry> lastEntryOfType = Maps.newHashMap();
|
||||
// Events (such as transfer, but also create) can appear multiple times. We only want the last
|
||||
// time they appeared.
|
||||
|
@ -604,21 +892,9 @@ public class RdapJsonFormatter {
|
|||
lastEntryOfType.put(rdapEventAction, historyEntry);
|
||||
}
|
||||
ImmutableList.Builder<Event> eventsBuilder = new ImmutableList.Builder<>();
|
||||
// There are 2 possibly conflicting values for the creation time - either the
|
||||
// resource.getCreationTime, or the REGISTRATION event created from a HistoryEntry
|
||||
//
|
||||
// We favor the HistoryEntry if it exists, since we show that value as REGISTRATION time in the
|
||||
// reply, so the reply will be self-consistent.
|
||||
//
|
||||
// This is mostly an issue in the tests as in "reality" these two values should be the same.
|
||||
//
|
||||
DateTime creationTime =
|
||||
Optional.ofNullable(lastEntryOfType.get(EventAction.REGISTRATION))
|
||||
.map(historyEntry -> historyEntry.getModificationTime())
|
||||
.orElse(resource.getCreationTime());
|
||||
// TODO(b/129849684) remove this and use the events List defined above once we have Event
|
||||
// objects
|
||||
ImmutableList.Builder<DateTime> changeTimesBuilder = new ImmutableList.Builder<>();
|
||||
DateTime creationTime = resource.getCreationTime();
|
||||
DateTime lastChangeTime =
|
||||
resource.getLastEppUpdateTime() == null ? creationTime : resource.getLastEppUpdateTime();
|
||||
// The order of the elements is stable - it's the order in which the enum elements are defined
|
||||
// in EventAction
|
||||
for (EventAction rdapEventAction : EventAction.values()) {
|
||||
|
@ -640,54 +916,18 @@ public class RdapJsonFormatter {
|
|||
.setEventActor(historyEntry.getClientId())
|
||||
.setEventDate(modificationTime)
|
||||
.build());
|
||||
changeTimesBuilder.add(modificationTime);
|
||||
}
|
||||
if (resource instanceof DomainBase) {
|
||||
DateTime expirationTime = ((DomainBase) resource).getRegistrationExpirationTime();
|
||||
if (expirationTime != null) {
|
||||
eventsBuilder.add(
|
||||
Event.builder()
|
||||
.setEventAction(EventAction.EXPIRATION)
|
||||
.setEventDate(expirationTime)
|
||||
.build());
|
||||
changeTimesBuilder.add(expirationTime);
|
||||
}
|
||||
}
|
||||
if (resource.getLastEppUpdateTime() != null) {
|
||||
changeTimesBuilder.add(resource.getLastEppUpdateTime());
|
||||
}
|
||||
// The last change time might not be the lastEppUpdateTime, since some changes happen without
|
||||
// any EPP update (for example, by the passage of time).
|
||||
DateTime lastChangeTime =
|
||||
changeTimesBuilder.build().stream()
|
||||
.filter(changeTime -> changeTime.isBefore(getRequestTime()))
|
||||
.max(DateTimeComparator.getInstance())
|
||||
.orElse(null);
|
||||
if (lastChangeTime != null && lastChangeTime.isAfter(creationTime)) {
|
||||
if (modificationTime.isAfter(lastChangeTime) && modificationTime.isBefore(getRequestTime())) {
|
||||
lastChangeTime = modificationTime;
|
||||
}
|
||||
}
|
||||
// RDAP Response Profile 15feb19 section 2.3.2.2:
|
||||
// The event of eventAction type last changed MUST be omitted if the domain name has not been
|
||||
// updated since it was created
|
||||
if (lastChangeTime.isAfter(creationTime)) {
|
||||
eventsBuilder.add(makeEvent(EventAction.LAST_CHANGED, null, lastChangeTime));
|
||||
}
|
||||
eventsBuilder.add(makeEvent(EventAction.LAST_UPDATE_OF_RDAP_DATABASE, null, getRequestTime()));
|
||||
// TODO(b/129849684): sort events by their time once we return a list of Events instead of JSON
|
||||
// objects.
|
||||
return eventsBuilder.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an event list for a {@link Registrar}.
|
||||
*/
|
||||
private ImmutableList<Event> makeEvents(Registrar registrar) {
|
||||
ImmutableList.Builder<Event> eventsBuilder = new ImmutableList.Builder<>();
|
||||
Long ianaIdentifier = registrar.getIanaIdentifier();
|
||||
eventsBuilder.add(makeEvent(
|
||||
EventAction.REGISTRATION,
|
||||
(ianaIdentifier == null) ? "(none)" : ianaIdentifier.toString(),
|
||||
registrar.getCreationTime()));
|
||||
if ((registrar.getLastUpdateTime() != null)
|
||||
&& registrar.getLastUpdateTime().isAfter(registrar.getCreationTime())) {
|
||||
eventsBuilder.add(makeEvent(
|
||||
EventAction.LAST_CHANGED, null, registrar.getLastUpdateTime()));
|
||||
}
|
||||
eventsBuilder.add(makeEvent(EventAction.LAST_UPDATE_OF_RDAP_DATABASE, null, getRequestTime()));
|
||||
return eventsBuilder.build();
|
||||
}
|
||||
|
||||
|
@ -710,8 +950,11 @@ public class RdapJsonFormatter {
|
|||
/**
|
||||
* Creates a vCard address entry: array of strings specifying the components of the address.
|
||||
*
|
||||
* @see <a href="https://tools.ietf.org/html/rfc7095">
|
||||
* RFC 7095: jCard: The JSON Format for vCard</a>
|
||||
* <p>Rdap Response Profile 3.1.1: MUST contain the following fields: Street, City, Country Rdap
|
||||
* Response Profile 3.1.2: optional fields: State/Province, Postal Code, Fax Number
|
||||
*
|
||||
* @see <a href="https://tools.ietf.org/html/rfc7095">RFC 7095: jCard: The JSON Format for
|
||||
* vCard</a>
|
||||
*/
|
||||
private static void addVCardAddressEntry(VcardArray.Builder vcardArrayBuilder, Address address) {
|
||||
if (address == null) {
|
||||
|
@ -761,7 +1004,8 @@ public class RdapJsonFormatter {
|
|||
addressArray.add(nullToEmpty(address.getState()));
|
||||
addressArray.add(nullToEmpty(address.getZip()));
|
||||
addressArray.add(
|
||||
new Locale("en", address.getCountryCode()).getDisplayCountry(new Locale("en")));
|
||||
new Locale("en", nullToEmpty(address.getCountryCode()))
|
||||
.getDisplayCountry(new Locale("en")));
|
||||
vcardArrayBuilder.add(Vcard.create(
|
||||
"adr",
|
||||
"text",
|
||||
|
@ -791,7 +1035,7 @@ public class RdapJsonFormatter {
|
|||
* indicate deleted objects, and as directed by the profile, the "removed" status to indicate
|
||||
* redacted objects.
|
||||
*/
|
||||
private static ImmutableList<RdapStatus> makeStatusValueList(
|
||||
private static ImmutableSet<RdapStatus> makeStatusValueList(
|
||||
ImmutableSet<StatusValue> statusValues, boolean isRedacted, boolean isDeleted) {
|
||||
Stream<RdapStatus> stream =
|
||||
statusValues
|
||||
|
@ -808,7 +1052,7 @@ public class RdapJsonFormatter {
|
|||
}
|
||||
return stream
|
||||
.sorted(Ordering.natural().onResultOf(RdapStatus::getDisplayName))
|
||||
.collect(toImmutableList());
|
||||
.collect(toImmutableSet());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -67,6 +67,6 @@ public class RdapNameserverAction extends RdapActionBase {
|
|||
if (!shouldBeVisible(hostResource)) {
|
||||
throw new NotFoundException(pathSearchString + " not found");
|
||||
}
|
||||
return rdapJsonFormatter.makeRdapJsonForHost(hostResource.get(), OutputDataType.FULL);
|
||||
return rdapJsonFormatter.createRdapNameserver(hostResource.get(), OutputDataType.FULL);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -167,10 +167,9 @@ public class RdapNameserverSearchAction extends RdapSearchActionBase {
|
|||
NameserverSearchResponse.Builder builder =
|
||||
NameserverSearchResponse.builder()
|
||||
.setIncompletenessWarningType(IncompletenessWarningType.COMPLETE);
|
||||
builder.nameserverSearchResultsBuilder().add(
|
||||
rdapJsonFormatter.makeRdapJsonForHost(
|
||||
hostResource.get(),
|
||||
OutputDataType.FULL));
|
||||
builder
|
||||
.nameserverSearchResultsBuilder()
|
||||
.add(rdapJsonFormatter.createRdapNameserver(hostResource.get(), OutputDataType.FULL));
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
|
@ -230,8 +229,7 @@ public class RdapNameserverSearchAction extends RdapSearchActionBase {
|
|||
getDeletedItemHandling(),
|
||||
querySizeLimit);
|
||||
return makeSearchResults(
|
||||
getMatchingResources(query, shouldIncludeDeleted(), querySizeLimit),
|
||||
CursorType.NAME);
|
||||
getMatchingResources(query, shouldIncludeDeleted(), querySizeLimit), CursorType.NAME);
|
||||
}
|
||||
|
||||
/** Searches for nameservers by IP address, returning a JSON array of nameserver info maps. */
|
||||
|
@ -248,8 +246,7 @@ public class RdapNameserverSearchAction extends RdapSearchActionBase {
|
|||
getDeletedItemHandling(),
|
||||
querySizeLimit);
|
||||
return makeSearchResults(
|
||||
getMatchingResources(query, shouldIncludeDeleted(), querySizeLimit),
|
||||
CursorType.ADDRESS);
|
||||
getMatchingResources(query, shouldIncludeDeleted(), querySizeLimit), CursorType.ADDRESS);
|
||||
}
|
||||
|
||||
/** Output JSON for a lists of hosts contained in an {@link RdapResultSet}. */
|
||||
|
@ -282,7 +279,7 @@ public class RdapNameserverSearchAction extends RdapSearchActionBase {
|
|||
: host.getRepoId());
|
||||
builder
|
||||
.nameserverSearchResultsBuilder()
|
||||
.add(rdapJsonFormatter.makeRdapJsonForHost(host, outputDataType));
|
||||
.add(rdapJsonFormatter.createRdapNameserver(host, outputDataType));
|
||||
}
|
||||
if (rdapResultSetMaxSize < hosts.size()) {
|
||||
builder.setNextPageUri(createNavigationUri(newCursor.get()));
|
||||
|
|
|
@ -25,6 +25,7 @@ import com.google.gson.Gson;
|
|||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonPrimitive;
|
||||
import google.registry.model.domain.secdns.DelegationSignerData;
|
||||
import google.registry.rdap.AbstractJsonableObject.RestrictJsonNames;
|
||||
import google.registry.rdap.RdapDataStructures.Event;
|
||||
import google.registry.rdap.RdapDataStructures.EventWithoutActor;
|
||||
|
@ -149,7 +150,6 @@ final class RdapObjectClasses {
|
|||
*
|
||||
* All Actions need to return an object of this type.
|
||||
*/
|
||||
@RestrictJsonNames("*")
|
||||
abstract static class ReplyPayloadBase extends AbstractJsonableObject {
|
||||
final BoilerplateType boilerplateType;
|
||||
|
||||
|
@ -207,6 +207,18 @@ final class RdapObjectClasses {
|
|||
@JsonableElement abstract ImmutableList<Link> links();
|
||||
@JsonableElement abstract ImmutableList<Event> events();
|
||||
|
||||
/**
|
||||
* Required event for all response objects, but not for internal objects.
|
||||
*
|
||||
* <p>Meaning it's required in, e.g., an RdapNameserver object that is a response to a
|
||||
* Nameserver query, but not to an RdapNameserver that's part of an RdapDomain response to a
|
||||
* Domain query.
|
||||
*
|
||||
* <p>RDAP Response Profile 2.3.1.3, 3.3, 4.4
|
||||
*/
|
||||
@JsonableElement("events[]")
|
||||
abstract Optional<Event> lastUpdateOfRdapDatabaseEvent();
|
||||
|
||||
/**
|
||||
* WHOIS server displayed in RDAP query responses.
|
||||
*
|
||||
|
@ -232,16 +244,20 @@ final class RdapObjectClasses {
|
|||
abstract ImmutableList.Builder<Link> linksBuilder();
|
||||
abstract B setPort43(Port43WhoisServer port43);
|
||||
abstract ImmutableList.Builder<Event> eventsBuilder();
|
||||
|
||||
abstract B setLastUpdateOfRdapDatabaseEvent(Event event);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The Entity Object Class defined in 5.1 of RFC7483.
|
||||
*
|
||||
* <p>Entities are used both for Contacts and for Registrars. We will create different subobjects
|
||||
* for each one for type safety.
|
||||
*
|
||||
* <p>We're missing the "autnums" and "networks" fields
|
||||
*/
|
||||
@RestrictJsonNames({"entities[]", "entitySearchResults[]"})
|
||||
@AutoValue
|
||||
abstract static class RdapEntity extends RdapObjectBase {
|
||||
|
||||
/** Role values specified in RFC 7483 § 10.2.4. */
|
||||
|
@ -280,17 +296,50 @@ final class RdapObjectClasses {
|
|||
@JsonableElement abstract ImmutableSet<Role> roles();
|
||||
@JsonableElement abstract ImmutableList<EventWithoutActor> asEventActor();
|
||||
|
||||
private abstract static class Builder<B extends Builder<B>> extends RdapObjectBase.Builder<B> {
|
||||
abstract B setVcardArray(VcardArray vcardArray);
|
||||
|
||||
abstract ImmutableSet.Builder<Role> rolesBuilder();
|
||||
|
||||
abstract ImmutableList.Builder<EventWithoutActor> asEventActorBuilder();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Registrar version of the Entity Object Class defined in 5.1 of RFC7483.
|
||||
*
|
||||
* <p>Entities are used both for Contacts and for Registrars. We will create different subobjects
|
||||
* for each one for type safety.
|
||||
*/
|
||||
@AutoValue
|
||||
abstract static class RdapRegistrarEntity extends RdapEntity {
|
||||
|
||||
static Builder builder() {
|
||||
return new AutoValue_RdapObjectClasses_RdapEntity.Builder();
|
||||
return new AutoValue_RdapObjectClasses_RdapRegistrarEntity.Builder();
|
||||
}
|
||||
|
||||
@AutoValue.Builder
|
||||
abstract static class Builder extends RdapObjectBase.Builder<Builder> {
|
||||
abstract Builder setVcardArray(VcardArray vcardArray);
|
||||
abstract ImmutableSet.Builder<Role> rolesBuilder();
|
||||
abstract ImmutableList.Builder<EventWithoutActor> asEventActorBuilder();
|
||||
abstract static class Builder extends RdapEntity.Builder<Builder> {
|
||||
abstract RdapRegistrarEntity build();
|
||||
}
|
||||
}
|
||||
|
||||
abstract RdapEntity build();
|
||||
/**
|
||||
* Contact version of the Entity Object Class defined in 5.1 of RFC7483.
|
||||
*
|
||||
* <p>Entities are used both for Contacts and for Registrars. We will create different subobjects
|
||||
* for each one for type safety.
|
||||
*/
|
||||
@AutoValue
|
||||
abstract static class RdapContactEntity extends RdapEntity {
|
||||
|
||||
static Builder builder() {
|
||||
return new AutoValue_RdapObjectClasses_RdapContactEntity.Builder();
|
||||
}
|
||||
|
||||
@AutoValue.Builder
|
||||
abstract static class Builder extends RdapEntity.Builder<Builder> {
|
||||
abstract RdapContactEntity build();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -301,6 +350,10 @@ final class RdapObjectClasses {
|
|||
*
|
||||
* <p>See RDAP Response Profile 15feb19 sections 2.1 and 4.1.
|
||||
*
|
||||
* <p>Note the ldhName field is only required for non-IDN names or IDN names when the query was an
|
||||
* A-label. It is optional for IDN names when the query was a U-label. Because we don't want to
|
||||
* remember the query when building the results, we always show it.
|
||||
*
|
||||
* <p>Not part of the spec, but seems convenient.
|
||||
*/
|
||||
private abstract static class RdapNamedObjectBase extends RdapObjectBase {
|
||||
|
@ -374,7 +427,80 @@ final class RdapObjectClasses {
|
|||
|
||||
abstract RdapNameserver build();
|
||||
}
|
||||
}
|
||||
|
||||
/** Object defined in RFC7483 section 5.3, only used for RdapDomain. */
|
||||
@RestrictJsonNames("secureDNS")
|
||||
@AutoValue
|
||||
abstract static class SecureDns extends AbstractJsonableObject {
|
||||
@RestrictJsonNames("dsData[]")
|
||||
@AutoValue
|
||||
abstract static class DsData extends AbstractJsonableObject {
|
||||
@JsonableElement
|
||||
abstract int keyTag();
|
||||
|
||||
@JsonableElement
|
||||
abstract int algorithm();
|
||||
|
||||
@JsonableElement
|
||||
abstract String digest();
|
||||
|
||||
@JsonableElement
|
||||
abstract int digestType();
|
||||
|
||||
static DsData create(DelegationSignerData dsData) {
|
||||
return new AutoValue_RdapObjectClasses_SecureDns_DsData(
|
||||
dsData.getKeyTag(),
|
||||
dsData.getAlgorithm(),
|
||||
dsData.getDigestAsString(),
|
||||
dsData.getDigestType());
|
||||
}
|
||||
}
|
||||
|
||||
/** true if the zone has been signed, false otherwise. */
|
||||
@JsonableElement
|
||||
abstract boolean zoneSigned();
|
||||
|
||||
/** true if there are DS records in the parent, false otherwise. */
|
||||
@JsonableElement
|
||||
boolean delegationSigned() {
|
||||
return !dsData().isEmpty();
|
||||
}
|
||||
|
||||
/**
|
||||
* an integer representing the signature lifetime in seconds to be used when creating the RRSIG
|
||||
* DS record in the parent zone [RFC5910].
|
||||
*
|
||||
* <p>Note that although it isn't given as optional in RFC7483, in RFC5910 it's mentioned as
|
||||
* optional. Also, our code doesn't support it at all - so it's set to always be empty.
|
||||
*/
|
||||
@JsonableElement
|
||||
Optional<Integer> maxSigLife() {
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
@JsonableElement
|
||||
abstract ImmutableList<DsData> dsData();
|
||||
|
||||
static Builder builder() {
|
||||
return new AutoValue_RdapObjectClasses_SecureDns.Builder();
|
||||
}
|
||||
|
||||
abstract Builder toBuilder();
|
||||
|
||||
@AutoValue.Builder
|
||||
abstract static class Builder {
|
||||
abstract Builder setZoneSigned(boolean zoneSigned);
|
||||
|
||||
abstract ImmutableList.Builder<DsData> dsDataBuilder();
|
||||
|
||||
Builder addDsData(DelegationSignerData dsData) {
|
||||
dsDataBuilder().add(DsData.create(dsData));
|
||||
return this;
|
||||
}
|
||||
|
||||
abstract SecureDns build();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -388,6 +514,9 @@ final class RdapObjectClasses {
|
|||
|
||||
@JsonableElement abstract ImmutableList<RdapNameserver> nameservers();
|
||||
|
||||
@JsonableElement("secureDNS")
|
||||
abstract Optional<SecureDns> secureDns();
|
||||
|
||||
RdapDomain() {
|
||||
super(BoilerplateType.DOMAIN, ObjectClassName.DOMAIN);
|
||||
}
|
||||
|
@ -400,6 +529,8 @@ final class RdapObjectClasses {
|
|||
abstract static class Builder extends RdapNamedObjectBase.Builder<Builder> {
|
||||
abstract ImmutableList.Builder<RdapNameserver> nameserversBuilder();
|
||||
|
||||
abstract Builder setSecureDns(SecureDns secureDns);
|
||||
|
||||
abstract RdapDomain build();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -49,8 +49,7 @@ public final class RequestModule {
|
|||
private final AuthResult authResult;
|
||||
|
||||
@VisibleForTesting
|
||||
public RequestModule(
|
||||
HttpServletRequest req, HttpServletResponse rsp) {
|
||||
public RequestModule(HttpServletRequest req, HttpServletResponse rsp) {
|
||||
this(req, rsp, AuthResult.NOT_AUTHENTICATED);
|
||||
}
|
||||
|
||||
|
|
|
@ -207,7 +207,7 @@ public class DomainBaseTest extends EntityTestCase {
|
|||
.isNotNull();
|
||||
// This behavior should also hold true for ImmutableObjects nested in collections.
|
||||
assertThat(newDomainBase("example.com").asBuilder()
|
||||
.setDsData(ImmutableSet.of(DelegationSignerData.create(1, 1, 1, null)))
|
||||
.setDsData(ImmutableSet.of(DelegationSignerData.create(1, 1, 1, (byte[]) null)))
|
||||
.build().getDsData().asList().get(0).getDigest())
|
||||
.isNull();
|
||||
assertThat(newDomainBase("example.com").asBuilder()
|
||||
|
|
|
@ -16,6 +16,8 @@ package google.registry.rdap;
|
|||
|
||||
import static com.google.common.net.HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN;
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static google.registry.rdap.RdapTestHelper.loadJsonFile;
|
||||
import static google.registry.rdap.RdapTestHelper.parseJsonObject;
|
||||
import static google.registry.request.Action.Method.GET;
|
||||
import static google.registry.request.Action.Method.HEAD;
|
||||
import static google.registry.testing.DatastoreHelper.createTld;
|
||||
|
|
|
@ -20,12 +20,9 @@ import static google.registry.rdap.RdapAuthorization.Role.PUBLIC;
|
|||
import static google.registry.rdap.RdapAuthorization.Role.REGISTRAR;
|
||||
import static google.registry.request.Action.Method.GET;
|
||||
import static google.registry.request.Action.Method.HEAD;
|
||||
import static google.registry.testing.TestDataHelper.loadFile;
|
||||
import static org.mockito.Mockito.mock;
|
||||
|
||||
import com.google.appengine.api.users.User;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.JsonObject;
|
||||
import google.registry.model.ofy.Ofy;
|
||||
import google.registry.request.Action;
|
||||
|
@ -37,8 +34,9 @@ import google.registry.testing.AppEngineRule;
|
|||
import google.registry.testing.FakeClock;
|
||||
import google.registry.testing.FakeResponse;
|
||||
import google.registry.testing.InjectRule;
|
||||
import google.registry.util.Idn;
|
||||
import google.registry.util.TypeUtils;
|
||||
import java.util.Map;
|
||||
import java.util.HashMap;
|
||||
import java.util.Optional;
|
||||
import org.joda.time.DateTime;
|
||||
import org.junit.Before;
|
||||
|
@ -78,8 +76,6 @@ public class RdapActionBaseTestCase<A extends RdapActionBase> {
|
|||
protected final String actionPath;
|
||||
protected final Class<A> rdapActionClass;
|
||||
|
||||
private static final Gson GSON = new Gson();
|
||||
|
||||
protected RdapActionBaseTestCase(Class<A> rdapActionClass) {
|
||||
this.rdapActionClass = rdapActionClass;
|
||||
this.actionPath = Actions.getPathForAction(rdapActionClass);
|
||||
|
@ -117,15 +113,11 @@ public class RdapActionBaseTestCase<A extends RdapActionBase> {
|
|||
metricRole = ADMINISTRATOR;
|
||||
}
|
||||
|
||||
protected static JsonObject parseJsonObject(String jsonString) {
|
||||
return GSON.fromJson(jsonString, JsonObject.class);
|
||||
}
|
||||
|
||||
protected JsonObject generateActualJson(String domainName) {
|
||||
action.requestPath = actionPath + domainName;
|
||||
action.requestMethod = GET;
|
||||
action.run();
|
||||
return parseJsonObject(response.getPayload());
|
||||
return RdapTestHelper.parseJsonObject(response.getPayload());
|
||||
}
|
||||
|
||||
protected String generateHeadPayload(String domainName) {
|
||||
|
@ -135,38 +127,6 @@ public class RdapActionBaseTestCase<A extends RdapActionBase> {
|
|||
return response.getPayload();
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads a resource testdata JSON file, and applies substitutions.
|
||||
*
|
||||
* <p>{@code loadJsonFile("filename.json", "NANE", "something", "ID", "other")} is the same as
|
||||
* {@code loadJsonFile("filename.json", ImmutableMap.of("NANE", "something", "ID", "other"))}.
|
||||
*
|
||||
* @param filename the name of the file from the testdata directory
|
||||
* @param keysAndValues alternating substitution key and value. The substitutions are applied to
|
||||
* the file before parsing it to JSON.
|
||||
*/
|
||||
protected static JsonObject loadJsonFile(String filename, String... keysAndValues) {
|
||||
checkArgument(keysAndValues.length % 2 == 0);
|
||||
ImmutableMap.Builder<String, String> builder = new ImmutableMap.Builder<>();
|
||||
for (int i = 0; i < keysAndValues.length; i += 2) {
|
||||
if (keysAndValues[i + 1] != null) {
|
||||
builder.put(keysAndValues[i], keysAndValues[i + 1]);
|
||||
}
|
||||
}
|
||||
return loadJsonFile(filename, builder.build());
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads a resource testdata JSON file, and applies substitutions.
|
||||
*
|
||||
* @param filename the name of the file from the testdata directory
|
||||
* @param substitutions map of substitutions to apply to the file. The substitutions are applied
|
||||
* to the file before parsing it to JSON.
|
||||
*/
|
||||
protected static JsonObject loadJsonFile(String filename, Map<String, String> substitutions) {
|
||||
return parseJsonObject(loadFile(RdapActionBaseTestCase.class, filename, substitutions));
|
||||
}
|
||||
|
||||
protected JsonObject generateExpectedJsonError(
|
||||
String description,
|
||||
int code) {
|
||||
|
@ -191,10 +151,75 @@ public class RdapActionBaseTestCase<A extends RdapActionBase> {
|
|||
title = "ERR";
|
||||
break;
|
||||
}
|
||||
return loadJsonFile(
|
||||
return RdapTestHelper.loadJsonFile(
|
||||
"rdap_error.json",
|
||||
"DESCRIPTION", description,
|
||||
"TITLE", title,
|
||||
"CODE", String.valueOf(code));
|
||||
}
|
||||
|
||||
protected static JsonFileBuilder jsonFileBuilder() {
|
||||
return new JsonFileBuilder();
|
||||
}
|
||||
|
||||
protected static final class JsonFileBuilder {
|
||||
private final HashMap<String, String> substitutions = new HashMap<>();
|
||||
|
||||
public JsonObject load(String filename) {
|
||||
return RdapTestHelper.loadJsonFile(filename, substitutions);
|
||||
}
|
||||
|
||||
public JsonFileBuilder put(String key, String value) {
|
||||
checkArgument(
|
||||
substitutions.put(key, value) == null, "substitutions already had key of %s", key);
|
||||
return this;
|
||||
}
|
||||
|
||||
public JsonFileBuilder put(String key, int index, String value) {
|
||||
return put(String.format("%s%d", key, index), value);
|
||||
}
|
||||
|
||||
public JsonFileBuilder putNext(String key, String value, String... moreKeyValues) {
|
||||
checkArgument(moreKeyValues.length % 2 == 0);
|
||||
int index = putNextAndReturnIndex(key, value);
|
||||
for (int i = 0; i < moreKeyValues.length; i += 2) {
|
||||
put(moreKeyValues[i], index, moreKeyValues[i + 1]);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public JsonFileBuilder addDomain(String name, String handle) {
|
||||
return putNext(
|
||||
"DOMAIN_PUNYCODE_NAME_", Idn.toASCII(name),
|
||||
"DOMAIN_UNICODE_NAME_", name,
|
||||
"DOMAIN_HANDLE_", handle);
|
||||
}
|
||||
|
||||
public JsonFileBuilder addNameserver(String name, String handle) {
|
||||
return putNext(
|
||||
"NAMESERVER_NAME_", Idn.toASCII(name),
|
||||
"NAMESERVER_UNICODE_NAME_", name,
|
||||
"NAMESERVER_HANDLE_", handle);
|
||||
}
|
||||
|
||||
public JsonFileBuilder addRegistrar(String fullName) {
|
||||
return putNext("REGISTRAR_FULL_NAME_", fullName);
|
||||
}
|
||||
|
||||
public JsonFileBuilder addContact(String handle) {
|
||||
return putNext("CONTACT_HANDLE_", handle);
|
||||
}
|
||||
|
||||
public JsonFileBuilder setNextQuery(String nextQuery) {
|
||||
return put("NEXT_QUERY", nextQuery);
|
||||
}
|
||||
|
||||
private int putNextAndReturnIndex(String key, String value) {
|
||||
for (int i = 1; ; i++) {
|
||||
if (substitutions.putIfAbsent(String.format("%s%d", key, i), value) == null) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -45,7 +45,7 @@ public final class RdapDataStructuresTest {
|
|||
@Test
|
||||
public void testRdapConformance() {
|
||||
assertThat(RdapConformance.INSTANCE.toJson())
|
||||
.isEqualTo(createJson("['icann_rdap_response_profile_0']"));
|
||||
.isEqualTo(createJson("['rdap_level_0','icann_rdap_response_profile_0']"));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
package google.registry.rdap;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static google.registry.rdap.RdapTestHelper.assertThat;
|
||||
import static google.registry.testing.DatastoreHelper.createTld;
|
||||
import static google.registry.testing.DatastoreHelper.persistResource;
|
||||
import static google.registry.testing.DatastoreHelper.persistSimpleResources;
|
||||
|
@ -26,8 +27,6 @@ import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrar;
|
|||
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrarContacts;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.gson.JsonObject;
|
||||
import google.registry.model.contact.ContactResource;
|
||||
import google.registry.model.domain.DomainBase;
|
||||
|
@ -41,9 +40,7 @@ import google.registry.rdap.RdapMetrics.SearchType;
|
|||
import google.registry.rdap.RdapMetrics.WildcardType;
|
||||
import google.registry.rdap.RdapSearchResults.IncompletenessWarningType;
|
||||
import google.registry.request.Action;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import javax.annotation.Nullable;
|
||||
import org.junit.Before;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
@ -90,14 +87,27 @@ public class RdapDomainActionTest extends RdapActionBaseTestCase<RdapDomainActio
|
|||
"ns1.cat.lol", "1.2.3.4", null, clock.nowUtc().minusYears(1));
|
||||
HostResource host2 = makeAndPersistHostResource(
|
||||
"ns2.cat.lol", "bad:f00d:cafe:0:0:0:15:beef", clock.nowUtc().minusYears(2));
|
||||
DomainBase domainCatLol =
|
||||
persistResource(makeDomainBase("cat.lol",
|
||||
registrantLol, adminContactLol, techContactLol, host1, host2, registrarLol));
|
||||
persistResource(
|
||||
makeDomainBase(
|
||||
"cat.lol",
|
||||
registrantLol,
|
||||
adminContactLol,
|
||||
techContactLol,
|
||||
host1,
|
||||
host2,
|
||||
registrarLol)
|
||||
.asBuilder()
|
||||
.setCreationTimeForTest(clock.nowUtc().minusYears(3))
|
||||
.setCreationClientId("foo")
|
||||
.build());
|
||||
|
||||
// deleted domain in lol
|
||||
HostResource hostDodo2 = makeAndPersistHostResource(
|
||||
"ns2.dodo.lol", "bad:f00d:cafe:0:0:0:15:beef", clock.nowUtc().minusYears(2));
|
||||
DomainBase domainDeleted = persistResource(makeDomainBase("dodo.lol",
|
||||
DomainBase domainDeleted =
|
||||
persistResource(
|
||||
makeDomainBase(
|
||||
"dodo.lol",
|
||||
makeAndPersistContactResource(
|
||||
"5372808-ERL",
|
||||
"Goblin Market",
|
||||
|
@ -118,9 +128,13 @@ public class RdapDomainActionTest extends RdapActionBaseTestCase<RdapDomainActio
|
|||
registrarLol),
|
||||
host1,
|
||||
hostDodo2,
|
||||
registrarLol).asBuilder().setDeletionTime(clock.nowUtc().minusDays(1)).build());
|
||||
|
||||
// xn--q9jyb4c
|
||||
registrarLol)
|
||||
.asBuilder()
|
||||
.setCreationTimeForTest(clock.nowUtc().minusYears(3))
|
||||
.setCreationClientId("foo")
|
||||
.setDeletionTime(clock.nowUtc().minusDays(1))
|
||||
.build());
|
||||
// cat.みんな
|
||||
createTld("xn--q9jyb4c");
|
||||
Registrar registrarIdn =
|
||||
persistResource(makeRegistrar("idnregistrar", "IDN Registrar", Registrar.State.ACTIVE));
|
||||
|
@ -146,13 +160,19 @@ public class RdapDomainActionTest extends RdapActionBaseTestCase<RdapDomainActio
|
|||
"bog@cat.lol",
|
||||
clock.nowUtc().minusYears(3),
|
||||
registrarIdn);
|
||||
DomainBase domainCatIdn = persistResource(makeDomainBase("cat.みんな",
|
||||
persistResource(
|
||||
makeDomainBase(
|
||||
"cat.みんな",
|
||||
registrantIdn,
|
||||
adminContactIdn,
|
||||
techContactIdn,
|
||||
host1,
|
||||
host2,
|
||||
registrarIdn));
|
||||
registrarIdn)
|
||||
.asBuilder()
|
||||
.setCreationTimeForTest(clock.nowUtc().minusYears(3))
|
||||
.setCreationClientId("foo")
|
||||
.build());
|
||||
|
||||
// 1.tld
|
||||
createTld("1.tld");
|
||||
|
@ -180,43 +200,21 @@ public class RdapDomainActionTest extends RdapActionBaseTestCase<RdapDomainActio
|
|||
"bog@cat.lol",
|
||||
clock.nowUtc().minusYears(3),
|
||||
registrar1Tld);
|
||||
DomainBase domainCat1Tld = persistResource(makeDomainBase("cat.1.tld",
|
||||
persistResource(
|
||||
makeDomainBase(
|
||||
"cat.1.tld",
|
||||
registrant1Tld,
|
||||
adminContact1Tld,
|
||||
techContact1Tld,
|
||||
host1,
|
||||
host2,
|
||||
registrar1Tld));
|
||||
registrar1Tld)
|
||||
.asBuilder()
|
||||
.setCreationTimeForTest(clock.nowUtc().minusYears(3))
|
||||
.setCreationClientId("foo")
|
||||
.build());
|
||||
|
||||
// history entries
|
||||
persistResource(
|
||||
makeHistoryEntry(
|
||||
domainCatLol,
|
||||
HistoryEntry.Type.DOMAIN_CREATE,
|
||||
Period.create(1, Period.Unit.YEARS),
|
||||
"created",
|
||||
clock.nowUtc()));
|
||||
persistResource(
|
||||
makeHistoryEntry(
|
||||
domainDeleted,
|
||||
HistoryEntry.Type.DOMAIN_CREATE,
|
||||
Period.create(1, Period.Unit.YEARS),
|
||||
"created",
|
||||
clock.nowUtc().minusYears(1)));
|
||||
persistResource(
|
||||
makeHistoryEntry(
|
||||
domainCatIdn,
|
||||
HistoryEntry.Type.DOMAIN_CREATE,
|
||||
Period.create(1, Period.Unit.YEARS),
|
||||
"created",
|
||||
clock.nowUtc()));
|
||||
persistResource(
|
||||
makeHistoryEntry(
|
||||
domainCat1Tld,
|
||||
HistoryEntry.Type.DOMAIN_CREATE,
|
||||
Period.create(1, Period.Unit.YEARS),
|
||||
"created",
|
||||
clock.nowUtc()));
|
||||
persistResource(
|
||||
makeHistoryEntry(
|
||||
domainDeleted,
|
||||
|
@ -226,89 +224,7 @@ public class RdapDomainActionTest extends RdapActionBaseTestCase<RdapDomainActio
|
|||
clock.nowUtc().minusMonths(6)));
|
||||
}
|
||||
|
||||
private JsonObject generateExpectedJson(
|
||||
String expectedOutputFile,
|
||||
String name,
|
||||
String punycodeName,
|
||||
String handle,
|
||||
@Nullable List<String> contactRoids,
|
||||
@Nullable List<String> nameserverRoids,
|
||||
@Nullable List<String> nameserverNames,
|
||||
@Nullable String registrarName) {
|
||||
ImmutableMap.Builder<String, String> substitutionsBuilder = new ImmutableMap.Builder<>();
|
||||
substitutionsBuilder.put("NAME", name);
|
||||
substitutionsBuilder.put("PUNYCODENAME", (punycodeName == null) ? name : punycodeName);
|
||||
substitutionsBuilder.put("HANDLE", handle);
|
||||
substitutionsBuilder.put("TYPE", "domain name");
|
||||
substitutionsBuilder.put("NAMESERVER1ADDRESS", "1.2.3.4");
|
||||
substitutionsBuilder.put("NAMESERVER2ADDRESS", "bad:f00d:cafe::15:beef");
|
||||
if (registrarName != null) {
|
||||
substitutionsBuilder.put("REGISTRARNAME", registrarName);
|
||||
}
|
||||
if (contactRoids != null) {
|
||||
for (int i = 0; i < contactRoids.size(); i++) {
|
||||
substitutionsBuilder.put("CONTACT" + (i + 1) + "ROID", contactRoids.get(i));
|
||||
}
|
||||
}
|
||||
if (nameserverRoids != null) {
|
||||
for (int i = 0; i < nameserverRoids.size(); i++) {
|
||||
substitutionsBuilder.put("NAMESERVER" + (i + 1) + "ROID", nameserverRoids.get(i));
|
||||
}
|
||||
} else {
|
||||
substitutionsBuilder.put("NAMESERVER1ROID", "8-ROID");
|
||||
substitutionsBuilder.put("NAMESERVER2ROID", "A-ROID");
|
||||
}
|
||||
if (nameserverNames != null) {
|
||||
for (int i = 0; i < nameserverRoids.size(); i++) {
|
||||
substitutionsBuilder.put("NAMESERVER" + (i + 1) + "NAME", nameserverNames.get(i));
|
||||
substitutionsBuilder.put("NAMESERVER" + (i + 1) + "PUNYCODENAME", nameserverNames.get(i));
|
||||
}
|
||||
} else {
|
||||
substitutionsBuilder.put("NAMESERVER1NAME", "ns1.cat.lol");
|
||||
substitutionsBuilder.put("NAMESERVER1PUNYCODENAME", "ns1.cat.lol");
|
||||
substitutionsBuilder.put("NAMESERVER2NAME", "ns2.cat.lol");
|
||||
substitutionsBuilder.put("NAMESERVER2PUNYCODENAME", "ns2.cat.lol");
|
||||
}
|
||||
return loadJsonFile(expectedOutputFile, substitutionsBuilder.build());
|
||||
}
|
||||
|
||||
private JsonObject generateExpectedJsonWithTopLevelEntries(
|
||||
String name,
|
||||
String punycodeName,
|
||||
String handle,
|
||||
@Nullable List<String> contactRoids,
|
||||
@Nullable List<String> nameserverRoids,
|
||||
@Nullable String registrarName,
|
||||
String expectedOutputFile) {
|
||||
return generateExpectedJsonWithTopLevelEntries(
|
||||
name,
|
||||
punycodeName,
|
||||
handle,
|
||||
contactRoids,
|
||||
nameserverRoids,
|
||||
null,
|
||||
registrarName,
|
||||
expectedOutputFile);
|
||||
}
|
||||
private JsonObject generateExpectedJsonWithTopLevelEntries(
|
||||
String name,
|
||||
String punycodeName,
|
||||
String handle,
|
||||
@Nullable List<String> contactRoids,
|
||||
@Nullable List<String> nameserverRoids,
|
||||
@Nullable List<String> nameserverNames,
|
||||
@Nullable String registrarName,
|
||||
String expectedOutputFile) {
|
||||
JsonObject obj =
|
||||
generateExpectedJson(
|
||||
expectedOutputFile,
|
||||
name,
|
||||
punycodeName,
|
||||
handle,
|
||||
contactRoids,
|
||||
nameserverRoids,
|
||||
nameserverNames,
|
||||
registrarName);
|
||||
private JsonObject addBoilerplate(JsonObject obj) {
|
||||
RdapTestHelper.addDomainBoilerplateNotices(obj, "https://example.tld/rdap/");
|
||||
return obj;
|
||||
}
|
||||
|
@ -316,14 +232,16 @@ public class RdapDomainActionTest extends RdapActionBaseTestCase<RdapDomainActio
|
|||
private void assertProperResponseForCatLol(String queryString, String expectedOutputFile) {
|
||||
assertThat(generateActualJson(queryString))
|
||||
.isEqualTo(
|
||||
generateExpectedJsonWithTopLevelEntries(
|
||||
"cat.lol",
|
||||
null,
|
||||
"C-LOL",
|
||||
ImmutableList.of("4-ROID", "6-ROID", "2-ROID"),
|
||||
ImmutableList.of("8-ROID", "A-ROID"),
|
||||
"Yes Virginia <script>",
|
||||
expectedOutputFile));
|
||||
addBoilerplate(
|
||||
jsonFileBuilder()
|
||||
.addDomain("cat.lol", "C-LOL")
|
||||
.addContact("4-ROID")
|
||||
.addContact("6-ROID")
|
||||
.addContact("2-ROID")
|
||||
.addNameserver("ns1.cat.lol", "8-ROID")
|
||||
.addNameserver("ns2.cat.lol", "A-ROID")
|
||||
.addRegistrar("Yes Virginia <script>")
|
||||
.load(expectedOutputFile)));
|
||||
assertThat(response.getStatus()).isEqualTo(200);
|
||||
}
|
||||
|
||||
|
@ -406,14 +324,16 @@ public class RdapDomainActionTest extends RdapActionBaseTestCase<RdapDomainActio
|
|||
login("idnregistrar");
|
||||
assertThat(generateActualJson("cat.みんな"))
|
||||
.isEqualTo(
|
||||
generateExpectedJsonWithTopLevelEntries(
|
||||
"cat.みんな",
|
||||
"cat.xn--q9jyb4c",
|
||||
"1D-Q9JYB4C",
|
||||
ImmutableList.of("19-ROID", "1B-ROID", "17-ROID"),
|
||||
ImmutableList.of("8-ROID", "A-ROID"),
|
||||
"IDN Registrar",
|
||||
"rdap_domain_unicode.json"));
|
||||
addBoilerplate(
|
||||
jsonFileBuilder()
|
||||
.addDomain("cat.みんな", "1D-Q9JYB4C")
|
||||
.addContact("19-ROID")
|
||||
.addContact("1B-ROID")
|
||||
.addContact("17-ROID")
|
||||
.addNameserver("ns1.cat.lol", "8-ROID")
|
||||
.addNameserver("ns2.cat.lol", "A-ROID")
|
||||
.addRegistrar("IDN Registrar")
|
||||
.load("rdap_domain_unicode.json")));
|
||||
assertThat(response.getStatus()).isEqualTo(200);
|
||||
}
|
||||
|
||||
|
@ -422,14 +342,16 @@ public class RdapDomainActionTest extends RdapActionBaseTestCase<RdapDomainActio
|
|||
login("idnregistrar");
|
||||
assertThat(generateActualJson("cat.%E3%81%BF%E3%82%93%E3%81%AA"))
|
||||
.isEqualTo(
|
||||
generateExpectedJsonWithTopLevelEntries(
|
||||
"cat.みんな",
|
||||
"cat.xn--q9jyb4c",
|
||||
"1D-Q9JYB4C",
|
||||
ImmutableList.of("19-ROID", "1B-ROID", "17-ROID"),
|
||||
ImmutableList.of("8-ROID", "A-ROID"),
|
||||
"IDN Registrar",
|
||||
"rdap_domain_unicode.json"));
|
||||
addBoilerplate(
|
||||
jsonFileBuilder()
|
||||
.addDomain("cat.みんな", "1D-Q9JYB4C")
|
||||
.addContact("19-ROID")
|
||||
.addContact("1B-ROID")
|
||||
.addContact("17-ROID")
|
||||
.addNameserver("ns1.cat.lol", "8-ROID")
|
||||
.addNameserver("ns2.cat.lol", "A-ROID")
|
||||
.addRegistrar("IDN Registrar")
|
||||
.load("rdap_domain_unicode.json")));
|
||||
assertThat(response.getStatus()).isEqualTo(200);
|
||||
}
|
||||
|
||||
|
@ -438,14 +360,16 @@ public class RdapDomainActionTest extends RdapActionBaseTestCase<RdapDomainActio
|
|||
login("idnregistrar");
|
||||
assertThat(generateActualJson("cat.xn--q9jyb4c"))
|
||||
.isEqualTo(
|
||||
generateExpectedJsonWithTopLevelEntries(
|
||||
"cat.みんな",
|
||||
"cat.xn--q9jyb4c",
|
||||
"1D-Q9JYB4C",
|
||||
ImmutableList.of("19-ROID", "1B-ROID", "17-ROID"),
|
||||
ImmutableList.of("8-ROID", "A-ROID"),
|
||||
"IDN Registrar",
|
||||
"rdap_domain_unicode.json"));
|
||||
addBoilerplate(
|
||||
jsonFileBuilder()
|
||||
.addDomain("cat.みんな", "1D-Q9JYB4C")
|
||||
.addContact("19-ROID")
|
||||
.addContact("1B-ROID")
|
||||
.addContact("17-ROID")
|
||||
.addNameserver("ns1.cat.lol", "8-ROID")
|
||||
.addNameserver("ns2.cat.lol", "A-ROID")
|
||||
.addRegistrar("IDN Registrar")
|
||||
.load("rdap_domain_unicode.json")));
|
||||
assertThat(response.getStatus()).isEqualTo(200);
|
||||
}
|
||||
|
||||
|
@ -454,14 +378,16 @@ public class RdapDomainActionTest extends RdapActionBaseTestCase<RdapDomainActio
|
|||
login("1tldregistrar");
|
||||
assertThat(generateActualJson("cat.1.tld"))
|
||||
.isEqualTo(
|
||||
generateExpectedJsonWithTopLevelEntries(
|
||||
"cat.1.tld",
|
||||
null,
|
||||
"25-1_TLD",
|
||||
ImmutableList.of("21-ROID", "23-ROID", "1F-ROID"),
|
||||
ImmutableList.of("8-ROID", "A-ROID"),
|
||||
"Multilevel Registrar",
|
||||
"rdap_domain.json"));
|
||||
addBoilerplate(
|
||||
jsonFileBuilder()
|
||||
.addDomain("cat.1.tld", "25-1_TLD")
|
||||
.addContact("21-ROID")
|
||||
.addContact("23-ROID")
|
||||
.addContact("1F-ROID")
|
||||
.addNameserver("ns1.cat.lol", "8-ROID")
|
||||
.addNameserver("ns2.cat.lol", "A-ROID")
|
||||
.addRegistrar("Multilevel Registrar")
|
||||
.load("rdap_domain.json")));
|
||||
assertThat(response.getStatus()).isEqualTo(200);
|
||||
}
|
||||
|
||||
|
@ -509,15 +435,16 @@ public class RdapDomainActionTest extends RdapActionBaseTestCase<RdapDomainActio
|
|||
action.includeDeletedParam = Optional.of(true);
|
||||
assertThat(generateActualJson("dodo.lol"))
|
||||
.isEqualTo(
|
||||
generateExpectedJsonWithTopLevelEntries(
|
||||
"dodo.lol",
|
||||
null,
|
||||
"15-LOL",
|
||||
ImmutableList.of("11-ROID", "13-ROID", "F-ROID"),
|
||||
ImmutableList.of("8-ROID", "D-ROID"),
|
||||
ImmutableList.of("ns1.cat.lol", "ns2.dodo.lol"),
|
||||
"Yes Virginia <script>",
|
||||
"rdap_domain_deleted.json"));
|
||||
addBoilerplate(
|
||||
jsonFileBuilder()
|
||||
.addDomain("dodo.lol", "15-LOL")
|
||||
.addContact("11-ROID")
|
||||
.addContact("13-ROID")
|
||||
.addContact("F-ROID")
|
||||
.addNameserver("ns1.cat.lol", "8-ROID")
|
||||
.addNameserver("ns2.dodo.lol", "D-ROID")
|
||||
.addRegistrar("Yes Virginia <script>")
|
||||
.load("rdap_domain_deleted.json")));
|
||||
assertThat(response.getStatus()).isEqualTo(200);
|
||||
}
|
||||
|
||||
|
@ -527,15 +454,16 @@ public class RdapDomainActionTest extends RdapActionBaseTestCase<RdapDomainActio
|
|||
action.includeDeletedParam = Optional.of(true);
|
||||
assertThat(generateActualJson("dodo.lol"))
|
||||
.isEqualTo(
|
||||
generateExpectedJsonWithTopLevelEntries(
|
||||
"dodo.lol",
|
||||
null,
|
||||
"15-LOL",
|
||||
ImmutableList.of("11-ROID", "13-ROID", "F-ROID"),
|
||||
ImmutableList.of("8-ROID", "D-ROID"),
|
||||
ImmutableList.of("ns1.cat.lol", "ns2.dodo.lol"),
|
||||
"Yes Virginia <script>",
|
||||
"rdap_domain_deleted.json"));
|
||||
addBoilerplate(
|
||||
jsonFileBuilder()
|
||||
.addDomain("dodo.lol", "15-LOL")
|
||||
.addContact("11-ROID")
|
||||
.addContact("13-ROID")
|
||||
.addContact("F-ROID")
|
||||
.addNameserver("ns1.cat.lol", "8-ROID")
|
||||
.addNameserver("ns2.dodo.lol", "D-ROID")
|
||||
.addRegistrar("Yes Virginia <script>")
|
||||
.load("rdap_domain_deleted.json")));
|
||||
assertThat(response.getStatus()).isEqualTo(200);
|
||||
}
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -15,6 +15,8 @@
|
|||
package google.registry.rdap;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static google.registry.rdap.RdapTestHelper.assertThat;
|
||||
import static google.registry.rdap.RdapTestHelper.loadJsonFile;
|
||||
import static google.registry.testing.DatastoreHelper.createTld;
|
||||
import static google.registry.testing.DatastoreHelper.persistResource;
|
||||
import static google.registry.testing.DatastoreHelper.persistSimpleResources;
|
||||
|
@ -139,7 +141,6 @@ public class RdapEntityActionTest extends RdapActionBaseTestCase<RdapEntityActio
|
|||
"NAME", handle,
|
||||
"FULLNAME", fullName,
|
||||
"ADDRESS", (address == null) ? "\"1 Smiley Row\", \"Suite みんな\"" : address,
|
||||
"EMAIL", "lol@cat.みんな",
|
||||
"TYPE", "entity",
|
||||
"STATUS", status);
|
||||
}
|
||||
|
|
|
@ -15,6 +15,9 @@
|
|||
package google.registry.rdap;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static google.registry.rdap.RdapTestHelper.assertThat;
|
||||
import static google.registry.rdap.RdapTestHelper.loadJsonFile;
|
||||
import static google.registry.rdap.RdapTestHelper.parseJsonObject;
|
||||
import static google.registry.request.Action.Method.GET;
|
||||
import static google.registry.testing.DatastoreHelper.createTld;
|
||||
import static google.registry.testing.DatastoreHelper.persistResource;
|
||||
|
@ -161,14 +164,13 @@ public class RdapEntitySearchActionTest extends RdapSearchActionTestCase<RdapEnt
|
|||
private JsonObject generateExpectedJson(
|
||||
String handle,
|
||||
String expectedOutputFile) {
|
||||
return generateExpectedJson(handle, null, "active", null, null, expectedOutputFile);
|
||||
return generateExpectedJson(handle, null, "active", null, expectedOutputFile);
|
||||
}
|
||||
|
||||
private JsonObject generateExpectedJson(
|
||||
String handle,
|
||||
@Nullable String fullName,
|
||||
String status,
|
||||
@Nullable String email,
|
||||
@Nullable String address,
|
||||
String expectedOutputFile) {
|
||||
ImmutableMap.Builder<String, String> builder = new ImmutableMap.Builder<>();
|
||||
|
@ -176,9 +178,6 @@ public class RdapEntitySearchActionTest extends RdapSearchActionTestCase<RdapEnt
|
|||
if (fullName != null) {
|
||||
builder.put("FULLNAME", fullName);
|
||||
}
|
||||
if (email != null) {
|
||||
builder.put("EMAIL", email);
|
||||
}
|
||||
if (address != null) {
|
||||
builder.put("ADDRESS", address);
|
||||
}
|
||||
|
@ -191,11 +190,9 @@ public class RdapEntitySearchActionTest extends RdapSearchActionTestCase<RdapEnt
|
|||
String handle,
|
||||
String fullName,
|
||||
String status,
|
||||
@Nullable String email,
|
||||
@Nullable String address,
|
||||
String expectedOutputFile) {
|
||||
JsonObject obj =
|
||||
generateExpectedJson(handle, fullName, status, email, address, expectedOutputFile);
|
||||
JsonObject obj = generateExpectedJson(handle, fullName, status, address, expectedOutputFile);
|
||||
obj = RdapTestHelper.wrapInSearchReply("entitySearchResults", obj);
|
||||
RdapTestHelper.addNonDomainBoilerplateNotices(obj, "https://example.tld/rdap/");
|
||||
return obj;
|
||||
|
@ -275,7 +272,6 @@ public class RdapEntitySearchActionTest extends RdapSearchActionTestCase<RdapEnt
|
|||
"2-ROID",
|
||||
"Blinky (赤ベイ)",
|
||||
"active",
|
||||
"blinky@b.tld",
|
||||
"\"123 Blinky St\", \"Blinkyland\"",
|
||||
fileName);
|
||||
}
|
||||
|
@ -285,7 +281,7 @@ public class RdapEntitySearchActionTest extends RdapSearchActionTestCase<RdapEnt
|
|||
String handle,
|
||||
@Nullable String fullName,
|
||||
String fileName) {
|
||||
runSuccessfulNameTest(queryString, handle, fullName, "active", null, null, fileName);
|
||||
runSuccessfulNameTest(queryString, handle, fullName, "active", null, fileName);
|
||||
}
|
||||
|
||||
private void runSuccessfulNameTest(
|
||||
|
@ -293,13 +289,11 @@ public class RdapEntitySearchActionTest extends RdapSearchActionTestCase<RdapEnt
|
|||
String handle,
|
||||
@Nullable String fullName,
|
||||
String status,
|
||||
@Nullable String email,
|
||||
@Nullable String address,
|
||||
String fileName) {
|
||||
rememberWildcardType(queryString);
|
||||
assertThat(generateActualJsonWithFullName(queryString))
|
||||
.isEqualTo(
|
||||
generateExpectedJsonForEntity(handle, fullName, status, email, address, fileName));
|
||||
.isEqualTo(generateExpectedJsonForEntity(handle, fullName, status, address, fileName));
|
||||
assertThat(response.getStatus()).isEqualTo(200);
|
||||
}
|
||||
|
||||
|
@ -316,7 +310,6 @@ public class RdapEntitySearchActionTest extends RdapSearchActionTestCase<RdapEnt
|
|||
"2-ROID",
|
||||
"Blinky (赤ベイ)",
|
||||
"active",
|
||||
"blinky@b.tld",
|
||||
"\"123 Blinky St\", \"Blinkyland\"",
|
||||
fileName);
|
||||
}
|
||||
|
@ -326,7 +319,7 @@ public class RdapEntitySearchActionTest extends RdapSearchActionTestCase<RdapEnt
|
|||
String handle,
|
||||
@Nullable String fullName,
|
||||
String fileName) {
|
||||
runSuccessfulHandleTest(queryString, handle, fullName, "active", null, null, fileName);
|
||||
runSuccessfulHandleTest(queryString, handle, fullName, "active", null, fileName);
|
||||
}
|
||||
|
||||
private void runSuccessfulHandleTest(
|
||||
|
@ -334,13 +327,11 @@ public class RdapEntitySearchActionTest extends RdapSearchActionTestCase<RdapEnt
|
|||
String handle,
|
||||
@Nullable String fullName,
|
||||
String status,
|
||||
@Nullable String email,
|
||||
@Nullable String address,
|
||||
String fileName) {
|
||||
rememberWildcardType(queryString);
|
||||
assertThat(generateActualJsonWithHandle(queryString))
|
||||
.isEqualTo(
|
||||
generateExpectedJsonForEntity(handle, fullName, status, email, address, fileName));
|
||||
.isEqualTo(generateExpectedJsonForEntity(handle, fullName, status, address, fileName));
|
||||
assertThat(response.getStatus()).isEqualTo(200);
|
||||
}
|
||||
|
||||
|
@ -869,7 +860,7 @@ public class RdapEntitySearchActionTest extends RdapSearchActionTestCase<RdapEnt
|
|||
public void testNameMatchRegistrar_found_inactiveAsSameRegistrar() {
|
||||
action.includeDeletedParam = Optional.of(true);
|
||||
login("2-RegistrarInact");
|
||||
runSuccessfulNameTest("No Way", "21", "No Way", "inactive", null, null, "rdap_registrar.json");
|
||||
runSuccessfulNameTest("No Way", "21", "No Way", "inactive", null, "rdap_registrar.json");
|
||||
verifyMetrics(0);
|
||||
}
|
||||
|
||||
|
@ -877,7 +868,7 @@ public class RdapEntitySearchActionTest extends RdapSearchActionTestCase<RdapEnt
|
|||
public void testNameMatchRegistrar_found_inactiveAsAdmin() {
|
||||
action.includeDeletedParam = Optional.of(true);
|
||||
loginAsAdmin();
|
||||
runSuccessfulNameTest("No Way", "21", "No Way", "inactive", null, null, "rdap_registrar.json");
|
||||
runSuccessfulNameTest("No Way", "21", "No Way", "inactive", null, "rdap_registrar.json");
|
||||
verifyMetrics(0);
|
||||
}
|
||||
|
||||
|
@ -900,7 +891,7 @@ public class RdapEntitySearchActionTest extends RdapSearchActionTestCase<RdapEnt
|
|||
action.includeDeletedParam = Optional.of(true);
|
||||
login("2-RegistrarTest");
|
||||
runSuccessfulNameTest(
|
||||
"Da Test Registrar", "(none)", "Da Test Registrar", "rdap_registrar_test.json");
|
||||
"Da Test Registrar", "not applicable", "Da Test Registrar", "rdap_registrar_test.json");
|
||||
verifyMetrics(0);
|
||||
}
|
||||
|
||||
|
@ -909,7 +900,7 @@ public class RdapEntitySearchActionTest extends RdapSearchActionTestCase<RdapEnt
|
|||
action.includeDeletedParam = Optional.of(true);
|
||||
loginAsAdmin();
|
||||
runSuccessfulNameTest(
|
||||
"Da Test Registrar", "(none)", "Da Test Registrar", "rdap_registrar_test.json");
|
||||
"Da Test Registrar", "not applicable", "Da Test Registrar", "rdap_registrar_test.json");
|
||||
verifyMetrics(0);
|
||||
}
|
||||
|
||||
|
@ -983,7 +974,6 @@ public class RdapEntitySearchActionTest extends RdapSearchActionTestCase<RdapEnt
|
|||
"",
|
||||
"inactive",
|
||||
"",
|
||||
"",
|
||||
"rdap_contact_deleted.json");
|
||||
verifyMetrics(1);
|
||||
}
|
||||
|
@ -998,7 +988,6 @@ public class RdapEntitySearchActionTest extends RdapSearchActionTestCase<RdapEnt
|
|||
"",
|
||||
"inactive",
|
||||
"",
|
||||
"",
|
||||
"rdap_contact_deleted.json");
|
||||
verifyMetrics(1);
|
||||
}
|
||||
|
@ -1028,7 +1017,6 @@ public class RdapEntitySearchActionTest extends RdapSearchActionTestCase<RdapEnt
|
|||
"",
|
||||
"inactive",
|
||||
"",
|
||||
"",
|
||||
"rdap_contact_deleted.json");
|
||||
verifyMetrics(1);
|
||||
}
|
||||
|
@ -1043,7 +1031,6 @@ public class RdapEntitySearchActionTest extends RdapSearchActionTestCase<RdapEnt
|
|||
"",
|
||||
"inactive",
|
||||
"",
|
||||
"",
|
||||
"rdap_contact_deleted.json");
|
||||
verifyMetrics(1);
|
||||
}
|
||||
|
@ -1240,7 +1227,7 @@ public class RdapEntitySearchActionTest extends RdapSearchActionTestCase<RdapEnt
|
|||
public void testHandleMatchRegistrar_found_inactiveAsSameRegistrar() {
|
||||
action.includeDeletedParam = Optional.of(true);
|
||||
login("2-RegistrarInact");
|
||||
runSuccessfulHandleTest("21", "21", "No Way", "inactive", null, null, "rdap_registrar.json");
|
||||
runSuccessfulHandleTest("21", "21", "No Way", "inactive", null, "rdap_registrar.json");
|
||||
verifyMetrics(0);
|
||||
}
|
||||
|
||||
|
@ -1248,7 +1235,7 @@ public class RdapEntitySearchActionTest extends RdapSearchActionTestCase<RdapEnt
|
|||
public void testHandleMatchRegistrar_found_inactiveAsAdmin() {
|
||||
action.includeDeletedParam = Optional.of(true);
|
||||
loginAsAdmin();
|
||||
runSuccessfulHandleTest("21", "21", "No Way", "inactive", null, null, "rdap_registrar.json");
|
||||
runSuccessfulHandleTest("21", "21", "No Way", "inactive", null, "rdap_registrar.json");
|
||||
verifyMetrics(0);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
package google.registry.rdap;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static google.registry.rdap.RdapTestHelper.loadJsonFile;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
import google.registry.rdap.RdapMetrics.EndpointType;
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
package google.registry.rdap;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static google.registry.rdap.RdapTestHelper.assertThat;
|
||||
import static google.registry.testing.DatastoreHelper.createTld;
|
||||
import static google.registry.testing.DatastoreHelper.persistResource;
|
||||
import static google.registry.testing.DatastoreHelper.persistSimpleResources;
|
||||
|
@ -29,12 +30,10 @@ import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST;
|
|||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.googlecode.objectify.Key;
|
||||
import google.registry.model.contact.ContactResource;
|
||||
import google.registry.model.domain.DesignatedContact;
|
||||
import google.registry.model.domain.DomainBase;
|
||||
import google.registry.model.domain.Period;
|
||||
import google.registry.model.eppcommon.StatusValue;
|
||||
import google.registry.model.host.HostResource;
|
||||
import google.registry.model.ofy.Ofy;
|
||||
|
@ -45,12 +44,12 @@ import google.registry.model.transfer.TransferData;
|
|||
import google.registry.model.transfer.TransferStatus;
|
||||
import google.registry.rdap.RdapJsonFormatter.OutputDataType;
|
||||
import google.registry.rdap.RdapObjectClasses.BoilerplateType;
|
||||
import google.registry.rdap.RdapObjectClasses.RdapEntity;
|
||||
import google.registry.rdap.RdapObjectClasses.ReplyPayloadBase;
|
||||
import google.registry.rdap.RdapObjectClasses.TopLevelReplyObject;
|
||||
import google.registry.testing.AppEngineRule;
|
||||
import google.registry.testing.FakeClock;
|
||||
import google.registry.testing.InjectRule;
|
||||
import java.util.Optional;
|
||||
import org.joda.time.DateTime;
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
|
@ -186,7 +185,8 @@ public class RdapJsonFormatterTest {
|
|||
.build())
|
||||
.build())))
|
||||
.build());
|
||||
domainBaseFull = persistResource(
|
||||
domainBaseFull =
|
||||
persistResource(
|
||||
makeDomainBase(
|
||||
"cat.みんな",
|
||||
contactResourceRegistrant,
|
||||
|
@ -194,17 +194,27 @@ public class RdapJsonFormatterTest {
|
|||
contactResourceTech,
|
||||
hostResourceIpv4,
|
||||
hostResourceIpv6,
|
||||
registrar));
|
||||
domainBaseNoNameserversNoTransfers = persistResource(
|
||||
registrar)
|
||||
.asBuilder()
|
||||
.setCreationClientId("foo")
|
||||
.setCreationTimeForTest(clock.nowUtc().minusMonths(4))
|
||||
.setLastEppUpdateTime(clock.nowUtc().minusMonths(3))
|
||||
.build());
|
||||
domainBaseNoNameserversNoTransfers =
|
||||
persistResource(
|
||||
makeDomainBase(
|
||||
"fish.みんな",
|
||||
contactResourceRegistrant,
|
||||
contactResourceAdmin,
|
||||
contactResourceTech,
|
||||
contactResourceRegistrant,
|
||||
contactResourceRegistrant,
|
||||
null,
|
||||
null,
|
||||
registrar));
|
||||
|
||||
registrar)
|
||||
.asBuilder()
|
||||
.setCreationClientId("foo")
|
||||
.setCreationTimeForTest(clock.nowUtc())
|
||||
.setLastEppUpdateTime(null)
|
||||
.build());
|
||||
// Create an unused domain that references hostResourceBoth and hostResourceNoAddresses so that
|
||||
// they will have "associated" (ie, StatusValue.LINKED) status.
|
||||
persistResource(
|
||||
|
@ -218,20 +228,6 @@ public class RdapJsonFormatterTest {
|
|||
registrar));
|
||||
|
||||
// history entries
|
||||
persistResource(
|
||||
makeHistoryEntry(
|
||||
domainBaseFull,
|
||||
HistoryEntry.Type.DOMAIN_CREATE,
|
||||
Period.create(1, Period.Unit.YEARS),
|
||||
"created",
|
||||
clock.nowUtc().minusMonths(4)));
|
||||
persistResource(
|
||||
makeHistoryEntry(
|
||||
domainBaseNoNameserversNoTransfers,
|
||||
HistoryEntry.Type.DOMAIN_CREATE,
|
||||
Period.create(1, Period.Unit.YEARS),
|
||||
"created",
|
||||
clock.nowUtc()));
|
||||
// We create 3 "transfer approved" entries, to make sure we only save the last one
|
||||
persistResource(
|
||||
makeHistoryEntry(
|
||||
|
@ -307,41 +303,41 @@ public class RdapJsonFormatterTest {
|
|||
.build());
|
||||
}
|
||||
|
||||
private JsonElement loadJson(String expectedFileName) {
|
||||
return new Gson().fromJson(loadFile(this.getClass(), expectedFileName), JsonElement.class);
|
||||
private JsonObject loadJson(String expectedFileName) {
|
||||
return new Gson().fromJson(loadFile(this.getClass(), expectedFileName), JsonObject.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRegistrar() {
|
||||
assertThat(rdapJsonFormatter.makeRdapJsonForRegistrar(registrar, OutputDataType.FULL).toJson())
|
||||
assertThat(rdapJsonFormatter.createRdapRegistrarEntity(registrar, OutputDataType.FULL).toJson())
|
||||
.isEqualTo(loadJson("rdapjson_registrar.json"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRegistrar_summary() {
|
||||
assertThat(
|
||||
rdapJsonFormatter.makeRdapJsonForRegistrar(registrar, OutputDataType.SUMMARY).toJson())
|
||||
rdapJsonFormatter.createRdapRegistrarEntity(registrar, OutputDataType.SUMMARY).toJson())
|
||||
.isEqualTo(loadJson("rdapjson_registrar_summary.json"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHost_ipv4() {
|
||||
assertThat(
|
||||
rdapJsonFormatter.makeRdapJsonForHost(hostResourceIpv4, OutputDataType.FULL).toJson())
|
||||
rdapJsonFormatter.createRdapNameserver(hostResourceIpv4, OutputDataType.FULL).toJson())
|
||||
.isEqualTo(loadJson("rdapjson_host_ipv4.json"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHost_ipv6() {
|
||||
assertThat(
|
||||
rdapJsonFormatter.makeRdapJsonForHost(hostResourceIpv6, OutputDataType.FULL).toJson())
|
||||
rdapJsonFormatter.createRdapNameserver(hostResourceIpv6, OutputDataType.FULL).toJson())
|
||||
.isEqualTo(loadJson("rdapjson_host_ipv6.json"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHost_both() {
|
||||
assertThat(
|
||||
rdapJsonFormatter.makeRdapJsonForHost(hostResourceBoth, OutputDataType.FULL).toJson())
|
||||
rdapJsonFormatter.createRdapNameserver(hostResourceBoth, OutputDataType.FULL).toJson())
|
||||
.isEqualTo(loadJson("rdapjson_host_both.json"));
|
||||
}
|
||||
|
||||
|
@ -349,7 +345,7 @@ public class RdapJsonFormatterTest {
|
|||
public void testHost_both_summary() {
|
||||
assertThat(
|
||||
rdapJsonFormatter
|
||||
.makeRdapJsonForHost(hostResourceBoth, OutputDataType.SUMMARY)
|
||||
.createRdapNameserver(hostResourceBoth, OutputDataType.SUMMARY)
|
||||
.toJson())
|
||||
.isEqualTo(loadJson("rdapjson_host_both_summary.json"));
|
||||
}
|
||||
|
@ -358,7 +354,7 @@ public class RdapJsonFormatterTest {
|
|||
public void testHost_noAddresses() {
|
||||
assertThat(
|
||||
rdapJsonFormatter
|
||||
.makeRdapJsonForHost(hostResourceNoAddresses, OutputDataType.FULL)
|
||||
.createRdapNameserver(hostResourceNoAddresses, OutputDataType.FULL)
|
||||
.toJson())
|
||||
.isEqualTo(loadJson("rdapjson_host_no_addresses.json"));
|
||||
}
|
||||
|
@ -367,7 +363,7 @@ public class RdapJsonFormatterTest {
|
|||
public void testHost_notLinked() {
|
||||
assertThat(
|
||||
rdapJsonFormatter
|
||||
.makeRdapJsonForHost(hostResourceNotLinked, OutputDataType.FULL)
|
||||
.createRdapNameserver(hostResourceNotLinked, OutputDataType.FULL)
|
||||
.toJson())
|
||||
.isEqualTo(loadJson("rdapjson_host_not_linked.json"));
|
||||
}
|
||||
|
@ -376,7 +372,7 @@ public class RdapJsonFormatterTest {
|
|||
public void testHost_superordinateHasPendingTransfer() {
|
||||
assertThat(
|
||||
rdapJsonFormatter
|
||||
.makeRdapJsonForHost(hostResourceSuperordinatePendingTransfer, OutputDataType.FULL)
|
||||
.createRdapNameserver(hostResourceSuperordinatePendingTransfer, OutputDataType.FULL)
|
||||
.toJson())
|
||||
.isEqualTo(loadJson("rdapjson_host_pending_transfer.json"));
|
||||
}
|
||||
|
@ -385,9 +381,9 @@ public class RdapJsonFormatterTest {
|
|||
public void testRegistrant() {
|
||||
assertThat(
|
||||
rdapJsonFormatter
|
||||
.makeRdapJsonForContact(
|
||||
.createRdapContactEntity(
|
||||
contactResourceRegistrant,
|
||||
Optional.of(DesignatedContact.Type.REGISTRANT),
|
||||
ImmutableSet.of(RdapEntity.Role.REGISTRANT),
|
||||
OutputDataType.FULL)
|
||||
.toJson())
|
||||
.isEqualTo(loadJson("rdapjson_registrant.json"));
|
||||
|
@ -397,9 +393,9 @@ public class RdapJsonFormatterTest {
|
|||
public void testRegistrant_summary() {
|
||||
assertThat(
|
||||
rdapJsonFormatter
|
||||
.makeRdapJsonForContact(
|
||||
.createRdapContactEntity(
|
||||
contactResourceRegistrant,
|
||||
Optional.of(DesignatedContact.Type.REGISTRANT),
|
||||
ImmutableSet.of(RdapEntity.Role.REGISTRANT),
|
||||
OutputDataType.SUMMARY)
|
||||
.toJson())
|
||||
.isEqualTo(loadJson("rdapjson_registrant_summary.json"));
|
||||
|
@ -410,9 +406,9 @@ public class RdapJsonFormatterTest {
|
|||
rdapJsonFormatter.rdapAuthorization = RdapAuthorization.PUBLIC_AUTHORIZATION;
|
||||
assertThat(
|
||||
rdapJsonFormatter
|
||||
.makeRdapJsonForContact(
|
||||
.createRdapContactEntity(
|
||||
contactResourceRegistrant,
|
||||
Optional.of(DesignatedContact.Type.REGISTRANT),
|
||||
ImmutableSet.of(RdapEntity.Role.REGISTRANT),
|
||||
OutputDataType.FULL)
|
||||
.toJson())
|
||||
.isEqualTo(loadJson("rdapjson_registrant_logged_out.json"));
|
||||
|
@ -429,9 +425,9 @@ public class RdapJsonFormatterTest {
|
|||
0, rdapJsonFormatter.fullServletPath.length() - 1);
|
||||
assertThat(
|
||||
rdapJsonFormatter
|
||||
.makeRdapJsonForContact(
|
||||
.createRdapContactEntity(
|
||||
contactResourceRegistrant,
|
||||
Optional.of(DesignatedContact.Type.REGISTRANT),
|
||||
ImmutableSet.of(RdapEntity.Role.REGISTRANT),
|
||||
OutputDataType.FULL)
|
||||
.toJson())
|
||||
.isEqualTo(loadJson("rdapjson_registrant.json"));
|
||||
|
@ -441,9 +437,9 @@ public class RdapJsonFormatterTest {
|
|||
public void testAdmin() {
|
||||
assertThat(
|
||||
rdapJsonFormatter
|
||||
.makeRdapJsonForContact(
|
||||
.createRdapContactEntity(
|
||||
contactResourceAdmin,
|
||||
Optional.of(DesignatedContact.Type.ADMIN),
|
||||
ImmutableSet.of(RdapEntity.Role.ADMIN),
|
||||
OutputDataType.FULL)
|
||||
.toJson())
|
||||
.isEqualTo(loadJson("rdapjson_admincontact.json"));
|
||||
|
@ -453,10 +449,8 @@ public class RdapJsonFormatterTest {
|
|||
public void testTech() {
|
||||
assertThat(
|
||||
rdapJsonFormatter
|
||||
.makeRdapJsonForContact(
|
||||
contactResourceTech,
|
||||
Optional.of(DesignatedContact.Type.TECH),
|
||||
OutputDataType.FULL)
|
||||
.createRdapContactEntity(
|
||||
contactResourceTech, ImmutableSet.of(RdapEntity.Role.TECH), OutputDataType.FULL)
|
||||
.toJson())
|
||||
.isEqualTo(loadJson("rdapjson_techcontact.json"));
|
||||
}
|
||||
|
@ -465,10 +459,8 @@ public class RdapJsonFormatterTest {
|
|||
public void testRolelessContact() {
|
||||
assertThat(
|
||||
rdapJsonFormatter
|
||||
.makeRdapJsonForContact(
|
||||
contactResourceTech,
|
||||
Optional.empty(),
|
||||
OutputDataType.FULL)
|
||||
.createRdapContactEntity(
|
||||
contactResourceTech, ImmutableSet.of(), OutputDataType.FULL)
|
||||
.toJson())
|
||||
.isEqualTo(loadJson("rdapjson_rolelesscontact.json"));
|
||||
}
|
||||
|
@ -477,47 +469,36 @@ public class RdapJsonFormatterTest {
|
|||
public void testUnlinkedContact() {
|
||||
assertThat(
|
||||
rdapJsonFormatter
|
||||
.makeRdapJsonForContact(
|
||||
contactResourceNotLinked,
|
||||
Optional.empty(),
|
||||
OutputDataType.FULL)
|
||||
.createRdapContactEntity(
|
||||
contactResourceNotLinked, ImmutableSet.of(), OutputDataType.FULL)
|
||||
.toJson())
|
||||
.isEqualTo(loadJson("rdapjson_unlinkedcontact.json"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDomain_full() {
|
||||
assertThat(
|
||||
rdapJsonFormatter
|
||||
.makeRdapJsonForDomain(
|
||||
domainBaseFull,
|
||||
OutputDataType.FULL)
|
||||
.toJson())
|
||||
assertThat(rdapJsonFormatter.createRdapDomain(domainBaseFull, OutputDataType.FULL).toJson())
|
||||
.isEqualTo(loadJson("rdapjson_domain_full.json"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDomain_summary() {
|
||||
assertThat(
|
||||
rdapJsonFormatter
|
||||
.makeRdapJsonForDomain(domainBaseFull, OutputDataType.SUMMARY)
|
||||
.toJson())
|
||||
assertThat(rdapJsonFormatter.createRdapDomain(domainBaseFull, OutputDataType.SUMMARY).toJson())
|
||||
.isEqualTo(loadJson("rdapjson_domain_summary.json"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDomain_logged_out() {
|
||||
rdapJsonFormatter.rdapAuthorization = RdapAuthorization.PUBLIC_AUTHORIZATION;
|
||||
assertThat(
|
||||
rdapJsonFormatter.makeRdapJsonForDomain(domainBaseFull, OutputDataType.FULL).toJson())
|
||||
assertThat(rdapJsonFormatter.createRdapDomain(domainBaseFull, OutputDataType.FULL).toJson())
|
||||
.isEqualTo(loadJson("rdapjson_domain_logged_out.json"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDomain_noNameserversNoTransfers() {
|
||||
public void testDomain_noNameserversNoTransfersMultipleRoleContact() {
|
||||
assertThat(
|
||||
rdapJsonFormatter
|
||||
.makeRdapJsonForDomain(domainBaseNoNameserversNoTransfers, OutputDataType.FULL)
|
||||
.createRdapDomain(domainBaseNoNameserversNoTransfers, OutputDataType.FULL)
|
||||
.toJson())
|
||||
.isEqualTo(loadJson("rdapjson_domain_no_nameservers.json"));
|
||||
}
|
||||
|
|
|
@ -15,6 +15,8 @@
|
|||
package google.registry.rdap;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static google.registry.rdap.RdapTestHelper.assertThat;
|
||||
import static google.registry.rdap.RdapTestHelper.loadJsonFile;
|
||||
import static google.registry.testing.DatastoreHelper.createTld;
|
||||
import static google.registry.testing.DatastoreHelper.persistResource;
|
||||
import static google.registry.testing.FullFieldsTestEntityHelper.makeAndPersistHostResource;
|
||||
|
|
|
@ -15,6 +15,9 @@
|
|||
package google.registry.rdap;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static google.registry.rdap.RdapTestHelper.assertThat;
|
||||
import static google.registry.rdap.RdapTestHelper.loadJsonFile;
|
||||
import static google.registry.rdap.RdapTestHelper.parseJsonObject;
|
||||
import static google.registry.request.Action.Method.GET;
|
||||
import static google.registry.testing.DatastoreHelper.createTld;
|
||||
import static google.registry.testing.DatastoreHelper.persistResource;
|
||||
|
|
|
@ -14,22 +14,27 @@
|
|||
|
||||
package google.registry.rdap;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static com.google.common.base.Preconditions.checkArgument;
|
||||
import static google.registry.testing.TestDataHelper.loadFile;
|
||||
|
||||
import com.google.common.base.Joiner;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.Sets;
|
||||
import com.google.common.collect.Streams;
|
||||
import com.google.common.truth.Truth;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import google.registry.util.Clock;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
public class RdapTestHelper {
|
||||
|
||||
private static final Gson GSON = new GsonBuilder().create();
|
||||
private static final Gson GSON = new GsonBuilder().setPrettyPrinting().create();
|
||||
|
||||
static JsonElement createJson(String... lines) {
|
||||
return GSON.fromJson(Joiner.on("\n").join(lines), JsonElement.class);
|
||||
|
@ -130,9 +135,11 @@ public class RdapTestHelper {
|
|||
new Gson()
|
||||
.toJsonTree(
|
||||
ImmutableMap.of(
|
||||
"title",
|
||||
"RDDS Inaccuracy Complaint Form",
|
||||
"description",
|
||||
ImmutableList.of(
|
||||
"URL of the ICANN Whois Inaccuracy Complaint Form:"
|
||||
"URL of the ICANN RDDS Inaccuracy Complaint Form:"
|
||||
+ " https://www.icann.org/wicf"),
|
||||
"links",
|
||||
ImmutableList.of(
|
||||
|
@ -177,7 +184,7 @@ public class RdapTestHelper {
|
|||
|
||||
static String getLinkToNext(JsonObject results) {
|
||||
JsonArray notices = results.getAsJsonArray("notices");
|
||||
assertThat(notices).isNotNull();
|
||||
Truth.assertThat(notices).isNotNull();
|
||||
return Streams.stream(notices)
|
||||
.map(notice -> notice.getAsJsonObject())
|
||||
.filter(notice -> notice.has("title"))
|
||||
|
@ -189,6 +196,43 @@ public class RdapTestHelper {
|
|||
.findAny().orElse(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads a resource testdata JSON file, and applies substitutions.
|
||||
*
|
||||
* <p>{@code loadJsonFile("filename.json", "NANE", "something", "ID", "other")} is the same as
|
||||
* {@code loadJsonFile("filename.json", ImmutableMap.of("NANE", "something", "ID", "other"))}.
|
||||
*
|
||||
* @param filename the name of the file from the testdata directory
|
||||
* @param keysAndValues alternating substitution key and value. The substitutions are applied to
|
||||
* the file before parsing it to JSON.
|
||||
*/
|
||||
static JsonObject loadJsonFile(String filename, String... keysAndValues) {
|
||||
checkArgument(keysAndValues.length % 2 == 0);
|
||||
ImmutableMap.Builder<String, String> builder = new ImmutableMap.Builder<>();
|
||||
for (int i = 0; i < keysAndValues.length; i += 2) {
|
||||
if (keysAndValues[i + 1] != null) {
|
||||
builder.put(keysAndValues[i], keysAndValues[i + 1]);
|
||||
}
|
||||
}
|
||||
return loadJsonFile(filename, builder.build());
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads a resource testdata JSON file, and applies substitutions.
|
||||
*
|
||||
* @param filename the name of the file from the testdata directory
|
||||
* @param substitutions map of substitutions to apply to the file. The substitutions are applied
|
||||
* to the file before parsing it to JSON.
|
||||
*/
|
||||
static JsonObject loadJsonFile(String filename, Map<String, String> substitutions) {
|
||||
System.out.format("Loading JSON file: %s\n", filename);
|
||||
return parseJsonObject(loadFile(RdapTestHelper.class, filename, substitutions));
|
||||
}
|
||||
|
||||
static JsonObject parseJsonObject(String jsonString) {
|
||||
return GSON.fromJson(jsonString, JsonObject.class);
|
||||
}
|
||||
|
||||
static JsonObject wrapInSearchReply(String searchResultsName, JsonObject obj) {
|
||||
JsonArray searchResults = new JsonArray();
|
||||
searchResults.add(obj);
|
||||
|
@ -199,4 +243,83 @@ public class RdapTestHelper {
|
|||
obj.remove("rdapConformance");
|
||||
return reply;
|
||||
}
|
||||
|
||||
/** A small utility class to show nicer "huge JSON" diffs. */
|
||||
static final class GsonSubject {
|
||||
private JsonObject actual;
|
||||
|
||||
GsonSubject(JsonObject actual) {
|
||||
this.actual = actual;
|
||||
}
|
||||
|
||||
void isEqualTo(JsonObject expected) {
|
||||
if (actual.equals(expected)) {
|
||||
return;
|
||||
}
|
||||
StringBuilder difference = new StringBuilder();
|
||||
difference.append("Actual JSON different than expected:");
|
||||
diff("", actual, expected, difference);
|
||||
throw new AssertionError(difference.toString());
|
||||
}
|
||||
|
||||
private String jsonifyAndIndent(JsonElement element) {
|
||||
String json = GSON.toJson(element);
|
||||
return json.replaceAll("\n", "\n ");
|
||||
}
|
||||
|
||||
private JsonElement getOrNull(JsonArray jsonArray, int index) {
|
||||
if (index >= jsonArray.size()) {
|
||||
return null;
|
||||
}
|
||||
return jsonArray.get(index);
|
||||
}
|
||||
|
||||
/** Writes down a human-readable diff between actual and expected into the StringBuilder. */
|
||||
private void diff(
|
||||
String name, JsonElement actual, JsonElement expected, StringBuilder builder) {
|
||||
if (Objects.equals(actual, expected)) {
|
||||
return;
|
||||
}
|
||||
if (actual == null) {
|
||||
builder.append(String.format("Missing: %s ->%s\n\n", name, jsonifyAndIndent(expected)));
|
||||
return;
|
||||
}
|
||||
if (expected == null) {
|
||||
builder.append(String.format("Unexpected: %s -> %s\n\n", name, jsonifyAndIndent(actual)));
|
||||
return;
|
||||
}
|
||||
if (actual.isJsonObject() && expected.isJsonObject()) {
|
||||
// We put the "expected" first in the union so that the "expected" keys will all be first
|
||||
// and in order
|
||||
for (String key :
|
||||
Sets.union(expected.getAsJsonObject().keySet(), actual.getAsJsonObject().keySet())) {
|
||||
diff(
|
||||
name + "." + key,
|
||||
actual.getAsJsonObject().get(key),
|
||||
expected.getAsJsonObject().get(key),
|
||||
builder);
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (actual.isJsonArray() && expected.isJsonArray()) {
|
||||
int commonSize = Math.max(actual.getAsJsonArray().size(), expected.getAsJsonArray().size());
|
||||
for (int i = 0; i < commonSize; i++) {
|
||||
diff(
|
||||
String.format("%s[%s]", name, i),
|
||||
getOrNull(actual.getAsJsonArray(), i),
|
||||
getOrNull(expected.getAsJsonArray(), i),
|
||||
builder);
|
||||
}
|
||||
return;
|
||||
}
|
||||
builder.append(
|
||||
String.format(
|
||||
"Different: %s -> %s\ninstead of %s\n\n",
|
||||
name, jsonifyAndIndent(actual), jsonifyAndIndent(expected)));
|
||||
}
|
||||
}
|
||||
|
||||
static GsonSubject assertThat(JsonObject actual) {
|
||||
return new GsonSubject(actual);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
{
|
||||
"rdapConformance": [
|
||||
"rdap_level_0",
|
||||
"icann_rdap_response_profile_0"
|
||||
],
|
||||
"objectClassName": "entity",
|
||||
"handle": "%NAME%",
|
||||
"status": ["active", "associated"],
|
||||
"links" :
|
||||
[
|
||||
"links": [
|
||||
{
|
||||
"value": "https://example.tld/rdap/entity/%NAME%",
|
||||
"rel": "self",
|
||||
|
@ -15,11 +15,6 @@
|
|||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
|
@ -44,9 +39,17 @@
|
|||
]
|
||||
],
|
||||
["tel", {"type": ["voice"]}, "uri", "tel:+1.2126660420"],
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"],
|
||||
["email", {}, "text", "%EMAIL%"]
|
||||
["tel", {"type": ["fax"]}, "uri", "tel:+1.2126660420"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
|
|
|
@ -1,33 +1,43 @@
|
|||
{
|
||||
"rdapConformance": [
|
||||
"rdap_level_0",
|
||||
"icann_rdap_response_profile_0"
|
||||
],
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "%NAME%",
|
||||
"status" : ["active", "associated", "removed"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
"value" : "https://example.tld/rdap/entity/%NAME%",
|
||||
"rel" : "self",
|
||||
"href": "https://example.tld/rdap/entity/%NAME%",
|
||||
"type" : "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"handle" : "REDACTED FOR PRIVACY",
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"vcardArray": [
|
||||
"vcard",
|
||||
[
|
||||
["version",{},"text","4.0"],
|
||||
["fn",{},"text","REDACTED FOR PRIVACY"],
|
||||
["org",{},"text","REDACTED FOR PRIVACY"],
|
||||
[
|
||||
"adr",
|
||||
{},
|
||||
"text",
|
||||
[
|
||||
"",
|
||||
"",
|
||||
"REDACTED FOR PRIVACY",
|
||||
"REDACTED FOR PRIVACY",
|
||||
"REDACTED FOR PRIVACY",
|
||||
"REDACTED FOR PRIVACY",
|
||||
"XX"
|
||||
]
|
||||
],
|
||||
["tel",{"type":["voice"]},"uri","tel:REDACTED FOR PRIVACY"],
|
||||
["tel",{"type":["fax"]},"uri","tel:REDACTED FOR PRIVACY"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Redacted for Privacy",
|
||||
"title": "REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"links": [
|
||||
{
|
||||
|
@ -41,6 +51,13 @@
|
|||
"Some of the data in this object has been removed.",
|
||||
"Contact personal data is visible only to the owning registrar."
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
{
|
||||
"rdapConformance": [
|
||||
"rdap_level_0",
|
||||
"icann_rdap_response_profile_0"
|
||||
],
|
||||
"objectClassName" : "entity",
|
||||
|
@ -15,11 +16,6 @@
|
|||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
|
@ -44,8 +40,16 @@
|
|||
]
|
||||
],
|
||||
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2126660420"],
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"],
|
||||
["email", {}, "text", "%EMAIL%"]
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
{
|
||||
"rdapConformance": [
|
||||
"rdap_level_0",
|
||||
"icann_rdap_response_profile_0"
|
||||
],
|
||||
"objectClassName" : "entity",
|
||||
|
@ -16,20 +17,6 @@
|
|||
],
|
||||
"events":
|
||||
[
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1999-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "deletion",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1999-07-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last changed",
|
||||
"eventDate": "1999-07-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
|
@ -41,5 +28,15 @@
|
|||
[
|
||||
["version", {}, "text", "4.0"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
}
|
||||
|
|
|
@ -1,33 +1,43 @@
|
|||
{
|
||||
"rdapConformance": [
|
||||
"rdap_level_0",
|
||||
"icann_rdap_response_profile_0"
|
||||
],
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "%NAME%",
|
||||
"status" : ["active", "removed"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
"value" : "https://example.tld/rdap/entity/%NAME%",
|
||||
"rel" : "self",
|
||||
"href": "https://example.tld/rdap/entity/%NAME%",
|
||||
"type" : "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"handle" : "REDACTED FOR PRIVACY",
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"vcardArray": [
|
||||
"vcard",
|
||||
[
|
||||
["version",{},"text","4.0"],
|
||||
["fn",{},"text","REDACTED FOR PRIVACY"],
|
||||
["org",{},"text","REDACTED FOR PRIVACY"],
|
||||
[
|
||||
"adr",
|
||||
{},
|
||||
"text",
|
||||
[
|
||||
"",
|
||||
"",
|
||||
"REDACTED FOR PRIVACY",
|
||||
"REDACTED FOR PRIVACY",
|
||||
"REDACTED FOR PRIVACY",
|
||||
"REDACTED FOR PRIVACY",
|
||||
"XX"
|
||||
]
|
||||
],
|
||||
["tel",{"type":["voice"]},"uri","tel:REDACTED FOR PRIVACY"],
|
||||
["tel",{"type":["fax"]},"uri","tel:REDACTED FOR PRIVACY"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Redacted for Privacy",
|
||||
"title": "REDACTED FOR PRIVACY",
|
||||
"description": [
|
||||
"Some of the data in this object has been removed.",
|
||||
"Contact personal data is visible only to the owning registrar."
|
||||
|
@ -42,6 +52,13 @@
|
|||
"type" : "text/html"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
{
|
||||
"objectClassName": "domain",
|
||||
"ldhName": "%DOMAIN_PUNYCODE_NAME_1%",
|
||||
"handle": "%DOMAIN_HANDLE_1%",
|
||||
"rdapConformance": [
|
||||
"rdap_level_0",
|
||||
"icann_rdap_response_profile_0"
|
||||
],
|
||||
"status": [
|
||||
|
@ -8,316 +12,12 @@
|
|||
"client transfer prohibited",
|
||||
"server update prohibited"
|
||||
],
|
||||
"handle": "%HANDLE%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/domain/%NAME%",
|
||||
"href": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_1%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/domain/%NAME%"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "expiration",
|
||||
"eventDate": "2110-10-08T00:44:59.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"nameservers": [
|
||||
{
|
||||
"status": [
|
||||
"active",
|
||||
"associated"
|
||||
],
|
||||
"handle": "%NAMESERVER1ROID%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/nameserver/%NAMESERVER1NAME%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/nameserver/%NAMESERVER1NAME%"
|
||||
}
|
||||
],
|
||||
"ldhName": "%NAMESERVER1NAME%",
|
||||
"ipAddresses": {
|
||||
"v4": [
|
||||
"%NAMESERVER1ADDRESS%"
|
||||
]
|
||||
},
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1999-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"objectClassName": "nameserver",
|
||||
"entities": [
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"status": [ "active" ],
|
||||
"handle": "1",
|
||||
"roles": [ "registrar" ],
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/entity/1",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/entity/1"
|
||||
}
|
||||
],
|
||||
"vcardArray" : [
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "The Registrar"],
|
||||
[
|
||||
"adr",
|
||||
{},
|
||||
"text",
|
||||
[
|
||||
"",
|
||||
"",
|
||||
"123 Example Boulevard",
|
||||
"Williamsburg",
|
||||
"NY",
|
||||
"11211",
|
||||
"United States"
|
||||
]
|
||||
],
|
||||
["tel", {"type":["voice"]}, "uri", "tel:+1.2223334444"],
|
||||
["email", {}, "text", "the.registrar@example.com"]
|
||||
]
|
||||
],
|
||||
"publicIds" : [
|
||||
{
|
||||
"type": "IANA Registrar ID",
|
||||
"identifier":"1"
|
||||
}
|
||||
],
|
||||
"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"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"status": [
|
||||
"active",
|
||||
"associated"
|
||||
],
|
||||
"handle": "%NAMESERVER2ROID%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/nameserver/%NAMESERVER2NAME%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/nameserver/%NAMESERVER2NAME%"
|
||||
}
|
||||
],
|
||||
"ldhName": "%NAMESERVER2NAME%",
|
||||
"ipAddresses": {
|
||||
"v6": [
|
||||
"%NAMESERVER2ADDRESS%"
|
||||
]
|
||||
},
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1998-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"objectClassName": "nameserver",
|
||||
"entities": [
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"status": [ "active" ],
|
||||
"handle": "1",
|
||||
"roles": [ "registrar" ],
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/entity/1",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/entity/1"
|
||||
}
|
||||
],
|
||||
"vcardArray" : [
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "The Registrar"],
|
||||
[
|
||||
"adr",
|
||||
{},
|
||||
"text",
|
||||
[
|
||||
"",
|
||||
"",
|
||||
"123 Example Boulevard",
|
||||
"Williamsburg",
|
||||
"NY",
|
||||
"11211",
|
||||
"United States"
|
||||
]
|
||||
],
|
||||
["tel", {"type":["voice"]}, "uri", "tel:+1.2223334444"],
|
||||
["email", {}, "text", "the.registrar@example.com"]
|
||||
]
|
||||
],
|
||||
"publicIds" : [
|
||||
{
|
||||
"type": "IANA Registrar ID",
|
||||
"identifier":"1"
|
||||
}
|
||||
],
|
||||
"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"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"ldhName": "%NAME%",
|
||||
"entities": [
|
||||
{
|
||||
"status": [
|
||||
"active",
|
||||
"associated"
|
||||
],
|
||||
"handle": "%CONTACT1ROID%",
|
||||
"roles": [
|
||||
"administrative"
|
||||
],
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/entity/%CONTACT1ROID%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/entity/%CONTACT1ROID%"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1998-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"objectClassName": "entity",
|
||||
"vcardArray": [
|
||||
"vcard",
|
||||
[
|
||||
[
|
||||
"version",
|
||||
{},
|
||||
"text",
|
||||
"4.0"
|
||||
],
|
||||
[
|
||||
"fn",
|
||||
{},
|
||||
"text",
|
||||
"Santa Claus"
|
||||
],
|
||||
[
|
||||
"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",
|
||||
"BOFH@cat.lol"
|
||||
]
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"status": [
|
||||
"active",
|
||||
"associated"
|
||||
],
|
||||
"handle": "%CONTACT2ROID%",
|
||||
"roles": [
|
||||
"technical"
|
||||
],
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/entity/%CONTACT2ROID%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/entity/%CONTACT2ROID%"
|
||||
"value": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_1%"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
|
@ -327,209 +27,51 @@
|
|||
"eventDate": "1997-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"objectClassName": "entity",
|
||||
"vcardArray": [
|
||||
"vcard",
|
||||
[
|
||||
[
|
||||
"version",
|
||||
{},
|
||||
"text",
|
||||
"4.0"
|
||||
],
|
||||
[
|
||||
"fn",
|
||||
{},
|
||||
"text",
|
||||
"The Raven"
|
||||
],
|
||||
[
|
||||
"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",
|
||||
"bog@cat.lol"
|
||||
]
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"status": [
|
||||
"active",
|
||||
"associated"
|
||||
],
|
||||
"handle": "%CONTACT3ROID%",
|
||||
"roles": [
|
||||
"registrant"
|
||||
],
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/entity/%CONTACT3ROID%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/entity/%CONTACT3ROID%"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1999-01-01T00:00:00.000Z"
|
||||
"eventAction": "expiration",
|
||||
"eventDate": "2110-10-08T00:44:59.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last changed",
|
||||
"eventDate": "2009-05-29T20:13:00.000Z"
|
||||
}
|
||||
],
|
||||
"objectClassName": "entity",
|
||||
"vcardArray": [
|
||||
"vcard",
|
||||
[
|
||||
[
|
||||
"version",
|
||||
{},
|
||||
"text",
|
||||
"4.0"
|
||||
],
|
||||
[
|
||||
"fn",
|
||||
{},
|
||||
"text",
|
||||
"Goblin Market"
|
||||
],
|
||||
[
|
||||
"org",
|
||||
{},
|
||||
"text",
|
||||
"GOOGLE INCORPORATED <script>"
|
||||
],
|
||||
[
|
||||
"adr",
|
||||
{},
|
||||
"text",
|
||||
[
|
||||
"",
|
||||
"",
|
||||
"123 Example Boulevard <script>",
|
||||
"KOKOMO",
|
||||
"BM",
|
||||
"31337",
|
||||
"United States"
|
||||
]
|
||||
],
|
||||
[
|
||||
"tel",
|
||||
"nameservers": [
|
||||
{
|
||||
"type": [
|
||||
"voice"
|
||||
]
|
||||
},
|
||||
"uri",
|
||||
"tel:+1.2126660420"
|
||||
],
|
||||
[
|
||||
"tel",
|
||||
{
|
||||
"type": [
|
||||
"fax"
|
||||
]
|
||||
},
|
||||
"uri",
|
||||
"tel:+1.2126660420"
|
||||
],
|
||||
[
|
||||
"email",
|
||||
{},
|
||||
"text",
|
||||
"lol@cat.lol"
|
||||
]
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"status": [ "active" ],
|
||||
"handle": "1",
|
||||
"roles": [ "registrar" ],
|
||||
"objectClassName": "nameserver",
|
||||
"handle": "%NAMESERVER_HANDLE_1%",
|
||||
"ldhName": "%NAMESERVER_NAME_1%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/entity/1",
|
||||
"href": "https://example.tld/rdap/nameserver/%NAMESERVER_NAME_1%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/entity/1"
|
||||
"value": "https://example.tld/rdap/nameserver/%NAMESERVER_NAME_1%"
|
||||
}
|
||||
],
|
||||
"vcardArray" : [
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "%REGISTRARNAME%"],
|
||||
[
|
||||
"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"]
|
||||
]
|
||||
],
|
||||
"publicIds" : [
|
||||
"remarks": [
|
||||
{
|
||||
"type": "IANA Registrar ID",
|
||||
"identifier":"1"
|
||||
"title": "Incomplete Data",
|
||||
"description": [
|
||||
"Summary data only. For complete data, send a specific query for the object."
|
||||
],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName": "nameserver",
|
||||
"handle": "%NAMESERVER_HANDLE_2%",
|
||||
"ldhName": "%NAMESERVER_NAME_2%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/nameserver/%NAMESERVER_NAME_2%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/nameserver/%NAMESERVER_NAME_2%"
|
||||
}
|
||||
],
|
||||
"remarks": [
|
||||
|
@ -543,5 +85,181 @@
|
|||
]
|
||||
}
|
||||
],
|
||||
"objectClassName": "domain"
|
||||
"secureDNS": {
|
||||
"delegationSigned": true,
|
||||
"zoneSigned": true,
|
||||
"dsData": [
|
||||
{"algorithm": 2, "digest": "DEADFACE", "digestType": 3, "keyTag": 1}
|
||||
]
|
||||
},
|
||||
"entities": [
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"handle": "1",
|
||||
"roles": [ "registrar" ],
|
||||
"publicIds" : [
|
||||
{
|
||||
"type": "IANA Registrar ID",
|
||||
"identifier":"1"
|
||||
}
|
||||
],
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/entity/1",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/entity/1"
|
||||
}
|
||||
],
|
||||
"vcardArray" : [
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "%REGISTRAR_FULL_NAME_1%"]
|
||||
]
|
||||
],
|
||||
"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"
|
||||
}
|
||||
],
|
||||
"entities": [
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"roles": ["abuse"],
|
||||
"status": ["active"],
|
||||
"vcardArray": [
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "Jake Doe"],
|
||||
["tel", {"type": ["voice"]}, "uri", "tel:+1.2125551216"],
|
||||
["tel", {"type": ["fax"]}, "uri", "tel:+1.2125551216"],
|
||||
["email", {}, "text", "jakedoe@example.com"]
|
||||
]
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"handle": "%CONTACT_HANDLE_1%",
|
||||
"roles": ["administrative"],
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/entity/%CONTACT_HANDLE_1%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/entity/%CONTACT_HANDLE_1%"
|
||||
}
|
||||
],
|
||||
"vcardArray": [
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "Santa Claus"],
|
||||
["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"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
"type": "object truncated due to unexplainable reasons",
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."]
|
||||
},
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"handle": "%CONTACT_HANDLE_2%",
|
||||
"roles": ["technical"],
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/entity/%CONTACT_HANDLE_2%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/entity/%CONTACT_HANDLE_2%"
|
||||
}
|
||||
],
|
||||
"vcardArray": [
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "The Raven"],
|
||||
["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"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
"type": "object truncated due to unexplainable reasons",
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."]
|
||||
},
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"handle": "%CONTACT_HANDLE_3%",
|
||||
"roles": [
|
||||
"registrant"
|
||||
],
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/entity/%CONTACT_HANDLE_3%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/entity/%CONTACT_HANDLE_3%"
|
||||
}
|
||||
],
|
||||
"vcardArray": [
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "Goblin Market"],
|
||||
["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"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
"type": "object truncated due to unexplainable reasons",
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."]
|
||||
},
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -1,323 +1,23 @@
|
|||
{
|
||||
"rdapConformance": [
|
||||
"rdap_level_0",
|
||||
"icann_rdap_response_profile_0"
|
||||
],
|
||||
"objectClassName": "domain",
|
||||
"handle": "%DOMAIN_HANDLE_1%",
|
||||
"ldhName": "%DOMAIN_PUNYCODE_NAME_1%",
|
||||
"status": [
|
||||
"client delete prohibited",
|
||||
"client renew prohibited",
|
||||
"client transfer prohibited",
|
||||
"server update prohibited"
|
||||
],
|
||||
"handle": "%HANDLE%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/domain/%NAME%",
|
||||
"href": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_1%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/domain/%NAME%"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "expiration",
|
||||
"eventDate": "2110-10-08T00:44:59.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"nameservers": [
|
||||
{
|
||||
"status": [
|
||||
"active",
|
||||
"associated"
|
||||
],
|
||||
"handle": "%NAMESERVER1ROID%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/nameserver/%NAMESERVER1NAME%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/nameserver/%NAMESERVER1NAME%"
|
||||
}
|
||||
],
|
||||
"ldhName": "%NAMESERVER1NAME%",
|
||||
"ipAddresses": {
|
||||
"v4": [
|
||||
"%NAMESERVER1ADDRESS%"
|
||||
]
|
||||
},
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1999-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"objectClassName": "nameserver",
|
||||
"entities": [
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"status": [ "active" ],
|
||||
"handle": "1",
|
||||
"roles": [ "registrar" ],
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/entity/1",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/entity/1"
|
||||
}
|
||||
],
|
||||
"vcardArray" : [
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "The Registrar"],
|
||||
[
|
||||
"adr",
|
||||
{},
|
||||
"text",
|
||||
[
|
||||
"",
|
||||
"",
|
||||
"123 Example Boulevard",
|
||||
"Williamsburg",
|
||||
"NY",
|
||||
"11211",
|
||||
"United States"
|
||||
]
|
||||
],
|
||||
["tel", {"type":["voice"]}, "uri", "tel:+1.2223334444"],
|
||||
["email", {}, "text", "the.registrar@example.com"]
|
||||
]
|
||||
],
|
||||
"publicIds" : [
|
||||
{
|
||||
"type": "IANA Registrar ID",
|
||||
"identifier":"1"
|
||||
}
|
||||
],
|
||||
"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"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"status": [
|
||||
"active",
|
||||
"associated"
|
||||
],
|
||||
"handle": "%NAMESERVER2ROID%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/nameserver/%NAMESERVER2NAME%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/nameserver/%NAMESERVER2NAME%"
|
||||
}
|
||||
],
|
||||
"ldhName": "%NAMESERVER2NAME%",
|
||||
"ipAddresses": {
|
||||
"v6": [
|
||||
"%NAMESERVER2ADDRESS%"
|
||||
]
|
||||
},
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1998-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"objectClassName": "nameserver",
|
||||
"entities": [
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"status": [ "active" ],
|
||||
"handle": "1",
|
||||
"roles": [ "registrar" ],
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/entity/1",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/entity/1"
|
||||
}
|
||||
],
|
||||
"vcardArray" : [
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "The Registrar"],
|
||||
[
|
||||
"adr",
|
||||
{},
|
||||
"text",
|
||||
[
|
||||
"",
|
||||
"",
|
||||
"123 Example Boulevard",
|
||||
"Williamsburg",
|
||||
"NY",
|
||||
"11211",
|
||||
"United States"
|
||||
]
|
||||
],
|
||||
["tel", {"type":["voice"]}, "uri", "tel:+1.2223334444"],
|
||||
["email", {}, "text", "the.registrar@example.com"]
|
||||
]
|
||||
],
|
||||
"publicIds" : [
|
||||
{
|
||||
"type": "IANA Registrar ID",
|
||||
"identifier":"1"
|
||||
}
|
||||
],
|
||||
"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"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"ldhName": "%NAME%",
|
||||
"entities": [
|
||||
{
|
||||
"status": [
|
||||
"active",
|
||||
"associated"
|
||||
],
|
||||
"handle": "%CONTACT1ROID%",
|
||||
"roles": [
|
||||
"administrative"
|
||||
],
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/entity/%CONTACT1ROID%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/entity/%CONTACT1ROID%"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1998-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"objectClassName": "entity",
|
||||
"vcardArray": [
|
||||
"vcard",
|
||||
[
|
||||
[
|
||||
"version",
|
||||
{},
|
||||
"text",
|
||||
"4.0"
|
||||
],
|
||||
[
|
||||
"fn",
|
||||
{},
|
||||
"text",
|
||||
"Sieglinde"
|
||||
],
|
||||
[
|
||||
"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",
|
||||
"sieglinde@cat2.lol"
|
||||
]
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"status": [
|
||||
"active",
|
||||
"associated"
|
||||
],
|
||||
"handle": "%CONTACT2ROID%",
|
||||
"roles": [
|
||||
"technical"
|
||||
],
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/entity/%CONTACT2ROID%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/entity/%CONTACT2ROID%"
|
||||
"value": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_1%"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
|
@ -326,172 +26,64 @@
|
|||
"eventActor": "foo",
|
||||
"eventDate": "1997-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "expiration",
|
||||
"eventDate": "2110-10-08T00:44:59.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last changed",
|
||||
"eventDate": "2009-05-29T20:13:00.000Z"
|
||||
}
|
||||
],
|
||||
"objectClassName": "entity",
|
||||
"vcardArray": [
|
||||
"vcard",
|
||||
[
|
||||
[
|
||||
"version",
|
||||
{},
|
||||
"text",
|
||||
"4.0"
|
||||
],
|
||||
[
|
||||
"fn",
|
||||
{},
|
||||
"text",
|
||||
"Siegfried"
|
||||
],
|
||||
[
|
||||
"org",
|
||||
{},
|
||||
"text",
|
||||
"GOOGLE INCORPORATED <script>"
|
||||
],
|
||||
[
|
||||
"adr",
|
||||
{},
|
||||
"text",
|
||||
[
|
||||
"",
|
||||
"",
|
||||
"123 Example Boulevard <script>",
|
||||
"KOKOMO",
|
||||
"BM",
|
||||
"31337",
|
||||
"United States"
|
||||
]
|
||||
],
|
||||
[
|
||||
"tel",
|
||||
"nameservers": [
|
||||
{
|
||||
"type": [
|
||||
"voice"
|
||||
]
|
||||
},
|
||||
"uri",
|
||||
"tel:+1.2126660420"
|
||||
],
|
||||
[
|
||||
"tel",
|
||||
{
|
||||
"type": [
|
||||
"fax"
|
||||
]
|
||||
},
|
||||
"uri",
|
||||
"tel:+1.2126660420"
|
||||
],
|
||||
[
|
||||
"email",
|
||||
{},
|
||||
"text",
|
||||
"siegfried@cat2.lol"
|
||||
]
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"status": [
|
||||
"active",
|
||||
"associated"
|
||||
],
|
||||
"handle": "%CONTACT3ROID%",
|
||||
"roles": [
|
||||
"registrant"
|
||||
],
|
||||
"objectClassName": "nameserver",
|
||||
"handle": "%NAMESERVER_HANDLE_1%",
|
||||
"ldhName": "%NAMESERVER_NAME_1%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/entity/%CONTACT3ROID%",
|
||||
"href": "https://example.tld/rdap/nameserver/%NAMESERVER_NAME_1%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/entity/%CONTACT3ROID%"
|
||||
"value": "https://example.tld/rdap/nameserver/%NAMESERVER_NAME_1%"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
"remarks": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1999-01-01T00:00:00.000Z"
|
||||
"title": "Incomplete Data",
|
||||
"type": "object truncated due to unexplainable reasons",
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
"objectClassName": "nameserver",
|
||||
"handle": "%NAMESERVER_HANDLE_2%",
|
||||
"ldhName": "%NAMESERVER_NAME_2%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/nameserver/%NAMESERVER_NAME_2%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/nameserver/%NAMESERVER_NAME_2%"
|
||||
}
|
||||
],
|
||||
"objectClassName": "entity",
|
||||
"vcardArray": [
|
||||
"vcard",
|
||||
[
|
||||
[
|
||||
"version",
|
||||
{},
|
||||
"text",
|
||||
"4.0"
|
||||
],
|
||||
[
|
||||
"fn",
|
||||
{},
|
||||
"text",
|
||||
"Siegmund"
|
||||
],
|
||||
[
|
||||
"org",
|
||||
{},
|
||||
"text",
|
||||
"GOOGLE INCORPORATED <script>"
|
||||
],
|
||||
[
|
||||
"adr",
|
||||
{},
|
||||
"text",
|
||||
[
|
||||
"",
|
||||
"",
|
||||
"123 Example Boulevard <script>",
|
||||
"KOKOMO",
|
||||
"BM",
|
||||
"31337",
|
||||
"United States"
|
||||
]
|
||||
],
|
||||
[
|
||||
"tel",
|
||||
"remarks": [
|
||||
{
|
||||
"type": [
|
||||
"voice"
|
||||
"title": "Incomplete Data",
|
||||
"type": "object truncated due to unexplainable reasons",
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."]
|
||||
}
|
||||
]
|
||||
},
|
||||
"uri",
|
||||
"tel:+1.2126660420"
|
||||
}
|
||||
],
|
||||
[
|
||||
"tel",
|
||||
{
|
||||
"type": [
|
||||
"fax"
|
||||
]
|
||||
},
|
||||
"uri",
|
||||
"tel:+1.2126660420"
|
||||
],
|
||||
[
|
||||
"email",
|
||||
{},
|
||||
"text",
|
||||
"siegmund@cat2.lol"
|
||||
]
|
||||
]
|
||||
]
|
||||
},
|
||||
"entities": [
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"status": [ "active" ],
|
||||
"handle": "1",
|
||||
"roles": [ "registrar" ],
|
||||
"links": [
|
||||
|
@ -506,24 +98,7 @@
|
|||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "%REGISTRARNAME%"],
|
||||
[
|
||||
"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"]
|
||||
["fn", {}, "text", "%REGISTRAR_FULL_NAME_1%"]
|
||||
]
|
||||
],
|
||||
"publicIds" : [
|
||||
|
@ -540,8 +115,143 @@
|
|||
],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
}
|
||||
],
|
||||
"entities": [
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"roles": ["abuse"],
|
||||
"status": ["active"],
|
||||
"vcardArray": [
|
||||
"vcard",
|
||||
[
|
||||
["version",{},"text","4.0"],
|
||||
["fn",{},"text","Jake Doe"],
|
||||
["tel",{"type":["voice"]},"uri","tel:+1.2125551216"],
|
||||
["tel",{"type":["fax"]},"uri","tel:+1.2125551216"],
|
||||
["email",{},"text","jakedoe@example.com"]
|
||||
]
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"handle": "%CONTACT_HANDLE_1%",
|
||||
"roles": ["administrative"],
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/entity/%CONTACT_HANDLE_1%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/entity/%CONTACT_HANDLE_1%"
|
||||
}
|
||||
],
|
||||
"vcardArray": [
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "Sieglinde"],
|
||||
["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"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
"type": "object truncated due to unexplainable reasons",
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."]
|
||||
},
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"handle": "%CONTACT_HANDLE_2%",
|
||||
"roles": ["technical"],
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/entity/%CONTACT_HANDLE_2%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/entity/%CONTACT_HANDLE_2%"
|
||||
}
|
||||
],
|
||||
"vcardArray": [
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "Siegfried"],
|
||||
["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"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
"type": "object truncated due to unexplainable reasons",
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."]
|
||||
},
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"handle": "%CONTACT_HANDLE_3%",
|
||||
"roles": ["registrant"],
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/entity/%CONTACT_HANDLE_3%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/entity/%CONTACT_HANDLE_3%"
|
||||
}
|
||||
],
|
||||
"vcardArray": [
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "Siegmund"],
|
||||
["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"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
"type": "object truncated due to unexplainable reasons",
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."]
|
||||
},
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"objectClassName": "domain"
|
||||
"secureDNS": {
|
||||
"delegationSigned": true,
|
||||
"zoneSigned": true,
|
||||
"dsData": [{"algorithm":2,"digest":"DEADFACE","digestType":3,"keyTag":1}]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,11 @@
|
|||
{
|
||||
"rdapConformance": [
|
||||
"rdap_level_0",
|
||||
"icann_rdap_response_profile_0"
|
||||
],
|
||||
"objectClassName": "domain",
|
||||
"ldhName": "%DOMAIN_PUNYCODE_NAME_1%",
|
||||
"handle": "%DOMAIN_HANDLE_1%",
|
||||
"status": [
|
||||
"client delete prohibited",
|
||||
"client renew prohibited",
|
||||
|
@ -9,322 +13,12 @@
|
|||
"inactive",
|
||||
"server update prohibited"
|
||||
],
|
||||
"handle": "%HANDLE%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/domain/%NAME%",
|
||||
"href": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_1%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/domain/%NAME%"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1999-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "deletion",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1999-07-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "expiration",
|
||||
"eventDate": "2110-10-08T00:44:59.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last changed",
|
||||
"eventDate": "1999-07-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"nameservers": [
|
||||
{
|
||||
"status": [
|
||||
"active",
|
||||
"associated"
|
||||
],
|
||||
"handle": "%NAMESERVER1ROID%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/nameserver/%NAMESERVER1NAME%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/nameserver/%NAMESERVER1NAME%"
|
||||
}
|
||||
],
|
||||
"ldhName": "%NAMESERVER1NAME%",
|
||||
"ipAddresses": {
|
||||
"v4": [
|
||||
"%NAMESERVER1ADDRESS%"
|
||||
]
|
||||
},
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1999-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"objectClassName": "nameserver",
|
||||
"entities": [
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"status": [ "active" ],
|
||||
"handle": "1",
|
||||
"roles": [ "registrar" ],
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/entity/1",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/entity/1"
|
||||
}
|
||||
],
|
||||
"vcardArray" : [
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "The Registrar"],
|
||||
[
|
||||
"adr",
|
||||
{},
|
||||
"text",
|
||||
[
|
||||
"",
|
||||
"",
|
||||
"123 Example Boulevard",
|
||||
"Williamsburg",
|
||||
"NY",
|
||||
"11211",
|
||||
"United States"
|
||||
]
|
||||
],
|
||||
["tel", {"type":["voice"]}, "uri", "tel:+1.2223334444"],
|
||||
["email", {}, "text", "the.registrar@example.com"]
|
||||
]
|
||||
],
|
||||
"publicIds" : [
|
||||
{
|
||||
"type": "IANA Registrar ID",
|
||||
"identifier":"1"
|
||||
}
|
||||
],
|
||||
"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"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"status": [
|
||||
"active"
|
||||
],
|
||||
"handle": "%NAMESERVER2ROID%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/nameserver/%NAMESERVER2NAME%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/nameserver/%NAMESERVER2NAME%"
|
||||
}
|
||||
],
|
||||
"ldhName": "%NAMESERVER2NAME%",
|
||||
"ipAddresses": {
|
||||
"v6": [
|
||||
"%NAMESERVER2ADDRESS%"
|
||||
]
|
||||
},
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1998-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"objectClassName": "nameserver",
|
||||
"entities": [
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"status": [ "active" ],
|
||||
"handle": "1",
|
||||
"roles": [ "registrar" ],
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/entity/1",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/entity/1"
|
||||
}
|
||||
],
|
||||
"vcardArray" : [
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "The Registrar"],
|
||||
[
|
||||
"adr",
|
||||
{},
|
||||
"text",
|
||||
[
|
||||
"",
|
||||
"",
|
||||
"123 Example Boulevard",
|
||||
"Williamsburg",
|
||||
"NY",
|
||||
"11211",
|
||||
"United States"
|
||||
]
|
||||
],
|
||||
["tel", {"type":["voice"]}, "uri", "tel:+1.2223334444"],
|
||||
["email", {}, "text", "the.registrar@example.com"]
|
||||
]
|
||||
],
|
||||
"publicIds" : [
|
||||
{
|
||||
"type": "IANA Registrar ID",
|
||||
"identifier":"1"
|
||||
}
|
||||
],
|
||||
"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"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"ldhName": "%NAME%",
|
||||
"entities": [
|
||||
{
|
||||
"status": [
|
||||
"active"
|
||||
],
|
||||
"handle": "%CONTACT1ROID%",
|
||||
"roles": [
|
||||
"administrative"
|
||||
],
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/entity/%CONTACT1ROID%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/entity/%CONTACT1ROID%"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1998-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"objectClassName": "entity",
|
||||
"vcardArray": [
|
||||
"vcard",
|
||||
[
|
||||
[
|
||||
"version",
|
||||
{},
|
||||
"text",
|
||||
"4.0"
|
||||
],
|
||||
[
|
||||
"fn",
|
||||
{},
|
||||
"text",
|
||||
"Santa Claus"
|
||||
],
|
||||
[
|
||||
"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",
|
||||
"BOFH@cat.lol"
|
||||
]
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"status": [
|
||||
"active"
|
||||
],
|
||||
"handle": "%CONTACT2ROID%",
|
||||
"roles": [
|
||||
"technical"
|
||||
],
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/entity/%CONTACT2ROID%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/entity/%CONTACT2ROID%"
|
||||
"value": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_1%"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
|
@ -333,173 +27,77 @@
|
|||
"eventActor": "foo",
|
||||
"eventDate": "1997-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "expiration",
|
||||
"eventDate": "2110-10-08T00:44:59.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "deletion",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1999-07-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last changed",
|
||||
"eventDate": "2009-05-29T20:13:00.000Z"
|
||||
}
|
||||
],
|
||||
"objectClassName": "entity",
|
||||
"vcardArray": [
|
||||
"vcard",
|
||||
[
|
||||
[
|
||||
"version",
|
||||
{},
|
||||
"text",
|
||||
"4.0"
|
||||
],
|
||||
[
|
||||
"fn",
|
||||
{},
|
||||
"text",
|
||||
"The Raven"
|
||||
],
|
||||
[
|
||||
"org",
|
||||
{},
|
||||
"text",
|
||||
"GOOGLE INCORPORATED <script>"
|
||||
],
|
||||
[
|
||||
"adr",
|
||||
{},
|
||||
"text",
|
||||
[
|
||||
"",
|
||||
"",
|
||||
"123 Example Boulevard <script>",
|
||||
"KOKOMO",
|
||||
"BM",
|
||||
"31337",
|
||||
"United States"
|
||||
]
|
||||
],
|
||||
[
|
||||
"tel",
|
||||
"nameservers": [
|
||||
{
|
||||
"type": [
|
||||
"voice"
|
||||
]
|
||||
},
|
||||
"uri",
|
||||
"tel:+1.2126660420"
|
||||
],
|
||||
[
|
||||
"tel",
|
||||
{
|
||||
"type": [
|
||||
"fax"
|
||||
]
|
||||
},
|
||||
"uri",
|
||||
"tel:+1.2126660420"
|
||||
],
|
||||
[
|
||||
"email",
|
||||
{},
|
||||
"text",
|
||||
"bog@cat.lol"
|
||||
]
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"status": [
|
||||
"active"
|
||||
],
|
||||
"handle": "%CONTACT3ROID%",
|
||||
"roles": [
|
||||
"registrant"
|
||||
],
|
||||
"objectClassName": "nameserver",
|
||||
"ldhName": "%NAMESERVER_NAME_1%",
|
||||
"handle": "%NAMESERVER_HANDLE_1%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/entity/%CONTACT3ROID%",
|
||||
"href": "https://example.tld/rdap/nameserver/%NAMESERVER_NAME_1%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/entity/%CONTACT3ROID%"
|
||||
"value": "https://example.tld/rdap/nameserver/%NAMESERVER_NAME_1%"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
"remarks": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1999-01-01T00:00:00.000Z"
|
||||
"title": "Incomplete Data",
|
||||
"type": "object truncated due to unexplainable reasons",
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
"objectClassName": "nameserver",
|
||||
"ldhName": "%NAMESERVER_NAME_2%",
|
||||
"handle": "%NAMESERVER_HANDLE_2%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/nameserver/%NAMESERVER_NAME_2%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/nameserver/%NAMESERVER_NAME_2%"
|
||||
}
|
||||
],
|
||||
"objectClassName": "entity",
|
||||
"vcardArray": [
|
||||
"vcard",
|
||||
[
|
||||
[
|
||||
"version",
|
||||
{},
|
||||
"text",
|
||||
"4.0"
|
||||
],
|
||||
[
|
||||
"fn",
|
||||
{},
|
||||
"text",
|
||||
"Goblin Market"
|
||||
],
|
||||
[
|
||||
"org",
|
||||
{},
|
||||
"text",
|
||||
"GOOGLE INCORPORATED <script>"
|
||||
],
|
||||
[
|
||||
"adr",
|
||||
{},
|
||||
"text",
|
||||
[
|
||||
"",
|
||||
"",
|
||||
"123 Example Boulevard <script>",
|
||||
"KOKOMO",
|
||||
"BM",
|
||||
"31337",
|
||||
"United States"
|
||||
]
|
||||
],
|
||||
[
|
||||
"tel",
|
||||
"remarks": [
|
||||
{
|
||||
"type": [
|
||||
"voice"
|
||||
"title": "Incomplete Data",
|
||||
"type": "object truncated due to unexplainable reasons",
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."]
|
||||
}
|
||||
]
|
||||
},
|
||||
"uri",
|
||||
"tel:+1.2126660420"
|
||||
}
|
||||
],
|
||||
[
|
||||
"tel",
|
||||
{
|
||||
"type": [
|
||||
"fax"
|
||||
]
|
||||
},
|
||||
"uri",
|
||||
"tel:+1.2126660420"
|
||||
],
|
||||
[
|
||||
"email",
|
||||
{},
|
||||
"text",
|
||||
"lol@cat.lol"
|
||||
]
|
||||
]
|
||||
]
|
||||
},
|
||||
"entities": [
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"status": [ "active" ],
|
||||
"handle": "1",
|
||||
"roles": [ "registrar" ],
|
||||
"handle": "1",
|
||||
"publicIds" : [
|
||||
{
|
||||
"type": "IANA Registrar ID",
|
||||
"identifier":"1"
|
||||
}
|
||||
],
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/entity/1",
|
||||
|
@ -512,32 +110,9 @@
|
|||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "%REGISTRARNAME%"],
|
||||
[
|
||||
"adr",
|
||||
{},
|
||||
"text",
|
||||
[
|
||||
"",
|
||||
"",
|
||||
"123 Example Boulevard <script>",
|
||||
"Williamsburg <script>",
|
||||
"NY",
|
||||
"11211",
|
||||
"United States"
|
||||
["fn", {}, "text", "%REGISTRAR_FULL_NAME_1%"]
|
||||
]
|
||||
],
|
||||
["tel", {"type":["voice"]}, "uri", "tel:+1.2125551212"],
|
||||
["tel", {"type":["fax"]}, "uri", "tel:+1.2125551213"],
|
||||
["email", {}, "text", "contact-us@example.com"]
|
||||
]
|
||||
],
|
||||
"publicIds" : [
|
||||
{
|
||||
"type": "IANA Registrar ID",
|
||||
"identifier":"1"
|
||||
}
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
|
@ -546,8 +121,145 @@
|
|||
],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
}
|
||||
],
|
||||
"entities": [
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"roles": ["abuse"],
|
||||
"status": ["active"],
|
||||
"vcardArray": [
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "Jake Doe"],
|
||||
["tel", { "type": [ "voice" ] }, "uri", "tel:+1.2125551216"],
|
||||
["tel", { "type": [ "fax" ] }, "uri", "tel:+1.2125551216"],
|
||||
["email", {}, "text", "jakedoe@example.com"]
|
||||
]
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"handle": "%CONTACT_HANDLE_1%",
|
||||
"roles": ["administrative"],
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/entity/%CONTACT_HANDLE_1%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/entity/%CONTACT_HANDLE_1%"
|
||||
}
|
||||
],
|
||||
"vcardArray": [
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "Santa Claus"],
|
||||
["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" ]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
"type": "object truncated due to unexplainable reasons",
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."]
|
||||
},
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"roles": ["technical"],
|
||||
"handle": "%CONTACT_HANDLE_2%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/entity/%CONTACT_HANDLE_2%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/entity/%CONTACT_HANDLE_2%"
|
||||
}
|
||||
],
|
||||
"vcardArray": [
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "The Raven"],
|
||||
["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"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
"type": "object truncated due to unexplainable reasons",
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."]
|
||||
},
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"handle": "%CONTACT_HANDLE_3%",
|
||||
"roles": ["registrant"],
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/entity/%CONTACT_HANDLE_3%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/entity/%CONTACT_HANDLE_3%"
|
||||
}
|
||||
],
|
||||
"vcardArray": [
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "Goblin Market"],
|
||||
["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"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
"type": "object truncated due to unexplainable reasons",
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."]
|
||||
},
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"objectClassName": "domain"
|
||||
"secureDNS": {
|
||||
"delegationSigned": true,
|
||||
"zoneSigned": true,
|
||||
"dsData": [
|
||||
{"algorithm": 2, "digest": "DEADFACE", "digestType": 3, "keyTag": 1}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
{
|
||||
"objectClassName": "domain",
|
||||
"handle": "%HANDLE%",
|
||||
"ldhName": "%NAME%",
|
||||
"rdapConformance": [
|
||||
"rdap_level_0",
|
||||
"icann_rdap_response_profile_0"
|
||||
],
|
||||
"objectClassName": "domain",
|
||||
"handle": "%DOMAIN_HANDLE_1%",
|
||||
"ldhName": "%DOMAIN_PUNYCODE_NAME_1%",
|
||||
"status": [
|
||||
"client delete prohibited",
|
||||
"client renew prohibited",
|
||||
|
@ -13,17 +14,17 @@
|
|||
],
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/domain/%NAME%",
|
||||
"href": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_1%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/domain/%NAME%"
|
||||
"value": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_1%"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
"eventDate": "1997-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "expiration",
|
||||
|
@ -32,192 +33,67 @@
|
|||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last changed",
|
||||
"eventDate": "2009-05-29T20:13:00.000Z"
|
||||
}
|
||||
],
|
||||
"nameservers": [
|
||||
{
|
||||
"status": [
|
||||
"active",
|
||||
"associated"
|
||||
],
|
||||
"handle": "%NAMESERVER1ROID%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/nameserver/%NAMESERVER1NAME%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/nameserver/%NAMESERVER1NAME%"
|
||||
}
|
||||
],
|
||||
"ldhName": "%NAMESERVER1NAME%",
|
||||
"ipAddresses": {
|
||||
"v4": [
|
||||
"%NAMESERVER1ADDRESS%"
|
||||
]
|
||||
},
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1999-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"objectClassName": "nameserver",
|
||||
"entities": [
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"status": [ "active" ],
|
||||
"handle": "1",
|
||||
"roles": [ "registrar" ],
|
||||
"handle": "%NAMESERVER_HANDLE_1%",
|
||||
"ldhName": "%NAMESERVER_NAME_1%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/entity/1",
|
||||
"href": "https://example.tld/rdap/nameserver/%NAMESERVER_NAME_1%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/entity/1"
|
||||
}
|
||||
],
|
||||
"vcardArray" : [
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "The Registrar"],
|
||||
[
|
||||
"adr",
|
||||
{},
|
||||
"text",
|
||||
[
|
||||
"",
|
||||
"",
|
||||
"123 Example Boulevard",
|
||||
"Williamsburg",
|
||||
"NY",
|
||||
"11211",
|
||||
"United States"
|
||||
]
|
||||
],
|
||||
["tel", {"type":["voice"]}, "uri", "tel:+1.2223334444"],
|
||||
["email", {}, "text", "the.registrar@example.com"]
|
||||
]
|
||||
],
|
||||
"publicIds" : [
|
||||
{
|
||||
"type": "IANA Registrar ID",
|
||||
"identifier":"1"
|
||||
"value": "https://example.tld/rdap/nameserver/%NAMESERVER_NAME_1%"
|
||||
}
|
||||
],
|
||||
"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"
|
||||
}
|
||||
]
|
||||
"type": "object truncated due to unexplainable reasons",
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"status": [
|
||||
"active",
|
||||
"associated"
|
||||
],
|
||||
"handle": "%NAMESERVER2ROID%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/nameserver/%NAMESERVER2NAME%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/nameserver/%NAMESERVER2NAME%"
|
||||
}
|
||||
],
|
||||
"ldhName": "%NAMESERVER2NAME%",
|
||||
"ipAddresses": {
|
||||
"v6": [
|
||||
"%NAMESERVER2ADDRESS%"
|
||||
]
|
||||
},
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1998-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"objectClassName": "nameserver",
|
||||
"entities": [
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"status": [ "active" ],
|
||||
"handle": "1",
|
||||
"roles": [ "registrar" ],
|
||||
"handle": "%NAMESERVER_HANDLE_2%",
|
||||
"ldhName": "%NAMESERVER_NAME_2%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/entity/1",
|
||||
"href": "https://example.tld/rdap/nameserver/%NAMESERVER_NAME_2%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/entity/1"
|
||||
}
|
||||
],
|
||||
"vcardArray" : [
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "The Registrar"],
|
||||
[
|
||||
"adr",
|
||||
{},
|
||||
"text",
|
||||
[
|
||||
"",
|
||||
"",
|
||||
"123 Example Boulevard",
|
||||
"Williamsburg",
|
||||
"NY",
|
||||
"11211",
|
||||
"United States"
|
||||
]
|
||||
],
|
||||
["tel", {"type":["voice"]}, "uri", "tel:+1.2223334444"],
|
||||
["email", {}, "text", "the.registrar@example.com"]
|
||||
]
|
||||
],
|
||||
"publicIds" : [
|
||||
{
|
||||
"type": "IANA Registrar ID",
|
||||
"identifier":"1"
|
||||
"value": "https://example.tld/rdap/nameserver/%NAMESERVER_NAME_2%"
|
||||
}
|
||||
],
|
||||
"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"
|
||||
}
|
||||
]
|
||||
"type": "object truncated due to unexplainable reasons",
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"secureDNS" : {
|
||||
"delegationSigned": true,
|
||||
"zoneSigned":true,
|
||||
"dsData":[
|
||||
{"algorithm":2,"digest":"DEADFACE","digestType":3,"keyTag":1}
|
||||
]
|
||||
},
|
||||
"entities": [
|
||||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "1",
|
||||
"status" : ["active"],
|
||||
"roles" : ["registrar"],
|
||||
"links" :
|
||||
[
|
||||
"links" : [
|
||||
{
|
||||
"value" : "https://example.tld/rdap/entity/1",
|
||||
"rel" : "self",
|
||||
|
@ -225,32 +101,36 @@
|
|||
"type" : "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"publicIds" :
|
||||
[
|
||||
"publicIds" : [
|
||||
{
|
||||
"type" : "IANA Registrar ID",
|
||||
"identifier" : "1"
|
||||
}
|
||||
],
|
||||
"vcardArray" :
|
||||
[
|
||||
"vcardArray" : [
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "%REGISTRARNAME%"],
|
||||
["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"]
|
||||
["fn", {}, "text", "%REGISTRAR_FULL_NAME_1%"]
|
||||
]
|
||||
],
|
||||
"entities" : [
|
||||
{
|
||||
"objectClassName":"entity",
|
||||
"roles":["abuse"],
|
||||
"status":["active"],
|
||||
"vcardArray": [
|
||||
"vcard",
|
||||
[
|
||||
["version",{},"text","4.0"],
|
||||
["fn",{},"text","Jake Doe"],
|
||||
["tel",{"type":["voice"]},"uri","tel:+1.2125551216"],
|
||||
["tel",{"type":["fax"]},"uri","tel:+1.2125551216"],
|
||||
["email",{},"text","jakedoe@example.com"]
|
||||
]
|
||||
]
|
||||
}
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
|
@ -260,15 +140,131 @@
|
|||
"type": "object truncated due to unexplainable reasons"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
},
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"handle": "REDACTED FOR PRIVACY",
|
||||
"roles":["administrative"],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Contacts Hidden",
|
||||
"title":"REDACTED FOR PRIVACY",
|
||||
"type":"object redacted due to authorization",
|
||||
"description": [
|
||||
"Domain contacts are visible only to the owning registrar."
|
||||
"Some of the data in this object has been removed.",
|
||||
"Contact personal data is visible only to the owning registrar."
|
||||
],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
"links":[
|
||||
{
|
||||
"href":"https://github.com/google/nomulus/blob/master/docs/rdap.md#authentication",
|
||||
"rel":"alternate",
|
||||
"type":"text/html",
|
||||
"value":"https://github.com/google/nomulus/blob/master/docs/rdap.md#authentication"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title":"EMAIL REDACTED FOR PRIVACY",
|
||||
"type":"object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
],
|
||||
"vcardArray":[
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "REDACTED FOR PRIVACY"],
|
||||
["org", {}, "text", "REDACTED FOR PRIVACY"],
|
||||
["adr", {}, "text", ["", "", "REDACTED FOR PRIVACY", "REDACTED FOR PRIVACY", "REDACTED FOR PRIVACY", "REDACTED FOR PRIVACY", "XX"]],
|
||||
["tel", {"type":["voice"]}, "uri", "tel:REDACTED FOR PRIVACY"],
|
||||
["tel", {"type":["fax"]}, "uri", "tel:REDACTED FOR PRIVACY"]
|
||||
]
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
"objectClassName":"entity",
|
||||
"handle":"REDACTED FOR PRIVACY",
|
||||
"remarks":[
|
||||
{
|
||||
"title":"REDACTED FOR PRIVACY",
|
||||
"type":"object redacted due to authorization",
|
||||
"description":[
|
||||
"Some of the data in this object has been removed.",
|
||||
"Contact personal data is visible only to the owning registrar."
|
||||
],
|
||||
"links":[
|
||||
{
|
||||
"href":"https://github.com/google/nomulus/blob/master/docs/rdap.md#authentication",
|
||||
"rel":"alternate",
|
||||
"type":"text/html",
|
||||
"value":"https://github.com/google/nomulus/blob/master/docs/rdap.md#authentication"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description":[
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
],
|
||||
"title":"EMAIL REDACTED FOR PRIVACY",
|
||||
"type":"object redacted due to authorization"
|
||||
}
|
||||
],
|
||||
"roles": ["technical"],
|
||||
"vcardArray": [
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "REDACTED FOR PRIVACY"],
|
||||
["org", {}, "text", "REDACTED FOR PRIVACY"],
|
||||
["adr", {}, "text", ["", "", "REDACTED FOR PRIVACY", "REDACTED FOR PRIVACY", "REDACTED FOR PRIVACY", "REDACTED FOR PRIVACY", "XX"]],
|
||||
["tel", {"type":["voice"]}, "uri", "tel:REDACTED FOR PRIVACY"],
|
||||
["tel", {"type":["fax"]}, "uri", "tel:REDACTED FOR PRIVACY"]
|
||||
]
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
"objectClassName":"entity",
|
||||
"handle":"REDACTED FOR PRIVACY",
|
||||
"remarks":[
|
||||
{
|
||||
"title":"REDACTED FOR PRIVACY",
|
||||
"type":"object redacted due to authorization",
|
||||
"description":[
|
||||
"Some of the data in this object has been removed.",
|
||||
"Contact personal data is visible only to the owning registrar."
|
||||
],
|
||||
"links":[
|
||||
{
|
||||
"href":"https://github.com/google/nomulus/blob/master/docs/rdap.md#authentication",
|
||||
"rel":"alternate",
|
||||
"type":"text/html",
|
||||
"value":"https://github.com/google/nomulus/blob/master/docs/rdap.md#authentication"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title":"EMAIL REDACTED FOR PRIVACY",
|
||||
"type":"object redacted due to authorization",
|
||||
"description":[
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
],
|
||||
"roles":["registrant"],
|
||||
"vcardArray":[
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "REDACTED FOR PRIVACY"],
|
||||
["org", {}, "text", "REDACTED FOR PRIVACY"],
|
||||
["adr", {}, "text", ["", "", "REDACTED FOR PRIVACY", "REDACTED FOR PRIVACY", "REDACTED FOR PRIVACY", "REDACTED FOR PRIVACY", "XX"]],
|
||||
["tel", {"type":["voice"]}, "uri", "tel:REDACTED FOR PRIVACY"],
|
||||
["tel", {"type":["fax"]}, "uri", "tel:REDACTED FOR PRIVACY"]
|
||||
]
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
{
|
||||
"objectClassName": "domain",
|
||||
"ldhName": "%DOMAIN_PUNYCODE_NAME_1%",
|
||||
"unicodeName": "%DOMAIN_UNICODE_NAME_1%",
|
||||
"handle": "%DOMAIN_HANDLE_1%",
|
||||
"rdapConformance": [
|
||||
"rdap_level_0",
|
||||
"icann_rdap_response_profile_0"
|
||||
],
|
||||
"status": [
|
||||
|
@ -8,321 +13,12 @@
|
|||
"client transfer prohibited",
|
||||
"server update prohibited"
|
||||
],
|
||||
"unicodeName": "%NAME%",
|
||||
"handle": "%HANDLE%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/domain/%PUNYCODENAME%",
|
||||
"href": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_1%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/domain/%PUNYCODENAME%"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "expiration",
|
||||
"eventDate": "2110-10-08T00:44:59.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"nameservers": [
|
||||
{
|
||||
"status": [
|
||||
"active",
|
||||
"associated"
|
||||
],
|
||||
"handle": "%NAMESERVER1ROID%",
|
||||
"links": [
|
||||
{
|
||||
"href":
|
||||
"https://example.tld/rdap/nameserver/%NAMESERVER1PUNYCODENAME%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value":
|
||||
"https://example.tld/rdap/nameserver/%NAMESERVER1PUNYCODENAME%"
|
||||
}
|
||||
],
|
||||
"ldhName": "%NAMESERVER1PUNYCODENAME%",
|
||||
"ipAddresses": {
|
||||
"v4": [
|
||||
"%NAMESERVER1ADDRESS%"
|
||||
]
|
||||
},
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1999-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"objectClassName": "nameserver",
|
||||
"entities": [
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"status": [ "active" ],
|
||||
"handle": "1",
|
||||
"roles": [ "registrar" ],
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/entity/1",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/entity/1"
|
||||
}
|
||||
],
|
||||
"vcardArray" : [
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "The Registrar"],
|
||||
[
|
||||
"adr",
|
||||
{},
|
||||
"text",
|
||||
[
|
||||
"",
|
||||
"",
|
||||
"123 Example Boulevard",
|
||||
"Williamsburg",
|
||||
"NY",
|
||||
"11211",
|
||||
"United States"
|
||||
]
|
||||
],
|
||||
["tel", {"type":["voice"]}, "uri", "tel:+1.2223334444"],
|
||||
["email", {}, "text", "the.registrar@example.com"]
|
||||
]
|
||||
],
|
||||
"publicIds" : [
|
||||
{
|
||||
"type": "IANA Registrar ID",
|
||||
"identifier":"1"
|
||||
}
|
||||
],
|
||||
"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"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"status": [
|
||||
"active",
|
||||
"associated"
|
||||
],
|
||||
"handle": "%NAMESERVER2ROID%",
|
||||
"links": [
|
||||
{
|
||||
"href":
|
||||
"https://example.tld/rdap/nameserver/%NAMESERVER2PUNYCODENAME%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value":
|
||||
"https://example.tld/rdap/nameserver/%NAMESERVER2PUNYCODENAME%"
|
||||
}
|
||||
],
|
||||
"ldhName": "%NAMESERVER2PUNYCODENAME%",
|
||||
"ipAddresses": {
|
||||
"v6": [
|
||||
"%NAMESERVER2ADDRESS%"
|
||||
]
|
||||
},
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1998-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"objectClassName": "nameserver",
|
||||
"entities": [
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"status": [ "active" ],
|
||||
"handle": "1",
|
||||
"roles": [ "registrar" ],
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/entity/1",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/entity/1"
|
||||
}
|
||||
],
|
||||
"vcardArray" : [
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "The Registrar"],
|
||||
[
|
||||
"adr",
|
||||
{},
|
||||
"text",
|
||||
[
|
||||
"",
|
||||
"",
|
||||
"123 Example Boulevard",
|
||||
"Williamsburg",
|
||||
"NY",
|
||||
"11211",
|
||||
"United States"
|
||||
]
|
||||
],
|
||||
["tel", {"type":["voice"]}, "uri", "tel:+1.2223334444"],
|
||||
["email", {}, "text", "the.registrar@example.com"]
|
||||
]
|
||||
],
|
||||
"publicIds" : [
|
||||
{
|
||||
"type": "IANA Registrar ID",
|
||||
"identifier":"1"
|
||||
}
|
||||
],
|
||||
"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"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"ldhName": "%PUNYCODENAME%",
|
||||
"entities": [
|
||||
{
|
||||
"status": [
|
||||
"active",
|
||||
"associated"
|
||||
],
|
||||
"handle": "%CONTACT1ROID%",
|
||||
"roles": [
|
||||
"administrative"
|
||||
],
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/entity/%CONTACT1ROID%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/entity/%CONTACT1ROID%"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1998-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"objectClassName": "entity",
|
||||
"vcardArray": [
|
||||
"vcard",
|
||||
[
|
||||
[
|
||||
"version",
|
||||
{},
|
||||
"text",
|
||||
"4.0"
|
||||
],
|
||||
[
|
||||
"fn",
|
||||
{},
|
||||
"text",
|
||||
"Santa Claus"
|
||||
],
|
||||
[
|
||||
"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",
|
||||
"BOFH@cat.lol"
|
||||
]
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"status": [
|
||||
"active",
|
||||
"associated"
|
||||
],
|
||||
"handle": "%CONTACT2ROID%",
|
||||
"roles": [
|
||||
"technical"
|
||||
],
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/entity/%CONTACT2ROID%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/entity/%CONTACT2ROID%"
|
||||
"value": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_1%"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
|
@ -331,172 +27,75 @@
|
|||
"eventActor": "foo",
|
||||
"eventDate": "1997-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "expiration",
|
||||
"eventDate": "2110-10-08T00:44:59.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last changed",
|
||||
"eventDate": "2009-05-29T20:13:00.000Z"
|
||||
}
|
||||
],
|
||||
"objectClassName": "entity",
|
||||
"vcardArray": [
|
||||
"vcard",
|
||||
[
|
||||
[
|
||||
"version",
|
||||
{},
|
||||
"text",
|
||||
"4.0"
|
||||
],
|
||||
[
|
||||
"fn",
|
||||
{},
|
||||
"text",
|
||||
"The Raven"
|
||||
],
|
||||
[
|
||||
"org",
|
||||
{},
|
||||
"text",
|
||||
"GOOGLE INCORPORATED <script>"
|
||||
],
|
||||
[
|
||||
"adr",
|
||||
{},
|
||||
"text",
|
||||
[
|
||||
"",
|
||||
"",
|
||||
"123 Example Boulevard <script>",
|
||||
"KOKOMO",
|
||||
"BM",
|
||||
"31337",
|
||||
"United States"
|
||||
]
|
||||
],
|
||||
[
|
||||
"tel",
|
||||
"nameservers": [
|
||||
{
|
||||
"type": [
|
||||
"voice"
|
||||
]
|
||||
},
|
||||
"uri",
|
||||
"tel:+1.2126660420"
|
||||
],
|
||||
[
|
||||
"tel",
|
||||
{
|
||||
"type": [
|
||||
"fax"
|
||||
]
|
||||
},
|
||||
"uri",
|
||||
"tel:+1.2126660420"
|
||||
],
|
||||
[
|
||||
"email",
|
||||
{},
|
||||
"text",
|
||||
"bog@cat.lol"
|
||||
]
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"status": [
|
||||
"active",
|
||||
"associated"
|
||||
],
|
||||
"handle": "%CONTACT3ROID%",
|
||||
"roles": [
|
||||
"registrant"
|
||||
],
|
||||
"objectClassName": "nameserver",
|
||||
"handle": "%NAMESERVER_HANDLE_1%",
|
||||
"ldhName": "%NAMESERVER_NAME_1%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/entity/%CONTACT3ROID%",
|
||||
"href":
|
||||
"https://example.tld/rdap/nameserver/%NAMESERVER_NAME_1%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/entity/%CONTACT3ROID%"
|
||||
"value":
|
||||
"https://example.tld/rdap/nameserver/%NAMESERVER_NAME_1%"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
"remarks": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1999-01-01T00:00:00.000Z"
|
||||
"title": "Incomplete Data",
|
||||
"type": "object truncated due to unexplainable reasons",
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
"objectClassName": "nameserver",
|
||||
"handle": "%NAMESERVER_HANDLE_2%",
|
||||
"ldhName": "%NAMESERVER_NAME_2%",
|
||||
"links": [
|
||||
{
|
||||
"href":
|
||||
"https://example.tld/rdap/nameserver/%NAMESERVER_NAME_2%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value":
|
||||
"https://example.tld/rdap/nameserver/%NAMESERVER_NAME_2%"
|
||||
}
|
||||
],
|
||||
"objectClassName": "entity",
|
||||
"vcardArray": [
|
||||
"vcard",
|
||||
[
|
||||
[
|
||||
"version",
|
||||
{},
|
||||
"text",
|
||||
"4.0"
|
||||
],
|
||||
[
|
||||
"fn",
|
||||
{},
|
||||
"text",
|
||||
"Goblin Market"
|
||||
],
|
||||
[
|
||||
"org",
|
||||
{},
|
||||
"text",
|
||||
"GOOGLE INCORPORATED <script>"
|
||||
],
|
||||
[
|
||||
"adr",
|
||||
{},
|
||||
"text",
|
||||
[
|
||||
"",
|
||||
"",
|
||||
"123 Example Boulevard <script>",
|
||||
"KOKOMO",
|
||||
"BM",
|
||||
"31337",
|
||||
"United States"
|
||||
]
|
||||
],
|
||||
[
|
||||
"tel",
|
||||
"remarks": [
|
||||
{
|
||||
"type": [
|
||||
"voice"
|
||||
"title": "Incomplete Data",
|
||||
"type": "object truncated due to unexplainable reasons",
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."]
|
||||
}
|
||||
]
|
||||
},
|
||||
"uri",
|
||||
"tel:+1.2126660420"
|
||||
}
|
||||
],
|
||||
[
|
||||
"tel",
|
||||
{
|
||||
"type": [
|
||||
"fax"
|
||||
]
|
||||
},
|
||||
"uri",
|
||||
"tel:+1.2126660420"
|
||||
],
|
||||
[
|
||||
"email",
|
||||
{},
|
||||
"text",
|
||||
"lol@cat.lol"
|
||||
]
|
||||
]
|
||||
"secureDNS": {
|
||||
"delegationSigned": true,
|
||||
"zoneSigned": true,
|
||||
"dsData": [
|
||||
{"algorithm": 2, "digest": "DEADFACE", "digestType": 3, "keyTag": 1}
|
||||
]
|
||||
},
|
||||
"entities": [
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"status": [ "active" ],
|
||||
"handle": "1",
|
||||
"roles": ["registrar"],
|
||||
"links": [
|
||||
|
@ -511,24 +110,7 @@
|
|||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "%REGISTRARNAME%"],
|
||||
[
|
||||
"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"]
|
||||
["fn", {}, "text", "%REGISTRAR_FULL_NAME_1%"]
|
||||
]
|
||||
],
|
||||
"publicIds" : [
|
||||
|
@ -545,8 +127,138 @@
|
|||
],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
}
|
||||
],
|
||||
"entities": [
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"roles": ["abuse"],
|
||||
"status": ["active"],
|
||||
"vcardArray": [
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "Jake Doe"],
|
||||
["tel", {"type": ["voice"]}, "uri", "tel:+1.2125551216"],
|
||||
["tel", {"type": ["fax"]}, "uri", "tel:+1.2125551216"],
|
||||
["email", {}, "text", "jakedoe@example.com"]
|
||||
]
|
||||
]
|
||||
}
|
||||
],
|
||||
"objectClassName": "domain"
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"handle": "%CONTACT_HANDLE_1%",
|
||||
"roles": ["administrative"],
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/entity/%CONTACT_HANDLE_1%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/entity/%CONTACT_HANDLE_1%"
|
||||
}
|
||||
],
|
||||
"vcardArray": [
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "Santa Claus"],
|
||||
["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" ]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
"type": "object truncated due to unexplainable reasons",
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."]
|
||||
},
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"handle": "%CONTACT_HANDLE_2%",
|
||||
"roles": ["technical"],
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/entity/%CONTACT_HANDLE_2%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/entity/%CONTACT_HANDLE_2%"
|
||||
}
|
||||
],
|
||||
"vcardArray": [
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "The Raven"],
|
||||
["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"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
"type": "object truncated due to unexplainable reasons",
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."]
|
||||
},
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"handle": "%CONTACT_HANDLE_3%",
|
||||
"roles": ["registrant"],
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/entity/%CONTACT_HANDLE_3%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/entity/%CONTACT_HANDLE_3%"
|
||||
}
|
||||
],
|
||||
"vcardArray": [
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "Goblin Market"],
|
||||
["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"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
"type": "object truncated due to unexplainable reasons",
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."]
|
||||
},
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
{
|
||||
"rdapConformance": [
|
||||
"rdap_level_0",
|
||||
"icann_rdap_response_profile_0"
|
||||
],
|
||||
"objectClassName": "domain",
|
||||
"handle": "%HANDLE%",
|
||||
"ldhName": "%PUNYCODENAME%",
|
||||
"unicodeName": "%NAME%",
|
||||
"handle": "%DOMAIN_HANDLE_1%",
|
||||
"ldhName": "%DOMAIN_PUNYCODE_NAME_1%",
|
||||
"unicodeName": "%DOMAIN_UNICODE_NAME_1%",
|
||||
"status": [
|
||||
"client delete prohibited",
|
||||
"client renew prohibited",
|
||||
|
@ -14,17 +15,17 @@
|
|||
],
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/domain/%PUNYCODENAME%",
|
||||
"href": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_1%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/domain/%PUNYCODENAME%"
|
||||
"value": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_1%"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
"eventDate": "1997-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "expiration",
|
||||
|
@ -33,194 +34,69 @@
|
|||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last changed",
|
||||
"eventDate": "2009-05-29T20:13:00.000Z"
|
||||
}
|
||||
],
|
||||
"nameservers": [
|
||||
{
|
||||
"status": [
|
||||
"active",
|
||||
"associated"
|
||||
],
|
||||
"handle": "%NAMESERVER1ROID%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/nameserver/%NAMESERVER1PUNYCODENAME%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/nameserver/%NAMESERVER1PUNYCODENAME%"
|
||||
}
|
||||
],
|
||||
"ldhName": "%NAMESERVER1PUNYCODENAME%",
|
||||
"unicodeName": "%NAMESERVER1NAME%",
|
||||
"ipAddresses": {
|
||||
"v4": [
|
||||
"%NAMESERVER1ADDRESS%"
|
||||
]
|
||||
},
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1999-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"objectClassName": "nameserver",
|
||||
"entities": [
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"status": [ "active" ],
|
||||
"handle": "1",
|
||||
"roles": [ "registrar" ],
|
||||
"handle": "%NAMESERVER_HANDLE_1%",
|
||||
"ldhName": "%NAMESERVER_NAME_1%",
|
||||
"unicodeName": "%NAMESERVER_UNICODE_NAME_1%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/entity/1",
|
||||
"href": "https://example.tld/rdap/nameserver/%NAMESERVER_NAME_1%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/entity/1"
|
||||
}
|
||||
],
|
||||
"vcardArray" : [
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "The Registrar"],
|
||||
[
|
||||
"adr",
|
||||
{},
|
||||
"text",
|
||||
[
|
||||
"",
|
||||
"",
|
||||
"123 Example Boulevard",
|
||||
"Williamsburg",
|
||||
"NY",
|
||||
"11211",
|
||||
"United States"
|
||||
]
|
||||
],
|
||||
["tel", {"type":["voice"]}, "uri", "tel:+1.2223334444"],
|
||||
["email", {}, "text", "the.registrar@example.com"]
|
||||
]
|
||||
],
|
||||
"publicIds" : [
|
||||
{
|
||||
"type": "IANA Registrar ID",
|
||||
"identifier":"1"
|
||||
"value": "https://example.tld/rdap/nameserver/%NAMESERVER_NAME_1%"
|
||||
}
|
||||
],
|
||||
"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"
|
||||
}
|
||||
]
|
||||
"type": "object truncated due to unexplainable reasons",
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"status": [
|
||||
"active",
|
||||
"associated"
|
||||
],
|
||||
"handle": "%NAMESERVER2ROID%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/nameserver/%NAMESERVER2PUNYCODENAME%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/nameserver/%NAMESERVER2PUNYCODENAME%"
|
||||
}
|
||||
],
|
||||
"ldhName": "%NAMESERVER2PUNYCODENAME%",
|
||||
"unicodeName": "%NAMESERVER2NAME%",
|
||||
"ipAddresses": {
|
||||
"v6": [
|
||||
"%NAMESERVER2ADDRESS%"
|
||||
]
|
||||
},
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1998-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"objectClassName": "nameserver",
|
||||
"entities": [
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"status": [ "active" ],
|
||||
"handle": "1",
|
||||
"roles": [ "registrar" ],
|
||||
"handle": "%NAMESERVER_HANDLE_2%",
|
||||
"ldhName": "%NAMESERVER_NAME_2%",
|
||||
"unicodeName": "%NAMESERVER_UNICODE_NAME_2%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/entity/1",
|
||||
"href": "https://example.tld/rdap/nameserver/%NAMESERVER_NAME_2%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/entity/1"
|
||||
}
|
||||
],
|
||||
"vcardArray" : [
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "The Registrar"],
|
||||
[
|
||||
"adr",
|
||||
{},
|
||||
"text",
|
||||
[
|
||||
"",
|
||||
"",
|
||||
"123 Example Boulevard",
|
||||
"Williamsburg",
|
||||
"NY",
|
||||
"11211",
|
||||
"United States"
|
||||
]
|
||||
],
|
||||
["tel", {"type":["voice"]}, "uri", "tel:+1.2223334444"],
|
||||
["email", {}, "text", "the.registrar@example.com"]
|
||||
]
|
||||
],
|
||||
"publicIds" : [
|
||||
{
|
||||
"type": "IANA Registrar ID",
|
||||
"identifier":"1"
|
||||
"value": "https://example.tld/rdap/nameserver/%NAMESERVER_NAME_2%"
|
||||
}
|
||||
],
|
||||
"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"
|
||||
}
|
||||
]
|
||||
"type": "object truncated due to unexplainable reasons",
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"secureDNS" : {
|
||||
"delegationSigned": true,
|
||||
"zoneSigned":true,
|
||||
"dsData":[
|
||||
{"algorithm":2,"digest":"DEADFACE","digestType":3,"keyTag":1}
|
||||
]
|
||||
},
|
||||
"entities": [
|
||||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "1",
|
||||
"status" : ["active"],
|
||||
"roles" : ["registrar"],
|
||||
"links" :
|
||||
[
|
||||
"links" : [
|
||||
{
|
||||
"value" : "https://example.tld/rdap/entity/1",
|
||||
"rel" : "self",
|
||||
|
@ -228,32 +104,36 @@
|
|||
"type" : "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"publicIds" :
|
||||
[
|
||||
"publicIds" : [
|
||||
{
|
||||
"type" : "IANA Registrar ID",
|
||||
"identifier" : "1"
|
||||
}
|
||||
],
|
||||
"vcardArray" :
|
||||
[
|
||||
"vcardArray" : [
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "%REGISTRARNAME%"],
|
||||
["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"]
|
||||
["fn", {}, "text", "%REGISTRAR_FULL_NAME_1%"]
|
||||
]
|
||||
],
|
||||
"entities" : [
|
||||
{
|
||||
"objectClassName":"entity",
|
||||
"roles":["abuse"],
|
||||
"status":["active"],
|
||||
"vcardArray": [
|
||||
"vcard",
|
||||
[
|
||||
["version",{},"text","4.0"],
|
||||
["fn",{},"text","Jake Doe"],
|
||||
["tel",{"type":["voice"]},"uri","tel:+1.2125551216"],
|
||||
["tel",{"type":["fax"]},"uri","tel:+1.2125551216"],
|
||||
["email",{},"text","jakedoe@example.com"]
|
||||
]
|
||||
]
|
||||
}
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
|
@ -263,15 +143,131 @@
|
|||
"type": "object truncated due to unexplainable reasons"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
},
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"handle": "REDACTED FOR PRIVACY",
|
||||
"roles":["administrative"],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Contacts Hidden",
|
||||
"title":"REDACTED FOR PRIVACY",
|
||||
"type":"object redacted due to authorization",
|
||||
"description": [
|
||||
"Domain contacts are visible only to the owning registrar."
|
||||
"Some of the data in this object has been removed.",
|
||||
"Contact personal data is visible only to the owning registrar."
|
||||
],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
"links":[
|
||||
{
|
||||
"href":"https://github.com/google/nomulus/blob/master/docs/rdap.md#authentication",
|
||||
"rel":"alternate",
|
||||
"type":"text/html",
|
||||
"value":"https://github.com/google/nomulus/blob/master/docs/rdap.md#authentication"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title":"EMAIL REDACTED FOR PRIVACY",
|
||||
"type":"object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
],
|
||||
"vcardArray":[
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "REDACTED FOR PRIVACY"],
|
||||
["org", {}, "text", "REDACTED FOR PRIVACY"],
|
||||
["adr", {}, "text", ["", "", "REDACTED FOR PRIVACY", "REDACTED FOR PRIVACY", "REDACTED FOR PRIVACY", "REDACTED FOR PRIVACY", "XX"]],
|
||||
["tel", {"type":["voice"]}, "uri", "tel:REDACTED FOR PRIVACY"],
|
||||
["tel", {"type":["fax"]}, "uri", "tel:REDACTED FOR PRIVACY"]
|
||||
]
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
"objectClassName":"entity",
|
||||
"handle":"REDACTED FOR PRIVACY",
|
||||
"remarks":[
|
||||
{
|
||||
"title":"REDACTED FOR PRIVACY",
|
||||
"type":"object redacted due to authorization",
|
||||
"description":[
|
||||
"Some of the data in this object has been removed.",
|
||||
"Contact personal data is visible only to the owning registrar."
|
||||
],
|
||||
"links":[
|
||||
{
|
||||
"href":"https://github.com/google/nomulus/blob/master/docs/rdap.md#authentication",
|
||||
"rel":"alternate",
|
||||
"type":"text/html",
|
||||
"value":"https://github.com/google/nomulus/blob/master/docs/rdap.md#authentication"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"description":[
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
],
|
||||
"title":"EMAIL REDACTED FOR PRIVACY",
|
||||
"type":"object redacted due to authorization"
|
||||
}
|
||||
],
|
||||
"roles": ["technical"],
|
||||
"vcardArray": [
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "REDACTED FOR PRIVACY"],
|
||||
["org", {}, "text", "REDACTED FOR PRIVACY"],
|
||||
["adr", {}, "text", ["", "", "REDACTED FOR PRIVACY", "REDACTED FOR PRIVACY", "REDACTED FOR PRIVACY", "REDACTED FOR PRIVACY", "XX"]],
|
||||
["tel", {"type":["voice"]}, "uri", "tel:REDACTED FOR PRIVACY"],
|
||||
["tel", {"type":["fax"]}, "uri", "tel:REDACTED FOR PRIVACY"]
|
||||
]
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
"objectClassName":"entity",
|
||||
"handle":"REDACTED FOR PRIVACY",
|
||||
"remarks":[
|
||||
{
|
||||
"title":"REDACTED FOR PRIVACY",
|
||||
"type":"object redacted due to authorization",
|
||||
"description":[
|
||||
"Some of the data in this object has been removed.",
|
||||
"Contact personal data is visible only to the owning registrar."
|
||||
],
|
||||
"links":[
|
||||
{
|
||||
"href":"https://github.com/google/nomulus/blob/master/docs/rdap.md#authentication",
|
||||
"rel":"alternate",
|
||||
"type":"text/html",
|
||||
"value":"https://github.com/google/nomulus/blob/master/docs/rdap.md#authentication"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title":"EMAIL REDACTED FOR PRIVACY",
|
||||
"type":"object redacted due to authorization",
|
||||
"description":[
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
],
|
||||
"roles":["registrant"],
|
||||
"vcardArray":[
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "REDACTED FOR PRIVACY"],
|
||||
["org", {}, "text", "REDACTED FOR PRIVACY"],
|
||||
["adr", {}, "text", ["", "", "REDACTED FOR PRIVACY", "REDACTED FOR PRIVACY", "REDACTED FOR PRIVACY", "REDACTED FOR PRIVACY", "XX"]],
|
||||
["tel", {"type":["voice"]}, "uri", "tel:REDACTED FOR PRIVACY"],
|
||||
["tel", {"type":["fax"]}, "uri", "tel:REDACTED FOR PRIVACY"]
|
||||
]
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -1,119 +1,88 @@
|
|||
{
|
||||
"domainSearchResults": [
|
||||
{
|
||||
"status": [
|
||||
"client delete prohibited",
|
||||
"client renew prohibited",
|
||||
"client transfer prohibited",
|
||||
"server update prohibited"
|
||||
],
|
||||
"handle": "%DOMAINHANDLE1%",
|
||||
"objectClassName": "domain",
|
||||
"handle": "%DOMAIN_HANDLE_1%",
|
||||
"ldhName": "%DOMAIN_PUNYCODE_NAME_1%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/domain/%DOMAINNAME1%",
|
||||
"href": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_1%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/domain/%DOMAINNAME1%"
|
||||
"value": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_1%"
|
||||
}
|
||||
],
|
||||
"ldhName": "%DOMAINNAME1%",
|
||||
"objectClassName": "domain",
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
"description": [
|
||||
"Summary data only. For complete data, send a specific query for the object."
|
||||
],
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"status": [
|
||||
"client delete prohibited",
|
||||
"client renew prohibited",
|
||||
"client transfer prohibited",
|
||||
"server update prohibited"
|
||||
],
|
||||
"handle": "%DOMAINHANDLE2%",
|
||||
"objectClassName": "domain",
|
||||
"handle": "%DOMAIN_HANDLE_2%",
|
||||
"ldhName": "%DOMAIN_PUNYCODE_NAME_2%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/domain/%DOMAINNAME2%",
|
||||
"href": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_2%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/domain/%DOMAINNAME2%"
|
||||
"value": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_2%"
|
||||
}
|
||||
],
|
||||
"ldhName": "%DOMAINNAME2%",
|
||||
"objectClassName": "domain",
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
"description": [
|
||||
"Summary data only. For complete data, send a specific query for the object."
|
||||
],
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"status": [
|
||||
"client delete prohibited",
|
||||
"client renew prohibited",
|
||||
"client transfer prohibited",
|
||||
"server update prohibited"
|
||||
],
|
||||
"handle": "%DOMAINHANDLE3%",
|
||||
"objectClassName": "domain",
|
||||
"handle": "%DOMAIN_HANDLE_3%",
|
||||
"ldhName": "%DOMAIN_PUNYCODE_NAME_3%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/domain/%DOMAINNAME3%",
|
||||
"href": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_3%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/domain/%DOMAINNAME3%"
|
||||
"value": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_3%"
|
||||
}
|
||||
],
|
||||
"ldhName": "%DOMAINNAME3%",
|
||||
"objectClassName": "domain",
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
"description": [
|
||||
"Summary data only. For complete data, send a specific query for the object."
|
||||
],
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"status": [
|
||||
"client delete prohibited",
|
||||
"client renew prohibited",
|
||||
"client transfer prohibited",
|
||||
"server update prohibited"
|
||||
],
|
||||
"handle": "%DOMAINHANDLE4%",
|
||||
"objectClassName": "domain",
|
||||
"handle": "%DOMAIN_HANDLE_4%",
|
||||
"ldhName": "%DOMAIN_PUNYCODE_NAME_4%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/domain/%DOMAINNAME4%",
|
||||
"href": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_4%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/domain/%DOMAINNAME4%"
|
||||
"value": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_4%"
|
||||
}
|
||||
],
|
||||
"ldhName": "%DOMAINNAME4%",
|
||||
"objectClassName": "domain",
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
"description": [
|
||||
"Summary data only. For complete data, send a specific query for the object."
|
||||
],
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"rdapConformance": [
|
||||
"rdap_level_0",
|
||||
"icann_rdap_response_profile_0"
|
||||
],
|
||||
"notices" :
|
||||
|
@ -186,10 +155,8 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"description" :
|
||||
[
|
||||
"URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf"
|
||||
],
|
||||
"title": "RDDS Inaccuracy Complaint Form",
|
||||
"description" : ["URL of the ICANN RDDS Inaccuracy Complaint Form: https://www.icann.org/wicf"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
|
|
|
@ -1,120 +1,89 @@
|
|||
{
|
||||
"domainSearchResults": [
|
||||
{
|
||||
"status": [
|
||||
"client delete prohibited",
|
||||
"client renew prohibited",
|
||||
"client transfer prohibited",
|
||||
"server update prohibited"
|
||||
],
|
||||
"handle": "%DOMAINHANDLE1%",
|
||||
"objectClassName": "domain",
|
||||
"handle": "%DOMAIN_HANDLE_1%",
|
||||
"ldhName": "%DOMAIN_PUNYCODE_NAME_1%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/domain/%DOMAINNAME1%",
|
||||
"href": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_1%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/domain/%DOMAINNAME1%"
|
||||
"value": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_1%"
|
||||
}
|
||||
],
|
||||
"ldhName": "%DOMAINNAME1%",
|
||||
"objectClassName": "domain",
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
"description": [
|
||||
"Summary data only. For complete data, send a specific query for the object."
|
||||
],
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"status": [
|
||||
"client delete prohibited",
|
||||
"client renew prohibited",
|
||||
"client transfer prohibited",
|
||||
"server update prohibited"
|
||||
],
|
||||
"handle": "%DOMAINHANDLE2%",
|
||||
"objectClassName": "domain",
|
||||
"handle": "%DOMAIN_HANDLE_2%",
|
||||
"ldhName": "%DOMAIN_PUNYCODE_NAME_2%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/domain/%DOMAINNAME2%",
|
||||
"href": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_2%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/domain/%DOMAINNAME2%"
|
||||
"value": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_2%"
|
||||
}
|
||||
],
|
||||
"ldhName": "%DOMAINNAME2%",
|
||||
"objectClassName": "domain",
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
"description": [
|
||||
"Summary data only. For complete data, send a specific query for the object."
|
||||
],
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"status": [
|
||||
"client delete prohibited",
|
||||
"client renew prohibited",
|
||||
"client transfer prohibited",
|
||||
"server update prohibited"
|
||||
],
|
||||
"handle": "%DOMAINHANDLE3%",
|
||||
"objectClassName": "domain",
|
||||
"handle": "%DOMAIN_HANDLE_3%",
|
||||
"ldhName": "%DOMAIN_PUNYCODE_NAME_3%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/domain/%DOMAINNAME3%",
|
||||
"href": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_3%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/domain/%DOMAINNAME3%"
|
||||
"value": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_3%"
|
||||
}
|
||||
],
|
||||
"ldhName": "%DOMAINNAME3%",
|
||||
"objectClassName": "domain",
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
"description": [
|
||||
"Summary data only. For complete data, send a specific query for the object."
|
||||
],
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"status": [
|
||||
"client delete prohibited",
|
||||
"client renew prohibited",
|
||||
"client transfer prohibited",
|
||||
"server update prohibited"
|
||||
],
|
||||
"handle": "%DOMAINHANDLE4%",
|
||||
"objectClassName": "domain",
|
||||
"handle": "%DOMAIN_HANDLE_4%",
|
||||
"ldhName": "%DOMAIN_PUNYCODE_NAME_4%",
|
||||
"unicodeName": "%DOMAIN_UNICODE_NAME_4%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/domain/%DOMAINPUNYCODENAME4%",
|
||||
"href": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_4%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/domain/%DOMAINPUNYCODENAME4%"
|
||||
"value": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_4%"
|
||||
}
|
||||
],
|
||||
"ldhName": "%DOMAINPUNYCODENAME4%",
|
||||
"unicodeName": "%DOMAINNAME4%",
|
||||
"objectClassName": "domain",
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
"description": [
|
||||
"Summary data only. For complete data, send a specific query for the object."
|
||||
],
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"rdapConformance": [
|
||||
"rdap_level_0",
|
||||
"icann_rdap_response_profile_0"
|
||||
],
|
||||
"notices" :
|
||||
|
@ -167,10 +136,8 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"description" :
|
||||
[
|
||||
"URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf"
|
||||
],
|
||||
"title": "RDDS Inaccuracy Complaint Form",
|
||||
"description" : ["URL of the ICANN RDDS Inaccuracy Complaint Form: https://www.icann.org/wicf"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
|
|
|
@ -1,120 +1,89 @@
|
|||
{
|
||||
"domainSearchResults": [
|
||||
{
|
||||
"status": [
|
||||
"client delete prohibited",
|
||||
"client renew prohibited",
|
||||
"client transfer prohibited",
|
||||
"server update prohibited"
|
||||
],
|
||||
"handle": "%DOMAINHANDLE1%",
|
||||
"objectClassName": "domain",
|
||||
"handle": "%DOMAIN_HANDLE_1%",
|
||||
"ldhName": "%DOMAIN_PUNYCODE_NAME_1%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/domain/%DOMAINPUNYCODENAME1%",
|
||||
"href": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_1%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/domain/%DOMAINPUNYCODENAME1%"
|
||||
"value": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_1%"
|
||||
}
|
||||
],
|
||||
"ldhName": "%DOMAINPUNYCODENAME1%",
|
||||
"objectClassName": "domain",
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
"description": [
|
||||
"Summary data only. For complete data, send a specific query for the object."
|
||||
],
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"status": [
|
||||
"client delete prohibited",
|
||||
"client renew prohibited",
|
||||
"client transfer prohibited",
|
||||
"server update prohibited"
|
||||
],
|
||||
"handle": "%DOMAINHANDLE2%",
|
||||
"objectClassName": "domain",
|
||||
"handle": "%DOMAIN_HANDLE_2%",
|
||||
"ldhName": "%DOMAIN_PUNYCODE_NAME_2%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/domain/%DOMAINPUNYCODENAME2%",
|
||||
"href": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_2%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/domain/%DOMAINPUNYCODENAME2%"
|
||||
"value": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_2%"
|
||||
}
|
||||
],
|
||||
"ldhName": "%DOMAINPUNYCODENAME2%",
|
||||
"objectClassName": "domain",
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
"description": [
|
||||
"Summary data only. For complete data, send a specific query for the object."
|
||||
],
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"status": [
|
||||
"client delete prohibited",
|
||||
"client renew prohibited",
|
||||
"client transfer prohibited",
|
||||
"server update prohibited"
|
||||
],
|
||||
"handle": "%DOMAINHANDLE3%",
|
||||
"objectClassName": "domain",
|
||||
"handle": "%DOMAIN_HANDLE_3%",
|
||||
"ldhName": "%DOMAIN_PUNYCODE_NAME_3%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/domain/%DOMAINPUNYCODENAME3%",
|
||||
"href": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_3%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/domain/%DOMAINPUNYCODENAME3%"
|
||||
"value": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_3%"
|
||||
}
|
||||
],
|
||||
"ldhName": "%DOMAINPUNYCODENAME3%",
|
||||
"objectClassName": "domain",
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
"description": [
|
||||
"Summary data only. For complete data, send a specific query for the object."
|
||||
],
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"status": [
|
||||
"client delete prohibited",
|
||||
"client renew prohibited",
|
||||
"client transfer prohibited",
|
||||
"server update prohibited"
|
||||
],
|
||||
"handle": "%DOMAINHANDLE4%",
|
||||
"objectClassName": "domain",
|
||||
"handle": "%DOMAIN_HANDLE_4%",
|
||||
"ldhName": "%DOMAIN_PUNYCODE_NAME_4%",
|
||||
"unicodeName": "%DOMAIN_UNICODE_NAME_4%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/domain/%DOMAINPUNYCODENAME4%",
|
||||
"href": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_4%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/domain/%DOMAINPUNYCODENAME4%"
|
||||
"value": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_4%"
|
||||
}
|
||||
],
|
||||
"ldhName": "%DOMAINPUNYCODENAME4%",
|
||||
"unicodeName": "%DOMAINNAME4%",
|
||||
"objectClassName": "domain",
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
"description": [
|
||||
"Summary data only. For complete data, send a specific query for the object."
|
||||
],
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"rdapConformance": [
|
||||
"rdap_level_0",
|
||||
"icann_rdap_response_profile_0"
|
||||
],
|
||||
"notices" :
|
||||
|
@ -187,10 +156,8 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"description" :
|
||||
[
|
||||
"URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf"
|
||||
],
|
||||
"title": "RDDS Inaccuracy Complaint Form",
|
||||
"description" : ["URL of the ICANN RDDS Inaccuracy Complaint Form: https://www.icann.org/wicf"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
|
|
|
@ -1,23 +1,21 @@
|
|||
{
|
||||
"rdapConformance": [
|
||||
"rdap_level_0",
|
||||
"icann_rdap_response_profile_0"
|
||||
],
|
||||
"domainSearchResults": [
|
||||
{
|
||||
"status": [
|
||||
"client delete prohibited",
|
||||
"client renew prohibited",
|
||||
"client transfer prohibited",
|
||||
"server update prohibited"
|
||||
],
|
||||
"handle": "%DOMAINHANDLE1%",
|
||||
"objectClassName": "domain",
|
||||
"handle": "%DOMAIN_HANDLE_1%",
|
||||
"ldhName": "%DOMAIN_PUNYCODE_NAME_1%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/domain/%DOMAINNAME1%",
|
||||
"href": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_1%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/domain/%DOMAINNAME1%"
|
||||
"value": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_1%"
|
||||
}
|
||||
],
|
||||
"ldhName": "%DOMAINNAME1%",
|
||||
"objectClassName": "domain",
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
|
@ -29,23 +27,17 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"status": [
|
||||
"client delete prohibited",
|
||||
"client renew prohibited",
|
||||
"client transfer prohibited",
|
||||
"server update prohibited"
|
||||
],
|
||||
"handle": "%DOMAINHANDLE2%",
|
||||
"objectClassName": "domain",
|
||||
"handle": "%DOMAIN_HANDLE_2%",
|
||||
"ldhName": "%DOMAIN_PUNYCODE_NAME_2%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/domain/%DOMAINNAME2%",
|
||||
"href": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_2%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/domain/%DOMAINNAME2%"
|
||||
"value": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_2%"
|
||||
}
|
||||
],
|
||||
"ldhName": "%DOMAINNAME2%",
|
||||
"objectClassName": "domain",
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
|
@ -57,11 +49,7 @@
|
|||
]
|
||||
}
|
||||
],
|
||||
"rdapConformance": [
|
||||
"icann_rdap_response_profile_0"
|
||||
],
|
||||
"notices" :
|
||||
[
|
||||
"notices": [
|
||||
{
|
||||
"title": "RDAP Terms of Service",
|
||||
"description":
|
||||
|
@ -88,17 +76,11 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"description" :
|
||||
[
|
||||
"This response conforms to the RDAP Operational Profile for gTLD Registries and Registrars version 1.0"
|
||||
]
|
||||
"description": ["This response conforms to the RDAP Operational Profile for gTLD Registries and Registrars version 1.0"]
|
||||
},
|
||||
{
|
||||
"title": "Status Codes",
|
||||
"description" :
|
||||
[
|
||||
"For more information on domain status codes, please visit https://icann.org/epp"
|
||||
],
|
||||
"description": ["For more information on domain status codes, please visit https://icann.org/epp"],
|
||||
"links":
|
||||
[
|
||||
{
|
||||
|
@ -110,10 +92,8 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"description" :
|
||||
[
|
||||
"URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf"
|
||||
],
|
||||
"title": "RDDS Inaccuracy Complaint Form",
|
||||
"description": ["URL of the ICANN RDDS Inaccuracy Complaint Form: https://www.icann.org/wicf"],
|
||||
"links":
|
||||
[
|
||||
{
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
"%DESCRIPTION%"
|
||||
],
|
||||
"rdapConformance": [
|
||||
"rdap_level_0",
|
||||
"icann_rdap_response_profile_0"
|
||||
],
|
||||
"notices": [
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"rdapConformance" : ["icann_rdap_response_profile_0"],
|
||||
"rdapConformance" : ["rdap_level_0", "icann_rdap_response_profile_0"],
|
||||
"notices" :
|
||||
[
|
||||
{
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"rdapConformance" : ["icann_rdap_response_profile_0"],
|
||||
"rdapConformance" : ["rdap_level_0", "icann_rdap_response_profile_0"],
|
||||
"notices" :
|
||||
[
|
||||
{
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
{
|
||||
"rdapConformance": [
|
||||
"rdap_level_0",
|
||||
"icann_rdap_response_profile_0"
|
||||
],
|
||||
"status": [
|
||||
"%STATUS%"
|
||||
],
|
||||
"ldhName": "%NAME%",
|
||||
"objectClassName": "nameserver",
|
||||
"handle": "%HANDLE%",
|
||||
"ldhName": "%NAME%",
|
||||
"status": ["%STATUS%"],
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/nameserver/%NAME%",
|
||||
|
@ -21,22 +21,15 @@
|
|||
]
|
||||
},
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1999-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"objectClassName": "nameserver",
|
||||
"entities" : [
|
||||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "1",
|
||||
"status" : ["active"],
|
||||
"roles" : ["registrar"],
|
||||
"links" :
|
||||
[
|
||||
|
@ -59,17 +52,7 @@
|
|||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "The Registrar"],
|
||||
["adr", {}, "text", [
|
||||
"",
|
||||
"",
|
||||
"123 Example Boulevard",
|
||||
"Williamsburg",
|
||||
"NY",
|
||||
"11211",
|
||||
"United States"]],
|
||||
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2223334444"],
|
||||
["email", {}, "text", "the.registrar@example.com"]
|
||||
["fn", {}, "text", "The Registrar"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
{
|
||||
"rdapConformance": [
|
||||
"rdap_level_0",
|
||||
"icann_rdap_response_profile_0"
|
||||
],
|
||||
"status": [
|
||||
|
@ -16,11 +17,6 @@
|
|||
],
|
||||
"ldhName": "%NAME%",
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1999-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
|
@ -31,7 +27,6 @@
|
|||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "1",
|
||||
"status" : ["active"],
|
||||
"roles" : ["registrar"],
|
||||
"links" :
|
||||
[
|
||||
|
@ -54,17 +49,7 @@
|
|||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "The Registrar"],
|
||||
["adr", {}, "text", [
|
||||
"",
|
||||
"",
|
||||
"123 Example Boulevard",
|
||||
"Williamsburg",
|
||||
"NY",
|
||||
"11211",
|
||||
"United States"]],
|
||||
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2223334444"],
|
||||
["email", {}, "text", "the.registrar@example.com"]
|
||||
["fn", {}, "text", "The Registrar"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
|
|
|
@ -1,13 +1,15 @@
|
|||
{
|
||||
"rdapConformance": [
|
||||
"rdap_level_0",
|
||||
"icann_rdap_response_profile_0"
|
||||
],
|
||||
"objectClassName": "nameserver",
|
||||
"handle": "%HANDLE%",
|
||||
"ldhName": "%NAME%",
|
||||
"status": [
|
||||
"active",
|
||||
"associated"
|
||||
],
|
||||
"ldhName": "%NAME%",
|
||||
"handle": "%HANDLE%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/nameserver/%NAME%",
|
||||
|
@ -22,22 +24,15 @@
|
|||
]
|
||||
},
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1999-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"objectClassName": "nameserver",
|
||||
"entities" : [
|
||||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "1",
|
||||
"status" : ["active"],
|
||||
"roles" : ["registrar"],
|
||||
"links" :
|
||||
[
|
||||
|
@ -60,17 +55,7 @@
|
|||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "The Registrar"],
|
||||
["adr", {}, "text", [
|
||||
"",
|
||||
"",
|
||||
"123 Example Boulevard",
|
||||
"Williamsburg",
|
||||
"NY",
|
||||
"11211",
|
||||
"United States"]],
|
||||
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2223334444"],
|
||||
["email", {}, "text", "the.registrar@example.com"]
|
||||
["fn", {}, "text", "The Registrar"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
|
|
|
@ -1,12 +1,13 @@
|
|||
{
|
||||
"rdapConformance": [
|
||||
"rdap_level_0",
|
||||
"icann_rdap_response_profile_0"
|
||||
],
|
||||
"status": [
|
||||
"active"
|
||||
],
|
||||
"unicodeName": "%NAME%",
|
||||
"objectClassName": "nameserver",
|
||||
"handle": "%HANDLE%",
|
||||
"ldhName": "%PUNYCODENAME%",
|
||||
"unicodeName": "%NAME%",
|
||||
"status": ["active"],
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/nameserver/%PUNYCODENAME%",
|
||||
|
@ -15,29 +16,21 @@
|
|||
"value": "https://example.tld/rdap/nameserver/%PUNYCODENAME%"
|
||||
}
|
||||
],
|
||||
"ldhName": "%PUNYCODENAME%",
|
||||
"ipAddresses": {
|
||||
"%ADDRESSTYPE%": [
|
||||
"%ADDRESS%"
|
||||
]
|
||||
},
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1999-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"objectClassName": "nameserver",
|
||||
"entities" : [
|
||||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "1",
|
||||
"status" : ["active"],
|
||||
"roles" : ["registrar"],
|
||||
"links" :
|
||||
[
|
||||
|
@ -60,17 +53,7 @@
|
|||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "The Registrar"],
|
||||
["adr", {}, "text", [
|
||||
"",
|
||||
"",
|
||||
"123 Example Boulevard",
|
||||
"Williamsburg",
|
||||
"NY",
|
||||
"11211",
|
||||
"United States"]],
|
||||
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2223334444"],
|
||||
["email", {}, "text", "the.registrar@example.com"]
|
||||
["fn", {}, "text", "The Registrar"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
|
|
|
@ -2,26 +2,18 @@
|
|||
"domainSearchResults":
|
||||
[
|
||||
{
|
||||
"handle":"%DOMAINHANDLE1%",
|
||||
"links":
|
||||
[
|
||||
"objectClassName":"domain",
|
||||
"handle":"%DOMAIN_HANDLE_1%",
|
||||
"ldhName":"%DOMAIN_PUNYCODE_NAME_1%",
|
||||
"links": [
|
||||
{
|
||||
"rel":"self",
|
||||
"href":"https://example.tld/rdap/domain/%DOMAINNAME1%",
|
||||
"value":"https://example.tld/rdap/domain/%DOMAINNAME1%",
|
||||
"href":"https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_1%",
|
||||
"value":"https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_1%",
|
||||
"type":"application/rdap+json"
|
||||
}
|
||||
],
|
||||
"ldhName":"%DOMAINNAME1%",
|
||||
"status":
|
||||
[
|
||||
"client delete prohibited",
|
||||
"client renew prohibited",
|
||||
"client transfer prohibited",
|
||||
"server update prohibited"
|
||||
],
|
||||
"remarks":
|
||||
[
|
||||
"remarks": [
|
||||
{
|
||||
"description":
|
||||
[
|
||||
|
@ -30,30 +22,21 @@
|
|||
"title":"Incomplete Data",
|
||||
"type":"object truncated due to unexplainable reasons"
|
||||
}
|
||||
],
|
||||
"objectClassName":"domain"
|
||||
]
|
||||
},
|
||||
{
|
||||
"handle":"%DOMAINHANDLE2%",
|
||||
"links":
|
||||
[
|
||||
"objectClassName":"domain",
|
||||
"handle":"%DOMAIN_HANDLE_2%",
|
||||
"ldhName":"%DOMAIN_PUNYCODE_NAME_2%",
|
||||
"links": [
|
||||
{
|
||||
"rel":"self",
|
||||
"href":"https://example.tld/rdap/domain/%DOMAINNAME2%",
|
||||
"value":"https://example.tld/rdap/domain/%DOMAINNAME2%",
|
||||
"href":"https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_2%",
|
||||
"value":"https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_2%",
|
||||
"type":"application/rdap+json"
|
||||
}
|
||||
],
|
||||
"ldhName":"%DOMAINNAME2%",
|
||||
"status":
|
||||
[
|
||||
"client delete prohibited",
|
||||
"client renew prohibited",
|
||||
"client transfer prohibited",
|
||||
"server update prohibited"
|
||||
],
|
||||
"remarks":
|
||||
[
|
||||
"remarks": [
|
||||
{
|
||||
"description":
|
||||
[
|
||||
|
@ -62,30 +45,21 @@
|
|||
"title":"Incomplete Data",
|
||||
"type":"object truncated due to unexplainable reasons"
|
||||
}
|
||||
],
|
||||
"objectClassName":"domain"
|
||||
]
|
||||
},
|
||||
{
|
||||
"handle":"%DOMAINHANDLE3%",
|
||||
"links":
|
||||
[
|
||||
"objectClassName":"domain",
|
||||
"handle":"%DOMAIN_HANDLE_3%",
|
||||
"ldhName":"%DOMAIN_PUNYCODE_NAME_3%",
|
||||
"links": [
|
||||
{
|
||||
"rel":"self",
|
||||
"href":"https://example.tld/rdap/domain/%DOMAINNAME3%",
|
||||
"value":"https://example.tld/rdap/domain/%DOMAINNAME3%",
|
||||
"href":"https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_3%",
|
||||
"value":"https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_3%",
|
||||
"type":"application/rdap+json"
|
||||
}
|
||||
],
|
||||
"ldhName":"%DOMAINNAME3%",
|
||||
"status":
|
||||
[
|
||||
"client delete prohibited",
|
||||
"client renew prohibited",
|
||||
"client transfer prohibited",
|
||||
"server update prohibited"
|
||||
],
|
||||
"remarks":
|
||||
[
|
||||
"remarks": [
|
||||
{
|
||||
"description":
|
||||
[
|
||||
|
@ -94,8 +68,7 @@
|
|||
"title":"Incomplete Data",
|
||||
"type":"object truncated due to unexplainable reasons"
|
||||
}
|
||||
],
|
||||
"objectClassName":"domain"
|
||||
]
|
||||
}
|
||||
],
|
||||
"notices":
|
||||
|
@ -156,10 +129,8 @@
|
|||
"title":"Status Codes"
|
||||
},
|
||||
{
|
||||
"description":
|
||||
[
|
||||
"URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf"
|
||||
],
|
||||
"title": "RDDS Inaccuracy Complaint Form",
|
||||
"description": ["URL of the ICANN RDDS Inaccuracy Complaint Form: https://www.icann.org/wicf"],
|
||||
"links":
|
||||
[
|
||||
{
|
||||
|
@ -173,6 +144,7 @@
|
|||
],
|
||||
"rdapConformance":
|
||||
[
|
||||
"rdap_level_0",
|
||||
"icann_rdap_response_profile_0"
|
||||
]
|
||||
}
|
||||
|
|
|
@ -1,13 +1,9 @@
|
|||
{
|
||||
"domainSearchResults":[
|
||||
{
|
||||
"ldhName":"%DOMAINNAME1%",
|
||||
"status":[
|
||||
"client delete prohibited",
|
||||
"client renew prohibited",
|
||||
"client transfer prohibited",
|
||||
"server update prohibited"
|
||||
],
|
||||
"objectClassName":"domain",
|
||||
"handle":"%DOMAIN_HANDLE_1%",
|
||||
"ldhName":"%DOMAIN_PUNYCODE_NAME_1%",
|
||||
"remarks":[
|
||||
{
|
||||
"title":"Incomplete Data",
|
||||
|
@ -17,25 +13,19 @@
|
|||
]
|
||||
}
|
||||
],
|
||||
"handle":"%DOMAINHANDLE1%",
|
||||
"links":[
|
||||
{
|
||||
"value":"https://example.tld/rdap/domain/%DOMAINNAME1%",
|
||||
"value":"https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_1%",
|
||||
"type":"application/rdap+json",
|
||||
"rel":"self",
|
||||
"href":"https://example.tld/rdap/domain/%DOMAINNAME1%"
|
||||
"href":"https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_1%"
|
||||
}
|
||||
],
|
||||
"objectClassName":"domain"
|
||||
]
|
||||
},
|
||||
{
|
||||
"ldhName":"%DOMAINNAME2%",
|
||||
"status":[
|
||||
"client delete prohibited",
|
||||
"client renew prohibited",
|
||||
"client transfer prohibited",
|
||||
"server update prohibited"
|
||||
],
|
||||
"objectClassName":"domain",
|
||||
"handle":"%DOMAIN_HANDLE_2%",
|
||||
"ldhName":"%DOMAIN_PUNYCODE_NAME_2%",
|
||||
"remarks":[
|
||||
{
|
||||
"title":"Incomplete Data",
|
||||
|
@ -45,16 +35,14 @@
|
|||
]
|
||||
}
|
||||
],
|
||||
"handle":"%DOMAINHANDLE2%",
|
||||
"links":[
|
||||
{
|
||||
"value":"https://example.tld/rdap/domain/%DOMAINNAME2%",
|
||||
"value":"https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_2%",
|
||||
"type":"application/rdap+json",
|
||||
"rel":"self",
|
||||
"href":"https://example.tld/rdap/domain/%DOMAINNAME2%"
|
||||
"href":"https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_2%"
|
||||
}
|
||||
],
|
||||
"objectClassName":"domain"
|
||||
]
|
||||
}
|
||||
],
|
||||
"notices":[
|
||||
|
@ -108,9 +96,8 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"description":[
|
||||
"URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf"
|
||||
],
|
||||
"title": "RDDS Inaccuracy Complaint Form",
|
||||
"description":["URL of the ICANN RDDS Inaccuracy Complaint Form: https://www.icann.org/wicf"],
|
||||
"links":[
|
||||
{
|
||||
"value":"https://www.icann.org/wicf",
|
||||
|
@ -122,6 +109,7 @@
|
|||
}
|
||||
],
|
||||
"rdapConformance":[
|
||||
"rdap_level_0",
|
||||
"icann_rdap_response_profile_0"
|
||||
]
|
||||
}
|
||||
|
|
|
@ -101,7 +101,7 @@
|
|||
]
|
||||
}
|
||||
],
|
||||
"rdapConformance": [ "icann_rdap_response_profile_0" ],
|
||||
"rdapConformance": ["rdap_level_0", "icann_rdap_response_profile_0" ],
|
||||
"notices" :
|
||||
[
|
||||
{
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "4-ROID",
|
||||
"status" : ["active"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
|
@ -14,6 +13,12 @@
|
|||
"type" : "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
|
@ -21,6 +26,13 @@
|
|||
"Summary data only. For complete data, send a specific query for the object."
|
||||
],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
},
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
],
|
||||
"vcardArray" :
|
||||
|
@ -42,15 +54,13 @@
|
|||
]
|
||||
],
|
||||
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2126660420"],
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"],
|
||||
["email", {}, "text", "blindly@b.tld"]
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"]
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "2-ROID",
|
||||
"status" : ["active"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
|
@ -60,6 +70,12 @@
|
|||
"type" : "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
|
@ -67,6 +83,13 @@
|
|||
"Summary data only. For complete data, send a specific query for the object."
|
||||
],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
},
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
],
|
||||
"vcardArray" :
|
||||
|
@ -88,13 +111,12 @@
|
|||
]
|
||||
],
|
||||
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2126660420"],
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"],
|
||||
["email", {}, "text", "blinky@b.tld"]
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"]
|
||||
]
|
||||
]
|
||||
}
|
||||
],
|
||||
"rdapConformance": [ "icann_rdap_response_profile_0" ],
|
||||
"rdapConformance": ["rdap_level_0", "icann_rdap_response_profile_0" ],
|
||||
"notices" :
|
||||
[
|
||||
{
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
{
|
||||
"objectClassName" : "nameserver",
|
||||
"handle" : "4-ROID",
|
||||
"status" : ["active", "associated"],
|
||||
"ldhName" : "ns2.cat.lol",
|
||||
"links" :
|
||||
[
|
||||
|
@ -19,55 +18,12 @@
|
|||
{
|
||||
"v6" : ["bad:f00d:cafe::15:beef"]
|
||||
},
|
||||
"remarks": [
|
||||
"events": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
"description": [
|
||||
"Summary data only. For complete data, send a specific query for the object."
|
||||
],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"entities" : [
|
||||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "1",
|
||||
"status" : ["active"],
|
||||
"roles" : ["registrar"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
"value" : "https://example.tld/rdap/entity/1",
|
||||
"rel" : "self",
|
||||
"href" : "https://example.tld/rdap/entity/1",
|
||||
"type" : "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"publicIds" :
|
||||
[
|
||||
{
|
||||
"type" : "IANA Registrar ID",
|
||||
"identifier" : "1"
|
||||
}
|
||||
],
|
||||
"vcardArray" :
|
||||
[
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "The Registrar"],
|
||||
["adr", {}, "text", [
|
||||
"",
|
||||
"",
|
||||
"123 Example Boulevard",
|
||||
"Williamsburg",
|
||||
"NY",
|
||||
"11211",
|
||||
"United States"]],
|
||||
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2223334444"],
|
||||
["email", {}, "text", "the.registrar@example.com"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
|
@ -77,13 +33,10 @@
|
|||
"type": "object truncated due to unexplainable reasons"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName" : "nameserver",
|
||||
"handle" : "6-ROID",
|
||||
"status" : ["active"],
|
||||
"ldhName" : "ns1.cat2.lol",
|
||||
"links" :
|
||||
[
|
||||
|
@ -99,55 +52,12 @@
|
|||
"v4" : ["1.2.3.3"],
|
||||
"v6" : ["bad:f00d:cafe::15:beef"]
|
||||
},
|
||||
"remarks": [
|
||||
"events": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
"description": [
|
||||
"Summary data only. For complete data, send a specific query for the object."
|
||||
],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"entities" : [
|
||||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "1",
|
||||
"status" : ["active"],
|
||||
"roles" : ["registrar"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
"value" : "https://example.tld/rdap/entity/1",
|
||||
"rel" : "self",
|
||||
"href" : "https://example.tld/rdap/entity/1",
|
||||
"type" : "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"publicIds" :
|
||||
[
|
||||
{
|
||||
"type" : "IANA Registrar ID",
|
||||
"identifier" : "1"
|
||||
}
|
||||
],
|
||||
"vcardArray" :
|
||||
[
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "The Registrar"],
|
||||
["adr", {}, "text", [
|
||||
"",
|
||||
"",
|
||||
"123 Example Boulevard",
|
||||
"Williamsburg",
|
||||
"NY",
|
||||
"11211",
|
||||
"United States"]],
|
||||
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2223334444"],
|
||||
["email", {}, "text", "the.registrar@example.com"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
|
@ -158,10 +68,8 @@
|
|||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"rdapConformance" : ["icann_rdap_response_profile_0"],
|
||||
"rdapConformance" : ["rdap_level_0", "icann_rdap_response_profile_0"],
|
||||
"notices" :
|
||||
[
|
||||
{
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "0001-ROID",
|
||||
"status" : ["active"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
|
@ -14,6 +13,12 @@
|
|||
"type" : "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
|
@ -21,6 +26,13 @@
|
|||
"Summary data only. For complete data, send a specific query for the object."
|
||||
],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
},
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
],
|
||||
"vcardArray" :
|
||||
|
@ -42,15 +54,13 @@
|
|||
]
|
||||
],
|
||||
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2126660420"],
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"],
|
||||
["email", {}, "text", "contact1@gmail.com"]
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"]
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "0002-ROID",
|
||||
"status" : ["active"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
|
@ -60,6 +70,12 @@
|
|||
"type" : "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
|
@ -67,6 +83,13 @@
|
|||
"Summary data only. For complete data, send a specific query for the object."
|
||||
],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
},
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
],
|
||||
"vcardArray" :
|
||||
|
@ -88,15 +111,13 @@
|
|||
]
|
||||
],
|
||||
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2126660420"],
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"],
|
||||
["email", {}, "text", "contact2@gmail.com"]
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"]
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "0003-ROID",
|
||||
"status" : ["active"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
|
@ -106,6 +127,12 @@
|
|||
"type" : "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
|
@ -113,6 +140,13 @@
|
|||
"Summary data only. For complete data, send a specific query for the object."
|
||||
],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
},
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
],
|
||||
"vcardArray" :
|
||||
|
@ -134,15 +168,13 @@
|
|||
]
|
||||
],
|
||||
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2126660420"],
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"],
|
||||
["email", {}, "text", "contact3@gmail.com"]
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"]
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "0004-ROID",
|
||||
"status" : ["active"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
|
@ -152,6 +184,12 @@
|
|||
"type" : "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
|
@ -159,6 +197,13 @@
|
|||
"Summary data only. For complete data, send a specific query for the object."
|
||||
],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
},
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
],
|
||||
"vcardArray" :
|
||||
|
@ -180,13 +225,12 @@
|
|||
]
|
||||
],
|
||||
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2126660420"],
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"],
|
||||
["email", {}, "text", "contact4@gmail.com"]
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"]
|
||||
]
|
||||
]
|
||||
}
|
||||
],
|
||||
"rdapConformance": [ "icann_rdap_response_profile_0" ],
|
||||
"rdapConformance": ["rdap_level_0", "icann_rdap_response_profile_0" ],
|
||||
"notices" :
|
||||
[
|
||||
{
|
||||
|
|
|
@ -1,23 +1,17 @@
|
|||
{
|
||||
"domainSearchResults": [
|
||||
{
|
||||
"status": [
|
||||
"client delete prohibited",
|
||||
"client renew prohibited",
|
||||
"client transfer prohibited",
|
||||
"server update prohibited"
|
||||
],
|
||||
"handle": "%DOMAINHANDLE1%",
|
||||
"objectClassName": "domain",
|
||||
"handle": "%DOMAIN_HANDLE_1%",
|
||||
"ldhName": "%DOMAIN_PUNYCODE_NAME_1%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/domain/%DOMAINNAME1%",
|
||||
"href": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_1%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/domain/%DOMAINNAME1%"
|
||||
"value": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_1%"
|
||||
}
|
||||
],
|
||||
"ldhName": "%DOMAINNAME1%",
|
||||
"objectClassName": "domain",
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
|
@ -29,23 +23,17 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"status": [
|
||||
"client delete prohibited",
|
||||
"client renew prohibited",
|
||||
"client transfer prohibited",
|
||||
"server update prohibited"
|
||||
],
|
||||
"handle": "%DOMAINHANDLE2%",
|
||||
"objectClassName": "domain",
|
||||
"handle": "%DOMAIN_HANDLE_2%",
|
||||
"ldhName": "%DOMAIN_PUNYCODE_NAME_2%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/domain/%DOMAINNAME2%",
|
||||
"href": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_2%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/domain/%DOMAINNAME2%"
|
||||
"value": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_2%"
|
||||
}
|
||||
],
|
||||
"ldhName": "%DOMAINNAME2%",
|
||||
"objectClassName": "domain",
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
|
@ -57,23 +45,17 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"status": [
|
||||
"client delete prohibited",
|
||||
"client renew prohibited",
|
||||
"client transfer prohibited",
|
||||
"server update prohibited"
|
||||
],
|
||||
"handle": "%DOMAINHANDLE3%",
|
||||
"objectClassName": "domain",
|
||||
"handle": "%DOMAIN_HANDLE_3%",
|
||||
"ldhName": "%DOMAIN_PUNYCODE_NAME_3%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/domain/%DOMAINNAME3%",
|
||||
"href": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_3%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/domain/%DOMAINNAME3%"
|
||||
"value": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_3%"
|
||||
}
|
||||
],
|
||||
"ldhName": "%DOMAINNAME3%",
|
||||
"objectClassName": "domain",
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
|
@ -85,23 +67,17 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"status": [
|
||||
"client delete prohibited",
|
||||
"client renew prohibited",
|
||||
"client transfer prohibited",
|
||||
"server update prohibited"
|
||||
],
|
||||
"handle": "%DOMAINHANDLE4%",
|
||||
"objectClassName": "domain",
|
||||
"handle": "%DOMAIN_HANDLE_4%",
|
||||
"ldhName": "%DOMAIN_PUNYCODE_NAME_4%",
|
||||
"links": [
|
||||
{
|
||||
"href": "https://example.tld/rdap/domain/%DOMAINNAME4%",
|
||||
"href": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_4%",
|
||||
"type": "application/rdap+json",
|
||||
"rel": "self",
|
||||
"value": "https://example.tld/rdap/domain/%DOMAINNAME4%"
|
||||
"value": "https://example.tld/rdap/domain/%DOMAIN_PUNYCODE_NAME_4%"
|
||||
}
|
||||
],
|
||||
"ldhName": "%DOMAINNAME4%",
|
||||
"objectClassName": "domain",
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
|
@ -114,6 +90,7 @@
|
|||
}
|
||||
],
|
||||
"rdapConformance": [
|
||||
"rdap_level_0",
|
||||
"icann_rdap_response_profile_0"
|
||||
],
|
||||
"notices" :
|
||||
|
@ -166,10 +143,8 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"description" :
|
||||
[
|
||||
"URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf"
|
||||
],
|
||||
"title": "RDDS Inaccuracy Complaint Form",
|
||||
"description" : ["URL of the ICANN RDDS Inaccuracy Complaint Form: https://www.icann.org/wicf"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
{
|
||||
"objectClassName" : "nameserver",
|
||||
"handle" : "14-ROID",
|
||||
"status" : ["active"],
|
||||
"ldhName" : "nsx1.cat.lol",
|
||||
"links" :
|
||||
[
|
||||
|
@ -19,55 +18,12 @@
|
|||
{
|
||||
"v4" : ["5.5.5.1", "5.5.5.2"]
|
||||
},
|
||||
"remarks": [
|
||||
"events": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
"description": [
|
||||
"Summary data only. For complete data, send a specific query for the object."
|
||||
],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"entities" : [
|
||||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "1",
|
||||
"status" : ["active"],
|
||||
"roles" : ["registrar"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
"value" : "https://example.tld/rdap/entity/1",
|
||||
"rel" : "self",
|
||||
"href" : "https://example.tld/rdap/entity/1",
|
||||
"type" : "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"publicIds" :
|
||||
[
|
||||
{
|
||||
"type" : "IANA Registrar ID",
|
||||
"identifier" : "1"
|
||||
}
|
||||
],
|
||||
"vcardArray" :
|
||||
[
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "The Registrar"],
|
||||
["adr", {}, "text", [
|
||||
"",
|
||||
"",
|
||||
"123 Example Boulevard",
|
||||
"Williamsburg",
|
||||
"NY",
|
||||
"11211",
|
||||
"United States"]],
|
||||
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2223334444"],
|
||||
["email", {}, "text", "the.registrar@example.com"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
|
@ -77,13 +33,10 @@
|
|||
"type": "object truncated due to unexplainable reasons"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName" : "nameserver",
|
||||
"handle" : "15-ROID",
|
||||
"status" : ["active"],
|
||||
"ldhName" : "nsx2.cat.lol",
|
||||
"links" :
|
||||
[
|
||||
|
@ -98,55 +51,12 @@
|
|||
{
|
||||
"v4" : ["5.5.5.1", "5.5.5.2"]
|
||||
},
|
||||
"remarks": [
|
||||
"events": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
"description": [
|
||||
"Summary data only. For complete data, send a specific query for the object."
|
||||
],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"entities" : [
|
||||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "1",
|
||||
"status" : ["active"],
|
||||
"roles" : ["registrar"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
"value" : "https://example.tld/rdap/entity/1",
|
||||
"rel" : "self",
|
||||
"href" : "https://example.tld/rdap/entity/1",
|
||||
"type" : "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"publicIds" :
|
||||
[
|
||||
{
|
||||
"type" : "IANA Registrar ID",
|
||||
"identifier" : "1"
|
||||
}
|
||||
],
|
||||
"vcardArray" :
|
||||
[
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "The Registrar"],
|
||||
["adr", {}, "text", [
|
||||
"",
|
||||
"",
|
||||
"123 Example Boulevard",
|
||||
"Williamsburg",
|
||||
"NY",
|
||||
"11211",
|
||||
"United States"]],
|
||||
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2223334444"],
|
||||
["email", {}, "text", "the.registrar@example.com"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
|
@ -156,13 +66,10 @@
|
|||
"type": "object truncated due to unexplainable reasons"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName" : "nameserver",
|
||||
"handle" : "16-ROID",
|
||||
"status" : ["active"],
|
||||
"ldhName" : "nsx3.cat.lol",
|
||||
"links" :
|
||||
[
|
||||
|
@ -177,55 +84,12 @@
|
|||
{
|
||||
"v4" : ["5.5.5.1", "5.5.5.2"]
|
||||
},
|
||||
"remarks": [
|
||||
"events": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
"description": [
|
||||
"Summary data only. For complete data, send a specific query for the object."
|
||||
],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"entities" : [
|
||||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "1",
|
||||
"status" : ["active"],
|
||||
"roles" : ["registrar"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
"value" : "https://example.tld/rdap/entity/1",
|
||||
"rel" : "self",
|
||||
"href" : "https://example.tld/rdap/entity/1",
|
||||
"type" : "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"publicIds" :
|
||||
[
|
||||
{
|
||||
"type" : "IANA Registrar ID",
|
||||
"identifier" : "1"
|
||||
}
|
||||
],
|
||||
"vcardArray" :
|
||||
[
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "The Registrar"],
|
||||
["adr", {}, "text", [
|
||||
"",
|
||||
"",
|
||||
"123 Example Boulevard",
|
||||
"Williamsburg",
|
||||
"NY",
|
||||
"11211",
|
||||
"United States"]],
|
||||
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2223334444"],
|
||||
["email", {}, "text", "the.registrar@example.com"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
|
@ -235,13 +99,10 @@
|
|||
"type": "object truncated due to unexplainable reasons"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName" : "nameserver",
|
||||
"handle" : "17-ROID",
|
||||
"status" : ["active"],
|
||||
"ldhName" : "nsx4.cat.lol",
|
||||
"links" :
|
||||
[
|
||||
|
@ -256,55 +117,12 @@
|
|||
{
|
||||
"v4" : ["5.5.5.1", "5.5.5.2"]
|
||||
},
|
||||
"remarks": [
|
||||
"events": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
"description": [
|
||||
"Summary data only. For complete data, send a specific query for the object."
|
||||
],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"entities" : [
|
||||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "1",
|
||||
"status" : ["active"],
|
||||
"roles" : ["registrar"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
"value" : "https://example.tld/rdap/entity/1",
|
||||
"rel" : "self",
|
||||
"href" : "https://example.tld/rdap/entity/1",
|
||||
"type" : "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"publicIds" :
|
||||
[
|
||||
{
|
||||
"type" : "IANA Registrar ID",
|
||||
"identifier" : "1"
|
||||
}
|
||||
],
|
||||
"vcardArray" :
|
||||
[
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "The Registrar"],
|
||||
["adr", {}, "text", [
|
||||
"",
|
||||
"",
|
||||
"123 Example Boulevard",
|
||||
"Williamsburg",
|
||||
"NY",
|
||||
"11211",
|
||||
"United States"]],
|
||||
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2223334444"],
|
||||
["email", {}, "text", "the.registrar@example.com"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
|
@ -315,10 +133,8 @@
|
|||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"rdapConformance" : ["icann_rdap_response_profile_0"],
|
||||
"rdapConformance" : ["rdap_level_0", "icann_rdap_response_profile_0"],
|
||||
"notices" :
|
||||
[
|
||||
{
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
{
|
||||
"objectClassName": "entity",
|
||||
"handle": "301",
|
||||
"status" : ["active"],
|
||||
"links":
|
||||
[
|
||||
{
|
||||
|
@ -21,6 +20,12 @@
|
|||
"identifier": "301"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
|
@ -57,7 +62,6 @@
|
|||
{
|
||||
"objectClassName": "entity",
|
||||
"handle": "302",
|
||||
"status" : ["active"],
|
||||
"links":
|
||||
[
|
||||
{
|
||||
|
@ -74,6 +78,12 @@
|
|||
"identifier": "302"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
|
@ -110,7 +120,6 @@
|
|||
{
|
||||
"objectClassName": "entity",
|
||||
"handle": "303",
|
||||
"status" : ["active"],
|
||||
"links":
|
||||
[
|
||||
{
|
||||
|
@ -127,6 +136,12 @@
|
|||
"identifier": "303"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
|
@ -163,7 +178,6 @@
|
|||
{
|
||||
"objectClassName": "entity",
|
||||
"handle": "304",
|
||||
"status" : ["active"],
|
||||
"links":
|
||||
[
|
||||
{
|
||||
|
@ -180,6 +194,12 @@
|
|||
"identifier": "304"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
|
@ -214,7 +234,7 @@
|
|||
"roles": ["registrar"]
|
||||
}
|
||||
],
|
||||
"rdapConformance": [ "icann_rdap_response_profile_0" ],
|
||||
"rdapConformance": ["rdap_level_0", "icann_rdap_response_profile_0" ],
|
||||
"notices":
|
||||
[
|
||||
{
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
{
|
||||
"rdapConformance": [
|
||||
"rdap_level_0",
|
||||
"icann_rdap_response_profile_0"
|
||||
],
|
||||
"objectClassName" : "entity",
|
||||
|
@ -23,11 +24,6 @@
|
|||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "%NAME%",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
{
|
||||
"rdapConformance": [
|
||||
"rdap_level_0",
|
||||
"icann_rdap_response_profile_0"
|
||||
],
|
||||
"objectClassName" : "entity",
|
||||
|
@ -7,11 +8,6 @@
|
|||
"status" : ["%STATUS%"],
|
||||
"roles" : ["registrar"],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "%NAME%",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
{
|
||||
"objectClassName": "entity",
|
||||
"handle": "0001-ROID",
|
||||
"status" : ["active"],
|
||||
"links":
|
||||
[
|
||||
{
|
||||
|
@ -14,6 +13,12 @@
|
|||
"type": "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
|
@ -21,6 +26,13 @@
|
|||
"Summary data only. For complete data, send a specific query for the object."
|
||||
],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
},
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
],
|
||||
"vcardArray":
|
||||
|
@ -42,15 +54,13 @@
|
|||
]
|
||||
],
|
||||
["tel", {"type": ["voice"]}, "uri", "tel:+1.2126660420"],
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"],
|
||||
["email", {}, "text", "contact1@gmail.com"]
|
||||
["tel", {"type": ["fax"]}, "uri", "tel:+1.2126660420"]
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"handle": "0002-ROID",
|
||||
"status" : ["active"],
|
||||
"links":
|
||||
[
|
||||
{
|
||||
|
@ -60,6 +70,12 @@
|
|||
"type": "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
|
@ -67,6 +83,13 @@
|
|||
"Summary data only. For complete data, send a specific query for the object."
|
||||
],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
},
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
],
|
||||
"vcardArray":
|
||||
|
@ -88,15 +111,13 @@
|
|||
]
|
||||
],
|
||||
["tel", {"type": ["voice"]}, "uri", "tel:+1.2126660420"],
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"],
|
||||
["email", {}, "text", "contact2@gmail.com"]
|
||||
["tel", {"type": ["fax"]}, "uri", "tel:+1.2126660420"]
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"handle": "0003-ROID",
|
||||
"status" : ["active"],
|
||||
"links":
|
||||
[
|
||||
{
|
||||
|
@ -106,6 +127,12 @@
|
|||
"type": "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
|
@ -113,6 +140,13 @@
|
|||
"Summary data only. For complete data, send a specific query for the object."
|
||||
],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
},
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
],
|
||||
"vcardArray":
|
||||
|
@ -134,15 +168,13 @@
|
|||
]
|
||||
],
|
||||
["tel", {"type": ["voice"]}, "uri", "tel:+1.2126660420"],
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"],
|
||||
["email", {}, "text", "contact3@gmail.com"]
|
||||
["tel", {"type": ["fax"]}, "uri", "tel:+1.2126660420"]
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"handle": "0004-ROID",
|
||||
"status" : ["active"],
|
||||
"links":
|
||||
[
|
||||
{
|
||||
|
@ -152,6 +184,12 @@
|
|||
"type": "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
|
@ -159,6 +197,13 @@
|
|||
"Summary data only. For complete data, send a specific query for the object."
|
||||
],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
},
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
],
|
||||
"vcardArray":
|
||||
|
@ -180,13 +225,12 @@
|
|||
]
|
||||
],
|
||||
["tel", {"type": ["voice"]}, "uri", "tel:+1.2126660420"],
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"],
|
||||
["email", {}, "text", "contact4@gmail.com"]
|
||||
["tel", {"type": ["fax"]}, "uri", "tel:+1.2126660420"]
|
||||
]
|
||||
]
|
||||
}
|
||||
],
|
||||
"rdapConformance": [ "icann_rdap_response_profile_0" ],
|
||||
"rdapConformance": ["rdap_level_0", "icann_rdap_response_profile_0" ],
|
||||
"notices":
|
||||
[
|
||||
{
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
{
|
||||
"objectClassName" : "nameserver",
|
||||
"handle" : "14-ROID",
|
||||
"status" : ["active"],
|
||||
"ldhName" : "nsx1.cat.lol",
|
||||
"links" :
|
||||
[
|
||||
|
@ -28,62 +27,16 @@
|
|||
"type": "object truncated due to unexplainable reasons"
|
||||
}
|
||||
],
|
||||
"entities" : [
|
||||
"events": [
|
||||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "1",
|
||||
"status" : ["active"],
|
||||
"roles" : ["registrar"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
"value" : "https://example.tld/rdap/entity/1",
|
||||
"rel" : "self",
|
||||
"href" : "https://example.tld/rdap/entity/1",
|
||||
"type" : "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"publicIds" :
|
||||
[
|
||||
{
|
||||
"type" : "IANA Registrar ID",
|
||||
"identifier" : "1"
|
||||
}
|
||||
],
|
||||
"vcardArray" :
|
||||
[
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "The Registrar"],
|
||||
["adr", {}, "text", [
|
||||
"",
|
||||
"",
|
||||
"123 Example Boulevard",
|
||||
"Williamsburg",
|
||||
"NY",
|
||||
"11211",
|
||||
"United States"]],
|
||||
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2223334444"],
|
||||
["email", {}, "text", "the.registrar@example.com"]
|
||||
]
|
||||
],
|
||||
"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"
|
||||
}
|
||||
]
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName" : "nameserver",
|
||||
"handle" : "15-ROID",
|
||||
"status" : ["active"],
|
||||
"ldhName" : "nsx2.cat.lol",
|
||||
"links" :
|
||||
[
|
||||
|
@ -107,62 +60,16 @@
|
|||
"type": "object truncated due to unexplainable reasons"
|
||||
}
|
||||
],
|
||||
"entities" : [
|
||||
"events" :[
|
||||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "1",
|
||||
"status" : ["active"],
|
||||
"roles" : ["registrar"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
"value" : "https://example.tld/rdap/entity/1",
|
||||
"rel" : "self",
|
||||
"href" : "https://example.tld/rdap/entity/1",
|
||||
"type" : "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"publicIds" :
|
||||
[
|
||||
{
|
||||
"type" : "IANA Registrar ID",
|
||||
"identifier" : "1"
|
||||
}
|
||||
],
|
||||
"vcardArray" :
|
||||
[
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "The Registrar"],
|
||||
["adr", {}, "text", [
|
||||
"",
|
||||
"",
|
||||
"123 Example Boulevard",
|
||||
"Williamsburg",
|
||||
"NY",
|
||||
"11211",
|
||||
"United States"]],
|
||||
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2223334444"],
|
||||
["email", {}, "text", "the.registrar@example.com"]
|
||||
]
|
||||
],
|
||||
"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"
|
||||
}
|
||||
]
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName" : "nameserver",
|
||||
"handle" : "16-ROID",
|
||||
"status" : ["active"],
|
||||
"ldhName" : "nsx3.cat.lol",
|
||||
"links" :
|
||||
[
|
||||
|
@ -186,62 +93,16 @@
|
|||
"type": "object truncated due to unexplainable reasons"
|
||||
}
|
||||
],
|
||||
"entities" : [
|
||||
"events": [
|
||||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "1",
|
||||
"status" : ["active"],
|
||||
"roles" : ["registrar"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
"value" : "https://example.tld/rdap/entity/1",
|
||||
"rel" : "self",
|
||||
"href" : "https://example.tld/rdap/entity/1",
|
||||
"type" : "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"publicIds" :
|
||||
[
|
||||
{
|
||||
"type" : "IANA Registrar ID",
|
||||
"identifier" : "1"
|
||||
}
|
||||
],
|
||||
"vcardArray" :
|
||||
[
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "The Registrar"],
|
||||
["adr", {}, "text", [
|
||||
"",
|
||||
"",
|
||||
"123 Example Boulevard",
|
||||
"Williamsburg",
|
||||
"NY",
|
||||
"11211",
|
||||
"United States"]],
|
||||
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2223334444"],
|
||||
["email", {}, "text", "the.registrar@example.com"]
|
||||
]
|
||||
],
|
||||
"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"
|
||||
}
|
||||
]
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName" : "nameserver",
|
||||
"handle" : "17-ROID",
|
||||
"status" : ["active"],
|
||||
"ldhName" : "nsx4.cat.lol",
|
||||
"links" :
|
||||
[
|
||||
|
@ -265,60 +126,15 @@
|
|||
"type": "object truncated due to unexplainable reasons"
|
||||
}
|
||||
],
|
||||
"entities" : [
|
||||
"events": [
|
||||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "1",
|
||||
"status" : ["active"],
|
||||
"roles" : ["registrar"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
"value" : "https://example.tld/rdap/entity/1",
|
||||
"rel" : "self",
|
||||
"href" : "https://example.tld/rdap/entity/1",
|
||||
"type" : "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"publicIds" :
|
||||
[
|
||||
{
|
||||
"type" : "IANA Registrar ID",
|
||||
"identifier" : "1"
|
||||
}
|
||||
],
|
||||
"vcardArray" :
|
||||
[
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "The Registrar"],
|
||||
["adr", {}, "text", [
|
||||
"",
|
||||
"",
|
||||
"123 Example Boulevard",
|
||||
"Williamsburg",
|
||||
"NY",
|
||||
"11211",
|
||||
"United States"]],
|
||||
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2223334444"],
|
||||
["email", {}, "text", "the.registrar@example.com"]
|
||||
]
|
||||
],
|
||||
"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"
|
||||
}
|
||||
]
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"rdapConformance" : ["icann_rdap_response_profile_0"],
|
||||
"rdapConformance" : ["rdap_level_0", "icann_rdap_response_profile_0"],
|
||||
"notices" :
|
||||
[
|
||||
{
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "0001-ROID",
|
||||
"status" : ["active"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
|
@ -14,6 +13,12 @@
|
|||
"type" : "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
|
@ -21,6 +26,13 @@
|
|||
"Summary data only. For complete data, send a specific query for the object."
|
||||
],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
},
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
],
|
||||
"vcardArray" :
|
||||
|
@ -42,15 +54,13 @@
|
|||
]
|
||||
],
|
||||
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2126660420"],
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"],
|
||||
["email", {}, "text", "contact1@gmail.com"]
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"]
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "0002-ROID",
|
||||
"status" : ["active"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
|
@ -60,6 +70,12 @@
|
|||
"type" : "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
|
@ -67,6 +83,13 @@
|
|||
"Summary data only. For complete data, send a specific query for the object."
|
||||
],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
},
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
],
|
||||
"vcardArray" :
|
||||
|
@ -88,15 +111,13 @@
|
|||
]
|
||||
],
|
||||
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2126660420"],
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"],
|
||||
["email", {}, "text", "contact2@gmail.com"]
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"]
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "0003-ROID",
|
||||
"status" : ["active"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
|
@ -106,6 +127,12 @@
|
|||
"type" : "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
|
@ -113,6 +140,13 @@
|
|||
"Summary data only. For complete data, send a specific query for the object."
|
||||
],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
},
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
],
|
||||
"vcardArray" :
|
||||
|
@ -134,15 +168,13 @@
|
|||
]
|
||||
],
|
||||
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2126660420"],
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"],
|
||||
["email", {}, "text", "contact3@gmail.com"]
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"]
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "301",
|
||||
"status" : ["active"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
|
@ -159,6 +191,12 @@
|
|||
"identifier" : "301"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
|
@ -193,7 +231,7 @@
|
|||
"roles" : ["registrar"]
|
||||
}
|
||||
],
|
||||
"rdapConformance": [ "icann_rdap_response_profile_0" ],
|
||||
"rdapConformance": ["rdap_level_0", "icann_rdap_response_profile_0" ],
|
||||
"notices" :
|
||||
[
|
||||
{
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "301",
|
||||
"status" : ["active"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
|
@ -21,6 +20,12 @@
|
|||
"identifier" : "301"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
|
@ -57,7 +62,6 @@
|
|||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "302",
|
||||
"status" : ["active"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
|
@ -74,6 +78,12 @@
|
|||
"identifier" : "302"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
|
@ -110,7 +120,6 @@
|
|||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "303",
|
||||
"status" : ["active"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
|
@ -127,6 +136,12 @@
|
|||
"identifier" : "303"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
|
@ -163,7 +178,6 @@
|
|||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "304",
|
||||
"status" : ["active"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
|
@ -180,6 +194,12 @@
|
|||
"identifier" : "304"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
|
@ -214,7 +234,7 @@
|
|||
"roles" : ["registrar"]
|
||||
}
|
||||
],
|
||||
"rdapConformance": [ "icann_rdap_response_profile_0" ],
|
||||
"rdapConformance": ["rdap_level_0", "icann_rdap_response_profile_0" ],
|
||||
"notices" :
|
||||
[
|
||||
{
|
||||
|
|
|
@ -1 +1 @@
|
|||
{"key":"value","rdapConformance":["icann_rdap_response_profile_0"],"notices":[{"title":"RDAP Terms of Service","links":[{"href":"https:\/\/www.registry.tld\/about\/rdap\/tos.html","rel":"alternate","type":"text\/html","value":"http:\/\/myserver.example.com\/help\/tos"}],"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 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."]}]}
|
||||
{"key":"value","rdapConformance":["rdap_level_0","icann_rdap_response_profile_0"],"notices":[{"title":"RDAP Terms of Service","links":[{"href":"https:\/\/www.registry.tld\/about\/rdap\/tos.html","rel":"alternate","type":"text\/html","value":"http:\/\/myserver.example.com\/help\/tos"}],"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 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."]}]}
|
||||
|
|
|
@ -13,11 +13,6 @@
|
|||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1998-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
|
@ -45,5 +40,14 @@
|
|||
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2126660420"],
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -25,22 +25,22 @@
|
|||
"eventActor": "foo",
|
||||
"eventDate": "1999-09-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "expiration",
|
||||
"eventDate": "2110-10-08T00:44:59.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "transfer",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1999-12-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "expiration",
|
||||
"eventDate": "2110-10-08T00:44:59.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last changed",
|
||||
"eventDate": "1999-12-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"nameservers" :
|
||||
|
@ -50,9 +50,7 @@
|
|||
"handle" : "A-ROID",
|
||||
"ldhName" : "ns1.cat.xn--q9jyb4c",
|
||||
"unicodeName" : "ns1.cat.みんな",
|
||||
"status" : ["active", "associated"],
|
||||
"links" :
|
||||
[
|
||||
"links" : [
|
||||
{
|
||||
"value" : "https://example.tld/rdap/nameserver/ns1.cat.xn--q9jyb4c",
|
||||
"rel" : "self",
|
||||
|
@ -60,71 +58,11 @@
|
|||
"type" : "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1999-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"ipAddresses" :
|
||||
{
|
||||
"v4" : ["1.2.3.4"]
|
||||
},
|
||||
"entities" : [
|
||||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "1",
|
||||
"status" : ["active"],
|
||||
"roles" : ["registrar"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
"value" : "https://example.tld/rdap/entity/1",
|
||||
"rel" : "self",
|
||||
"href" : "https://example.tld/rdap/entity/1",
|
||||
"type" : "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"publicIds" :
|
||||
[
|
||||
{
|
||||
"type" : "IANA Registrar ID",
|
||||
"identifier" : "1"
|
||||
}
|
||||
],
|
||||
"vcardArray" :
|
||||
[
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "みんな"],
|
||||
["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"]
|
||||
]
|
||||
],
|
||||
"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"
|
||||
}
|
||||
]
|
||||
"type": "object truncated due to unexplainable reasons",
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -133,9 +71,7 @@
|
|||
"handle" : "C-ROID",
|
||||
"ldhName" : "ns2.cat.xn--q9jyb4c",
|
||||
"unicodeName" : "ns2.cat.みんな",
|
||||
"status" : ["active", "associated"],
|
||||
"links" :
|
||||
[
|
||||
"links" : [
|
||||
{
|
||||
"value" : "https://example.tld/rdap/nameserver/ns2.cat.xn--q9jyb4c",
|
||||
"rel" : "self",
|
||||
|
@ -143,26 +79,25 @@
|
|||
"type" : "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
"remarks": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1998-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
"title": "Incomplete Data",
|
||||
"type": "object truncated due to unexplainable reasons",
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"ipAddresses" :
|
||||
{
|
||||
"v6" : ["bad:f00d:cafe::15:beef"]
|
||||
"secureDNS": {
|
||||
"delegationSigned": true,
|
||||
"zoneSigned": true,
|
||||
"dsData": [{"algorithm":2,"digest":"DEADFACE","digestType":3,"keyTag":1}]
|
||||
},
|
||||
"entities" : [
|
||||
"entities" :
|
||||
[
|
||||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "1",
|
||||
"status" : ["active"],
|
||||
"roles" : ["registrar"],
|
||||
"links" :
|
||||
[
|
||||
|
@ -185,18 +120,7 @@
|
|||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "みんな"],
|
||||
["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"]
|
||||
["fn", {}, "text", "みんな"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
|
@ -208,16 +132,10 @@
|
|||
"type": "object truncated due to unexplainable reasons"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"entities" :
|
||||
[
|
||||
},
|
||||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "4-ROID",
|
||||
"status" : ["active", "associated"],
|
||||
"roles" : ["administrative"],
|
||||
"links" :
|
||||
[
|
||||
|
@ -228,17 +146,6 @@
|
|||
"type" : "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1998-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"vcardArray" :
|
||||
[
|
||||
"vcard",
|
||||
|
@ -261,12 +168,25 @@
|
|||
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2126660420"],
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
"type": "object truncated due to unexplainable reasons",
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."]
|
||||
},
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "6-ROID",
|
||||
"status" : ["active", "associated"],
|
||||
"roles" : ["technical"],
|
||||
"links" :
|
||||
[
|
||||
|
@ -277,17 +197,6 @@
|
|||
"type" : "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1997-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"vcardArray" :
|
||||
[
|
||||
"vcard",
|
||||
|
@ -307,15 +216,27 @@
|
|||
"31337",
|
||||
"United States"]],
|
||||
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2126660420"],
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"],
|
||||
["email", {}, "text", "bog@cat.みんな"]
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
"type": "object truncated due to unexplainable reasons",
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."]
|
||||
},
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "2-ROID",
|
||||
"status" : ["active", "associated"],
|
||||
"roles" : ["registrant"],
|
||||
"links" :
|
||||
[
|
||||
|
@ -326,17 +247,6 @@
|
|||
"type" : "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1999-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"vcardArray" :
|
||||
[
|
||||
"vcard",
|
||||
|
@ -345,58 +255,21 @@
|
|||
["fn", {}, "text", "(◕‿◕)"],
|
||||
["org", {}, "text", "GOOGLE INCORPORATED <script>"],
|
||||
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2126660420"],
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"],
|
||||
["email", {}, "text", "lol@cat.みんな"]
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "1",
|
||||
"status" : ["active"],
|
||||
"roles" : ["registrar"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
"value" : "https://example.tld/rdap/entity/1",
|
||||
"rel" : "self",
|
||||
"href" : "https://example.tld/rdap/entity/1",
|
||||
"type" : "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"publicIds" :
|
||||
[
|
||||
{
|
||||
"type" : "IANA Registrar ID",
|
||||
"identifier" : "1"
|
||||
}
|
||||
],
|
||||
"vcardArray" :
|
||||
[
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "みんな"],
|
||||
["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"]
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
"type": "object truncated due to unexplainable reasons",
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."]
|
||||
},
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Summary data only. For complete data, send a specific query for the object."
|
||||
],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -25,34 +25,31 @@
|
|||
"eventActor": "foo",
|
||||
"eventDate": "1999-09-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "expiration",
|
||||
"eventDate": "2110-10-08T00:44:59.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "transfer",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1999-12-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "expiration",
|
||||
"eventDate": "2110-10-08T00:44:59.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last changed",
|
||||
"eventDate": "1999-12-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"nameservers" :
|
||||
[
|
||||
"nameservers": [
|
||||
{
|
||||
"objectClassName": "nameserver",
|
||||
"handle": "A-ROID",
|
||||
"ldhName": "ns1.cat.xn--q9jyb4c",
|
||||
"unicodeName": "ns1.cat.みんな",
|
||||
"status" : ["active", "associated"],
|
||||
"links" :
|
||||
[
|
||||
"links": [
|
||||
{
|
||||
"value": "https://example.tld/rdap/nameserver/ns1.cat.xn--q9jyb4c",
|
||||
"rel": "self",
|
||||
|
@ -60,71 +57,11 @@
|
|||
"type": "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1999-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"ipAddresses" :
|
||||
{
|
||||
"v4" : ["1.2.3.4"]
|
||||
},
|
||||
"entities" : [
|
||||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "1",
|
||||
"status" : ["active"],
|
||||
"roles" : ["registrar"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
"value" : "https://example.tld/rdap/entity/1",
|
||||
"rel" : "self",
|
||||
"href" : "https://example.tld/rdap/entity/1",
|
||||
"type" : "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"publicIds" :
|
||||
[
|
||||
{
|
||||
"type" : "IANA Registrar ID",
|
||||
"identifier" : "1"
|
||||
}
|
||||
],
|
||||
"vcardArray" :
|
||||
[
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "みんな"],
|
||||
["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"]
|
||||
]
|
||||
],
|
||||
"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"
|
||||
}
|
||||
]
|
||||
"type": "object truncated due to unexplainable reasons",
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -133,9 +70,7 @@
|
|||
"handle": "C-ROID",
|
||||
"ldhName": "ns2.cat.xn--q9jyb4c",
|
||||
"unicodeName": "ns2.cat.みんな",
|
||||
"status" : ["active", "associated"],
|
||||
"links" :
|
||||
[
|
||||
"links": [
|
||||
{
|
||||
"value": "https://example.tld/rdap/nameserver/ns2.cat.xn--q9jyb4c",
|
||||
"rel": "self",
|
||||
|
@ -143,29 +78,26 @@
|
|||
"type": "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
"remarks": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1998-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
"title": "Incomplete Data",
|
||||
"type": "object truncated due to unexplainable reasons",
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"ipAddresses" :
|
||||
{
|
||||
"v6" : ["bad:f00d:cafe::15:beef"]
|
||||
"secureDNS": {
|
||||
"delegationSigned": true,
|
||||
"dsData": [{"algorithm":2,"digest":"DEADFACE","digestType":3,"keyTag":1}],
|
||||
"zoneSigned": true
|
||||
},
|
||||
"entities": [
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"handle": "1",
|
||||
"status" : ["active"],
|
||||
"roles": ["registrar"],
|
||||
"links" :
|
||||
[
|
||||
"links": [
|
||||
{
|
||||
"value": "https://example.tld/rdap/entity/1",
|
||||
"rel": "self",
|
||||
|
@ -173,8 +105,7 @@
|
|||
"type": "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"publicIds" :
|
||||
[
|
||||
"publicIds": [
|
||||
{
|
||||
"type": "IANA Registrar ID",
|
||||
"identifier": "1"
|
||||
|
@ -185,18 +116,7 @@
|
|||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "みんな"],
|
||||
["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"]
|
||||
["fn", {}, "text", "みんな"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
|
@ -208,69 +128,168 @@
|
|||
"type": "object truncated due to unexplainable reasons"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"handle": "REDACTED FOR PRIVACY",
|
||||
"roles": ["administrative"],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Some of the data in this object has been removed.",
|
||||
"Contact personal data is visible only to the owning registrar."
|
||||
],
|
||||
"links": [
|
||||
{
|
||||
"type": "text/html",
|
||||
"href": "https://github.com/google/nomulus/blob/master/docs/rdap.md#authentication",
|
||||
"rel": "alternate",
|
||||
"value": "https://github.com/google/nomulus/blob/master/docs/rdap.md#authentication"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
],
|
||||
"entities": [
|
||||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "1",
|
||||
"status" : ["active"],
|
||||
"roles" : ["registrar"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
"value" : "https://example.tld/rdap/entity/1",
|
||||
"rel" : "self",
|
||||
"href" : "https://example.tld/rdap/entity/1",
|
||||
"type" : "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"publicIds" :
|
||||
[
|
||||
{
|
||||
"type" : "IANA Registrar ID",
|
||||
"identifier" : "1"
|
||||
}
|
||||
],
|
||||
"vcardArray" :
|
||||
[
|
||||
"vcardArray": [
|
||||
"vcard",
|
||||
[
|
||||
["version",{},"text","4.0"],
|
||||
["fn", {}, "text", "みんな"],
|
||||
["adr", {}, "text", [
|
||||
["fn",{},"text","REDACTED FOR PRIVACY"],
|
||||
["org",{},"text","REDACTED FOR PRIVACY"],
|
||||
[
|
||||
"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"]
|
||||
"REDACTED FOR PRIVACY",
|
||||
"REDACTED FOR PRIVACY",
|
||||
"REDACTED FOR PRIVACY",
|
||||
"REDACTED FOR PRIVACY",
|
||||
"XX"
|
||||
]
|
||||
],
|
||||
["tel",{"type":["voice"]},"uri","tel:REDACTED FOR PRIVACY"],
|
||||
["tel",{"type":["fax"]},"uri","tel:REDACTED FOR PRIVACY"]
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"handle": "REDACTED FOR PRIVACY",
|
||||
"roles": ["technical"],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
"title": "REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Summary data only. For complete data, send a specific query for the object."
|
||||
"Some of the data in this object has been removed.",
|
||||
"Contact personal data is visible only to the owning registrar."
|
||||
],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
"links": [
|
||||
{
|
||||
"type": "text/html",
|
||||
"href": "https://github.com/google/nomulus/blob/master/docs/rdap.md#authentication",
|
||||
"rel": "alternate",
|
||||
"value": "https://github.com/google/nomulus/blob/master/docs/rdap.md#authentication"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
],
|
||||
"vcardArray": [
|
||||
"vcard",
|
||||
[
|
||||
["version",{},"text","4.0"],
|
||||
["fn",{},"text","REDACTED FOR PRIVACY"],
|
||||
["org",{},"text","REDACTED FOR PRIVACY"],
|
||||
[
|
||||
"adr",
|
||||
{},
|
||||
"text",
|
||||
[
|
||||
"",
|
||||
"",
|
||||
"REDACTED FOR PRIVACY",
|
||||
"REDACTED FOR PRIVACY",
|
||||
"REDACTED FOR PRIVACY",
|
||||
"REDACTED FOR PRIVACY",
|
||||
"XX"
|
||||
]
|
||||
],
|
||||
["tel",{"type":["voice"]},"uri","tel:REDACTED FOR PRIVACY"],
|
||||
["tel",{"type":["fax"]},"uri","tel:REDACTED FOR PRIVACY"]
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"handle": "REDACTED FOR PRIVACY",
|
||||
"roles": ["registrant"],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Contacts Hidden",
|
||||
"title": "REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Domain contacts are visible only to the owning registrar."
|
||||
"Some of the data in this object has been removed.",
|
||||
"Contact personal data is visible only to the owning registrar."
|
||||
],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
"links": [
|
||||
{
|
||||
"type": "text/html",
|
||||
"href": "https://github.com/google/nomulus/blob/master/docs/rdap.md#authentication",
|
||||
"rel": "alternate",
|
||||
"value": "https://github.com/google/nomulus/blob/master/docs/rdap.md#authentication"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
],
|
||||
"vcardArray": [
|
||||
"vcard",
|
||||
[
|
||||
["version",{},"text","4.0"],
|
||||
["fn",{},"text","REDACTED FOR PRIVACY"],
|
||||
["org",{},"text","REDACTED FOR PRIVACY"],
|
||||
[
|
||||
"adr",
|
||||
{},
|
||||
"text",
|
||||
[
|
||||
"",
|
||||
"",
|
||||
"REDACTED FOR PRIVACY",
|
||||
"REDACTED FOR PRIVACY",
|
||||
"REDACTED FOR PRIVACY",
|
||||
"REDACTED FOR PRIVACY",
|
||||
"XX"
|
||||
]
|
||||
],
|
||||
["tel",{"type":["voice"]},"uri","tel:REDACTED FOR PRIVACY"],
|
||||
["tel",{"type":["fax"]},"uri","tel:REDACTED FOR PRIVACY"]
|
||||
]
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -35,148 +35,15 @@
|
|||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"entities" :
|
||||
[
|
||||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "4-ROID",
|
||||
"status" : ["active", "associated"],
|
||||
"roles" : ["administrative"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
"value" : "https://example.tld/rdap/entity/4-ROID",
|
||||
"rel" : "self",
|
||||
"href" : "https://example.tld/rdap/entity/4-ROID",
|
||||
"type" : "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1998-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"vcardArray" :
|
||||
[
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "Santa Claus"],
|
||||
["org", {}, "text", "GOOGLE INCORPORATED <script>"],
|
||||
["adr", {}, "text", [
|
||||
"",
|
||||
"",
|
||||
[
|
||||
"Santa Claus Tower",
|
||||
"41st floor",
|
||||
"Suite みんな"
|
||||
],
|
||||
"KOKOMO",
|
||||
"BM",
|
||||
"31337",
|
||||
"United States"]],
|
||||
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2126660420"],
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"]
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "6-ROID",
|
||||
"status" : ["active", "associated"],
|
||||
"roles" : ["technical"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
"value" : "https://example.tld/rdap/entity/6-ROID",
|
||||
"rel" : "self",
|
||||
"href" : "https://example.tld/rdap/entity/6-ROID",
|
||||
"type" : "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1997-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"vcardArray" :
|
||||
[
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "The Raven"],
|
||||
["org", {}, "text", "GOOGLE INCORPORATED <script>"],
|
||||
["adr", {}, "text", [
|
||||
"",
|
||||
"",
|
||||
[
|
||||
"Chamber Door",
|
||||
"upper level"
|
||||
],
|
||||
"KOKOMO",
|
||||
"BM",
|
||||
"31337",
|
||||
"United States"]],
|
||||
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2126660420"],
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"],
|
||||
["email", {}, "text", "bog@cat.みんな"]
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "2-ROID",
|
||||
"status" : ["active", "associated"],
|
||||
"roles" : ["registrant"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
"value" : "https://example.tld/rdap/entity/2-ROID",
|
||||
"rel" : "self",
|
||||
"href" : "https://example.tld/rdap/entity/2-ROID",
|
||||
"type" : "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1999-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"vcardArray" :
|
||||
[
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "(◕‿◕)"],
|
||||
["org", {}, "text", "GOOGLE INCORPORATED <script>"],
|
||||
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2126660420"],
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"],
|
||||
["email", {}, "text", "lol@cat.みんな"]
|
||||
]
|
||||
]
|
||||
"secureDNS": {
|
||||
"delegationSigned": true,
|
||||
"dsData": [{"algorithm":2,"digest":"DEADFACE","digestType":3,"keyTag":1}],
|
||||
"zoneSigned": true
|
||||
},
|
||||
"entities": [
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"handle": "1",
|
||||
"status" : ["active"],
|
||||
"roles": ["registrar"],
|
||||
"links":
|
||||
[
|
||||
|
@ -199,18 +66,7 @@
|
|||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "みんな"],
|
||||
["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"]
|
||||
["fn", {}, "text", "みんな"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
|
@ -222,6 +78,43 @@
|
|||
"type": "object truncated due to unexplainable reasons"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"handle": "2-ROID",
|
||||
"roles": ["administrative", "technical", "registrant"],
|
||||
"links": [
|
||||
{
|
||||
"value": "https://example.tld/rdap/entity/2-ROID",
|
||||
"rel": "self",
|
||||
"href": "https://example.tld/rdap/entity/2-ROID",
|
||||
"type": "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"vcardArray": [
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "(◕‿◕)"],
|
||||
["org", {}, "text", "GOOGLE INCORPORATED <script>"],
|
||||
["tel", {"type": ["voice"]}, "uri", "tel:+1.2126660420"],
|
||||
["tel", {"type": ["fax"]}, "uri", "tel:+1.2126660420"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
"type": "object truncated due to unexplainable reasons",
|
||||
"description": ["Summary data only. For complete data, send a specific query for the object."]
|
||||
},
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -3,15 +3,7 @@
|
|||
"handle": "17-Q9JYB4C",
|
||||
"ldhName": "cat.xn--q9jyb4c",
|
||||
"unicodeName": "cat.みんな",
|
||||
"status" :
|
||||
[
|
||||
"client delete prohibited",
|
||||
"client renew prohibited",
|
||||
"client transfer prohibited",
|
||||
"server update prohibited"
|
||||
],
|
||||
"links" :
|
||||
[
|
||||
"links": [
|
||||
{
|
||||
"value": "https://example.tld/rdap/domain/cat.xn--q9jyb4c",
|
||||
"rel": "self",
|
||||
|
|
|
@ -14,11 +14,6 @@
|
|||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1997-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
|
@ -33,7 +28,6 @@
|
|||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "1",
|
||||
"status" : ["active"],
|
||||
"roles" : ["registrar"],
|
||||
"links" :
|
||||
[
|
||||
|
@ -56,18 +50,7 @@
|
|||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "みんな"],
|
||||
["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"]
|
||||
["fn", {}, "text", "みんな"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
"handle" : "E-ROID",
|
||||
"ldhName" : "ns3.cat.xn--q9jyb4c",
|
||||
"unicodeName" : "ns3.cat.みんな",
|
||||
"status" : ["active", "associated"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
|
@ -13,61 +12,17 @@
|
|||
"type" : "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"ipAddresses" :
|
||||
{
|
||||
"v4" : ["1.2.3.4"],
|
||||
"v6" : ["bad:f00d:cafe::15:beef"]
|
||||
},
|
||||
"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"
|
||||
}
|
||||
],
|
||||
"entities" : [
|
||||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "1",
|
||||
"status" : ["active"],
|
||||
"roles" : ["registrar"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
"value" : "https://example.tld/rdap/entity/1",
|
||||
"rel" : "self",
|
||||
"href" : "https://example.tld/rdap/entity/1",
|
||||
"type" : "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"publicIds" :
|
||||
[
|
||||
{
|
||||
"type" : "IANA Registrar ID",
|
||||
"identifier" : "1"
|
||||
}
|
||||
],
|
||||
"vcardArray" :
|
||||
[
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "みんな"],
|
||||
["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"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
|
@ -78,5 +33,3 @@
|
|||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -14,25 +14,16 @@
|
|||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1999-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"ipAddresses" :
|
||||
{
|
||||
"v4" : ["1.2.3.4"]
|
||||
},
|
||||
"ipAddresses": {"v4": ["1.2.3.4"]},
|
||||
"entities": [
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"handle": "1",
|
||||
"status" : ["active"],
|
||||
"roles": ["registrar"],
|
||||
"links":
|
||||
[
|
||||
|
@ -55,18 +46,7 @@
|
|||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "みんな"],
|
||||
["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"]
|
||||
["fn", {}, "text", "みんな"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
|
|
|
@ -14,25 +14,16 @@
|
|||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1998-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"ipAddresses" :
|
||||
{
|
||||
"v6" : ["bad:f00d:cafe::15:beef"]
|
||||
},
|
||||
"ipAddresses": {"v6": ["bad:f00d:cafe::15:beef"]},
|
||||
"entities": [
|
||||
{
|
||||
"objectClassName": "entity",
|
||||
"handle": "1",
|
||||
"status" : ["active"],
|
||||
"roles": ["registrar"],
|
||||
"links":
|
||||
[
|
||||
|
@ -55,18 +46,7 @@
|
|||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "みんな"],
|
||||
["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"]
|
||||
["fn", {}, "text", "みんな"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
|
|
|
@ -14,11 +14,6 @@
|
|||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1996-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
|
@ -28,7 +23,6 @@
|
|||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "1",
|
||||
"status" : ["active"],
|
||||
"roles" : ["registrar"],
|
||||
"links" :
|
||||
[
|
||||
|
@ -51,18 +45,7 @@
|
|||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "みんな"],
|
||||
["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"]
|
||||
["fn", {}, "text", "みんな"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
|
|
|
@ -14,11 +14,6 @@
|
|||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1995-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
|
@ -28,7 +23,6 @@
|
|||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "1",
|
||||
"status" : ["active"],
|
||||
"roles" : ["registrar"],
|
||||
"links" :
|
||||
[
|
||||
|
@ -51,18 +45,7 @@
|
|||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "みんな"],
|
||||
["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"]
|
||||
["fn", {}, "text", "みんな"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
|
|
|
@ -14,11 +14,6 @@
|
|||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1994-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
|
@ -28,7 +23,6 @@
|
|||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "1",
|
||||
"status" : ["active"],
|
||||
"roles" : ["registrar"],
|
||||
"links" :
|
||||
[
|
||||
|
@ -51,18 +45,7 @@
|
|||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "みんな"],
|
||||
["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"]
|
||||
["fn", {}, "text", "みんな"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
|
|
|
@ -13,26 +13,29 @@
|
|||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1999-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"vcardArray" :
|
||||
[
|
||||
"vcardArray" : [
|
||||
"vcard",
|
||||
[
|
||||
["version", {}, "text", "4.0"],
|
||||
["fn", {}, "text", "(◕‿◕)"],
|
||||
["org",{},"text","GOOGLE INCORPORATED <script>"],
|
||||
["tel",{"type":["voice"]},"uri","tel:+1.2126660420"],
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"],
|
||||
["email", {}, "text", "lol@cat.みんな"]
|
||||
["tel",{"type":["fax"]},"uri","tel:+1.2126660420"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
}
|
||||
|
|
|
@ -1,45 +1,60 @@
|
|||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "2-ROID",
|
||||
"status" : ["active", "associated", "removed"],
|
||||
"handle" : "REDACTED FOR PRIVACY",
|
||||
"roles" : ["registrant"],
|
||||
"links" :
|
||||
[
|
||||
{
|
||||
"value" : "https://example.tld/rdap/entity/2-ROID",
|
||||
"rel" : "self",
|
||||
"href" : "https://example.tld/rdap/entity/2-ROID",
|
||||
"type" : "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1999-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"vcardArray": [
|
||||
"vcard",
|
||||
[
|
||||
["version",{},"text","4.0"],
|
||||
["fn",{},"text","REDACTED FOR PRIVACY"],
|
||||
["org",{},"text","REDACTED FOR PRIVACY"],
|
||||
[
|
||||
"adr",
|
||||
{},
|
||||
"text",
|
||||
[
|
||||
"",
|
||||
"",
|
||||
"REDACTED FOR PRIVACY",
|
||||
"REDACTED FOR PRIVACY",
|
||||
"REDACTED FOR PRIVACY",
|
||||
"REDACTED FOR PRIVACY",
|
||||
"XX"
|
||||
]
|
||||
],
|
||||
["tel",{"type":["voice"]},"uri","tel:REDACTED FOR PRIVACY"],
|
||||
["tel",{"type":["fax"]},"uri","tel:REDACTED FOR PRIVACY"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Redacted for Privacy",
|
||||
"title": "REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Some of the data in this object has been removed.",
|
||||
"Contact personal data is visible only to the owning registrar."
|
||||
],
|
||||
"type": "object redacted due to authorization",
|
||||
"links" :
|
||||
[
|
||||
"links": [
|
||||
{
|
||||
"value" : "https://github.com/google/nomulus/blob/master/docs/rdap.md#authentication",
|
||||
"rel" : "alternate",
|
||||
"type": "text/html",
|
||||
"href": "https://github.com/google/nomulus/blob/master/docs/rdap.md#authentication",
|
||||
"type" : "text/html"
|
||||
"rel": "alternate",
|
||||
"value": "https://github.com/google/nomulus/blob/master/docs/rdap.md#authentication"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "2-ROID",
|
||||
"status" : ["active", "associated"],
|
||||
"roles" : ["registrant"],
|
||||
"links" :
|
||||
[
|
||||
|
@ -20,10 +19,15 @@
|
|||
["fn", {}, "text", "(◕‿◕)"],
|
||||
["org", {}, "text", "GOOGLE INCORPORATED <script>"],
|
||||
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2126660420"],
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"],
|
||||
["email", {}, "text", "lol@cat.みんな"]
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"]
|
||||
]
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "Incomplete Data",
|
||||
|
@ -31,6 +35,13 @@
|
|||
"Summary data only. For complete data, send a specific query for the object."
|
||||
],
|
||||
"type": "object truncated due to unexplainable reasons"
|
||||
},
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -13,15 +13,6 @@
|
|||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "1",
|
||||
"eventDate": "1999-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last changed",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
{
|
||||
"objectClassName" : "entity",
|
||||
"handle" : "1",
|
||||
"status" : ["active"],
|
||||
"roles" : ["registrar"],
|
||||
"links" :
|
||||
[
|
||||
|
@ -12,6 +11,12 @@
|
|||
"type" : "application/rdap+json"
|
||||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"publicIds" :
|
||||
[
|
||||
{
|
||||
|
|
|
@ -12,11 +12,6 @@
|
|||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1997-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
|
@ -41,8 +36,16 @@
|
|||
"31337",
|
||||
"United States"]],
|
||||
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2126660420"],
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"],
|
||||
["email", {}, "text", "bog@cat.みんな"]
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -13,11 +13,6 @@
|
|||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1997-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
|
@ -42,8 +37,16 @@
|
|||
"31337",
|
||||
"United States"]],
|
||||
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2126660420"],
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"],
|
||||
["email", {}, "text", "bog@cat.みんな"]
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
"key" : "value",
|
||||
"rdapConformance" :
|
||||
[
|
||||
"rdap_level_0",
|
||||
"icann_rdap_response_profile_0"
|
||||
],
|
||||
"notices" :
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
"key": "value",
|
||||
"rdapConformance":
|
||||
[
|
||||
"rdap_level_0",
|
||||
"icann_rdap_response_profile_0"
|
||||
],
|
||||
"notices":
|
||||
|
@ -54,10 +55,8 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"description" :
|
||||
[
|
||||
"URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf"
|
||||
],
|
||||
"title": "RDDS Inaccuracy Complaint Form",
|
||||
"description": ["URL of the ICANN RDDS Inaccuracy Complaint Form: https://www.icann.org/wicf"],
|
||||
"links":
|
||||
[
|
||||
{
|
||||
|
|
|
@ -12,11 +12,6 @@
|
|||
}
|
||||
],
|
||||
"events": [
|
||||
{
|
||||
"eventAction": "registration",
|
||||
"eventActor": "foo",
|
||||
"eventDate": "1996-01-01T00:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"eventAction": "last update of RDAP database",
|
||||
"eventDate": "2000-01-01T00:00:00.000Z"
|
||||
|
@ -41,8 +36,16 @@
|
|||
"31337",
|
||||
"United States"]],
|
||||
["tel", {"type" : ["voice"]}, "uri", "tel:+1.2126660420"],
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"],
|
||||
["email", {}, "text", "dog@cat.みんな"]
|
||||
["tel", {"type" : ["fax"]}, "uri", "tel:+1.2126660420"]
|
||||
]
|
||||
],
|
||||
"remarks": [
|
||||
{
|
||||
"title": "EMAIL REDACTED FOR PRIVACY",
|
||||
"type": "object redacted due to authorization",
|
||||
"description": [
|
||||
"Please query the RDDS service of the Registrar of Record identifies in this output for information on how to contact the Registrant of the queried domain name."
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -340,19 +340,22 @@ public final class FullFieldsTestEntityHelper {
|
|||
@Nullable HostResource ns1,
|
||||
@Nullable HostResource ns2,
|
||||
Registrar registrar) {
|
||||
DomainBase.Builder builder = new DomainBase.Builder()
|
||||
DomainBase.Builder builder =
|
||||
new DomainBase.Builder()
|
||||
.setFullyQualifiedDomainName(Idn.toASCII(domain))
|
||||
.setRepoId(generateNewDomainRoid(getTldFromDomainName(Idn.toASCII(domain))))
|
||||
.setLastEppUpdateTime(DateTime.parse("2009-05-29T20:13:00Z"))
|
||||
.setCreationTimeForTest(DateTime.parse("2000-10-08T00:45:00Z"))
|
||||
.setRegistrationExpirationTime(DateTime.parse("2110-10-08T00:44:59Z"))
|
||||
.setPersistedCurrentSponsorClientId(registrar.getClientId())
|
||||
.setStatusValues(ImmutableSet.of(
|
||||
.setCreationClientId(registrar.getClientId())
|
||||
.setStatusValues(
|
||||
ImmutableSet.of(
|
||||
StatusValue.CLIENT_DELETE_PROHIBITED,
|
||||
StatusValue.CLIENT_RENEW_PROHIBITED,
|
||||
StatusValue.CLIENT_TRANSFER_PROHIBITED,
|
||||
StatusValue.SERVER_UPDATE_PROHIBITED))
|
||||
.setDsData(ImmutableSet.of(new DelegationSignerData()));
|
||||
.setDsData(ImmutableSet.of(DelegationSignerData.create(1, 2, 3, "deadface")));
|
||||
if (registrant != null) {
|
||||
builder.setRegistrant(Key.create(registrant));
|
||||
}
|
||||
|
|
|
@ -229,25 +229,30 @@ public class DomainWhoisResponseTest {
|
|||
Key<ContactResource> adminResourceKey = Key.create(adminContact);
|
||||
Key<ContactResource> techResourceKey = Key.create(techContact);
|
||||
|
||||
domainBase = persistResource(new DomainBase.Builder()
|
||||
domainBase =
|
||||
persistResource(
|
||||
new DomainBase.Builder()
|
||||
.setFullyQualifiedDomainName("example.tld")
|
||||
.setRepoId("3-TLD")
|
||||
.setLastEppUpdateTime(DateTime.parse("2009-05-29T20:13:00Z"))
|
||||
.setCreationTimeForTest(DateTime.parse("2000-10-08T00:45:00Z"))
|
||||
.setRegistrationExpirationTime(DateTime.parse("2010-10-08T00:44:59Z"))
|
||||
.setPersistedCurrentSponsorClientId("NewRegistrar")
|
||||
.setStatusValues(ImmutableSet.of(
|
||||
.setStatusValues(
|
||||
ImmutableSet.of(
|
||||
StatusValue.CLIENT_DELETE_PROHIBITED,
|
||||
StatusValue.CLIENT_RENEW_PROHIBITED,
|
||||
StatusValue.CLIENT_TRANSFER_PROHIBITED,
|
||||
StatusValue.SERVER_UPDATE_PROHIBITED))
|
||||
.setRegistrant(registrantResourceKey)
|
||||
.setContacts(ImmutableSet.of(
|
||||
.setContacts(
|
||||
ImmutableSet.of(
|
||||
DesignatedContact.create(DesignatedContact.Type.ADMIN, adminResourceKey),
|
||||
DesignatedContact.create(DesignatedContact.Type.TECH, techResourceKey)))
|
||||
.setNameservers(ImmutableSet.of(hostResource1Key, hostResource2Key))
|
||||
.setDsData(ImmutableSet.of(new DelegationSignerData()))
|
||||
.setGracePeriods(ImmutableSet.of(
|
||||
.setDsData(ImmutableSet.of(DelegationSignerData.create(1, 2, 3, "deadface")))
|
||||
.setGracePeriods(
|
||||
ImmutableSet.of(
|
||||
GracePeriod.create(GracePeriodStatus.ADD, END_OF_TIME, "", null),
|
||||
GracePeriod.create(GracePeriodStatus.TRANSFER, END_OF_TIME, "", null)))
|
||||
.build());
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue