mirror of
https://github.com/google/nomulus.git
synced 2025-05-13 16:07:15 +02:00
Inject RDAP help information in ConfigModule
------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=140849879
This commit is contained in:
parent
3740171bbf
commit
c59b738b5b
57 changed files with 436 additions and 306 deletions
|
@ -13,6 +13,7 @@ java_library(
|
||||||
"//java/com/google/common/collect",
|
"//java/com/google/common/collect",
|
||||||
"//java/com/google/common/net",
|
"//java/com/google/common/net",
|
||||||
"//third_party/java/appengine:appengine-api",
|
"//third_party/java/appengine:appengine-api",
|
||||||
|
"//third_party/java/auto:auto_value",
|
||||||
"//third_party/java/dagger",
|
"//third_party/java/dagger",
|
||||||
"//third_party/java/joda_money",
|
"//third_party/java/joda_money",
|
||||||
"//third_party/java/joda_time",
|
"//third_party/java/joda_time",
|
||||||
|
|
|
@ -26,6 +26,7 @@ import java.net.URI;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import javax.inject.Qualifier;
|
import javax.inject.Qualifier;
|
||||||
|
import javax.inject.Singleton;
|
||||||
import org.joda.money.CurrencyUnit;
|
import org.joda.money.CurrencyUnit;
|
||||||
import org.joda.time.DateTimeConstants;
|
import org.joda.time.DateTimeConstants;
|
||||||
import org.joda.time.Duration;
|
import org.joda.time.Duration;
|
||||||
|
@ -921,4 +922,89 @@ public final class ConfigModule {
|
||||||
// TODO(b/32875427): This will be moved into configuration in a text file in a future refactor.
|
// TODO(b/32875427): This will be moved into configuration in a text file in a future refactor.
|
||||||
return "google.registry.flows.custom.CustomLogicFactory";
|
return "google.registry.flows.custom.CustomLogicFactory";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the help path for the RDAP terms of service.
|
||||||
|
*
|
||||||
|
* <p>Make sure that this path is equal to the key of the entry in the RDAP help map containing
|
||||||
|
* the terms of service. The ICANN operational profile requires that the TOS be included in all
|
||||||
|
* responses, and this string is used to find the TOS in the help map.
|
||||||
|
*/
|
||||||
|
@Provides
|
||||||
|
@Config("rdapTosPath")
|
||||||
|
public static String provideRdapTosPath() {
|
||||||
|
return "/tos";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the help text to be used by RDAP.
|
||||||
|
*
|
||||||
|
* <p>Make sure that the map entry for the terms of service use the same key as specified in
|
||||||
|
* rdapTosPath above.
|
||||||
|
*/
|
||||||
|
@Singleton
|
||||||
|
@Provides
|
||||||
|
@Config("rdapHelpMap")
|
||||||
|
public static ImmutableMap<String, RdapNoticeDescriptor> provideRdapHelpMap() {
|
||||||
|
return new ImmutableMap.Builder<String, RdapNoticeDescriptor>()
|
||||||
|
.put("/", RdapNoticeDescriptor.builder()
|
||||||
|
.setTitle("RDAP Help")
|
||||||
|
.setDescription(ImmutableList.of(
|
||||||
|
"RDAP Help Topics (use /help/topic for information)",
|
||||||
|
"syntax",
|
||||||
|
"tos (Terms of Service)"))
|
||||||
|
.setLinkValueSuffix("help/")
|
||||||
|
.build())
|
||||||
|
.put("/index", RdapNoticeDescriptor.builder()
|
||||||
|
.setTitle("RDAP Help")
|
||||||
|
.setDescription(ImmutableList.of(
|
||||||
|
"RDAP Help Topics (use /help/topic for information)",
|
||||||
|
"syntax",
|
||||||
|
"tos (Terms of Service)"))
|
||||||
|
.setLinkValueSuffix("help/index")
|
||||||
|
.build())
|
||||||
|
.put("/syntax", RdapNoticeDescriptor.builder()
|
||||||
|
.setTitle("RDAP Command Syntax")
|
||||||
|
.setDescription(ImmutableList.of(
|
||||||
|
"domain/XXXX",
|
||||||
|
"nameserver/XXXX",
|
||||||
|
"entity/XXXX",
|
||||||
|
"domains?name=XXXX",
|
||||||
|
"domains?nsLdhName=XXXX",
|
||||||
|
"domains?nsIp=XXXX",
|
||||||
|
"nameservers?name=XXXX",
|
||||||
|
"nameservers?ip=XXXX",
|
||||||
|
"entities?fn=XXXX",
|
||||||
|
"entities?handle=XXXX",
|
||||||
|
"help/XXXX"))
|
||||||
|
.setLinkValueSuffix("help/syntax")
|
||||||
|
.build())
|
||||||
|
.put("/tos", RdapNoticeDescriptor.builder()
|
||||||
|
.setTitle("RDAP Terms of Service")
|
||||||
|
.setDescription(ImmutableList.of(
|
||||||
|
"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."))
|
||||||
|
.setLinkValueSuffix("help/tos")
|
||||||
|
.build())
|
||||||
|
.build();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
50
java/google/registry/config/RdapNoticeDescriptor.java
Normal file
50
java/google/registry/config/RdapNoticeDescriptor.java
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
// Copyright 2016 The Nomulus Authors. All Rights Reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package google.registry.config;
|
||||||
|
|
||||||
|
import com.google.auto.value.AutoValue;
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AutoValue class describing an RDAP Notice object.
|
||||||
|
*
|
||||||
|
* <p>This is used for injecting RDAP help pages.
|
||||||
|
*/
|
||||||
|
@AutoValue
|
||||||
|
public abstract class RdapNoticeDescriptor {
|
||||||
|
public static Builder builder() {
|
||||||
|
return new AutoValue_RdapNoticeDescriptor.Builder();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable public abstract String getTitle();
|
||||||
|
public abstract ImmutableList<String> getDescription();
|
||||||
|
@Nullable public abstract String getTypeString();
|
||||||
|
@Nullable public abstract String getLinkValueSuffix();
|
||||||
|
@Nullable public abstract String getLinkHrefUrlString();
|
||||||
|
|
||||||
|
/** Builder class for {@link RdapNoticeDescriptor}. */
|
||||||
|
@AutoValue.Builder
|
||||||
|
public abstract static class Builder {
|
||||||
|
public abstract Builder setTitle(@Nullable String title);
|
||||||
|
public abstract Builder setDescription(Iterable<String> description);
|
||||||
|
public abstract Builder setTypeString(@Nullable String typeString);
|
||||||
|
public abstract Builder setLinkValueSuffix(@Nullable String linkValueSuffix);
|
||||||
|
public abstract Builder setLinkHrefUrlString(@Nullable String linkHrefUrlString);
|
||||||
|
|
||||||
|
public abstract RdapNoticeDescriptor build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -68,6 +68,7 @@ public abstract class RdapActionBase implements Runnable {
|
||||||
@Inject Response response;
|
@Inject Response response;
|
||||||
@Inject @RequestMethod Action.Method requestMethod;
|
@Inject @RequestMethod Action.Method requestMethod;
|
||||||
@Inject @RequestPath String requestPath;
|
@Inject @RequestPath String requestPath;
|
||||||
|
@Inject RdapJsonFormatter rdapJsonFormatter;
|
||||||
@Inject @Config("rdapLinkBase") String rdapLinkBase;
|
@Inject @Config("rdapLinkBase") String rdapLinkBase;
|
||||||
@Inject @Config("rdapWhoisServer") @Nullable String rdapWhoisServer;
|
@Inject @Config("rdapWhoisServer") @Nullable String rdapWhoisServer;
|
||||||
|
|
||||||
|
@ -130,7 +131,7 @@ public abstract class RdapActionBase implements Runnable {
|
||||||
try {
|
try {
|
||||||
if (requestMethod != Action.Method.HEAD) {
|
if (requestMethod != Action.Method.HEAD) {
|
||||||
response.setPayload(
|
response.setPayload(
|
||||||
JSONValue.toJSONString(RdapJsonFormatter.makeError(status, title, description)));
|
JSONValue.toJSONString(rdapJsonFormatter.makeError(status, title, description)));
|
||||||
}
|
}
|
||||||
response.setContentType(RESPONSE_MEDIA_TYPE);
|
response.setContentType(RESPONSE_MEDIA_TYPE);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
|
|
|
@ -59,7 +59,7 @@ public class RdapDomainAction extends RdapActionBase {
|
||||||
if (domainResource == null) {
|
if (domainResource == null) {
|
||||||
throw new NotFoundException(pathSearchString + " not found");
|
throw new NotFoundException(pathSearchString + " not found");
|
||||||
}
|
}
|
||||||
return RdapJsonFormatter.makeRdapJsonForDomain(
|
return rdapJsonFormatter.makeRdapJsonForDomain(
|
||||||
domainResource, true, rdapLinkBase, rdapWhoisServer, now, OutputDataType.FULL);
|
domainResource, true, rdapLinkBase, rdapWhoisServer, now, OutputDataType.FULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -126,7 +126,7 @@ public class RdapDomainSearchAction extends RdapActionBase {
|
||||||
}
|
}
|
||||||
ImmutableMap.Builder<String, Object> builder = new ImmutableMap.Builder<>();
|
ImmutableMap.Builder<String, Object> builder = new ImmutableMap.Builder<>();
|
||||||
builder.put("domainSearchResults", results.jsonList());
|
builder.put("domainSearchResults", results.jsonList());
|
||||||
RdapJsonFormatter.addTopLevelEntries(
|
rdapJsonFormatter.addTopLevelEntries(
|
||||||
builder,
|
builder,
|
||||||
BoilerplateType.DOMAIN,
|
BoilerplateType.DOMAIN,
|
||||||
results.isTruncated()
|
results.isTruncated()
|
||||||
|
@ -296,7 +296,7 @@ public class RdapDomainSearchAction extends RdapActionBase {
|
||||||
ImmutableList.Builder<ImmutableMap<String, Object>> jsonBuilder = new ImmutableList.Builder<>();
|
ImmutableList.Builder<ImmutableMap<String, Object>> jsonBuilder = new ImmutableList.Builder<>();
|
||||||
for (DomainResource domain : domains) {
|
for (DomainResource domain : domains) {
|
||||||
jsonBuilder.add(
|
jsonBuilder.add(
|
||||||
RdapJsonFormatter.makeRdapJsonForDomain(
|
rdapJsonFormatter.makeRdapJsonForDomain(
|
||||||
domain, false, rdapLinkBase, rdapWhoisServer, now, outputDataType));
|
domain, false, rdapLinkBase, rdapWhoisServer, now, outputDataType));
|
||||||
}
|
}
|
||||||
return RdapSearchResults.create(jsonBuilder.build(), isTruncated);
|
return RdapSearchResults.create(jsonBuilder.build(), isTruncated);
|
||||||
|
|
|
@ -79,7 +79,7 @@ public class RdapEntityAction extends RdapActionBase {
|
||||||
// As per Andy Newton on the regext mailing list, contacts by themselves have no role, since
|
// As per Andy Newton on the regext mailing list, contacts by themselves have no role, since
|
||||||
// they are global, and might have different roles for different domains.
|
// they are global, and might have different roles for different domains.
|
||||||
if ((contactResource != null) && now.isBefore(contactResource.getDeletionTime())) {
|
if ((contactResource != null) && now.isBefore(contactResource.getDeletionTime())) {
|
||||||
return RdapJsonFormatter.makeRdapJsonForContact(
|
return rdapJsonFormatter.makeRdapJsonForContact(
|
||||||
contactResource,
|
contactResource,
|
||||||
true,
|
true,
|
||||||
Optional.<DesignatedContact.Type>absent(),
|
Optional.<DesignatedContact.Type>absent(),
|
||||||
|
@ -95,7 +95,7 @@ public class RdapEntityAction extends RdapActionBase {
|
||||||
Registrar registrar = Iterables.getOnlyElement(
|
Registrar registrar = Iterables.getOnlyElement(
|
||||||
Registrar.loadByIanaIdentifierRange(ianaIdentifier, ianaIdentifier + 1, 1), null);
|
Registrar.loadByIanaIdentifierRange(ianaIdentifier, ianaIdentifier + 1, 1), null);
|
||||||
if ((registrar != null) && registrar.isActiveAndPubliclyVisible()) {
|
if ((registrar != null) && registrar.isActiveAndPubliclyVisible()) {
|
||||||
return RdapJsonFormatter.makeRdapJsonForRegistrar(
|
return rdapJsonFormatter.makeRdapJsonForRegistrar(
|
||||||
registrar, true, rdapLinkBase, rdapWhoisServer, now, OutputDataType.FULL);
|
registrar, true, rdapLinkBase, rdapWhoisServer, now, OutputDataType.FULL);
|
||||||
}
|
}
|
||||||
} catch (NumberFormatException e) {
|
} catch (NumberFormatException e) {
|
||||||
|
|
|
@ -101,7 +101,7 @@ public class RdapEntitySearchAction extends RdapActionBase {
|
||||||
}
|
}
|
||||||
ImmutableMap.Builder<String, Object> jsonBuilder = new ImmutableMap.Builder<>();
|
ImmutableMap.Builder<String, Object> jsonBuilder = new ImmutableMap.Builder<>();
|
||||||
jsonBuilder.put("entitySearchResults", results.jsonList());
|
jsonBuilder.put("entitySearchResults", results.jsonList());
|
||||||
RdapJsonFormatter.addTopLevelEntries(
|
rdapJsonFormatter.addTopLevelEntries(
|
||||||
jsonBuilder,
|
jsonBuilder,
|
||||||
BoilerplateType.ENTITY,
|
BoilerplateType.ENTITY,
|
||||||
results.isTruncated()
|
results.isTruncated()
|
||||||
|
@ -243,7 +243,7 @@ public class RdapEntitySearchAction extends RdapActionBase {
|
||||||
}
|
}
|
||||||
// As per Andy Newton on the regext mailing list, contacts by themselves have no role, since
|
// As per Andy Newton on the regext mailing list, contacts by themselves have no role, since
|
||||||
// they are global, and might have different roles for different domains.
|
// they are global, and might have different roles for different domains.
|
||||||
jsonOutputList.add(RdapJsonFormatter.makeRdapJsonForContact(
|
jsonOutputList.add(rdapJsonFormatter.makeRdapJsonForContact(
|
||||||
contact,
|
contact,
|
||||||
false,
|
false,
|
||||||
Optional.<DesignatedContact.Type>absent(),
|
Optional.<DesignatedContact.Type>absent(),
|
||||||
|
@ -257,7 +257,7 @@ public class RdapEntitySearchAction extends RdapActionBase {
|
||||||
if (jsonOutputList.size() >= rdapResultSetMaxSize) {
|
if (jsonOutputList.size() >= rdapResultSetMaxSize) {
|
||||||
return RdapSearchResults.create(ImmutableList.copyOf(jsonOutputList), true);
|
return RdapSearchResults.create(ImmutableList.copyOf(jsonOutputList), true);
|
||||||
}
|
}
|
||||||
jsonOutputList.add(RdapJsonFormatter.makeRdapJsonForRegistrar(
|
jsonOutputList.add(rdapJsonFormatter.makeRdapJsonForRegistrar(
|
||||||
registrar, false, rdapLinkBase, rdapWhoisServer, now, outputDataType));
|
registrar, false, rdapLinkBase, rdapWhoisServer, now, outputDataType));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,10 +20,7 @@ import static google.registry.request.Action.Method.HEAD;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
import google.registry.rdap.RdapJsonFormatter.BoilerplateType;
|
import google.registry.rdap.RdapJsonFormatter.BoilerplateType;
|
||||||
import google.registry.rdap.RdapJsonFormatter.MakeRdapJsonNoticeParameters;
|
|
||||||
import google.registry.request.Action;
|
import google.registry.request.Action;
|
||||||
import google.registry.request.HttpException.InternalServerErrorException;
|
|
||||||
import google.registry.request.HttpException.NotFoundException;
|
|
||||||
import google.registry.util.Clock;
|
import google.registry.util.Clock;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
@ -35,85 +32,6 @@ public class RdapHelpAction extends RdapActionBase {
|
||||||
|
|
||||||
public static final String PATH = "/rdap/help";
|
public static final String PATH = "/rdap/help";
|
||||||
|
|
||||||
/**
|
|
||||||
* Path for the terms of service. The terms of service are also used to create the required
|
|
||||||
* boilerplate notice, so we make it a publicly visible that we can use elsewhere to reference it.
|
|
||||||
*/
|
|
||||||
public static final String TERMS_OF_SERVICE_PATH = "/tos";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Map from a relative path underneath the RDAP root path to the appropriate
|
|
||||||
* {@link MakeRdapJsonNoticeParameters} object.
|
|
||||||
*/
|
|
||||||
private static final ImmutableMap<String, MakeRdapJsonNoticeParameters> HELP_MAP =
|
|
||||||
ImmutableMap.of(
|
|
||||||
"/",
|
|
||||||
MakeRdapJsonNoticeParameters.builder()
|
|
||||||
.title("RDAP Help")
|
|
||||||
.description(ImmutableList.of(
|
|
||||||
"RDAP Help Topics (use /help/topic for information)",
|
|
||||||
"syntax",
|
|
||||||
"tos (Terms of Service)"))
|
|
||||||
.linkValueSuffix("help/")
|
|
||||||
.linkHrefUrlString("https://www.registry.google/about/rdap/index.html")
|
|
||||||
.build(),
|
|
||||||
"/index",
|
|
||||||
MakeRdapJsonNoticeParameters.builder()
|
|
||||||
.title("RDAP Help")
|
|
||||||
.description(ImmutableList.of(
|
|
||||||
"RDAP Help Topics (use /help/topic for information)",
|
|
||||||
"syntax",
|
|
||||||
"tos (Terms of Service)"))
|
|
||||||
.linkValueSuffix("help/index")
|
|
||||||
.linkHrefUrlString("https://www.registry.google/about/rdap/index.html")
|
|
||||||
.build(),
|
|
||||||
"/syntax",
|
|
||||||
MakeRdapJsonNoticeParameters.builder()
|
|
||||||
.title("RDAP Command Syntax")
|
|
||||||
.description(ImmutableList.of(
|
|
||||||
"domain/XXXX",
|
|
||||||
"nameserver/XXXX",
|
|
||||||
"entity/XXXX",
|
|
||||||
"domains?name=XXXX",
|
|
||||||
"domains?nsLdhName=XXXX",
|
|
||||||
"domains?nsIp=XXXX",
|
|
||||||
"nameservers?name=XXXX",
|
|
||||||
"nameservers?ip=XXXX",
|
|
||||||
"entities?fn=XXXX",
|
|
||||||
"entities?handle=XXXX",
|
|
||||||
"help/XXXX"))
|
|
||||||
.linkValueSuffix("help/syntax")
|
|
||||||
.linkHrefUrlString("https://www.registry.google/about/rdap/syntax.html")
|
|
||||||
.build(),
|
|
||||||
TERMS_OF_SERVICE_PATH,
|
|
||||||
MakeRdapJsonNoticeParameters.builder()
|
|
||||||
.title("RDAP Terms of Service")
|
|
||||||
.description(ImmutableList.of(
|
|
||||||
"By querying our Domain Database, you are agreeing to comply with these terms so"
|
|
||||||
+ " please read them carefully.",
|
|
||||||
"Any information provided is 'as is' without any guarantee of accuracy.",
|
|
||||||
"Please do not misuse the Domain Database. It is intended solely for"
|
|
||||||
+ " query-based access.",
|
|
||||||
"Don't use the Domain Database to allow, enable, or otherwise support the"
|
|
||||||
+ " transmission of mass unsolicited, commercial advertising or"
|
|
||||||
+ " solicitations.",
|
|
||||||
"Don't access our Domain Database through the use of high volume, automated"
|
|
||||||
+ " electronic processes that send queries or data to the systems of"
|
|
||||||
+ " Charleston Road Registry or any ICANN-accredited registrar.",
|
|
||||||
"You may only use the information contained in the Domain Database for lawful"
|
|
||||||
+ " purposes.",
|
|
||||||
"Do not compile, repackage, disseminate, or otherwise use the information"
|
|
||||||
+ " contained in the Domain Database in its entirety, or in any substantial"
|
|
||||||
+ " portion, without our prior written permission.",
|
|
||||||
"We may retain certain details about queries to our Domain Database for the"
|
|
||||||
+ " purposes of detecting and preventing misuse.",
|
|
||||||
"We reserve the right to restrict or deny your access to the database if we"
|
|
||||||
+ " suspect that you have failed to comply with these terms.",
|
|
||||||
"We reserve the right to modify this agreement at any time."))
|
|
||||||
.linkValueSuffix("help/tos")
|
|
||||||
.linkHrefUrlString("https://www.registry.google/about/rdap/tos.html")
|
|
||||||
.build());
|
|
||||||
|
|
||||||
@Inject Clock clock;
|
@Inject Clock clock;
|
||||||
@Inject RdapHelpAction() {}
|
@Inject RdapHelpAction() {}
|
||||||
|
|
||||||
|
@ -133,28 +51,12 @@ public class RdapHelpAction extends RdapActionBase {
|
||||||
// We rely on addTopLevelEntries to notice if we are sending the TOS notice, and not add a
|
// We rely on addTopLevelEntries to notice if we are sending the TOS notice, and not add a
|
||||||
// duplicate boilerplate entry.
|
// duplicate boilerplate entry.
|
||||||
ImmutableMap.Builder<String, Object> builder = new ImmutableMap.Builder<>();
|
ImmutableMap.Builder<String, Object> builder = new ImmutableMap.Builder<>();
|
||||||
RdapJsonFormatter.addTopLevelEntries(
|
rdapJsonFormatter.addTopLevelEntries(
|
||||||
builder,
|
builder,
|
||||||
BoilerplateType.OTHER,
|
BoilerplateType.OTHER,
|
||||||
ImmutableList.of(getJsonHelpNotice(pathSearchString, rdapLinkBase)),
|
ImmutableList.of(rdapJsonFormatter.getJsonHelpNotice(pathSearchString, rdapLinkBase)),
|
||||||
ImmutableList.<ImmutableMap<String, Object>>of(),
|
ImmutableList.<ImmutableMap<String, Object>>of(),
|
||||||
rdapLinkBase);
|
rdapLinkBase);
|
||||||
return builder.build();
|
return builder.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
static ImmutableMap<String, Object> getJsonHelpNotice(
|
|
||||||
String pathSearchString, String rdapLinkBase) {
|
|
||||||
if (pathSearchString.isEmpty()) {
|
|
||||||
pathSearchString = "/";
|
|
||||||
}
|
|
||||||
if (!HELP_MAP.containsKey(pathSearchString)) {
|
|
||||||
throw new NotFoundException("no help found for " + pathSearchString);
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
return RdapJsonFormatter.makeRdapJsonNotice(
|
|
||||||
HELP_MAP.get(pathSearchString), rdapLinkBase);
|
|
||||||
} catch (Exception e) {
|
|
||||||
throw new InternalServerErrorException("unable to read help for " + pathSearchString);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,6 @@ import static com.google.common.base.Strings.nullToEmpty;
|
||||||
import static google.registry.model.ofy.ObjectifyService.ofy;
|
import static google.registry.model.ofy.ObjectifyService.ofy;
|
||||||
import static google.registry.util.DomainNameUtils.ACE_PREFIX;
|
import static google.registry.util.DomainNameUtils.ACE_PREFIX;
|
||||||
|
|
||||||
import com.google.auto.value.AutoValue;
|
|
||||||
import com.google.common.base.Function;
|
import com.google.common.base.Function;
|
||||||
import com.google.common.base.Functions;
|
import com.google.common.base.Functions;
|
||||||
import com.google.common.base.Optional;
|
import com.google.common.base.Optional;
|
||||||
|
@ -30,6 +29,8 @@ import com.google.common.collect.Maps;
|
||||||
import com.google.common.collect.Ordering;
|
import com.google.common.collect.Ordering;
|
||||||
import com.google.common.net.InetAddresses;
|
import com.google.common.net.InetAddresses;
|
||||||
import com.googlecode.objectify.Key;
|
import com.googlecode.objectify.Key;
|
||||||
|
import google.registry.config.ConfigModule.Config;
|
||||||
|
import google.registry.config.RdapNoticeDescriptor;
|
||||||
import google.registry.model.EppResource;
|
import google.registry.model.EppResource;
|
||||||
import google.registry.model.contact.ContactPhoneNumber;
|
import google.registry.model.contact.ContactPhoneNumber;
|
||||||
import google.registry.model.contact.ContactResource;
|
import google.registry.model.contact.ContactResource;
|
||||||
|
@ -44,6 +45,9 @@ import google.registry.model.registrar.Registrar;
|
||||||
import google.registry.model.registrar.RegistrarAddress;
|
import google.registry.model.registrar.RegistrarAddress;
|
||||||
import google.registry.model.registrar.RegistrarContact;
|
import google.registry.model.registrar.RegistrarContact;
|
||||||
import google.registry.model.reporting.HistoryEntry;
|
import google.registry.model.reporting.HistoryEntry;
|
||||||
|
import google.registry.request.HttpException.InternalServerErrorException;
|
||||||
|
import google.registry.request.HttpException.NotFoundException;
|
||||||
|
import google.registry.util.FormattingLogger;
|
||||||
import google.registry.util.Idn;
|
import google.registry.util.Idn;
|
||||||
import java.net.Inet4Address;
|
import java.net.Inet4Address;
|
||||||
import java.net.Inet6Address;
|
import java.net.Inet6Address;
|
||||||
|
@ -53,6 +57,8 @@ import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Singleton;
|
||||||
import org.joda.time.DateTime;
|
import org.joda.time.DateTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -66,8 +72,15 @@ import org.joda.time.DateTime;
|
||||||
* @see <a href="https://tools.ietf.org/html/rfc7483">
|
* @see <a href="https://tools.ietf.org/html/rfc7483">
|
||||||
* RFC 7483: JSON Responses for the Registration Data Access Protocol (RDAP)</a>
|
* RFC 7483: JSON Responses for the Registration Data Access Protocol (RDAP)</a>
|
||||||
*/
|
*/
|
||||||
|
@Singleton
|
||||||
public class RdapJsonFormatter {
|
public class RdapJsonFormatter {
|
||||||
|
|
||||||
|
@Inject @Config("rdapTosPath") String rdapTosPath;
|
||||||
|
@Inject @Config("rdapHelpMap") ImmutableMap<String, RdapNoticeDescriptor> rdapHelpMap;
|
||||||
|
@Inject RdapJsonFormatter() {}
|
||||||
|
|
||||||
|
private static final FormattingLogger logger = FormattingLogger.getLoggerForCallerClass();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* What type of data to generate. Summary data includes only information about the object itself,
|
* What type of data to generate. Summary data includes only information about the object itself,
|
||||||
* while full data includes associated items (e.g. for domains, full data includes the hosts,
|
* while full data includes associated items (e.g. for domains, full data includes the hosts,
|
||||||
|
@ -277,6 +290,26 @@ public class RdapJsonFormatter {
|
||||||
return designatedContact.getType();
|
return designatedContact.getType();
|
||||||
}});
|
}});
|
||||||
|
|
||||||
|
ImmutableMap<String, Object> getJsonTosNotice(String rdapLinkBase) {
|
||||||
|
return getJsonHelpNotice(rdapTosPath, rdapLinkBase);
|
||||||
|
}
|
||||||
|
|
||||||
|
ImmutableMap<String, Object> getJsonHelpNotice(
|
||||||
|
String pathSearchString, String rdapLinkBase) {
|
||||||
|
if (pathSearchString.isEmpty()) {
|
||||||
|
pathSearchString = "/";
|
||||||
|
}
|
||||||
|
if (!rdapHelpMap.containsKey(pathSearchString)) {
|
||||||
|
throw new NotFoundException("no help found for " + pathSearchString);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
return RdapJsonFormatter.makeRdapJsonNotice(rdapHelpMap.get(pathSearchString), rdapLinkBase);
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.warningfmt(e, "Error reading RDAP help file: %s", pathSearchString);
|
||||||
|
throw new InternalServerErrorException("unable to read help for " + pathSearchString);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds the required top-level boilerplate. RFC 7483 specifies that the top-level object should
|
* Adds the required top-level boilerplate. RFC 7483 specifies that the top-level object should
|
||||||
* include an entry indicating the conformance level. The ICANN RDAP Profile document (dated 3
|
* include an entry indicating the conformance level. The ICANN RDAP Profile document (dated 3
|
||||||
|
@ -292,7 +325,7 @@ public class RdapJsonFormatter {
|
||||||
* @param remarks a list of remarks to be inserted before the boilerplate notices.
|
* @param remarks a list of remarks to be inserted before the boilerplate notices.
|
||||||
* @param rdapLinkBase the base for link URLs
|
* @param rdapLinkBase the base for link URLs
|
||||||
*/
|
*/
|
||||||
static void addTopLevelEntries(
|
void addTopLevelEntries(
|
||||||
ImmutableMap.Builder<String, Object> jsonBuilder,
|
ImmutableMap.Builder<String, Object> jsonBuilder,
|
||||||
BoilerplateType boilerplateType,
|
BoilerplateType boilerplateType,
|
||||||
List<ImmutableMap<String, Object>> notices,
|
List<ImmutableMap<String, Object>> notices,
|
||||||
|
@ -301,8 +334,7 @@ public class RdapJsonFormatter {
|
||||||
jsonBuilder.put("rdapConformance", CONFORMANCE_LIST);
|
jsonBuilder.put("rdapConformance", CONFORMANCE_LIST);
|
||||||
ImmutableList.Builder<ImmutableMap<String, Object>> noticesBuilder =
|
ImmutableList.Builder<ImmutableMap<String, Object>> noticesBuilder =
|
||||||
new ImmutableList.Builder<>();
|
new ImmutableList.Builder<>();
|
||||||
ImmutableMap<String, Object> tosNotice =
|
ImmutableMap<String, Object> tosNotice = getJsonTosNotice(rdapLinkBase);
|
||||||
RdapHelpAction.getJsonHelpNotice(RdapHelpAction.TERMS_OF_SERVICE_PATH, rdapLinkBase);
|
|
||||||
boolean tosNoticeFound = false;
|
boolean tosNoticeFound = false;
|
||||||
if (!notices.isEmpty()) {
|
if (!notices.isEmpty()) {
|
||||||
noticesBuilder.addAll(notices);
|
noticesBuilder.addAll(notices);
|
||||||
|
@ -337,31 +369,6 @@ public class RdapJsonFormatter {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** AutoValue class to build parameters to {@link #makeRdapJsonNotice}. */
|
|
||||||
@AutoValue
|
|
||||||
abstract static class MakeRdapJsonNoticeParameters {
|
|
||||||
static Builder builder() {
|
|
||||||
return new AutoValue_RdapJsonFormatter_MakeRdapJsonNoticeParameters.Builder();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable abstract String title();
|
|
||||||
abstract ImmutableList<String> description();
|
|
||||||
@Nullable abstract String typeString();
|
|
||||||
@Nullable abstract String linkValueSuffix();
|
|
||||||
@Nullable abstract String linkHrefUrlString();
|
|
||||||
|
|
||||||
@AutoValue.Builder
|
|
||||||
abstract static class Builder {
|
|
||||||
abstract Builder title(@Nullable String title);
|
|
||||||
abstract Builder description(Iterable<String> description);
|
|
||||||
abstract Builder typeString(@Nullable String typeString);
|
|
||||||
abstract Builder linkValueSuffix(@Nullable String linkValueSuffix);
|
|
||||||
abstract Builder linkHrefUrlString(@Nullable String linkHrefUrlString);
|
|
||||||
|
|
||||||
abstract MakeRdapJsonNoticeParameters build();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a JSON object containing a notice or remark object, as defined by RFC 7483 § 4.3.
|
* Creates a JSON object containing a notice or remark object, as defined by RFC 7483 § 4.3.
|
||||||
* The object should then be inserted into a notices or remarks array. The builder fields are:
|
* The object should then be inserted into a notices or remarks array. The builder fields are:
|
||||||
|
@ -391,22 +398,22 @@ public class RdapJsonFormatter {
|
||||||
* RFC 7483: JSON Responses for the Registration Data Access Protocol (RDAP)</a>
|
* RFC 7483: JSON Responses for the Registration Data Access Protocol (RDAP)</a>
|
||||||
*/
|
*/
|
||||||
static ImmutableMap<String, Object> makeRdapJsonNotice(
|
static ImmutableMap<String, Object> makeRdapJsonNotice(
|
||||||
MakeRdapJsonNoticeParameters parameters, @Nullable String linkBase) {
|
RdapNoticeDescriptor parameters, @Nullable String linkBase) {
|
||||||
ImmutableMap.Builder<String, Object> jsonBuilder = new ImmutableMap.Builder<>();
|
ImmutableMap.Builder<String, Object> jsonBuilder = new ImmutableMap.Builder<>();
|
||||||
if (parameters.title() != null) {
|
if (parameters.getTitle() != null) {
|
||||||
jsonBuilder.put("title", parameters.title());
|
jsonBuilder.put("title", parameters.getTitle());
|
||||||
}
|
}
|
||||||
ImmutableList.Builder<String> descriptionBuilder = new ImmutableList.Builder<>();
|
ImmutableList.Builder<String> descriptionBuilder = new ImmutableList.Builder<>();
|
||||||
for (String line : parameters.description()) {
|
for (String line : parameters.getDescription()) {
|
||||||
descriptionBuilder.add(nullToEmpty(line));
|
descriptionBuilder.add(nullToEmpty(line));
|
||||||
}
|
}
|
||||||
jsonBuilder.put("description", descriptionBuilder.build());
|
jsonBuilder.put("description", descriptionBuilder.build());
|
||||||
if (parameters.typeString() != null) {
|
if (parameters.getTypeString() != null) {
|
||||||
jsonBuilder.put("typeString", parameters.typeString());
|
jsonBuilder.put("typeString", parameters.getTypeString());
|
||||||
}
|
}
|
||||||
String linkValueString =
|
String linkValueString =
|
||||||
nullToEmpty(linkBase) + nullToEmpty(parameters.linkValueSuffix());
|
nullToEmpty(linkBase) + nullToEmpty(parameters.getLinkValueSuffix());
|
||||||
if (parameters.linkHrefUrlString() == null) {
|
if (parameters.getLinkHrefUrlString() == null) {
|
||||||
jsonBuilder.put("links", ImmutableList.of(ImmutableMap.of(
|
jsonBuilder.put("links", ImmutableList.of(ImmutableMap.of(
|
||||||
"value", linkValueString,
|
"value", linkValueString,
|
||||||
"rel", "self",
|
"rel", "self",
|
||||||
|
@ -414,7 +421,7 @@ public class RdapJsonFormatter {
|
||||||
"type", "application/rdap+json")));
|
"type", "application/rdap+json")));
|
||||||
} else {
|
} else {
|
||||||
URI htmlBaseURI = URI.create(nullToEmpty(linkBase));
|
URI htmlBaseURI = URI.create(nullToEmpty(linkBase));
|
||||||
URI htmlUri = htmlBaseURI.resolve(parameters.linkHrefUrlString());
|
URI htmlUri = htmlBaseURI.resolve(parameters.getLinkHrefUrlString());
|
||||||
jsonBuilder.put("links", ImmutableList.of(ImmutableMap.of(
|
jsonBuilder.put("links", ImmutableList.of(ImmutableMap.of(
|
||||||
"value", linkValueString,
|
"value", linkValueString,
|
||||||
"rel", "alternate",
|
"rel", "alternate",
|
||||||
|
@ -435,7 +442,7 @@ public class RdapJsonFormatter {
|
||||||
* @param now the as-date
|
* @param now the as-date
|
||||||
* @param outputDataType whether to generate full or summary data
|
* @param outputDataType whether to generate full or summary data
|
||||||
*/
|
*/
|
||||||
static ImmutableMap<String, Object> makeRdapJsonForDomain(
|
ImmutableMap<String, Object> makeRdapJsonForDomain(
|
||||||
DomainResource domainResource,
|
DomainResource domainResource,
|
||||||
boolean isTopLevel,
|
boolean isTopLevel,
|
||||||
@Nullable String linkBase,
|
@Nullable String linkBase,
|
||||||
|
@ -529,7 +536,7 @@ public class RdapJsonFormatter {
|
||||||
* @param now the as-date
|
* @param now the as-date
|
||||||
* @param outputDataType whether to generate full or summary data
|
* @param outputDataType whether to generate full or summary data
|
||||||
*/
|
*/
|
||||||
static ImmutableMap<String, Object> makeRdapJsonForHost(
|
ImmutableMap<String, Object> makeRdapJsonForHost(
|
||||||
HostResource hostResource,
|
HostResource hostResource,
|
||||||
boolean isTopLevel,
|
boolean isTopLevel,
|
||||||
@Nullable String linkBase,
|
@Nullable String linkBase,
|
||||||
|
@ -612,7 +619,7 @@ public class RdapJsonFormatter {
|
||||||
* @param now the as-date
|
* @param now the as-date
|
||||||
* @param outputDataType whether to generate full or summary data
|
* @param outputDataType whether to generate full or summary data
|
||||||
*/
|
*/
|
||||||
static ImmutableMap<String, Object> makeRdapJsonForContact(
|
ImmutableMap<String, Object> makeRdapJsonForContact(
|
||||||
ContactResource contactResource,
|
ContactResource contactResource,
|
||||||
boolean isTopLevel,
|
boolean isTopLevel,
|
||||||
Optional<DesignatedContact.Type> contactType,
|
Optional<DesignatedContact.Type> contactType,
|
||||||
|
@ -701,7 +708,7 @@ public class RdapJsonFormatter {
|
||||||
* @param now the as-date
|
* @param now the as-date
|
||||||
* @param outputDataType whether to generate full or summary data
|
* @param outputDataType whether to generate full or summary data
|
||||||
*/
|
*/
|
||||||
static ImmutableMap<String, Object> makeRdapJsonForRegistrar(
|
ImmutableMap<String, Object> makeRdapJsonForRegistrar(
|
||||||
Registrar registrar,
|
Registrar registrar,
|
||||||
boolean isTopLevel,
|
boolean isTopLevel,
|
||||||
@Nullable String linkBase,
|
@Nullable String linkBase,
|
||||||
|
@ -1044,8 +1051,7 @@ public class RdapJsonFormatter {
|
||||||
* @see <a href="https://tools.ietf.org/html/rfc7483">
|
* @see <a href="https://tools.ietf.org/html/rfc7483">
|
||||||
* RFC 7483: JSON Responses for the Registration Data Access Protocol (RDAP)</a>
|
* RFC 7483: JSON Responses for the Registration Data Access Protocol (RDAP)</a>
|
||||||
*/
|
*/
|
||||||
static ImmutableMap<String, Object> makeError(
|
ImmutableMap<String, Object> makeError(int status, String title, String description) {
|
||||||
int status, String title, String description) {
|
|
||||||
return ImmutableMap.<String, Object>of(
|
return ImmutableMap.<String, Object>of(
|
||||||
"rdapConformance", CONFORMANCE_LIST,
|
"rdapConformance", CONFORMANCE_LIST,
|
||||||
"lang", "en",
|
"lang", "en",
|
||||||
|
|
|
@ -59,7 +59,7 @@ public class RdapNameserverAction extends RdapActionBase {
|
||||||
if (hostResource == null) {
|
if (hostResource == null) {
|
||||||
throw new NotFoundException(pathSearchString + " not found");
|
throw new NotFoundException(pathSearchString + " not found");
|
||||||
}
|
}
|
||||||
return RdapJsonFormatter.makeRdapJsonForHost(
|
return rdapJsonFormatter.makeRdapJsonForHost(
|
||||||
hostResource, true, rdapLinkBase, rdapWhoisServer, now, OutputDataType.FULL);
|
hostResource, true, rdapLinkBase, rdapWhoisServer, now, OutputDataType.FULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -105,7 +105,7 @@ public class RdapNameserverSearchAction extends RdapActionBase {
|
||||||
}
|
}
|
||||||
ImmutableMap.Builder<String, Object> jsonBuilder = new ImmutableMap.Builder<>();
|
ImmutableMap.Builder<String, Object> jsonBuilder = new ImmutableMap.Builder<>();
|
||||||
jsonBuilder.put("nameserverSearchResults", results.jsonList());
|
jsonBuilder.put("nameserverSearchResults", results.jsonList());
|
||||||
RdapJsonFormatter.addTopLevelEntries(
|
rdapJsonFormatter.addTopLevelEntries(
|
||||||
jsonBuilder,
|
jsonBuilder,
|
||||||
BoilerplateType.NAMESERVER,
|
BoilerplateType.NAMESERVER,
|
||||||
results.isTruncated()
|
results.isTruncated()
|
||||||
|
@ -127,7 +127,7 @@ public class RdapNameserverSearchAction extends RdapActionBase {
|
||||||
}
|
}
|
||||||
return RdapSearchResults.create(
|
return RdapSearchResults.create(
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
RdapJsonFormatter.makeRdapJsonForHost(
|
rdapJsonFormatter.makeRdapJsonForHost(
|
||||||
hostResource, false, rdapLinkBase, rdapWhoisServer, now, OutputDataType.FULL)));
|
hostResource, false, rdapLinkBase, rdapWhoisServer, now, OutputDataType.FULL)));
|
||||||
// Handle queries with a wildcard, but no suffix. There are no pending deletes for hosts, so we
|
// Handle queries with a wildcard, but no suffix. There are no pending deletes for hosts, so we
|
||||||
// can call queryUndeleted.
|
// can call queryUndeleted.
|
||||||
|
@ -186,7 +186,7 @@ public class RdapNameserverSearchAction extends RdapActionBase {
|
||||||
new ImmutableList.Builder<>();
|
new ImmutableList.Builder<>();
|
||||||
for (HostResource host : Iterables.limit(hosts, rdapResultSetMaxSize)) {
|
for (HostResource host : Iterables.limit(hosts, rdapResultSetMaxSize)) {
|
||||||
jsonListBuilder.add(
|
jsonListBuilder.add(
|
||||||
RdapJsonFormatter.makeRdapJsonForHost(
|
rdapJsonFormatter.makeRdapJsonForHost(
|
||||||
host, false, rdapLinkBase, rdapWhoisServer, now, outputDataType));
|
host, false, rdapLinkBase, rdapWhoisServer, now, outputDataType));
|
||||||
}
|
}
|
||||||
ImmutableList<ImmutableMap<String, Object>> jsonList = jsonListBuilder.build();
|
ImmutableList<ImmutableMap<String, Object>> jsonList = jsonListBuilder.build();
|
||||||
|
|
|
@ -16,6 +16,7 @@ java_library(
|
||||||
"//java/com/google/common/collect",
|
"//java/com/google/common/collect",
|
||||||
"//java/com/google/common/io",
|
"//java/com/google/common/io",
|
||||||
"//java/com/google/common/net",
|
"//java/com/google/common/net",
|
||||||
|
"//java/google/registry/config",
|
||||||
"//java/google/registry/model",
|
"//java/google/registry/model",
|
||||||
"//java/google/registry/rdap",
|
"//java/google/registry/rdap",
|
||||||
"//java/google/registry/request",
|
"//java/google/registry/request",
|
||||||
|
|
|
@ -80,12 +80,12 @@ public class RdapActionBaseTest {
|
||||||
}
|
}
|
||||||
ImmutableMap.Builder<String, Object> builder = new ImmutableMap.Builder<>();
|
ImmutableMap.Builder<String, Object> builder = new ImmutableMap.Builder<>();
|
||||||
builder.put("key", "value");
|
builder.put("key", "value");
|
||||||
RdapJsonFormatter.addTopLevelEntries(
|
rdapJsonFormatter.addTopLevelEntries(
|
||||||
builder,
|
builder,
|
||||||
BoilerplateType.OTHER,
|
BoilerplateType.OTHER,
|
||||||
ImmutableList.<ImmutableMap<String, Object>>of(),
|
ImmutableList.<ImmutableMap<String, Object>>of(),
|
||||||
ImmutableList.<ImmutableMap<String, Object>>of(),
|
ImmutableList.<ImmutableMap<String, Object>>of(),
|
||||||
"http://myserver.google.com/");
|
"http://myserver.example.com/");
|
||||||
return builder.build();
|
return builder.build();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -98,12 +98,13 @@ public class RdapActionBaseTest {
|
||||||
inject.setStaticField(Ofy.class, "clock", clock);
|
inject.setStaticField(Ofy.class, "clock", clock);
|
||||||
action = new RdapTestAction();
|
action = new RdapTestAction();
|
||||||
action.response = response;
|
action.response = response;
|
||||||
|
action.rdapJsonFormatter = RdapTestHelper.getTestRdapJsonFormatter();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Object generateActualJson(String domainName) {
|
private Object generateActualJson(String domainName) {
|
||||||
action.requestPath = RdapTestAction.PATH + domainName;
|
action.requestPath = RdapTestAction.PATH + domainName;
|
||||||
action.requestMethod = GET;
|
action.requestMethod = GET;
|
||||||
action.rdapLinkBase = "http://myserver.google.com/";
|
action.rdapLinkBase = "http://myserver.example.com/";
|
||||||
action.run();
|
action.run();
|
||||||
return JSONValue.parse(response.getPayload());
|
return JSONValue.parse(response.getPayload());
|
||||||
}
|
}
|
||||||
|
@ -111,7 +112,7 @@ public class RdapActionBaseTest {
|
||||||
private String generateHeadPayload(String domainName) {
|
private String generateHeadPayload(String domainName) {
|
||||||
action.requestPath = RdapTestAction.PATH + domainName;
|
action.requestPath = RdapTestAction.PATH + domainName;
|
||||||
action.requestMethod = HEAD;
|
action.requestMethod = HEAD;
|
||||||
action.rdapLinkBase = "http://myserver.google.com/";
|
action.rdapLinkBase = "http://myserver.example.com/";
|
||||||
action.run();
|
action.run();
|
||||||
return response.getPayload();
|
return response.getPayload();
|
||||||
}
|
}
|
||||||
|
|
|
@ -123,6 +123,7 @@ public class RdapDomainActionTest {
|
||||||
action = new RdapDomainAction();
|
action = new RdapDomainAction();
|
||||||
action.clock = clock;
|
action.clock = clock;
|
||||||
action.response = response;
|
action.response = response;
|
||||||
|
action.rdapJsonFormatter = RdapTestHelper.getTestRdapJsonFormatter();
|
||||||
action.rdapLinkBase = "https://example.com/rdap/";
|
action.rdapLinkBase = "https://example.com/rdap/";
|
||||||
action.rdapWhoisServer = null;
|
action.rdapWhoisServer = null;
|
||||||
|
|
||||||
|
|
|
@ -301,6 +301,7 @@ public class RdapDomainSearchActionTest {
|
||||||
|
|
||||||
action.clock = clock;
|
action.clock = clock;
|
||||||
action.response = response;
|
action.response = response;
|
||||||
|
action.rdapJsonFormatter = RdapTestHelper.getTestRdapJsonFormatter();
|
||||||
action.rdapLinkBase = "https://example.com/rdap/";
|
action.rdapLinkBase = "https://example.com/rdap/";
|
||||||
action.rdapWhoisServer = null;
|
action.rdapWhoisServer = null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -144,6 +144,7 @@ public class RdapEntityActionTest {
|
||||||
action = new RdapEntityAction();
|
action = new RdapEntityAction();
|
||||||
action.clock = clock;
|
action.clock = clock;
|
||||||
action.response = response;
|
action.response = response;
|
||||||
|
action.rdapJsonFormatter = RdapTestHelper.getTestRdapJsonFormatter();
|
||||||
action.rdapLinkBase = "https://example.com/rdap/";
|
action.rdapLinkBase = "https://example.com/rdap/";
|
||||||
action.rdapWhoisServer = null;
|
action.rdapWhoisServer = null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -124,6 +124,7 @@ public class RdapEntitySearchActionTest {
|
||||||
action.clock = clock;
|
action.clock = clock;
|
||||||
action.requestPath = RdapEntitySearchAction.PATH;
|
action.requestPath = RdapEntitySearchAction.PATH;
|
||||||
action.response = response;
|
action.response = response;
|
||||||
|
action.rdapJsonFormatter = RdapTestHelper.getTestRdapJsonFormatter();
|
||||||
action.rdapResultSetMaxSize = 4;
|
action.rdapResultSetMaxSize = 4;
|
||||||
action.rdapLinkBase = "https://example.com/rdap/";
|
action.rdapLinkBase = "https://example.com/rdap/";
|
||||||
action.rdapWhoisServer = null;
|
action.rdapWhoisServer = null;
|
||||||
|
|
|
@ -49,6 +49,7 @@ public class RdapHelpActionTest {
|
||||||
action = new RdapHelpAction();
|
action = new RdapHelpAction();
|
||||||
action.clock = clock;
|
action.clock = clock;
|
||||||
action.response = response;
|
action.response = response;
|
||||||
|
action.rdapJsonFormatter = RdapTestHelper.getTestRdapJsonFormatter();
|
||||||
action.rdapLinkBase = "https://example.tld/rdap/";
|
action.rdapLinkBase = "https://example.tld/rdap/";
|
||||||
action.rdapWhoisServer = null;
|
action.rdapWhoisServer = null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,7 @@ import com.google.common.base.Optional;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
|
import google.registry.config.RdapNoticeDescriptor;
|
||||||
import google.registry.model.contact.ContactResource;
|
import google.registry.model.contact.ContactResource;
|
||||||
import google.registry.model.domain.DesignatedContact;
|
import google.registry.model.domain.DesignatedContact;
|
||||||
import google.registry.model.domain.DomainResource;
|
import google.registry.model.domain.DomainResource;
|
||||||
|
@ -40,7 +41,6 @@ import google.registry.model.registrar.Registrar;
|
||||||
import google.registry.model.registrar.RegistrarContact;
|
import google.registry.model.registrar.RegistrarContact;
|
||||||
import google.registry.model.registry.Registry.TldState;
|
import google.registry.model.registry.Registry.TldState;
|
||||||
import google.registry.model.reporting.HistoryEntry;
|
import google.registry.model.reporting.HistoryEntry;
|
||||||
import google.registry.rdap.RdapJsonFormatter.MakeRdapJsonNoticeParameters;
|
|
||||||
import google.registry.rdap.RdapJsonFormatter.OutputDataType;
|
import google.registry.rdap.RdapJsonFormatter.OutputDataType;
|
||||||
import google.registry.testing.AppEngineRule;
|
import google.registry.testing.AppEngineRule;
|
||||||
import google.registry.testing.FakeClock;
|
import google.registry.testing.FakeClock;
|
||||||
|
@ -65,6 +65,8 @@ public class RdapJsonFormatterTest {
|
||||||
|
|
||||||
private final FakeClock clock = new FakeClock(DateTime.parse("1999-01-01T00:00:00Z"));
|
private final FakeClock clock = new FakeClock(DateTime.parse("1999-01-01T00:00:00Z"));
|
||||||
|
|
||||||
|
private RdapJsonFormatter rdapJsonFormatter;
|
||||||
|
|
||||||
private Registrar registrar;
|
private Registrar registrar;
|
||||||
private DomainResource domainResourceFull;
|
private DomainResource domainResourceFull;
|
||||||
private DomainResource domainResourceNoNameservers;
|
private DomainResource domainResourceNoNameservers;
|
||||||
|
@ -76,8 +78,8 @@ public class RdapJsonFormatterTest {
|
||||||
private ContactResource contactResourceAdmin;
|
private ContactResource contactResourceAdmin;
|
||||||
private ContactResource contactResourceTech;
|
private ContactResource contactResourceTech;
|
||||||
|
|
||||||
private static final String LINK_BASE = "http://myserver.google.com/";
|
private static final String LINK_BASE = "http://myserver.example.com/";
|
||||||
private static final String LINK_BASE_NO_TRAILING_SLASH = "http://myserver.google.com";
|
private static final String LINK_BASE_NO_TRAILING_SLASH = "http://myserver.example.com";
|
||||||
// Do not set a port43 whois server, as per Gustavo Lozano.
|
// Do not set a port43 whois server, as per Gustavo Lozano.
|
||||||
private static final String WHOIS_SERVER = null;
|
private static final String WHOIS_SERVER = null;
|
||||||
|
|
||||||
|
@ -85,6 +87,8 @@ public class RdapJsonFormatterTest {
|
||||||
public void setUp() throws Exception {
|
public void setUp() throws Exception {
|
||||||
inject.setStaticField(Ofy.class, "clock", clock);
|
inject.setStaticField(Ofy.class, "clock", clock);
|
||||||
|
|
||||||
|
rdapJsonFormatter = RdapTestHelper.getTestRdapJsonFormatter();
|
||||||
|
|
||||||
// Create the registrar in 1999, then update it in 2000.
|
// Create the registrar in 1999, then update it in 2000.
|
||||||
clock.setTo(DateTime.parse("1999-01-01T00:00:00Z"));
|
clock.setTo(DateTime.parse("1999-01-01T00:00:00Z"));
|
||||||
createTld("xn--q9jyb4c", TldState.GENERAL_AVAILABILITY);
|
createTld("xn--q9jyb4c", TldState.GENERAL_AVAILABILITY);
|
||||||
|
@ -204,42 +208,42 @@ public class RdapJsonFormatterTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testRegistrar() throws Exception {
|
public void testRegistrar() throws Exception {
|
||||||
assertThat(RdapJsonFormatter.makeRdapJsonForRegistrar(
|
assertThat(rdapJsonFormatter.makeRdapJsonForRegistrar(
|
||||||
registrar, false, LINK_BASE, WHOIS_SERVER, clock.nowUtc(), OutputDataType.FULL))
|
registrar, false, LINK_BASE, WHOIS_SERVER, clock.nowUtc(), OutputDataType.FULL))
|
||||||
.isEqualTo(loadJson("rdapjson_registrar.json"));
|
.isEqualTo(loadJson("rdapjson_registrar.json"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testRegistrar_summary() throws Exception {
|
public void testRegistrar_summary() throws Exception {
|
||||||
assertThat(RdapJsonFormatter.makeRdapJsonForRegistrar(
|
assertThat(rdapJsonFormatter.makeRdapJsonForRegistrar(
|
||||||
registrar, false, LINK_BASE, WHOIS_SERVER, clock.nowUtc(), OutputDataType.SUMMARY))
|
registrar, false, LINK_BASE, WHOIS_SERVER, clock.nowUtc(), OutputDataType.SUMMARY))
|
||||||
.isEqualTo(loadJson("rdapjson_registrar_summary.json"));
|
.isEqualTo(loadJson("rdapjson_registrar_summary.json"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testHost_ipv4() throws Exception {
|
public void testHost_ipv4() throws Exception {
|
||||||
assertThat(RdapJsonFormatter.makeRdapJsonForHost(
|
assertThat(rdapJsonFormatter.makeRdapJsonForHost(
|
||||||
hostResourceIpv4, false, LINK_BASE, WHOIS_SERVER, clock.nowUtc(), OutputDataType.FULL))
|
hostResourceIpv4, false, LINK_BASE, WHOIS_SERVER, clock.nowUtc(), OutputDataType.FULL))
|
||||||
.isEqualTo(loadJson("rdapjson_host_ipv4.json"));
|
.isEqualTo(loadJson("rdapjson_host_ipv4.json"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testHost_ipv6() throws Exception {
|
public void testHost_ipv6() throws Exception {
|
||||||
assertThat(RdapJsonFormatter.makeRdapJsonForHost(
|
assertThat(rdapJsonFormatter.makeRdapJsonForHost(
|
||||||
hostResourceIpv6, false, LINK_BASE, WHOIS_SERVER, clock.nowUtc(), OutputDataType.FULL))
|
hostResourceIpv6, false, LINK_BASE, WHOIS_SERVER, clock.nowUtc(), OutputDataType.FULL))
|
||||||
.isEqualTo(loadJson("rdapjson_host_ipv6.json"));
|
.isEqualTo(loadJson("rdapjson_host_ipv6.json"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testHost_both() throws Exception {
|
public void testHost_both() throws Exception {
|
||||||
assertThat(RdapJsonFormatter.makeRdapJsonForHost(
|
assertThat(rdapJsonFormatter.makeRdapJsonForHost(
|
||||||
hostResourceBoth, false, LINK_BASE, WHOIS_SERVER, clock.nowUtc(), OutputDataType.FULL))
|
hostResourceBoth, false, LINK_BASE, WHOIS_SERVER, clock.nowUtc(), OutputDataType.FULL))
|
||||||
.isEqualTo(loadJson("rdapjson_host_both.json"));
|
.isEqualTo(loadJson("rdapjson_host_both.json"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testHost_both_summary() throws Exception {
|
public void testHost_both_summary() throws Exception {
|
||||||
assertThat(RdapJsonFormatter.makeRdapJsonForHost(
|
assertThat(rdapJsonFormatter.makeRdapJsonForHost(
|
||||||
hostResourceBoth,
|
hostResourceBoth,
|
||||||
false,
|
false,
|
||||||
LINK_BASE,
|
LINK_BASE,
|
||||||
|
@ -251,7 +255,7 @@ public class RdapJsonFormatterTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testHost_noAddresses() throws Exception {
|
public void testHost_noAddresses() throws Exception {
|
||||||
assertThat(RdapJsonFormatter.makeRdapJsonForHost(
|
assertThat(rdapJsonFormatter.makeRdapJsonForHost(
|
||||||
hostResourceNoAddresses,
|
hostResourceNoAddresses,
|
||||||
false,
|
false,
|
||||||
LINK_BASE,
|
LINK_BASE,
|
||||||
|
@ -264,7 +268,7 @@ public class RdapJsonFormatterTest {
|
||||||
@Test
|
@Test
|
||||||
public void testRegistrant() throws Exception {
|
public void testRegistrant() throws Exception {
|
||||||
assertThat(
|
assertThat(
|
||||||
RdapJsonFormatter.makeRdapJsonForContact(
|
rdapJsonFormatter.makeRdapJsonForContact(
|
||||||
contactResourceRegistrant,
|
contactResourceRegistrant,
|
||||||
false,
|
false,
|
||||||
Optional.of(DesignatedContact.Type.REGISTRANT),
|
Optional.of(DesignatedContact.Type.REGISTRANT),
|
||||||
|
@ -278,7 +282,7 @@ public class RdapJsonFormatterTest {
|
||||||
@Test
|
@Test
|
||||||
public void testRegistrant_summary() throws Exception {
|
public void testRegistrant_summary() throws Exception {
|
||||||
assertThat(
|
assertThat(
|
||||||
RdapJsonFormatter.makeRdapJsonForContact(
|
rdapJsonFormatter.makeRdapJsonForContact(
|
||||||
contactResourceRegistrant,
|
contactResourceRegistrant,
|
||||||
false,
|
false,
|
||||||
Optional.of(DesignatedContact.Type.REGISTRANT),
|
Optional.of(DesignatedContact.Type.REGISTRANT),
|
||||||
|
@ -292,7 +296,7 @@ public class RdapJsonFormatterTest {
|
||||||
@Test
|
@Test
|
||||||
public void testRegistrant_baseHasNoTrailingSlash() throws Exception {
|
public void testRegistrant_baseHasNoTrailingSlash() throws Exception {
|
||||||
assertThat(
|
assertThat(
|
||||||
RdapJsonFormatter.makeRdapJsonForContact(
|
rdapJsonFormatter.makeRdapJsonForContact(
|
||||||
contactResourceRegistrant,
|
contactResourceRegistrant,
|
||||||
false,
|
false,
|
||||||
Optional.of(DesignatedContact.Type.REGISTRANT),
|
Optional.of(DesignatedContact.Type.REGISTRANT),
|
||||||
|
@ -306,7 +310,7 @@ public class RdapJsonFormatterTest {
|
||||||
@Test
|
@Test
|
||||||
public void testRegistrant_noBase() throws Exception {
|
public void testRegistrant_noBase() throws Exception {
|
||||||
assertThat(
|
assertThat(
|
||||||
RdapJsonFormatter.makeRdapJsonForContact(
|
rdapJsonFormatter.makeRdapJsonForContact(
|
||||||
contactResourceRegistrant,
|
contactResourceRegistrant,
|
||||||
false,
|
false,
|
||||||
Optional.of(DesignatedContact.Type.REGISTRANT),
|
Optional.of(DesignatedContact.Type.REGISTRANT),
|
||||||
|
@ -320,7 +324,7 @@ public class RdapJsonFormatterTest {
|
||||||
@Test
|
@Test
|
||||||
public void testAdmin() throws Exception {
|
public void testAdmin() throws Exception {
|
||||||
assertThat(
|
assertThat(
|
||||||
RdapJsonFormatter.makeRdapJsonForContact(
|
rdapJsonFormatter.makeRdapJsonForContact(
|
||||||
contactResourceAdmin,
|
contactResourceAdmin,
|
||||||
false,
|
false,
|
||||||
Optional.of(DesignatedContact.Type.ADMIN),
|
Optional.of(DesignatedContact.Type.ADMIN),
|
||||||
|
@ -334,7 +338,7 @@ public class RdapJsonFormatterTest {
|
||||||
@Test
|
@Test
|
||||||
public void testTech() throws Exception {
|
public void testTech() throws Exception {
|
||||||
assertThat(
|
assertThat(
|
||||||
RdapJsonFormatter.makeRdapJsonForContact(
|
rdapJsonFormatter.makeRdapJsonForContact(
|
||||||
contactResourceTech,
|
contactResourceTech,
|
||||||
false,
|
false,
|
||||||
Optional.of(DesignatedContact.Type.TECH),
|
Optional.of(DesignatedContact.Type.TECH),
|
||||||
|
@ -348,7 +352,7 @@ public class RdapJsonFormatterTest {
|
||||||
@Test
|
@Test
|
||||||
public void testRolelessContact() throws Exception {
|
public void testRolelessContact() throws Exception {
|
||||||
assertThat(
|
assertThat(
|
||||||
RdapJsonFormatter.makeRdapJsonForContact(
|
rdapJsonFormatter.makeRdapJsonForContact(
|
||||||
contactResourceTech,
|
contactResourceTech,
|
||||||
false,
|
false,
|
||||||
Optional.<DesignatedContact.Type>absent(),
|
Optional.<DesignatedContact.Type>absent(),
|
||||||
|
@ -361,7 +365,7 @@ public class RdapJsonFormatterTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testDomain_full() throws Exception {
|
public void testDomain_full() throws Exception {
|
||||||
assertThat(RdapJsonFormatter.makeRdapJsonForDomain(
|
assertThat(rdapJsonFormatter.makeRdapJsonForDomain(
|
||||||
domainResourceFull,
|
domainResourceFull,
|
||||||
false,
|
false,
|
||||||
LINK_BASE,
|
LINK_BASE,
|
||||||
|
@ -373,7 +377,7 @@ public class RdapJsonFormatterTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testDomain_summary() throws Exception {
|
public void testDomain_summary() throws Exception {
|
||||||
assertThat(RdapJsonFormatter.makeRdapJsonForDomain(
|
assertThat(rdapJsonFormatter.makeRdapJsonForDomain(
|
||||||
domainResourceFull,
|
domainResourceFull,
|
||||||
false,
|
false,
|
||||||
LINK_BASE,
|
LINK_BASE,
|
||||||
|
@ -385,7 +389,7 @@ public class RdapJsonFormatterTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testDomain_noNameservers() throws Exception {
|
public void testDomain_noNameservers() throws Exception {
|
||||||
assertThat(RdapJsonFormatter.makeRdapJsonForDomain(
|
assertThat(rdapJsonFormatter.makeRdapJsonForDomain(
|
||||||
domainResourceNoNameservers,
|
domainResourceNoNameservers,
|
||||||
false,
|
false,
|
||||||
LINK_BASE,
|
LINK_BASE,
|
||||||
|
@ -398,7 +402,7 @@ public class RdapJsonFormatterTest {
|
||||||
@Test
|
@Test
|
||||||
public void testError() throws Exception {
|
public void testError() throws Exception {
|
||||||
assertThat(
|
assertThat(
|
||||||
RdapJsonFormatter
|
rdapJsonFormatter
|
||||||
.makeError(SC_BAD_REQUEST, "Invalid Domain Name", "Not a valid domain name"))
|
.makeError(SC_BAD_REQUEST, "Invalid Domain Name", "Not a valid domain name"))
|
||||||
.isEqualTo(loadJson("rdapjson_error.json"));
|
.isEqualTo(loadJson("rdapjson_error.json"));
|
||||||
}
|
}
|
||||||
|
@ -406,14 +410,14 @@ public class RdapJsonFormatterTest {
|
||||||
@Test
|
@Test
|
||||||
public void testHelp_absoluteHtmlUrl() throws Exception {
|
public void testHelp_absoluteHtmlUrl() throws Exception {
|
||||||
assertThat(RdapJsonFormatter.makeRdapJsonNotice(
|
assertThat(RdapJsonFormatter.makeRdapJsonNotice(
|
||||||
MakeRdapJsonNoticeParameters.builder()
|
RdapNoticeDescriptor.builder()
|
||||||
.title("RDAP Help")
|
.setTitle("RDAP Help")
|
||||||
.description(ImmutableList.of(
|
.setDescription(ImmutableList.of(
|
||||||
"RDAP Help Topics (use /help/topic for information)",
|
"RDAP Help Topics (use /help/topic for information)",
|
||||||
"syntax",
|
"syntax",
|
||||||
"tos (Terms of Service)"))
|
"tos (Terms of Service)"))
|
||||||
.linkValueSuffix("help/index")
|
.setLinkValueSuffix("help/index")
|
||||||
.linkHrefUrlString(LINK_BASE + "about/rdap/index.html")
|
.setLinkHrefUrlString(LINK_BASE + "about/rdap/index.html")
|
||||||
.build(),
|
.build(),
|
||||||
LINK_BASE))
|
LINK_BASE))
|
||||||
.isEqualTo(loadJson("rdapjson_notice_alternate_link.json"));
|
.isEqualTo(loadJson("rdapjson_notice_alternate_link.json"));
|
||||||
|
@ -422,14 +426,14 @@ public class RdapJsonFormatterTest {
|
||||||
@Test
|
@Test
|
||||||
public void testHelp_relativeHtmlUrlWithStartingSlash() throws Exception {
|
public void testHelp_relativeHtmlUrlWithStartingSlash() throws Exception {
|
||||||
assertThat(RdapJsonFormatter.makeRdapJsonNotice(
|
assertThat(RdapJsonFormatter.makeRdapJsonNotice(
|
||||||
MakeRdapJsonNoticeParameters.builder()
|
RdapNoticeDescriptor.builder()
|
||||||
.title("RDAP Help")
|
.setTitle("RDAP Help")
|
||||||
.description(ImmutableList.of(
|
.setDescription(ImmutableList.of(
|
||||||
"RDAP Help Topics (use /help/topic for information)",
|
"RDAP Help Topics (use /help/topic for information)",
|
||||||
"syntax",
|
"syntax",
|
||||||
"tos (Terms of Service)"))
|
"tos (Terms of Service)"))
|
||||||
.linkValueSuffix("help/index")
|
.setLinkValueSuffix("help/index")
|
||||||
.linkHrefUrlString("/about/rdap/index.html")
|
.setLinkHrefUrlString("/about/rdap/index.html")
|
||||||
.build(),
|
.build(),
|
||||||
LINK_BASE))
|
LINK_BASE))
|
||||||
.isEqualTo(loadJson("rdapjson_notice_alternate_link.json"));
|
.isEqualTo(loadJson("rdapjson_notice_alternate_link.json"));
|
||||||
|
@ -438,14 +442,14 @@ public class RdapJsonFormatterTest {
|
||||||
@Test
|
@Test
|
||||||
public void testHelp_relativeHtmlUrlWithoutStartingSlash() throws Exception {
|
public void testHelp_relativeHtmlUrlWithoutStartingSlash() throws Exception {
|
||||||
assertThat(RdapJsonFormatter.makeRdapJsonNotice(
|
assertThat(RdapJsonFormatter.makeRdapJsonNotice(
|
||||||
MakeRdapJsonNoticeParameters.builder()
|
RdapNoticeDescriptor.builder()
|
||||||
.title("RDAP Help")
|
.setTitle("RDAP Help")
|
||||||
.description(ImmutableList.of(
|
.setDescription(ImmutableList.of(
|
||||||
"RDAP Help Topics (use /help/topic for information)",
|
"RDAP Help Topics (use /help/topic for information)",
|
||||||
"syntax",
|
"syntax",
|
||||||
"tos (Terms of Service)"))
|
"tos (Terms of Service)"))
|
||||||
.linkValueSuffix("help/index")
|
.setLinkValueSuffix("help/index")
|
||||||
.linkHrefUrlString("about/rdap/index.html")
|
.setLinkHrefUrlString("about/rdap/index.html")
|
||||||
.build(),
|
.build(),
|
||||||
LINK_BASE))
|
LINK_BASE))
|
||||||
.isEqualTo(loadJson("rdapjson_notice_alternate_link.json"));
|
.isEqualTo(loadJson("rdapjson_notice_alternate_link.json"));
|
||||||
|
@ -454,13 +458,13 @@ public class RdapJsonFormatterTest {
|
||||||
@Test
|
@Test
|
||||||
public void testHelp_noHtmlUrl() throws Exception {
|
public void testHelp_noHtmlUrl() throws Exception {
|
||||||
assertThat(RdapJsonFormatter.makeRdapJsonNotice(
|
assertThat(RdapJsonFormatter.makeRdapJsonNotice(
|
||||||
MakeRdapJsonNoticeParameters.builder()
|
RdapNoticeDescriptor.builder()
|
||||||
.title("RDAP Help")
|
.setTitle("RDAP Help")
|
||||||
.description(ImmutableList.of(
|
.setDescription(ImmutableList.of(
|
||||||
"RDAP Help Topics (use /help/topic for information)",
|
"RDAP Help Topics (use /help/topic for information)",
|
||||||
"syntax",
|
"syntax",
|
||||||
"tos (Terms of Service)"))
|
"tos (Terms of Service)"))
|
||||||
.linkValueSuffix("help/index")
|
.setLinkValueSuffix("help/index")
|
||||||
.build(),
|
.build(),
|
||||||
LINK_BASE))
|
LINK_BASE))
|
||||||
.isEqualTo(loadJson("rdapjson_notice_self_link.json"));
|
.isEqualTo(loadJson("rdapjson_notice_self_link.json"));
|
||||||
|
@ -470,7 +474,7 @@ public class RdapJsonFormatterTest {
|
||||||
public void testTopLevel() throws Exception {
|
public void testTopLevel() throws Exception {
|
||||||
ImmutableMap.Builder<String, Object> builder = new ImmutableMap.Builder<>();
|
ImmutableMap.Builder<String, Object> builder = new ImmutableMap.Builder<>();
|
||||||
builder.put("key", "value");
|
builder.put("key", "value");
|
||||||
RdapJsonFormatter.addTopLevelEntries(
|
rdapJsonFormatter.addTopLevelEntries(
|
||||||
builder,
|
builder,
|
||||||
RdapJsonFormatter.BoilerplateType.OTHER,
|
RdapJsonFormatter.BoilerplateType.OTHER,
|
||||||
ImmutableList.<ImmutableMap<String, Object>>of(),
|
ImmutableList.<ImmutableMap<String, Object>>of(),
|
||||||
|
@ -483,10 +487,10 @@ public class RdapJsonFormatterTest {
|
||||||
public void testTopLevel_withTermsOfService() throws Exception {
|
public void testTopLevel_withTermsOfService() throws Exception {
|
||||||
ImmutableMap.Builder<String, Object> builder = new ImmutableMap.Builder<>();
|
ImmutableMap.Builder<String, Object> builder = new ImmutableMap.Builder<>();
|
||||||
builder.put("key", "value");
|
builder.put("key", "value");
|
||||||
RdapJsonFormatter.addTopLevelEntries(
|
rdapJsonFormatter.addTopLevelEntries(
|
||||||
builder,
|
builder,
|
||||||
RdapJsonFormatter.BoilerplateType.OTHER,
|
RdapJsonFormatter.BoilerplateType.OTHER,
|
||||||
ImmutableList.of(RdapHelpAction.getJsonHelpNotice("/tos", LINK_BASE)),
|
ImmutableList.of(rdapJsonFormatter.getJsonHelpNotice("/tos", LINK_BASE)),
|
||||||
ImmutableList.<ImmutableMap<String, Object>>of(),
|
ImmutableList.<ImmutableMap<String, Object>>of(),
|
||||||
LINK_BASE);
|
LINK_BASE);
|
||||||
assertThat(builder.build()).isEqualTo(loadJson("rdapjson_toplevel.json"));
|
assertThat(builder.build()).isEqualTo(loadJson("rdapjson_toplevel.json"));
|
||||||
|
@ -496,7 +500,7 @@ public class RdapJsonFormatterTest {
|
||||||
public void testTopLevel_domain() throws Exception {
|
public void testTopLevel_domain() throws Exception {
|
||||||
ImmutableMap.Builder<String, Object> builder = new ImmutableMap.Builder<>();
|
ImmutableMap.Builder<String, Object> builder = new ImmutableMap.Builder<>();
|
||||||
builder.put("key", "value");
|
builder.put("key", "value");
|
||||||
RdapJsonFormatter.addTopLevelEntries(
|
rdapJsonFormatter.addTopLevelEntries(
|
||||||
builder,
|
builder,
|
||||||
RdapJsonFormatter.BoilerplateType.DOMAIN,
|
RdapJsonFormatter.BoilerplateType.DOMAIN,
|
||||||
ImmutableList.<ImmutableMap<String, Object>>of(),
|
ImmutableList.<ImmutableMap<String, Object>>of(),
|
||||||
|
@ -509,10 +513,10 @@ public class RdapJsonFormatterTest {
|
||||||
public void testTopLevel_domainWithTermsOfService() throws Exception {
|
public void testTopLevel_domainWithTermsOfService() throws Exception {
|
||||||
ImmutableMap.Builder<String, Object> builder = new ImmutableMap.Builder<>();
|
ImmutableMap.Builder<String, Object> builder = new ImmutableMap.Builder<>();
|
||||||
builder.put("key", "value");
|
builder.put("key", "value");
|
||||||
RdapJsonFormatter.addTopLevelEntries(
|
rdapJsonFormatter.addTopLevelEntries(
|
||||||
builder,
|
builder,
|
||||||
RdapJsonFormatter.BoilerplateType.DOMAIN,
|
RdapJsonFormatter.BoilerplateType.DOMAIN,
|
||||||
ImmutableList.of(RdapHelpAction.getJsonHelpNotice("/tos", LINK_BASE)),
|
ImmutableList.of(rdapJsonFormatter.getJsonHelpNotice("/tos", LINK_BASE)),
|
||||||
ImmutableList.<ImmutableMap<String, Object>>of(),
|
ImmutableList.<ImmutableMap<String, Object>>of(),
|
||||||
LINK_BASE);
|
LINK_BASE);
|
||||||
assertThat(builder.build()).isEqualTo(loadJson("rdapjson_toplevel_domain.json"));
|
assertThat(builder.build()).isEqualTo(loadJson("rdapjson_toplevel_domain.json"));
|
||||||
|
|
|
@ -75,6 +75,7 @@ public class RdapNameserverActionTest {
|
||||||
action.clock = clock;
|
action.clock = clock;
|
||||||
action.response = response;
|
action.response = response;
|
||||||
action.requestPath = RdapNameserverAction.PATH.concat(input);
|
action.requestPath = RdapNameserverAction.PATH.concat(input);
|
||||||
|
action.rdapJsonFormatter = RdapTestHelper.getTestRdapJsonFormatter();
|
||||||
action.rdapLinkBase = "https://example.tld/rdap/";
|
action.rdapLinkBase = "https://example.tld/rdap/";
|
||||||
action.rdapWhoisServer = null;
|
action.rdapWhoisServer = null;
|
||||||
return action;
|
return action;
|
||||||
|
|
|
@ -132,6 +132,7 @@ public class RdapNameserverSearchActionTest {
|
||||||
action.clock = clock;
|
action.clock = clock;
|
||||||
action.requestPath = RdapNameserverSearchAction.PATH;
|
action.requestPath = RdapNameserverSearchAction.PATH;
|
||||||
action.response = response;
|
action.response = response;
|
||||||
|
action.rdapJsonFormatter = RdapTestHelper.getTestRdapJsonFormatter();
|
||||||
action.rdapResultSetMaxSize = 4;
|
action.rdapResultSetMaxSize = 4;
|
||||||
action.rdapLinkBase = "https://example.tld/rdap/";
|
action.rdapLinkBase = "https://example.tld/rdap/";
|
||||||
action.rdapWhoisServer = null;
|
action.rdapWhoisServer = null;
|
||||||
|
|
|
@ -16,6 +16,7 @@ package google.registry.rdap;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
import google.registry.config.RdapNoticeDescriptor;
|
||||||
|
|
||||||
public class RdapTestHelper {
|
public class RdapTestHelper {
|
||||||
|
|
||||||
|
@ -35,8 +36,8 @@ public class RdapTestHelper {
|
||||||
+ " transmission of mass unsolicited, commercial advertising or"
|
+ " transmission of mass unsolicited, commercial advertising or"
|
||||||
+ " solicitations.",
|
+ " solicitations.",
|
||||||
"Don't access our Domain Database through the use of high volume, automated"
|
"Don't access our Domain Database through the use of high volume, automated"
|
||||||
+ " electronic processes that send queries or data to the systems of"
|
+ " electronic processes that send queries or data to the systems of any"
|
||||||
+ " Charleston Road Registry or any ICANN-accredited registrar.",
|
+ " ICANN-accredited registrar.",
|
||||||
"You may only use the information contained in the Domain Database for lawful"
|
"You may only use the information contained in the Domain Database for lawful"
|
||||||
+ " purposes.",
|
+ " purposes.",
|
||||||
"Do not compile, repackage, disseminate, or otherwise use the information"
|
"Do not compile, repackage, disseminate, or otherwise use the information"
|
||||||
|
@ -51,7 +52,7 @@ public class RdapTestHelper {
|
||||||
ImmutableMap.of(
|
ImmutableMap.of(
|
||||||
"value", linkBase + "help/tos",
|
"value", linkBase + "help/tos",
|
||||||
"rel", "alternate",
|
"rel", "alternate",
|
||||||
"href", "https://www.registry.google/about/rdap/tos.html",
|
"href", "https://www.registry.tld/about/rdap/tos.html",
|
||||||
"type", "text/html")))));
|
"type", "text/html")))));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,5 +100,75 @@ public class RdapTestHelper {
|
||||||
"href", "https://www.icann.org/wicf",
|
"href", "https://www.icann.org/wicf",
|
||||||
"type", "text/html")))));
|
"type", "text/html")))));
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
static RdapJsonFormatter getTestRdapJsonFormatter() {
|
||||||
|
RdapJsonFormatter rdapJsonFormatter = new RdapJsonFormatter();
|
||||||
|
rdapJsonFormatter.rdapTosPath = "/tos";
|
||||||
|
rdapJsonFormatter.rdapHelpMap = ImmutableMap.of(
|
||||||
|
"/",
|
||||||
|
RdapNoticeDescriptor.builder()
|
||||||
|
.setTitle("RDAP Help")
|
||||||
|
.setDescription(ImmutableList.of(
|
||||||
|
"RDAP Help Topics (use /help/topic for information)",
|
||||||
|
"syntax",
|
||||||
|
"tos (Terms of Service)"))
|
||||||
|
.setLinkValueSuffix("help/")
|
||||||
|
.build(),
|
||||||
|
"/index",
|
||||||
|
RdapNoticeDescriptor.builder()
|
||||||
|
.setTitle("RDAP Help")
|
||||||
|
.setDescription(ImmutableList.of(
|
||||||
|
"RDAP Help Topics (use /help/topic for information)",
|
||||||
|
"syntax",
|
||||||
|
"tos (Terms of Service)"))
|
||||||
|
.setLinkValueSuffix("help/index")
|
||||||
|
.build(),
|
||||||
|
"/syntax",
|
||||||
|
RdapNoticeDescriptor.builder()
|
||||||
|
.setTitle("RDAP Command Syntax")
|
||||||
|
.setDescription(ImmutableList.of(
|
||||||
|
"domain/XXXX",
|
||||||
|
"nameserver/XXXX",
|
||||||
|
"entity/XXXX",
|
||||||
|
"domains?name=XXXX",
|
||||||
|
"domains?nsLdhName=XXXX",
|
||||||
|
"domains?nsIp=XXXX",
|
||||||
|
"nameservers?name=XXXX",
|
||||||
|
"nameservers?ip=XXXX",
|
||||||
|
"entities?fn=XXXX",
|
||||||
|
"entities?handle=XXXX",
|
||||||
|
"help/XXXX"))
|
||||||
|
.setLinkValueSuffix("help/syntax")
|
||||||
|
.setLinkHrefUrlString("https://www.registry.tld/about/rdap/syntax.html")
|
||||||
|
.build(),
|
||||||
|
"/tos",
|
||||||
|
RdapNoticeDescriptor.builder()
|
||||||
|
.setTitle("RDAP Terms of Service")
|
||||||
|
.setDescription(ImmutableList.of(
|
||||||
|
"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."))
|
||||||
|
.setLinkValueSuffix("help/tos")
|
||||||
|
.setLinkHrefUrlString("https://www.registry.tld/about/rdap/tos.html")
|
||||||
|
.build());
|
||||||
|
return rdapJsonFormatter;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -14,9 +14,9 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "https://example.tld/rdap/help/%NAME%",
|
"value" : "https://example.tld/rdap/help/%NAME%",
|
||||||
"rel" : "alternate",
|
"rel" : "self",
|
||||||
"type" : "text/html",
|
"type" : "application/rdap+json",
|
||||||
"href" : "https://www.registry.google/about/rdap/index.html"
|
"href" : "https://example.tld/rdap/help/%NAME%"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
"Any information provided is 'as is' without any guarantee of accuracy.",
|
"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.",
|
"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 use the Domain Database to allow, enable, or otherwise support the transmission of mass unsolicited, commercial advertising or solicitations.",
|
||||||
"Don't access our Domain Database through the use of high volume, automated electronic processes that send queries or data to the systems of Charleston Road Registry or any ICANN-accredited registrar.",
|
"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.",
|
"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.",
|
"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 may retain certain details about queries to our Domain Database for the purposes of detecting and preventing misuse.",
|
||||||
|
@ -40,7 +40,7 @@
|
||||||
{
|
{
|
||||||
"value" : "https://example.tld/rdap/help/tos",
|
"value" : "https://example.tld/rdap/help/tos",
|
||||||
"rel" : "alternate",
|
"rel" : "alternate",
|
||||||
"href" : "https://www.registry.google/about/rdap/tos.html",
|
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
||||||
"type" : "text/html"
|
"type" : "text/html"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
"Any information provided is 'as is' without any guarantee of accuracy.",
|
"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.",
|
"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 use the Domain Database to allow, enable, or otherwise support the transmission of mass unsolicited, commercial advertising or solicitations.",
|
||||||
"Don't access our Domain Database through the use of high volume, automated electronic processes that send queries or data to the systems of Charleston Road Registry or any ICANN-accredited registrar.",
|
"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.",
|
"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.",
|
"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 may retain certain details about queries to our Domain Database for the purposes of detecting and preventing misuse.",
|
||||||
|
@ -22,7 +22,7 @@
|
||||||
{
|
{
|
||||||
"value" : "https://example.tld/rdap/help/tos",
|
"value" : "https://example.tld/rdap/help/tos",
|
||||||
"rel" : "alternate",
|
"rel" : "alternate",
|
||||||
"href" : "https://www.registry.google/about/rdap/tos.html",
|
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
||||||
"type" : "text/html"
|
"type" : "text/html"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -112,7 +112,7 @@
|
||||||
"Any information provided is 'as is' without any guarantee of accuracy.",
|
"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.",
|
"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 use the Domain Database to allow, enable, or otherwise support the transmission of mass unsolicited, commercial advertising or solicitations.",
|
||||||
"Don't access our Domain Database through the use of high volume, automated electronic processes that send queries or data to the systems of Charleston Road Registry or any ICANN-accredited registrar.",
|
"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.",
|
"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.",
|
"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 may retain certain details about queries to our Domain Database for the purposes of detecting and preventing misuse.",
|
||||||
|
@ -124,7 +124,7 @@
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/help/tos",
|
"value" : "https://example.com/rdap/help/tos",
|
||||||
"rel" : "alternate",
|
"rel" : "alternate",
|
||||||
"href" : "https://www.registry.google/about/rdap/tos.html",
|
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
||||||
"type" : "text/html"
|
"type" : "text/html"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -105,7 +105,7 @@
|
||||||
"Any information provided is 'as is' without any guarantee of accuracy.",
|
"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.",
|
"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 use the Domain Database to allow, enable, or otherwise support the transmission of mass unsolicited, commercial advertising or solicitations.",
|
||||||
"Don't access our Domain Database through the use of high volume, automated electronic processes that send queries or data to the systems of Charleston Road Registry or any ICANN-accredited registrar.",
|
"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.",
|
"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.",
|
"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 may retain certain details about queries to our Domain Database for the purposes of detecting and preventing misuse.",
|
||||||
|
@ -117,7 +117,7 @@
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/help/tos",
|
"value" : "https://example.com/rdap/help/tos",
|
||||||
"rel" : "alternate",
|
"rel" : "alternate",
|
||||||
"href" : "https://www.registry.google/about/rdap/tos.html",
|
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
||||||
"type" : "text/html"
|
"type" : "text/html"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -70,7 +70,7 @@
|
||||||
"Any information provided is 'as is' without any guarantee of accuracy.",
|
"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.",
|
"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 use the Domain Database to allow, enable, or otherwise support the transmission of mass unsolicited, commercial advertising or solicitations.",
|
||||||
"Don't access our Domain Database through the use of high volume, automated electronic processes that send queries or data to the systems of Charleston Road Registry or any ICANN-accredited registrar.",
|
"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.",
|
"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.",
|
"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 may retain certain details about queries to our Domain Database for the purposes of detecting and preventing misuse.",
|
||||||
|
@ -82,7 +82,7 @@
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/help/tos",
|
"value" : "https://example.com/rdap/help/tos",
|
||||||
"rel" : "alternate",
|
"rel" : "alternate",
|
||||||
"href" : "https://www.registry.google/about/rdap/tos.html",
|
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
||||||
"type" : "text/html"
|
"type" : "text/html"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -70,7 +70,7 @@
|
||||||
"Any information provided is 'as is' without any guarantee of accuracy.",
|
"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.",
|
"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 use the Domain Database to allow, enable, or otherwise support the transmission of mass unsolicited, commercial advertising or solicitations.",
|
||||||
"Don't access our Domain Database through the use of high volume, automated electronic processes that send queries or data to the systems of Charleston Road Registry or any ICANN-accredited registrar.",
|
"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.",
|
"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.",
|
"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 may retain certain details about queries to our Domain Database for the purposes of detecting and preventing misuse.",
|
||||||
|
@ -82,7 +82,7 @@
|
||||||
{
|
{
|
||||||
"value" : "https://example.tld/rdap/help/tos",
|
"value" : "https://example.tld/rdap/help/tos",
|
||||||
"rel" : "alternate",
|
"rel" : "alternate",
|
||||||
"href" : "https://www.registry.google/about/rdap/tos.html",
|
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
||||||
"type" : "text/html"
|
"type" : "text/html"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -197,7 +197,7 @@
|
||||||
"Any information provided is 'as is' without any guarantee of accuracy.",
|
"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.",
|
"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 use the Domain Database to allow, enable, or otherwise support the transmission of mass unsolicited, commercial advertising or solicitations.",
|
||||||
"Don't access our Domain Database through the use of high volume, automated electronic processes that send queries or data to the systems of Charleston Road Registry or any ICANN-accredited registrar.",
|
"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.",
|
"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.",
|
"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 may retain certain details about queries to our Domain Database for the purposes of detecting and preventing misuse.",
|
||||||
|
@ -209,7 +209,7 @@
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/help/tos",
|
"value" : "https://example.com/rdap/help/tos",
|
||||||
"rel" : "alternate",
|
"rel" : "alternate",
|
||||||
"href" : "https://www.registry.google/about/rdap/tos.html",
|
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
||||||
"type" : "text/html"
|
"type" : "text/html"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -126,7 +126,7 @@
|
||||||
"Any information provided is 'as is' without any guarantee of accuracy.",
|
"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.",
|
"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 use the Domain Database to allow, enable, or otherwise support the transmission of mass unsolicited, commercial advertising or solicitations.",
|
||||||
"Don't access our Domain Database through the use of high volume, automated electronic processes that send queries or data to the systems of Charleston Road Registry or any ICANN-accredited registrar.",
|
"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.",
|
"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.",
|
"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 may retain certain details about queries to our Domain Database for the purposes of detecting and preventing misuse.",
|
||||||
|
@ -138,7 +138,7 @@
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/help/tos",
|
"value" : "https://example.com/rdap/help/tos",
|
||||||
"rel" : "alternate",
|
"rel" : "alternate",
|
||||||
"href" : "https://www.registry.google/about/rdap/tos.html",
|
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
||||||
"type" : "text/html"
|
"type" : "text/html"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -125,7 +125,7 @@
|
||||||
"Any information provided is 'as is' without any guarantee of accuracy.",
|
"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.",
|
"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 use the Domain Database to allow, enable, or otherwise support the transmission of mass unsolicited, commercial advertising or solicitations.",
|
||||||
"Don't access our Domain Database through the use of high volume, automated electronic processes that send queries or data to the systems of Charleston Road Registry or any ICANN-accredited registrar.",
|
"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.",
|
"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.",
|
"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 may retain certain details about queries to our Domain Database for the purposes of detecting and preventing misuse.",
|
||||||
|
@ -137,7 +137,7 @@
|
||||||
{
|
{
|
||||||
"value" : "https://example.tld/rdap/help/tos",
|
"value" : "https://example.tld/rdap/help/tos",
|
||||||
"rel" : "alternate",
|
"rel" : "alternate",
|
||||||
"href" : "https://www.registry.google/about/rdap/tos.html",
|
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
||||||
"type" : "text/html"
|
"type" : "text/html"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -225,7 +225,7 @@
|
||||||
"Any information provided is 'as is' without any guarantee of accuracy.",
|
"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.",
|
"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 use the Domain Database to allow, enable, or otherwise support the transmission of mass unsolicited, commercial advertising or solicitations.",
|
||||||
"Don't access our Domain Database through the use of high volume, automated electronic processes that send queries or data to the systems of Charleston Road Registry or any ICANN-accredited registrar.",
|
"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.",
|
"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.",
|
"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 may retain certain details about queries to our Domain Database for the purposes of detecting and preventing misuse.",
|
||||||
|
@ -237,7 +237,7 @@
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/help/tos",
|
"value" : "https://example.com/rdap/help/tos",
|
||||||
"rel" : "alternate",
|
"rel" : "alternate",
|
||||||
"href" : "https://www.registry.google/about/rdap/tos.html",
|
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
||||||
"type" : "text/html"
|
"type" : "text/html"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -205,7 +205,7 @@
|
||||||
"Any information provided is 'as is' without any guarantee of accuracy.",
|
"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.",
|
"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 use the Domain Database to allow, enable, or otherwise support the transmission of mass unsolicited, commercial advertising or solicitations.",
|
||||||
"Don't access our Domain Database through the use of high volume, automated electronic processes that send queries or data to the systems of Charleston Road Registry or any ICANN-accredited registrar.",
|
"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.",
|
"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.",
|
"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 may retain certain details about queries to our Domain Database for the purposes of detecting and preventing misuse.",
|
||||||
|
@ -217,7 +217,7 @@
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/help/tos",
|
"value" : "https://example.com/rdap/help/tos",
|
||||||
"rel" : "alternate",
|
"rel" : "alternate",
|
||||||
"href" : "https://www.registry.google/about/rdap/tos.html",
|
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
||||||
"type" : "text/html"
|
"type" : "text/html"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -134,7 +134,7 @@
|
||||||
"Any information provided is 'as is' without any guarantee of accuracy.",
|
"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.",
|
"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 use the Domain Database to allow, enable, or otherwise support the transmission of mass unsolicited, commercial advertising or solicitations.",
|
||||||
"Don't access our Domain Database through the use of high volume, automated electronic processes that send queries or data to the systems of Charleston Road Registry or any ICANN-accredited registrar.",
|
"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.",
|
"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.",
|
"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 may retain certain details about queries to our Domain Database for the purposes of detecting and preventing misuse.",
|
||||||
|
@ -146,7 +146,7 @@
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/help/tos",
|
"value" : "https://example.com/rdap/help/tos",
|
||||||
"rel" : "alternate",
|
"rel" : "alternate",
|
||||||
"href" : "https://www.registry.google/about/rdap/tos.html",
|
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
||||||
"type" : "text/html"
|
"type" : "text/html"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -133,7 +133,7 @@
|
||||||
"Any information provided is 'as is' without any guarantee of accuracy.",
|
"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.",
|
"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 use the Domain Database to allow, enable, or otherwise support the transmission of mass unsolicited, commercial advertising or solicitations.",
|
||||||
"Don't access our Domain Database through the use of high volume, automated electronic processes that send queries or data to the systems of Charleston Road Registry or any ICANN-accredited registrar.",
|
"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.",
|
"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.",
|
"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 may retain certain details about queries to our Domain Database for the purposes of detecting and preventing misuse.",
|
||||||
|
@ -145,7 +145,7 @@
|
||||||
{
|
{
|
||||||
"value" : "https://example.tld/rdap/help/tos",
|
"value" : "https://example.tld/rdap/help/tos",
|
||||||
"rel" : "alternate",
|
"rel" : "alternate",
|
||||||
"href" : "https://www.registry.google/about/rdap/tos.html",
|
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
||||||
"type" : "text/html"
|
"type" : "text/html"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -212,7 +212,7 @@
|
||||||
"Any information provided is 'as is' without any guarantee of accuracy.",
|
"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.",
|
"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 use the Domain Database to allow, enable, or otherwise support the transmission of mass unsolicited, commercial advertising or solicitations.",
|
||||||
"Don't access our Domain Database through the use of high volume, automated electronic processes that send queries or data to the systems of Charleston Road Registry or any ICANN-accredited registrar.",
|
"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.",
|
"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.",
|
"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 may retain certain details about queries to our Domain Database for the purposes of detecting and preventing misuse.",
|
||||||
|
@ -224,7 +224,7 @@
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/help/tos",
|
"value" : "https://example.com/rdap/help/tos",
|
||||||
"rel" : "alternate",
|
"rel" : "alternate",
|
||||||
"href" : "https://www.registry.google/about/rdap/tos.html",
|
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
||||||
"type" : "text/html"
|
"type" : "text/html"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -233,7 +233,7 @@
|
||||||
"Any information provided is 'as is' without any guarantee of accuracy.",
|
"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.",
|
"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 use the Domain Database to allow, enable, or otherwise support the transmission of mass unsolicited, commercial advertising or solicitations.",
|
||||||
"Don't access our Domain Database through the use of high volume, automated electronic processes that send queries or data to the systems of Charleston Road Registry or any ICANN-accredited registrar.",
|
"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.",
|
"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.",
|
"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 may retain certain details about queries to our Domain Database for the purposes of detecting and preventing misuse.",
|
||||||
|
@ -245,7 +245,7 @@
|
||||||
{
|
{
|
||||||
"value" : "https://example.com/rdap/help/tos",
|
"value" : "https://example.com/rdap/help/tos",
|
||||||
"rel" : "alternate",
|
"rel" : "alternate",
|
||||||
"href" : "https://www.registry.google/about/rdap/tos.html",
|
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
||||||
"type" : "text/html"
|
"type" : "text/html"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -6,9 +6,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "http://myserver.google.com/entity/4-ROID",
|
"value" : "http://myserver.example.com/entity/4-ROID",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href" : "http://myserver.google.com/entity/4-ROID",
|
"href" : "http://myserver.example.com/entity/4-ROID",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
@ -13,9 +13,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "http://myserver.google.com/domain/cat.xn--q9jyb4c",
|
"value" : "http://myserver.example.com/domain/cat.xn--q9jyb4c",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href" : "http://myserver.google.com/domain/cat.xn--q9jyb4c",
|
"href" : "http://myserver.example.com/domain/cat.xn--q9jyb4c",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -49,9 +49,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "http://myserver.google.com/nameserver/ns1.cat.xn--q9jyb4c",
|
"value" : "http://myserver.example.com/nameserver/ns1.cat.xn--q9jyb4c",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href" : "http://myserver.google.com/nameserver/ns1.cat.xn--q9jyb4c",
|
"href" : "http://myserver.example.com/nameserver/ns1.cat.xn--q9jyb4c",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -80,9 +80,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "http://myserver.google.com/nameserver/ns2.cat.xn--q9jyb4c",
|
"value" : "http://myserver.example.com/nameserver/ns2.cat.xn--q9jyb4c",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href" : "http://myserver.google.com/nameserver/ns2.cat.xn--q9jyb4c",
|
"href" : "http://myserver.example.com/nameserver/ns2.cat.xn--q9jyb4c",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -113,9 +113,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "http://myserver.google.com/entity/4-ROID",
|
"value" : "http://myserver.example.com/entity/4-ROID",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href" : "http://myserver.google.com/entity/4-ROID",
|
"href" : "http://myserver.example.com/entity/4-ROID",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -162,9 +162,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "http://myserver.google.com/entity/6-ROID",
|
"value" : "http://myserver.example.com/entity/6-ROID",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href" : "http://myserver.google.com/entity/6-ROID",
|
"href" : "http://myserver.example.com/entity/6-ROID",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -211,9 +211,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "http://myserver.google.com/entity/2-ROID",
|
"value" : "http://myserver.example.com/entity/2-ROID",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href" : "http://myserver.google.com/entity/2-ROID",
|
"href" : "http://myserver.example.com/entity/2-ROID",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
@ -14,9 +14,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "http://myserver.google.com/domain/fish.xn--q9jyb4c",
|
"value" : "http://myserver.example.com/domain/fish.xn--q9jyb4c",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href" : "http://myserver.google.com/domain/fish.xn--q9jyb4c",
|
"href" : "http://myserver.example.com/domain/fish.xn--q9jyb4c",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -49,9 +49,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "http://myserver.google.com/entity/4-ROID",
|
"value" : "http://myserver.example.com/entity/4-ROID",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href" : "http://myserver.google.com/entity/4-ROID",
|
"href" : "http://myserver.example.com/entity/4-ROID",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -98,9 +98,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "http://myserver.google.com/entity/6-ROID",
|
"value" : "http://myserver.example.com/entity/6-ROID",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href" : "http://myserver.google.com/entity/6-ROID",
|
"href" : "http://myserver.example.com/entity/6-ROID",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -147,9 +147,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "http://myserver.google.com/entity/2-ROID",
|
"value" : "http://myserver.example.com/entity/2-ROID",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href" : "http://myserver.google.com/entity/2-ROID",
|
"href" : "http://myserver.example.com/entity/2-ROID",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
@ -13,9 +13,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "http://myserver.google.com/domain/cat.xn--q9jyb4c",
|
"value" : "http://myserver.example.com/domain/cat.xn--q9jyb4c",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href" : "http://myserver.google.com/domain/cat.xn--q9jyb4c",
|
"href" : "http://myserver.example.com/domain/cat.xn--q9jyb4c",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
@ -7,9 +7,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "http://myserver.google.com/nameserver/ns3.cat.xn--q9jyb4c",
|
"value" : "http://myserver.example.com/nameserver/ns3.cat.xn--q9jyb4c",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href" : "http://myserver.google.com/nameserver/ns3.cat.xn--q9jyb4c",
|
"href" : "http://myserver.example.com/nameserver/ns3.cat.xn--q9jyb4c",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
@ -7,9 +7,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "http://myserver.google.com/nameserver/ns3.cat.xn--q9jyb4c",
|
"value" : "http://myserver.example.com/nameserver/ns3.cat.xn--q9jyb4c",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href" : "http://myserver.google.com/nameserver/ns3.cat.xn--q9jyb4c",
|
"href" : "http://myserver.example.com/nameserver/ns3.cat.xn--q9jyb4c",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
@ -7,9 +7,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "http://myserver.google.com/nameserver/ns1.cat.xn--q9jyb4c",
|
"value" : "http://myserver.example.com/nameserver/ns1.cat.xn--q9jyb4c",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href" : "http://myserver.google.com/nameserver/ns1.cat.xn--q9jyb4c",
|
"href" : "http://myserver.example.com/nameserver/ns1.cat.xn--q9jyb4c",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
@ -7,9 +7,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "http://myserver.google.com/nameserver/ns2.cat.xn--q9jyb4c",
|
"value" : "http://myserver.example.com/nameserver/ns2.cat.xn--q9jyb4c",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href" : "http://myserver.google.com/nameserver/ns2.cat.xn--q9jyb4c",
|
"href" : "http://myserver.example.com/nameserver/ns2.cat.xn--q9jyb4c",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
@ -7,9 +7,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "http://myserver.google.com/nameserver/ns4.cat.xn--q9jyb4c",
|
"value" : "http://myserver.example.com/nameserver/ns4.cat.xn--q9jyb4c",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href" : "http://myserver.google.com/nameserver/ns4.cat.xn--q9jyb4c",
|
"href" : "http://myserver.example.com/nameserver/ns4.cat.xn--q9jyb4c",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
@ -9,10 +9,10 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "http://myserver.google.com/help/index",
|
"value" : "http://myserver.example.com/help/index",
|
||||||
"rel" : "alternate",
|
"rel" : "alternate",
|
||||||
"type" : "text/html",
|
"type" : "text/html",
|
||||||
"href" : "http://myserver.google.com/about/rdap/index.html"
|
"href" : "http://myserver.example.com/about/rdap/index.html"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,10 +9,10 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "http://myserver.google.com/help/index",
|
"value" : "http://myserver.example.com/help/index",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"type" : "application/rdap+json",
|
"type" : "application/rdap+json",
|
||||||
"href" : "http://myserver.google.com/help/index",
|
"href" : "http://myserver.example.com/help/index",
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,9 +6,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "http://myserver.google.com/entity/2-ROID",
|
"value" : "http://myserver.example.com/entity/2-ROID",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href" : "http://myserver.google.com/entity/2-ROID",
|
"href" : "http://myserver.example.com/entity/2-ROID",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
@ -6,9 +6,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "http://myserver.google.com/entity/2-ROID",
|
"value" : "http://myserver.example.com/entity/2-ROID",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href" : "http://myserver.google.com/entity/2-ROID",
|
"href" : "http://myserver.example.com/entity/2-ROID",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
@ -6,9 +6,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "http://myserver.google.com/entity/1",
|
"value" : "http://myserver.example.com/entity/1",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href" : "http://myserver.google.com/entity/1",
|
"href" : "http://myserver.example.com/entity/1",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
@ -6,9 +6,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "http://myserver.google.com/entity/1",
|
"value" : "http://myserver.example.com/entity/1",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href" : "http://myserver.google.com/entity/1",
|
"href" : "http://myserver.example.com/entity/1",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
@ -5,9 +5,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "http://myserver.google.com/entity/6-ROID",
|
"value" : "http://myserver.example.com/entity/6-ROID",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href" : "http://myserver.google.com/entity/6-ROID",
|
"href" : "http://myserver.example.com/entity/6-ROID",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
@ -6,9 +6,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "http://myserver.google.com/entity/6-ROID",
|
"value" : "http://myserver.example.com/entity/6-ROID",
|
||||||
"rel" : "self",
|
"rel" : "self",
|
||||||
"href" : "http://myserver.google.com/entity/6-ROID",
|
"href" : "http://myserver.example.com/entity/6-ROID",
|
||||||
"type" : "application/rdap+json"
|
"type" : "application/rdap+json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
"Any information provided is 'as is' without any guarantee of accuracy.",
|
"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.",
|
"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 use the Domain Database to allow, enable, or otherwise support the transmission of mass unsolicited, commercial advertising or solicitations.",
|
||||||
"Don't access our Domain Database through the use of high volume, automated electronic processes that send queries or data to the systems of Charleston Road Registry or any ICANN-accredited registrar.",
|
"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.",
|
"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.",
|
"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 may retain certain details about queries to our Domain Database for the purposes of detecting and preventing misuse.",
|
||||||
|
@ -24,9 +24,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "http://myserver.google.com/help/tos",
|
"value" : "http://myserver.example.com/help/tos",
|
||||||
"rel" : "alternate",
|
"rel" : "alternate",
|
||||||
"href" : "https://www.registry.google/about/rdap/tos.html",
|
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
||||||
"type" : "text/html"
|
"type" : "text/html"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
"Any information provided is 'as is' without any guarantee of accuracy.",
|
"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.",
|
"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 use the Domain Database to allow, enable, or otherwise support the transmission of mass unsolicited, commercial advertising or solicitations.",
|
||||||
"Don't access our Domain Database through the use of high volume, automated electronic processes that send queries or data to the systems of Charleston Road Registry or any ICANN-accredited registrar.",
|
"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.",
|
"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.",
|
"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 may retain certain details about queries to our Domain Database for the purposes of detecting and preventing misuse.",
|
||||||
|
@ -24,9 +24,9 @@
|
||||||
"links" :
|
"links" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"value" : "http://myserver.google.com/help/tos",
|
"value" : "http://myserver.example.com/help/tos",
|
||||||
"rel" : "alternate",
|
"rel" : "alternate",
|
||||||
"href" : "https://www.registry.google/about/rdap/tos.html",
|
"href" : "https://www.registry.tld/about/rdap/tos.html",
|
||||||
"type" : "text/html"
|
"type" : "text/html"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue