Add WHOIS disclaimer text to ConfigModule

This fixes #23 for @parsoj by allowing a custom disclaimer to be
specified via dependency injection modules.

By making the disclaimer part of the dependency injection graph, it can
come from anywhere.

For example, if I was Donuts, I would have my own repository. I'd use an
external http_archive() repository for Domain Registry. Then I would
write my own Dagger @Component for each App Engine module. My Component
would have a list of Dagger Modules, which I copied from the Domain
Registry version. Then I would swap out ConfigModule with my own
DonutsConfigModule, which provides the same values.

So long as a method exists that @Provides @Config("whoisRegistry"), and
the module containing it is listed in the @Component, the dependency
injection graph becomes valid and complete for the whois package
(provided other dependencies are met.)

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=128082921
This commit is contained in:
Justine Tunney 2016-07-21 11:18:06 -07:00
parent 2c9567e183
commit e82a40a2fb
34 changed files with 149 additions and 310 deletions

View file

@ -28,7 +28,26 @@ import org.joda.money.CurrencyUnit;
import org.joda.time.DateTimeConstants;
import org.joda.time.Duration;
/** Dagger module for injecting configuration settings. */
/**
* Configuration example for the Domain Registry codebase.
*
* <p>The Domain Registry codebase contains many classes that inject configurable settings. This is
* the centralized class that is used by default to configure them all, in hard-coded type-safe
* Java code.
*
* <p>This class does not represent the total configuration of the Domain Registry service. It's
* <b>only meant for settings that need to be configured <i>once</i></b>. Settings which may
* be subject to change in the future, should instead be retrieved from Datastore. The
* {@link google.registry.model.registry.Registry Registry} class is one such example of this.
*
* <h3>Customization</h3>
*
* <p>It is recommended that users do not modify this file within a forked repository. It is
* preferable to modify these settings by swapping out this module with a separate copied version
* in the user's repository. For this to work, other files need to be copied too, such as
* {@link google.registry.module.backend.BackendComponent BackendComponent}. This allows modules to
* be substituted at the {@code @Component} level.
*/
@Module
public final class ConfigModule {
@ -563,4 +582,27 @@ public final class ConfigModule {
return "tzcyzvm3mn7zkdnx";
}
}
/**
* Disclaimer displayed at the end of WHOIS query results.
*
* @see google.registry.whois.WhoisResponse
*/
@Provides
@Config("whoisDisclaimer")
public static String provideWhoisDisclaimer() {
return "WHOIS information is provided by Charleston Road Registry Inc. (CRR) solely for\n"
+ "query-based, informational purposes. By querying our WHOIS database, you are\n"
+ "agreeing to comply with these terms\n"
+ "(http://www.registry.google/about/whois-disclaimer.html) so please read them\n"
+ "carefully. Any information provided is \"as is\" without any guarantee of\n"
+ "accuracy. You may not use such information to (a) allow, enable, or otherwise\n"
+ "support the transmission of mass unsolicited, commercial advertising or\n"
+ "solicitations; (b) enable high volume, automated, electronic processes that\n"
+ "access the systems of CRR or any ICANN-Accredited Registrar, except as\n"
+ "reasonably necessary to register domain names or modify existing registrations;\n"
+ "or (c) engage in or support unlawful behavior. CRR reserves the right to\n"
+ "restrict or deny your access to the Whois database, and may modify these terms\n"
+ "at any time.\n";
}
}

View file

@ -243,4 +243,6 @@ public interface RegistryConfig {
* the logs from filling up with unnecessarily failures.
*/
public Duration getAsyncFlowFailureBackoff();
// XXX: Please consider using ConfigModule instead of adding new methods to this file.
}

View file

@ -20,8 +20,6 @@ import com.google.common.base.Joiner;
import google.registry.tools.Command.GtechCommand;
import google.registry.tools.Command.RemoteApiCommand;
import google.registry.whois.Whois;
import google.registry.whois.WhoisException;
import google.registry.whois.WhoisResponse;
import java.util.List;
import javax.inject.Inject;
@ -44,12 +42,6 @@ final class WhoisQueryCommand implements RemoteApiCommand, GtechCommand {
@Override
public void run() {
WhoisResponse response;
try {
response = whois.lookup(Joiner.on(' ').join(mainParameters));
} catch (WhoisException e) {
response = e;
}
System.out.println(response.getPlainTextOutput(unicode));
System.out.println(whois.lookup(Joiner.on(' ').join(mainParameters), unicode));
}
}

View file

@ -8,7 +8,6 @@ licenses(["notice"]) # Apache 2.0
java_library(
name = "whois",
srcs = glob(["*.java"]),
resources = ["disclaimer.txt"],
visibility = ["//visibility:public"],
deps = [
"//java/com/google/common/annotations",

View file

@ -61,20 +61,21 @@ final class DomainWhoisResponse extends WhoisResponseImpl {
}
@Override
public String getPlainTextOutput(final boolean preferUnicode) {
public String getPlainTextOutput(final boolean preferUnicode, String disclaimer) {
Registrar registrar = getRegistrar(domain.getCurrentSponsorClientId());
return new DomainEmitter()
.emitField("Domain Name",
maybeFormatHostname(domain.getFullyQualifiedDomainName(), preferUnicode))
.emitField(
"Domain Name", maybeFormatHostname(domain.getFullyQualifiedDomainName(), preferUnicode))
.emitField("Domain ID", domain.getRepoId())
.emitField("WHOIS Server", registrar.getWhoisServer())
.emitField("Referral URL", registrar.getReferralUrl())
.emitField("Updated Date", getFormattedString(domain.getLastEppUpdateTime()))
.emitField("Creation Date", getFormattedString(domain.getCreationTime()))
.emitField("Registry Expiry Date",
getFormattedString(domain.getRegistrationExpirationTime()))
.emitField(
"Registry Expiry Date", getFormattedString(domain.getRegistrationExpirationTime()))
.emitField("Sponsoring Registrar", registrar.getRegistrarName())
.emitField("Sponsoring Registrar IANA ID",
.emitField(
"Sponsoring Registrar IANA ID",
registrar.getIanaIdentifier() == null ? null : registrar.getIanaIdentifier().toString())
.emitStatusValues(domain.getStatusValues(), domain.getGracePeriods())
.emitContact("Registrant", domain.getRegistrant(), preferUnicode)
@ -88,11 +89,12 @@ final class DomainWhoisResponse extends WhoisResponseImpl {
@Override
public String apply(String hostName) {
return maybeFormatHostname(hostName, preferUnicode);
}})
}
})
.emitField("DNSSEC", isNullOrEmpty(domain.getDsData()) ? "unsigned" : "signedDelegation")
.emitLastUpdated(getTimestamp())
.emitAwipMessage()
.emitFooter()
.emitFooter(disclaimer)
.toString();
}

View file

@ -42,7 +42,7 @@ final class NameserverWhoisResponse extends WhoisResponseImpl {
}
@Override
public String getPlainTextOutput(boolean preferUnicode) {
public String getPlainTextOutput(boolean preferUnicode, String disclaimer) {
BasicEmitter emitter = new BasicEmitter();
for (int i = 0; i < hosts.size(); i++) {
HostResource host = hosts.get(i);
@ -63,6 +63,6 @@ final class NameserverWhoisResponse extends WhoisResponseImpl {
emitter.emitNewline();
}
}
return emitter.emitLastUpdated(getTimestamp()).emitFooter().toString();
return emitter.emitLastUpdated(getTimestamp()).emitFooter(disclaimer).toString();
}
}

View file

@ -43,29 +43,29 @@ class RegistrarWhoisResponse extends WhoisResponseImpl {
}
@Override
public String getPlainTextOutput(boolean preferUnicode) {
public String getPlainTextOutput(boolean preferUnicode, String disclaimer) {
Set<RegistrarContact> contacts = registrar.getContacts();
return new RegistrarEmitter()
.emitField("Registrar Name", registrar.getRegistrarName())
.emitAddress(null, chooseByUnicodePreference(
.emitAddress(
null,
chooseByUnicodePreference(
preferUnicode,
registrar.getLocalizedAddress(),
registrar.getInternationalizedAddress()))
.emitPhonesAndEmail(
registrar.getPhoneNumber(),
registrar.getFaxNumber(),
registrar.getEmailAddress())
registrar.getPhoneNumber(), registrar.getFaxNumber(), registrar.getEmailAddress())
.emitField("WHOIS Server", registrar.getWhoisServer())
.emitField("Referral URL", registrar.getReferralUrl())
.emitRegistrarContacts("Admin", contacts, AdminOrTech.ADMIN)
.emitRegistrarContacts("Technical", contacts, AdminOrTech.TECH)
.emitLastUpdated(getTimestamp())
.emitFooter()
.emitFooter(disclaimer)
.toString();
}
/** An emitter with logic for registrars. */
class RegistrarEmitter extends Emitter<RegistrarEmitter> {
static class RegistrarEmitter extends Emitter<RegistrarEmitter> {
/** Emits the registrar contact of the given type. */
RegistrarEmitter emitRegistrarContacts(
String contactLabel,

View file

@ -14,6 +14,7 @@
package google.registry.whois;
import google.registry.config.ConfigModule.Config;
import google.registry.util.Clock;
import java.io.IOException;
import java.io.StringReader;
@ -24,23 +25,24 @@ import org.joda.time.DateTime;
public final class Whois {
private final Clock clock;
private final String disclaimer;
@Inject
public Whois(Clock clock) {
public Whois(Clock clock, @Config("whoisDisclaimer") String disclaimer) {
this.clock = clock;
this.disclaimer = disclaimer;
}
/**
* Performs a WHOIS lookup on a plaintext query string.
*
* @throws WhoisException if the record is not found or the query is invalid
*/
public WhoisResponse lookup(String query) throws WhoisException {
/** Performs a WHOIS lookup on a plaintext query string. */
public String lookup(String query, boolean preferUnicode) {
DateTime now = clock.nowUtc();
try {
return new WhoisReader(new StringReader(query), now)
.readCommand()
.executeQuery(now);
.executeQuery(now)
.getPlainTextOutput(preferUnicode, disclaimer);
} catch (WhoisException e) {
return e.getPlainTextOutput(preferUnicode, disclaimer);
} catch (IOException e) {
throw new RuntimeException(e);
}

View file

@ -60,11 +60,11 @@ public final class WhoisException extends Exception implements WhoisResponse {
}
@Override
public String getPlainTextOutput(boolean preferUnicode) {
public String getPlainTextOutput(boolean preferUnicode, String disclaimer) {
return new WhoisResponseImpl.BasicEmitter()
.emitRawLine(getMessage())
.emitLastUpdated(getTimestamp())
.emitFooter()
.emitFooter(disclaimer)
.toString();
}
}

View file

@ -130,6 +130,7 @@ public final class WhoisHttpServer implements Runnable {
@Inject Clock clock;
@Inject Response response;
@Inject @Config("whoisDisclaimer") String disclaimer;
@Inject @Config("whoisHttpExpires") Duration expires;
@Inject @RequestPath String requestPath;
@Inject WhoisHttpServer() {}
@ -159,7 +160,7 @@ public final class WhoisHttpServer implements Runnable {
response.setHeader(ACCESS_CONTROL_ALLOW_ORIGIN, CORS_ALLOW_ORIGIN);
response.setHeader(X_CONTENT_TYPE_OPTIONS, X_CONTENT_NO_SNIFF);
response.setContentType(PLAIN_TEXT_UTF_8);
response.setPayload(whoisResponse.getPlainTextOutput(true));
response.setPayload(whoisResponse.getPlainTextOutput(true, disclaimer));
}
/** Removes {@code %xx} escape codes from request path components. */

View file

@ -22,13 +22,14 @@ public interface WhoisResponse {
/**
* Returns a plain text WHOIS response.
*
* @param preferUnicode if {@code false} will cause the output to be converted to ASCII
* whenever possible; for example, converting IDN hostname labels to punycode. However
* certain things (like a domain registrant name with accent marks) will be returned
* "as is". If the WHOIS client has told us they're able to receive UTF-8 (such as with
* HTTP) then this field should be set to {@code true}.
* @param preferUnicode if {@code false} will cause the output to be converted to ASCII whenever
* possible; for example, converting IDN hostname labels to punycode. However certain things
* (like a domain registrant name with accent marks) will be returned "as is". If the WHOIS
* client has told us they're able to receive UTF-8 (such as with HTTP) then this field should
* be set to {@code true}.
* @param disclaimer text to show at bottom of output
*/
String getPlainTextOutput(boolean preferUnicode);
String getPlainTextOutput(boolean preferUnicode, String disclaimer);
/**
* Returns the time at which this response was created.

View file

@ -17,7 +17,6 @@ package google.registry.whois;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Strings.isNullOrEmpty;
import static com.google.common.html.HtmlEscapers.htmlEscaper;
import static java.nio.charset.StandardCharsets.UTF_8;
import com.google.common.base.Function;
import com.google.common.base.Joiner;
@ -26,13 +25,10 @@ import com.google.common.base.Supplier;
import com.google.common.collect.FluentIterable;
import com.google.common.collect.Iterables;
import com.google.common.collect.Ordering;
import com.google.common.io.Resources;
import google.registry.model.eppcommon.Address;
import google.registry.model.registrar.Registrar;
import google.registry.util.Idn;
import google.registry.xml.UtcDateTimeAdapter;
import java.io.IOException;
import java.net.URL;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
@ -42,9 +38,6 @@ import org.joda.time.DateTime;
/** Base class for responses to WHOIS queries. */
abstract class WhoisResponseImpl implements WhoisResponse {
/** Legal disclaimer that is appended to all WHOIS responses. */
private static final String DISCLAIMER = load("disclaimer.txt");
/** Field name for ICANN problem reporting URL appended to all WHOIS responses. */
private static final String ICANN_REPORTING_URL_FIELD =
"URL of the ICANN WHOIS Data Problem Reporting System";
@ -166,9 +159,9 @@ abstract class WhoisResponseImpl implements WhoisResponse {
}
/** Returns raw text that should be appended to the end of ALL WHOIS responses. */
E emitFooter() {
E emitFooter(String disclaimer) {
emitField(ICANN_REPORTING_URL_FIELD, ICANN_REPORTING_URL);
stringBuilder.append("\r\n").append(DISCLAIMER).append("\r\n");
stringBuilder.append("\r\n").append(disclaimer).append("\r\n");
return thisCastToDerived();
}
@ -199,16 +192,6 @@ abstract class WhoisResponseImpl implements WhoisResponse {
/** An emitter that needs no special logic. */
static class BasicEmitter extends Emitter<BasicEmitter> {}
/** Slurps UTF-8 file from jar, relative to this source file. */
private static String load(String relativeFilename) {
URL resource = Resources.getResource(WhoisResponseImpl.class, relativeFilename);
try {
return Resources.toString(resource, UTF_8).replaceAll("\r?\n", "\r\n").trim();
} catch (IOException e) {
throw new RuntimeException("Failed to slurp: " + relativeFilename, e);
}
}
/** Returns the registrar for this client id, or an empty registrar with null values. */
static Registrar getRegistrar(@Nullable String clientId) {
return Optional

View file

@ -18,6 +18,7 @@ import static google.registry.request.Action.Method.POST;
import static javax.servlet.http.HttpServletResponse.SC_OK;
import com.google.common.net.MediaType;
import google.registry.config.ConfigModule.Config;
import google.registry.request.Action;
import google.registry.request.Response;
import google.registry.util.Clock;
@ -57,6 +58,9 @@ public class WhoisServer implements Runnable {
@Inject Clock clock;
@Inject Reader input;
@Inject Response response;
@Inject
@Config("whoisDisclaimer")
String disclaimer;
@Inject WhoisServer() {}
@Override
@ -64,12 +68,13 @@ public class WhoisServer implements Runnable {
String responseText;
DateTime now = clock.nowUtc();
try {
responseText = new WhoisReader(input, now)
responseText =
new WhoisReader(input, now)
.readCommand()
.executeQuery(now)
.getPlainTextOutput(PREFER_UNICODE);
.getPlainTextOutput(PREFER_UNICODE, disclaimer);
} catch (WhoisException e) {
responseText = e.getPlainTextOutput(PREFER_UNICODE);
responseText = e.getPlainTextOutput(PREFER_UNICODE, disclaimer);
} catch (Throwable t) {
logger.severe(t, "WHOIS request crashed");
responseText = "Internal Server Error";

View file

@ -1,13 +0,0 @@
WHOIS information is provided by Charleston Road Registry Inc. (CRR) solely for
query-based, informational purposes. By querying our WHOIS database, you are
agreeing to comply with these terms
(http://www.registry.google/about/whois-disclaimer.html) so please read them
carefully. Any information provided is "as is" without any guarantee of
accuracy. You may not use such information to (a) allow, enable, or otherwise
support the transmission of mass unsolicited, commercial advertising or
solicitations; (b) enable high volume, automated, electronic processes that
access the systems of CRR or any ICANN-Accredited Registrar, except as
reasonably necessary to register domain names or modify existing registrations;
or (c) engage in or support unlawful behavior. CRR reserves the right to
restrict or deny your access to the Whois database, and may modify these terms
at any time.

View file

@ -239,7 +239,7 @@ public class DomainWhoisResponseTest {
public void getPlainTextOutputTest() {
DomainWhoisResponse domainWhoisResponse =
new DomainWhoisResponse(domainResource, clock.nowUtc());
assertThat(domainWhoisResponse.getPlainTextOutput(false))
assertThat(domainWhoisResponse.getPlainTextOutput(false, "Doodle Disclaimer"))
.isEqualTo(loadWhoisTestFile("whois_domain.txt"));
}
@ -248,6 +248,7 @@ public class DomainWhoisResponseTest {
DomainWhoisResponse domainWhoisResponse = new DomainWhoisResponse(
domainResource.asBuilder().setStatusValues(null).build(),
clock.nowUtc());
assertThat(domainWhoisResponse.getPlainTextOutput(false)).contains("Domain Status: ok");
assertThat(domainWhoisResponse.getPlainTextOutput(false, "Doodle Disclaimer"))
.contains("Domain Status: ok");
}
}

View file

@ -81,7 +81,7 @@ public class NameserverWhoisResponseTest {
public void getTextOutputTest() {
NameserverWhoisResponse nameserverWhoisResponse =
new NameserverWhoisResponse(hostResource1, clock.nowUtc());
assertThat(nameserverWhoisResponse.getPlainTextOutput(false))
assertThat(nameserverWhoisResponse.getPlainTextOutput(false, "Doodle Disclaimer"))
.isEqualTo(loadWhoisTestFile("whois_nameserver.txt"));
}
@ -89,7 +89,7 @@ public class NameserverWhoisResponseTest {
public void getMultipleNameserversResponse() {
NameserverWhoisResponse nameserverWhoisResponse =
new NameserverWhoisResponse(ImmutableList.of(hostResource1, hostResource2), clock.nowUtc());
assertThat(nameserverWhoisResponse.getPlainTextOutput(false))
assertThat(nameserverWhoisResponse.getPlainTextOutput(false, "Doodle Disclaimer"))
.isEqualTo(loadWhoisTestFile("whois_multiple_nameservers.txt"));
}
}

View file

@ -113,7 +113,7 @@ public class RegistrarWhoisResponseTest {
RegistrarWhoisResponse registrarWhoisResponse =
new RegistrarWhoisResponse(registrar, clock.nowUtc());
assertThat(registrarWhoisResponse.getPlainTextOutput(false))
assertThat(registrarWhoisResponse.getPlainTextOutput(false, "Doodle Disclaimer"))
.isEqualTo(loadWhoisTestFile("whois_registrar.txt"));
}
@ -129,6 +129,6 @@ public class RegistrarWhoisResponseTest {
RegistrarWhoisResponse registrarWhoisResponse =
new RegistrarWhoisResponse(registrar, clock.nowUtc());
// Just make sure this doesn't NPE.
registrarWhoisResponse.getPlainTextOutput(false);
registrarWhoisResponse.getPlainTextOutput(false, "Doodle Disclaimer");
}
}

View file

@ -70,6 +70,7 @@ public class WhoisHttpServerTest {
result.expires = Duration.standardHours(1);
result.requestPath = WhoisHttpServer.PATH + pathInfo;
result.response = response;
result.disclaimer = "Doodle Disclaimer";
return result;
}

View file

@ -66,6 +66,7 @@ public class WhoisServerTest {
result.clock = clock;
result.input = new StringReader(input);
result.response = response;
result.disclaimer = "Doodle Disclaimer";
return result;
}

View file

@ -61,16 +61,4 @@ For more information on Whois status codes, please visit https://icann.org/epp
URL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/
WHOIS information is provided by Charleston Road Registry Inc. (CRR) solely for
query-based, informational purposes. By querying our WHOIS database, you are
agreeing to comply with these terms
(http://www.registry.google/about/whois-disclaimer.html) so please read them
carefully. Any information provided is "as is" without any guarantee of
accuracy. You may not use such information to (a) allow, enable, or otherwise
support the transmission of mass unsolicited, commercial advertising or
solicitations; (b) enable high volume, automated, electronic processes that
access the systems of CRR or any ICANN-Accredited Registrar, except as
reasonably necessary to register domain names or modify existing registrations;
or (c) engage in or support unlawful behavior. CRR reserves the right to
restrict or deny your access to the Whois database, and may modify these terms
at any time.
Doodle Disclaimer

View file

@ -15,16 +15,4 @@ Referral URL: http://www.referral.example/path
URL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/
WHOIS information is provided by Charleston Road Registry Inc. (CRR) solely for
query-based, informational purposes. By querying our WHOIS database, you are
agreeing to comply with these terms
(http://www.registry.google/about/whois-disclaimer.html) so please read them
carefully. Any information provided is "as is" without any guarantee of
accuracy. You may not use such information to (a) allow, enable, or otherwise
support the transmission of mass unsolicited, commercial advertising or
solicitations; (b) enable high volume, automated, electronic processes that
access the systems of CRR or any ICANN-Accredited Registrar, except as
reasonably necessary to register domain names or modify existing registrations;
or (c) engage in or support unlawful behavior. CRR reserves the right to
restrict or deny your access to the Whois database, and may modify these terms
at any time.
Doodle Disclaimer

View file

@ -8,16 +8,4 @@ Referral URL: http://www.referral.example/path
URL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/
WHOIS information is provided by Charleston Road Registry Inc. (CRR) solely for
query-based, informational purposes. By querying our WHOIS database, you are
agreeing to comply with these terms
(http://www.registry.google/about/whois-disclaimer.html) so please read them
carefully. Any information provided is "as is" without any guarantee of
accuracy. You may not use such information to (a) allow, enable, or otherwise
support the transmission of mass unsolicited, commercial advertising or
solicitations; (b) enable high volume, automated, electronic processes that
access the systems of CRR or any ICANN-Accredited Registrar, except as
reasonably necessary to register domain names or modify existing registrations;
or (c) engage in or support unlawful behavior. CRR reserves the right to
restrict or deny your access to the Whois database, and may modify these terms
at any time.
Doodle Disclaimer

View file

@ -25,16 +25,4 @@ Email: johngeek@example-registrar.tld
URL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/
WHOIS information is provided by Charleston Road Registry Inc. (CRR) solely for
query-based, informational purposes. By querying our WHOIS database, you are
agreeing to comply with these terms
(http://www.registry.google/about/whois-disclaimer.html) so please read them
carefully. Any information provided is "as is" without any guarantee of
accuracy. You may not use such information to (a) allow, enable, or otherwise
support the transmission of mass unsolicited, commercial advertising or
solicitations; (b) enable high volume, automated, electronic processes that
access the systems of CRR or any ICANN-Accredited Registrar, except as
reasonably necessary to register domain names or modify existing registrations;
or (c) engage in or support unlawful behavior. CRR reserves the right to
restrict or deny your access to the Whois database, and may modify these terms
at any time.
Doodle Disclaimer

View file

@ -59,16 +59,4 @@ For more information on Whois status codes, please visit https://icann.org/epp
URL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/
WHOIS information is provided by Charleston Road Registry Inc. (CRR) solely for
query-based, informational purposes. By querying our WHOIS database, you are
agreeing to comply with these terms
(http://www.registry.google/about/whois-disclaimer.html) so please read them
carefully. Any information provided is "as is" without any guarantee of
accuracy. You may not use such information to (a) allow, enable, or otherwise
support the transmission of mass unsolicited, commercial advertising or
solicitations; (b) enable high volume, automated, electronic processes that
access the systems of CRR or any ICANN-Accredited Registrar, except as
reasonably necessary to register domain names or modify existing registrations;
or (c) engage in or support unlawful behavior. CRR reserves the right to
restrict or deny your access to the Whois database, and may modify these terms
at any time.
Doodle Disclaimer

View file

@ -3,16 +3,4 @@ Domain not found.
URL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/
WHOIS information is provided by Charleston Road Registry Inc. (CRR) solely for
query-based, informational purposes. By querying our WHOIS database, you are
agreeing to comply with these terms
(http://www.registry.google/about/whois-disclaimer.html) so please read them
carefully. Any information provided is "as is" without any guarantee of
accuracy. You may not use such information to (a) allow, enable, or otherwise
support the transmission of mass unsolicited, commercial advertising or
solicitations; (b) enable high volume, automated, electronic processes that
access the systems of CRR or any ICANN-Accredited Registrar, except as
reasonably necessary to register domain names or modify existing registrations;
or (c) engage in or support unlawful behavior. CRR reserves the right to
restrict or deny your access to the Whois database, and may modify these terms
at any time.
Doodle Disclaimer

View file

@ -59,16 +59,4 @@ For more information on Whois status codes, please visit https://icann.org/epp
URL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/
WHOIS information is provided by Charleston Road Registry Inc. (CRR) solely for
query-based, informational purposes. By querying our WHOIS database, you are
agreeing to comply with these terms
(http://www.registry.google/about/whois-disclaimer.html) so please read them
carefully. Any information provided is "as is" without any guarantee of
accuracy. You may not use such information to (a) allow, enable, or otherwise
support the transmission of mass unsolicited, commercial advertising or
solicitations; (b) enable high volume, automated, electronic processes that
access the systems of CRR or any ICANN-Accredited Registrar, except as
reasonably necessary to register domain names or modify existing registrations;
or (c) engage in or support unlawful behavior. CRR reserves the right to
restrict or deny your access to the Whois database, and may modify these terms
at any time.
Doodle Disclaimer

View file

@ -59,16 +59,4 @@ For more information on Whois status codes, please visit https://icann.org/epp
URL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/
WHOIS information is provided by Charleston Road Registry Inc. (CRR) solely for
query-based, informational purposes. By querying our WHOIS database, you are
agreeing to comply with these terms
(http://www.registry.google/about/whois-disclaimer.html) so please read them
carefully. Any information provided is "as is" without any guarantee of
accuracy. You may not use such information to (a) allow, enable, or otherwise
support the transmission of mass unsolicited, commercial advertising or
solicitations; (b) enable high volume, automated, electronic processes that
access the systems of CRR or any ICANN-Accredited Registrar, except as
reasonably necessary to register domain names or modify existing registrations;
or (c) engage in or support unlawful behavior. CRR reserves the right to
restrict or deny your access to the Whois database, and may modify these terms
at any time.
Doodle Disclaimer

View file

@ -3,16 +3,4 @@ No nameservers found.
URL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/
WHOIS information is provided by Charleston Road Registry Inc. (CRR) solely for
query-based, informational purposes. By querying our WHOIS database, you are
agreeing to comply with these terms
(http://www.registry.google/about/whois-disclaimer.html) so please read them
carefully. Any information provided is "as is" without any guarantee of
accuracy. You may not use such information to (a) allow, enable, or otherwise
support the transmission of mass unsolicited, commercial advertising or
solicitations; (b) enable high volume, automated, electronic processes that
access the systems of CRR or any ICANN-Accredited Registrar, except as
reasonably necessary to register domain names or modify existing registrations;
or (c) engage in or support unlawful behavior. CRR reserves the right to
restrict or deny your access to the Whois database, and may modify these terms
at any time.
Doodle Disclaimer

View file

@ -3,16 +3,4 @@ Malformed path query.
URL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/
WHOIS information is provided by Charleston Road Registry Inc. (CRR) solely for
query-based, informational purposes. By querying our WHOIS database, you are
agreeing to comply with these terms
(http://www.registry.google/about/whois-disclaimer.html) so please read them
carefully. Any information provided is "as is" without any guarantee of
accuracy. You may not use such information to (a) allow, enable, or otherwise
support the transmission of mass unsolicited, commercial advertising or
solicitations; (b) enable high volume, automated, electronic processes that
access the systems of CRR or any ICANN-Accredited Registrar, except as
reasonably necessary to register domain names or modify existing registrations;
or (c) engage in or support unlawful behavior. CRR reserves the right to
restrict or deny your access to the Whois database, and may modify these terms
at any time.
Doodle Disclaimer

View file

@ -7,16 +7,4 @@ Referral URL: http://www.referral.example/path
URL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/
WHOIS information is provided by Charleston Road Registry Inc. (CRR) solely for
query-based, informational purposes. By querying our WHOIS database, you are
agreeing to comply with these terms
(http://www.registry.google/about/whois-disclaimer.html) so please read them
carefully. Any information provided is "as is" without any guarantee of
accuracy. You may not use such information to (a) allow, enable, or otherwise
support the transmission of mass unsolicited, commercial advertising or
solicitations; (b) enable high volume, automated, electronic processes that
access the systems of CRR or any ICANN-Accredited Registrar, except as
reasonably necessary to register domain names or modify existing registrations;
or (c) engage in or support unlawful behavior. CRR reserves the right to
restrict or deny your access to the Whois database, and may modify these terms
at any time.
Doodle Disclaimer

View file

@ -3,16 +3,4 @@ Nameserver not found.
URL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/
WHOIS information is provided by Charleston Road Registry Inc. (CRR) solely for
query-based, informational purposes. By querying our WHOIS database, you are
agreeing to comply with these terms
(http://www.registry.google/about/whois-disclaimer.html) so please read them
carefully. Any information provided is "as is" without any guarantee of
accuracy. You may not use such information to (a) allow, enable, or otherwise
support the transmission of mass unsolicited, commercial advertising or
solicitations; (b) enable high volume, automated, electronic processes that
access the systems of CRR or any ICANN-Accredited Registrar, except as
reasonably necessary to register domain names or modify existing registrations;
or (c) engage in or support unlawful behavior. CRR reserves the right to
restrict or deny your access to the Whois database, and may modify these terms
at any time.
Doodle Disclaimer

View file

@ -3,16 +3,4 @@ No WHOIS command specified.
URL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/
WHOIS information is provided by Charleston Road Registry Inc. (CRR) solely for
query-based, informational purposes. By querying our WHOIS database, you are
agreeing to comply with these terms
(http://www.registry.google/about/whois-disclaimer.html) so please read them
carefully. Any information provided is "as is" without any guarantee of
accuracy. You may not use such information to (a) allow, enable, or otherwise
support the transmission of mass unsolicited, commercial advertising or
solicitations; (b) enable high volume, automated, electronic processes that
access the systems of CRR or any ICANN-Accredited Registrar, except as
reasonably necessary to register domain names or modify existing registrations;
or (c) engage in or support unlawful behavior. CRR reserves the right to
restrict or deny your access to the Whois database, and may modify these terms
at any time.
Doodle Disclaimer

View file

@ -21,16 +21,4 @@ Email: johndoe@example.com
URL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/
WHOIS information is provided by Charleston Road Registry Inc. (CRR) solely for
query-based, informational purposes. By querying our WHOIS database, you are
agreeing to comply with these terms
(http://www.registry.google/about/whois-disclaimer.html) so please read them
carefully. Any information provided is "as is" without any guarantee of
accuracy. You may not use such information to (a) allow, enable, or otherwise
support the transmission of mass unsolicited, commercial advertising or
solicitations; (b) enable high volume, automated, electronic processes that
access the systems of CRR or any ICANN-Accredited Registrar, except as
reasonably necessary to register domain names or modify existing registrations;
or (c) engage in or support unlawful behavior. CRR reserves the right to
restrict or deny your access to the Whois database, and may modify these terms
at any time.
Doodle Disclaimer

View file

@ -3,16 +3,4 @@ No registrar found.
URL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/
WHOIS information is provided by Charleston Road Registry Inc. (CRR) solely for
query-based, informational purposes. By querying our WHOIS database, you are
agreeing to comply with these terms
(http://www.registry.google/about/whois-disclaimer.html) so please read them
carefully. Any information provided is "as is" without any guarantee of
accuracy. You may not use such information to (a) allow, enable, or otherwise
support the transmission of mass unsolicited, commercial advertising or
solicitations; (b) enable high volume, automated, electronic processes that
access the systems of CRR or any ICANN-Accredited Registrar, except as
reasonably necessary to register domain names or modify existing registrations;
or (c) engage in or support unlawful behavior. CRR reserves the right to
restrict or deny your access to the Whois database, and may modify these terms
at any time.
Doodle Disclaimer