mirror of
https://github.com/google/nomulus.git
synced 2025-04-30 12:07:51 +02:00
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:
parent
2c9567e183
commit
e82a40a2fb
34 changed files with 149 additions and 310 deletions
|
@ -28,7 +28,26 @@ 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;
|
||||||
|
|
||||||
/** 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
|
@Module
|
||||||
public final class ConfigModule {
|
public final class ConfigModule {
|
||||||
|
|
||||||
|
@ -563,4 +582,27 @@ public final class ConfigModule {
|
||||||
return "tzcyzvm3mn7zkdnx";
|
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";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -243,4 +243,6 @@ public interface RegistryConfig {
|
||||||
* the logs from filling up with unnecessarily failures.
|
* the logs from filling up with unnecessarily failures.
|
||||||
*/
|
*/
|
||||||
public Duration getAsyncFlowFailureBackoff();
|
public Duration getAsyncFlowFailureBackoff();
|
||||||
|
|
||||||
|
// XXX: Please consider using ConfigModule instead of adding new methods to this file.
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,8 +20,6 @@ import com.google.common.base.Joiner;
|
||||||
import google.registry.tools.Command.GtechCommand;
|
import google.registry.tools.Command.GtechCommand;
|
||||||
import google.registry.tools.Command.RemoteApiCommand;
|
import google.registry.tools.Command.RemoteApiCommand;
|
||||||
import google.registry.whois.Whois;
|
import google.registry.whois.Whois;
|
||||||
import google.registry.whois.WhoisException;
|
|
||||||
import google.registry.whois.WhoisResponse;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
@ -44,12 +42,6 @@ final class WhoisQueryCommand implements RemoteApiCommand, GtechCommand {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
WhoisResponse response;
|
System.out.println(whois.lookup(Joiner.on(' ').join(mainParameters), unicode));
|
||||||
try {
|
|
||||||
response = whois.lookup(Joiner.on(' ').join(mainParameters));
|
|
||||||
} catch (WhoisException e) {
|
|
||||||
response = e;
|
|
||||||
}
|
|
||||||
System.out.println(response.getPlainTextOutput(unicode));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,6 @@ licenses(["notice"]) # Apache 2.0
|
||||||
java_library(
|
java_library(
|
||||||
name = "whois",
|
name = "whois",
|
||||||
srcs = glob(["*.java"]),
|
srcs = glob(["*.java"]),
|
||||||
resources = ["disclaimer.txt"],
|
|
||||||
visibility = ["//visibility:public"],
|
visibility = ["//visibility:public"],
|
||||||
deps = [
|
deps = [
|
||||||
"//java/com/google/common/annotations",
|
"//java/com/google/common/annotations",
|
||||||
|
|
|
@ -61,39 +61,41 @@ final class DomainWhoisResponse extends WhoisResponseImpl {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getPlainTextOutput(final boolean preferUnicode) {
|
public String getPlainTextOutput(final boolean preferUnicode, String disclaimer) {
|
||||||
Registrar registrar = getRegistrar(domain.getCurrentSponsorClientId());
|
Registrar registrar = getRegistrar(domain.getCurrentSponsorClientId());
|
||||||
return new DomainEmitter()
|
return new DomainEmitter()
|
||||||
.emitField("Domain Name",
|
.emitField(
|
||||||
maybeFormatHostname(domain.getFullyQualifiedDomainName(), preferUnicode))
|
"Domain Name", maybeFormatHostname(domain.getFullyQualifiedDomainName(), preferUnicode))
|
||||||
.emitField("Domain ID", domain.getRepoId())
|
.emitField("Domain ID", domain.getRepoId())
|
||||||
.emitField("WHOIS Server", registrar.getWhoisServer())
|
.emitField("WHOIS Server", registrar.getWhoisServer())
|
||||||
.emitField("Referral URL", registrar.getReferralUrl())
|
.emitField("Referral URL", registrar.getReferralUrl())
|
||||||
.emitField("Updated Date", getFormattedString(domain.getLastEppUpdateTime()))
|
.emitField("Updated Date", getFormattedString(domain.getLastEppUpdateTime()))
|
||||||
.emitField("Creation Date", getFormattedString(domain.getCreationTime()))
|
.emitField("Creation Date", getFormattedString(domain.getCreationTime()))
|
||||||
.emitField("Registry Expiry Date",
|
.emitField(
|
||||||
getFormattedString(domain.getRegistrationExpirationTime()))
|
"Registry Expiry Date", getFormattedString(domain.getRegistrationExpirationTime()))
|
||||||
.emitField("Sponsoring Registrar", registrar.getRegistrarName())
|
.emitField("Sponsoring Registrar", registrar.getRegistrarName())
|
||||||
.emitField("Sponsoring Registrar IANA ID",
|
.emitField(
|
||||||
registrar.getIanaIdentifier() == null ? null : registrar.getIanaIdentifier().toString())
|
"Sponsoring Registrar IANA ID",
|
||||||
.emitStatusValues(domain.getStatusValues(), domain.getGracePeriods())
|
registrar.getIanaIdentifier() == null ? null : registrar.getIanaIdentifier().toString())
|
||||||
.emitContact("Registrant", domain.getRegistrant(), preferUnicode)
|
.emitStatusValues(domain.getStatusValues(), domain.getGracePeriods())
|
||||||
.emitContact("Admin", getContactReference(Type.ADMIN), preferUnicode)
|
.emitContact("Registrant", domain.getRegistrant(), preferUnicode)
|
||||||
.emitContact("Tech", getContactReference(Type.TECH), preferUnicode)
|
.emitContact("Admin", getContactReference(Type.ADMIN), preferUnicode)
|
||||||
.emitContact("Billing", getContactReference(Type.BILLING), preferUnicode)
|
.emitContact("Tech", getContactReference(Type.TECH), preferUnicode)
|
||||||
.emitSet(
|
.emitContact("Billing", getContactReference(Type.BILLING), preferUnicode)
|
||||||
"Name Server",
|
.emitSet(
|
||||||
domain.loadNameserverFullyQualifiedHostNames(),
|
"Name Server",
|
||||||
new Function<String, String>() {
|
domain.loadNameserverFullyQualifiedHostNames(),
|
||||||
@Override
|
new Function<String, String>() {
|
||||||
public String apply(String hostName) {
|
@Override
|
||||||
return maybeFormatHostname(hostName, preferUnicode);
|
public String apply(String hostName) {
|
||||||
}})
|
return maybeFormatHostname(hostName, preferUnicode);
|
||||||
.emitField("DNSSEC", isNullOrEmpty(domain.getDsData()) ? "unsigned" : "signedDelegation")
|
}
|
||||||
.emitLastUpdated(getTimestamp())
|
})
|
||||||
.emitAwipMessage()
|
.emitField("DNSSEC", isNullOrEmpty(domain.getDsData()) ? "unsigned" : "signedDelegation")
|
||||||
.emitFooter()
|
.emitLastUpdated(getTimestamp())
|
||||||
.toString();
|
.emitAwipMessage()
|
||||||
|
.emitFooter(disclaimer)
|
||||||
|
.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns the contact of the given type, or null if it does not exist. */
|
/** Returns the contact of the given type, or null if it does not exist. */
|
||||||
|
|
|
@ -42,7 +42,7 @@ final class NameserverWhoisResponse extends WhoisResponseImpl {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getPlainTextOutput(boolean preferUnicode) {
|
public String getPlainTextOutput(boolean preferUnicode, String disclaimer) {
|
||||||
BasicEmitter emitter = new BasicEmitter();
|
BasicEmitter emitter = new BasicEmitter();
|
||||||
for (int i = 0; i < hosts.size(); i++) {
|
for (int i = 0; i < hosts.size(); i++) {
|
||||||
HostResource host = hosts.get(i);
|
HostResource host = hosts.get(i);
|
||||||
|
@ -63,6 +63,6 @@ final class NameserverWhoisResponse extends WhoisResponseImpl {
|
||||||
emitter.emitNewline();
|
emitter.emitNewline();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return emitter.emitLastUpdated(getTimestamp()).emitFooter().toString();
|
return emitter.emitLastUpdated(getTimestamp()).emitFooter(disclaimer).toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,29 +43,29 @@ class RegistrarWhoisResponse extends WhoisResponseImpl {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getPlainTextOutput(boolean preferUnicode) {
|
public String getPlainTextOutput(boolean preferUnicode, String disclaimer) {
|
||||||
Set<RegistrarContact> contacts = registrar.getContacts();
|
Set<RegistrarContact> contacts = registrar.getContacts();
|
||||||
return new RegistrarEmitter()
|
return new RegistrarEmitter()
|
||||||
.emitField("Registrar Name", registrar.getRegistrarName())
|
.emitField("Registrar Name", registrar.getRegistrarName())
|
||||||
.emitAddress(null, chooseByUnicodePreference(
|
.emitAddress(
|
||||||
preferUnicode,
|
null,
|
||||||
registrar.getLocalizedAddress(),
|
chooseByUnicodePreference(
|
||||||
registrar.getInternationalizedAddress()))
|
preferUnicode,
|
||||||
|
registrar.getLocalizedAddress(),
|
||||||
|
registrar.getInternationalizedAddress()))
|
||||||
.emitPhonesAndEmail(
|
.emitPhonesAndEmail(
|
||||||
registrar.getPhoneNumber(),
|
registrar.getPhoneNumber(), registrar.getFaxNumber(), registrar.getEmailAddress())
|
||||||
registrar.getFaxNumber(),
|
|
||||||
registrar.getEmailAddress())
|
|
||||||
.emitField("WHOIS Server", registrar.getWhoisServer())
|
.emitField("WHOIS Server", registrar.getWhoisServer())
|
||||||
.emitField("Referral URL", registrar.getReferralUrl())
|
.emitField("Referral URL", registrar.getReferralUrl())
|
||||||
.emitRegistrarContacts("Admin", contacts, AdminOrTech.ADMIN)
|
.emitRegistrarContacts("Admin", contacts, AdminOrTech.ADMIN)
|
||||||
.emitRegistrarContacts("Technical", contacts, AdminOrTech.TECH)
|
.emitRegistrarContacts("Technical", contacts, AdminOrTech.TECH)
|
||||||
.emitLastUpdated(getTimestamp())
|
.emitLastUpdated(getTimestamp())
|
||||||
.emitFooter()
|
.emitFooter(disclaimer)
|
||||||
.toString();
|
.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** An emitter with logic for registrars. */
|
/** 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. */
|
/** Emits the registrar contact of the given type. */
|
||||||
RegistrarEmitter emitRegistrarContacts(
|
RegistrarEmitter emitRegistrarContacts(
|
||||||
String contactLabel,
|
String contactLabel,
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
|
|
||||||
package google.registry.whois;
|
package google.registry.whois;
|
||||||
|
|
||||||
|
import google.registry.config.ConfigModule.Config;
|
||||||
import google.registry.util.Clock;
|
import google.registry.util.Clock;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.StringReader;
|
import java.io.StringReader;
|
||||||
|
@ -24,23 +25,24 @@ import org.joda.time.DateTime;
|
||||||
public final class Whois {
|
public final class Whois {
|
||||||
|
|
||||||
private final Clock clock;
|
private final Clock clock;
|
||||||
|
private final String disclaimer;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public Whois(Clock clock) {
|
public Whois(Clock clock, @Config("whoisDisclaimer") String disclaimer) {
|
||||||
this.clock = clock;
|
this.clock = clock;
|
||||||
|
this.disclaimer = disclaimer;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/** Performs a WHOIS lookup on a plaintext query string. */
|
||||||
* Performs a WHOIS lookup on a plaintext query string.
|
public String lookup(String query, boolean preferUnicode) {
|
||||||
*
|
|
||||||
* @throws WhoisException if the record is not found or the query is invalid
|
|
||||||
*/
|
|
||||||
public WhoisResponse lookup(String query) throws WhoisException {
|
|
||||||
DateTime now = clock.nowUtc();
|
DateTime now = clock.nowUtc();
|
||||||
try {
|
try {
|
||||||
return new WhoisReader(new StringReader(query), now)
|
return new WhoisReader(new StringReader(query), now)
|
||||||
.readCommand()
|
.readCommand()
|
||||||
.executeQuery(now);
|
.executeQuery(now)
|
||||||
|
.getPlainTextOutput(preferUnicode, disclaimer);
|
||||||
|
} catch (WhoisException e) {
|
||||||
|
return e.getPlainTextOutput(preferUnicode, disclaimer);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,11 +60,11 @@ public final class WhoisException extends Exception implements WhoisResponse {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getPlainTextOutput(boolean preferUnicode) {
|
public String getPlainTextOutput(boolean preferUnicode, String disclaimer) {
|
||||||
return new WhoisResponseImpl.BasicEmitter()
|
return new WhoisResponseImpl.BasicEmitter()
|
||||||
.emitRawLine(getMessage())
|
.emitRawLine(getMessage())
|
||||||
.emitLastUpdated(getTimestamp())
|
.emitLastUpdated(getTimestamp())
|
||||||
.emitFooter()
|
.emitFooter(disclaimer)
|
||||||
.toString();
|
.toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -130,6 +130,7 @@ public final class WhoisHttpServer implements Runnable {
|
||||||
|
|
||||||
@Inject Clock clock;
|
@Inject Clock clock;
|
||||||
@Inject Response response;
|
@Inject Response response;
|
||||||
|
@Inject @Config("whoisDisclaimer") String disclaimer;
|
||||||
@Inject @Config("whoisHttpExpires") Duration expires;
|
@Inject @Config("whoisHttpExpires") Duration expires;
|
||||||
@Inject @RequestPath String requestPath;
|
@Inject @RequestPath String requestPath;
|
||||||
@Inject WhoisHttpServer() {}
|
@Inject WhoisHttpServer() {}
|
||||||
|
@ -159,7 +160,7 @@ public final class WhoisHttpServer implements Runnable {
|
||||||
response.setHeader(ACCESS_CONTROL_ALLOW_ORIGIN, CORS_ALLOW_ORIGIN);
|
response.setHeader(ACCESS_CONTROL_ALLOW_ORIGIN, CORS_ALLOW_ORIGIN);
|
||||||
response.setHeader(X_CONTENT_TYPE_OPTIONS, X_CONTENT_NO_SNIFF);
|
response.setHeader(X_CONTENT_TYPE_OPTIONS, X_CONTENT_NO_SNIFF);
|
||||||
response.setContentType(PLAIN_TEXT_UTF_8);
|
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. */
|
/** Removes {@code %xx} escape codes from request path components. */
|
||||||
|
|
|
@ -22,13 +22,14 @@ public interface WhoisResponse {
|
||||||
/**
|
/**
|
||||||
* Returns a plain text WHOIS response.
|
* Returns a plain text WHOIS response.
|
||||||
*
|
*
|
||||||
* @param preferUnicode if {@code false} will cause the output to be converted to ASCII
|
* @param preferUnicode if {@code false} will cause the output to be converted to ASCII whenever
|
||||||
* whenever possible; for example, converting IDN hostname labels to punycode. However
|
* possible; for example, converting IDN hostname labels to punycode. However certain things
|
||||||
* certain things (like a domain registrant name with accent marks) will be returned
|
* (like a domain registrant name with accent marks) will be returned "as is". If the WHOIS
|
||||||
* "as is". If the WHOIS client has told us they're able to receive UTF-8 (such as with
|
* client has told us they're able to receive UTF-8 (such as with HTTP) then this field should
|
||||||
* HTTP) then this field should be set to {@code true}.
|
* 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.
|
* Returns the time at which this response was created.
|
||||||
|
|
|
@ -17,7 +17,6 @@ package google.registry.whois;
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
import static com.google.common.base.Strings.isNullOrEmpty;
|
import static com.google.common.base.Strings.isNullOrEmpty;
|
||||||
import static com.google.common.html.HtmlEscapers.htmlEscaper;
|
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.Function;
|
||||||
import com.google.common.base.Joiner;
|
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.FluentIterable;
|
||||||
import com.google.common.collect.Iterables;
|
import com.google.common.collect.Iterables;
|
||||||
import com.google.common.collect.Ordering;
|
import com.google.common.collect.Ordering;
|
||||||
import com.google.common.io.Resources;
|
|
||||||
import google.registry.model.eppcommon.Address;
|
import google.registry.model.eppcommon.Address;
|
||||||
import google.registry.model.registrar.Registrar;
|
import google.registry.model.registrar.Registrar;
|
||||||
import google.registry.util.Idn;
|
import google.registry.util.Idn;
|
||||||
import google.registry.xml.UtcDateTimeAdapter;
|
import google.registry.xml.UtcDateTimeAdapter;
|
||||||
import java.io.IOException;
|
|
||||||
import java.net.URL;
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
@ -42,9 +38,6 @@ import org.joda.time.DateTime;
|
||||||
/** Base class for responses to WHOIS queries. */
|
/** Base class for responses to WHOIS queries. */
|
||||||
abstract class WhoisResponseImpl implements WhoisResponse {
|
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. */
|
/** Field name for ICANN problem reporting URL appended to all WHOIS responses. */
|
||||||
private static final String ICANN_REPORTING_URL_FIELD =
|
private static final String ICANN_REPORTING_URL_FIELD =
|
||||||
"URL of the ICANN WHOIS Data Problem Reporting System";
|
"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. */
|
/** 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);
|
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();
|
return thisCastToDerived();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -199,16 +192,6 @@ abstract class WhoisResponseImpl implements WhoisResponse {
|
||||||
/** An emitter that needs no special logic. */
|
/** An emitter that needs no special logic. */
|
||||||
static class BasicEmitter extends Emitter<BasicEmitter> {}
|
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. */
|
/** Returns the registrar for this client id, or an empty registrar with null values. */
|
||||||
static Registrar getRegistrar(@Nullable String clientId) {
|
static Registrar getRegistrar(@Nullable String clientId) {
|
||||||
return Optional
|
return Optional
|
||||||
|
|
|
@ -18,6 +18,7 @@ import static google.registry.request.Action.Method.POST;
|
||||||
import static javax.servlet.http.HttpServletResponse.SC_OK;
|
import static javax.servlet.http.HttpServletResponse.SC_OK;
|
||||||
|
|
||||||
import com.google.common.net.MediaType;
|
import com.google.common.net.MediaType;
|
||||||
|
import google.registry.config.ConfigModule.Config;
|
||||||
import google.registry.request.Action;
|
import google.registry.request.Action;
|
||||||
import google.registry.request.Response;
|
import google.registry.request.Response;
|
||||||
import google.registry.util.Clock;
|
import google.registry.util.Clock;
|
||||||
|
@ -57,6 +58,9 @@ public class WhoisServer implements Runnable {
|
||||||
@Inject Clock clock;
|
@Inject Clock clock;
|
||||||
@Inject Reader input;
|
@Inject Reader input;
|
||||||
@Inject Response response;
|
@Inject Response response;
|
||||||
|
@Inject
|
||||||
|
@Config("whoisDisclaimer")
|
||||||
|
String disclaimer;
|
||||||
@Inject WhoisServer() {}
|
@Inject WhoisServer() {}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -64,12 +68,13 @@ public class WhoisServer implements Runnable {
|
||||||
String responseText;
|
String responseText;
|
||||||
DateTime now = clock.nowUtc();
|
DateTime now = clock.nowUtc();
|
||||||
try {
|
try {
|
||||||
responseText = new WhoisReader(input, now)
|
responseText =
|
||||||
.readCommand()
|
new WhoisReader(input, now)
|
||||||
.executeQuery(now)
|
.readCommand()
|
||||||
.getPlainTextOutput(PREFER_UNICODE);
|
.executeQuery(now)
|
||||||
|
.getPlainTextOutput(PREFER_UNICODE, disclaimer);
|
||||||
} catch (WhoisException e) {
|
} catch (WhoisException e) {
|
||||||
responseText = e.getPlainTextOutput(PREFER_UNICODE);
|
responseText = e.getPlainTextOutput(PREFER_UNICODE, disclaimer);
|
||||||
} catch (Throwable t) {
|
} catch (Throwable t) {
|
||||||
logger.severe(t, "WHOIS request crashed");
|
logger.severe(t, "WHOIS request crashed");
|
||||||
responseText = "Internal Server Error";
|
responseText = "Internal Server Error";
|
||||||
|
|
|
@ -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.
|
|
|
@ -239,7 +239,7 @@ public class DomainWhoisResponseTest {
|
||||||
public void getPlainTextOutputTest() {
|
public void getPlainTextOutputTest() {
|
||||||
DomainWhoisResponse domainWhoisResponse =
|
DomainWhoisResponse domainWhoisResponse =
|
||||||
new DomainWhoisResponse(domainResource, clock.nowUtc());
|
new DomainWhoisResponse(domainResource, clock.nowUtc());
|
||||||
assertThat(domainWhoisResponse.getPlainTextOutput(false))
|
assertThat(domainWhoisResponse.getPlainTextOutput(false, "Doodle Disclaimer"))
|
||||||
.isEqualTo(loadWhoisTestFile("whois_domain.txt"));
|
.isEqualTo(loadWhoisTestFile("whois_domain.txt"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -248,6 +248,7 @@ public class DomainWhoisResponseTest {
|
||||||
DomainWhoisResponse domainWhoisResponse = new DomainWhoisResponse(
|
DomainWhoisResponse domainWhoisResponse = new DomainWhoisResponse(
|
||||||
domainResource.asBuilder().setStatusValues(null).build(),
|
domainResource.asBuilder().setStatusValues(null).build(),
|
||||||
clock.nowUtc());
|
clock.nowUtc());
|
||||||
assertThat(domainWhoisResponse.getPlainTextOutput(false)).contains("Domain Status: ok");
|
assertThat(domainWhoisResponse.getPlainTextOutput(false, "Doodle Disclaimer"))
|
||||||
|
.contains("Domain Status: ok");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -81,7 +81,7 @@ public class NameserverWhoisResponseTest {
|
||||||
public void getTextOutputTest() {
|
public void getTextOutputTest() {
|
||||||
NameserverWhoisResponse nameserverWhoisResponse =
|
NameserverWhoisResponse nameserverWhoisResponse =
|
||||||
new NameserverWhoisResponse(hostResource1, clock.nowUtc());
|
new NameserverWhoisResponse(hostResource1, clock.nowUtc());
|
||||||
assertThat(nameserverWhoisResponse.getPlainTextOutput(false))
|
assertThat(nameserverWhoisResponse.getPlainTextOutput(false, "Doodle Disclaimer"))
|
||||||
.isEqualTo(loadWhoisTestFile("whois_nameserver.txt"));
|
.isEqualTo(loadWhoisTestFile("whois_nameserver.txt"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ public class NameserverWhoisResponseTest {
|
||||||
public void getMultipleNameserversResponse() {
|
public void getMultipleNameserversResponse() {
|
||||||
NameserverWhoisResponse nameserverWhoisResponse =
|
NameserverWhoisResponse nameserverWhoisResponse =
|
||||||
new NameserverWhoisResponse(ImmutableList.of(hostResource1, hostResource2), clock.nowUtc());
|
new NameserverWhoisResponse(ImmutableList.of(hostResource1, hostResource2), clock.nowUtc());
|
||||||
assertThat(nameserverWhoisResponse.getPlainTextOutput(false))
|
assertThat(nameserverWhoisResponse.getPlainTextOutput(false, "Doodle Disclaimer"))
|
||||||
.isEqualTo(loadWhoisTestFile("whois_multiple_nameservers.txt"));
|
.isEqualTo(loadWhoisTestFile("whois_multiple_nameservers.txt"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -113,7 +113,7 @@ public class RegistrarWhoisResponseTest {
|
||||||
|
|
||||||
RegistrarWhoisResponse registrarWhoisResponse =
|
RegistrarWhoisResponse registrarWhoisResponse =
|
||||||
new RegistrarWhoisResponse(registrar, clock.nowUtc());
|
new RegistrarWhoisResponse(registrar, clock.nowUtc());
|
||||||
assertThat(registrarWhoisResponse.getPlainTextOutput(false))
|
assertThat(registrarWhoisResponse.getPlainTextOutput(false, "Doodle Disclaimer"))
|
||||||
.isEqualTo(loadWhoisTestFile("whois_registrar.txt"));
|
.isEqualTo(loadWhoisTestFile("whois_registrar.txt"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -129,6 +129,6 @@ public class RegistrarWhoisResponseTest {
|
||||||
RegistrarWhoisResponse registrarWhoisResponse =
|
RegistrarWhoisResponse registrarWhoisResponse =
|
||||||
new RegistrarWhoisResponse(registrar, clock.nowUtc());
|
new RegistrarWhoisResponse(registrar, clock.nowUtc());
|
||||||
// Just make sure this doesn't NPE.
|
// Just make sure this doesn't NPE.
|
||||||
registrarWhoisResponse.getPlainTextOutput(false);
|
registrarWhoisResponse.getPlainTextOutput(false, "Doodle Disclaimer");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,6 +70,7 @@ public class WhoisHttpServerTest {
|
||||||
result.expires = Duration.standardHours(1);
|
result.expires = Duration.standardHours(1);
|
||||||
result.requestPath = WhoisHttpServer.PATH + pathInfo;
|
result.requestPath = WhoisHttpServer.PATH + pathInfo;
|
||||||
result.response = response;
|
result.response = response;
|
||||||
|
result.disclaimer = "Doodle Disclaimer";
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -66,6 +66,7 @@ public class WhoisServerTest {
|
||||||
result.clock = clock;
|
result.clock = clock;
|
||||||
result.input = new StringReader(input);
|
result.input = new StringReader(input);
|
||||||
result.response = response;
|
result.response = response;
|
||||||
|
result.disclaimer = "Doodle Disclaimer";
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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/
|
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
|
Doodle Disclaimer
|
||||||
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.
|
|
||||||
|
|
|
@ -15,16 +15,4 @@ Referral URL: http://www.referral.example/path
|
||||||
|
|
||||||
URL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/
|
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
|
Doodle Disclaimer
|
||||||
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.
|
|
||||||
|
|
|
@ -8,16 +8,4 @@ Referral URL: http://www.referral.example/path
|
||||||
|
|
||||||
URL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/
|
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
|
Doodle Disclaimer
|
||||||
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.
|
|
||||||
|
|
|
@ -25,16 +25,4 @@ Email: johngeek@example-registrar.tld
|
||||||
|
|
||||||
URL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/
|
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
|
Doodle Disclaimer
|
||||||
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.
|
|
||||||
|
|
|
@ -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/
|
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
|
Doodle Disclaimer
|
||||||
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.
|
|
||||||
|
|
|
@ -3,16 +3,4 @@ Domain not found.
|
||||||
|
|
||||||
URL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/
|
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
|
Doodle Disclaimer
|
||||||
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.
|
|
||||||
|
|
|
@ -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/
|
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
|
Doodle Disclaimer
|
||||||
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.
|
|
||||||
|
|
|
@ -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/
|
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
|
Doodle Disclaimer
|
||||||
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.
|
|
||||||
|
|
|
@ -3,16 +3,4 @@ No nameservers found.
|
||||||
|
|
||||||
URL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/
|
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
|
Doodle Disclaimer
|
||||||
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.
|
|
||||||
|
|
|
@ -3,16 +3,4 @@ Malformed path query.
|
||||||
|
|
||||||
URL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/
|
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
|
Doodle Disclaimer
|
||||||
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.
|
|
||||||
|
|
|
@ -7,16 +7,4 @@ Referral URL: http://www.referral.example/path
|
||||||
|
|
||||||
URL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/
|
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
|
Doodle Disclaimer
|
||||||
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.
|
|
||||||
|
|
|
@ -3,16 +3,4 @@ Nameserver not found.
|
||||||
|
|
||||||
URL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/
|
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
|
Doodle Disclaimer
|
||||||
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.
|
|
||||||
|
|
|
@ -3,16 +3,4 @@ No WHOIS command specified.
|
||||||
|
|
||||||
URL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/
|
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
|
Doodle Disclaimer
|
||||||
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.
|
|
||||||
|
|
|
@ -21,16 +21,4 @@ Email: johndoe@example.com
|
||||||
|
|
||||||
URL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/
|
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
|
Doodle Disclaimer
|
||||||
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.
|
|
||||||
|
|
|
@ -3,16 +3,4 @@ No registrar found.
|
||||||
|
|
||||||
URL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/
|
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
|
Doodle Disclaimer
|
||||||
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.
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue