mirror of
https://github.com/google/nomulus
synced 2026-09-01 05:37:08 +00:00
Use custom whois message for bsa-blocked domain (#2241)
* Use custom whois message for bsa-blocked domain
This commit is contained in:
@@ -16,6 +16,7 @@ package google.registry.whois;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static com.google.common.truth.Truth8.assertThat;
|
||||
import static google.registry.bsa.persistence.BsaLabelTestingUtils.persistBsaLabel;
|
||||
import static google.registry.model.EppResourceUtils.loadByForeignKeyCached;
|
||||
import static google.registry.model.registrar.Registrar.State.ACTIVE;
|
||||
import static google.registry.model.registrar.Registrar.Type.PDT;
|
||||
@@ -61,6 +62,7 @@ import java.io.IOException;
|
||||
import java.io.Reader;
|
||||
import java.io.StringReader;
|
||||
import java.time.Duration;
|
||||
import java.util.Optional;
|
||||
import org.joda.time.DateTime;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
@@ -91,7 +93,8 @@ public class WhoisActionTest {
|
||||
whoisAction.input = new StringReader(input);
|
||||
whoisAction.response = response;
|
||||
whoisAction.whoisReader =
|
||||
new WhoisReader(WhoisCommandFactory.createCached(), "Please contact registrar");
|
||||
new WhoisReader(
|
||||
WhoisCommandFactory.createCached(), "Please contact registrar", "Blocked by BSA: %s");
|
||||
whoisAction.whoisMetrics = new WhoisMetrics();
|
||||
whoisAction.metricBuilder = WhoisMetric.builderForRequest(clock);
|
||||
whoisAction.disclaimer =
|
||||
@@ -164,6 +167,37 @@ public class WhoisActionTest {
|
||||
assertThat(response.getPayload()).isEqualTo(loadFile("whois_action_domain.txt"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testRun_domainQuery_registeredDomainUnaffectedByBsa() {
|
||||
persistResource(
|
||||
Tld.get("lol")
|
||||
.asBuilder()
|
||||
.setBsaEnrollStartTime(Optional.of(clock.nowUtc().minusDays(1)))
|
||||
.build());
|
||||
persistBsaLabel("cat", clock.nowUtc());
|
||||
|
||||
Registrar registrar = persistResource(makeRegistrar("evilregistrar", "Yes Virginia", ACTIVE));
|
||||
persistResource(makeDomainWithRegistrar(registrar));
|
||||
persistSimpleResources(makeRegistrarPocs(registrar));
|
||||
newWhoisAction("domain cat.lol\r\n").run();
|
||||
assertThat(response.getStatus()).isEqualTo(200);
|
||||
assertThat(response.getPayload()).isEqualTo(loadFile("whois_action_domain.txt"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testRun_domainQuery_unregisteredDomainShowBsaMessage() {
|
||||
persistResource(
|
||||
Tld.get("lol")
|
||||
.asBuilder()
|
||||
.setBsaEnrollStartTime(Optional.of(clock.nowUtc().minusDays(1)))
|
||||
.build());
|
||||
persistBsaLabel("cat", clock.nowUtc());
|
||||
|
||||
newWhoisAction("domain cat.lol\r\n").run();
|
||||
assertThat(response.getStatus()).isEqualTo(200);
|
||||
assertThat(response.getPayload()).isEqualTo(loadFile("whois_action_domain_blocked_by_bsa.txt"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testRun_domainAfterTransfer_hasUpdatedEppTimeAndClientId() {
|
||||
Registrar registrar = persistResource(makeRegistrar("TheRegistrar", "Yes Virginia", ACTIVE));
|
||||
|
||||
@@ -142,7 +142,8 @@ class WhoisCommandFactoryTest {
|
||||
void testNonCached_DomainLookupCommand() throws Exception {
|
||||
WhoisResponse response =
|
||||
noncachedFactory
|
||||
.domainLookup(InternetDomainName.from("example.tld"), true, "REDACTED")
|
||||
.domainLookup(
|
||||
InternetDomainName.from("example.tld"), true, "REDACTED", "Blocked by BSA")
|
||||
.executeQuery(clock.nowUtc());
|
||||
assertThat(response.getResponse(false, "").plainTextOutput())
|
||||
.contains("Registrar: The Registrar");
|
||||
@@ -156,7 +157,8 @@ class WhoisCommandFactoryTest {
|
||||
.build()));
|
||||
response =
|
||||
noncachedFactory
|
||||
.domainLookup(InternetDomainName.from("example.tld"), true, "REDACTED")
|
||||
.domainLookup(
|
||||
InternetDomainName.from("example.tld"), true, "REDACTED", "Blocked by BSA")
|
||||
.executeQuery(clock.nowUtc());
|
||||
assertThat(response.getResponse(false, "").plainTextOutput())
|
||||
.contains("Registrar: OtherRegistrar name");
|
||||
@@ -166,7 +168,7 @@ class WhoisCommandFactoryTest {
|
||||
void testCached_DomainLookupCommand() throws Exception {
|
||||
WhoisResponse response =
|
||||
cachedFactory
|
||||
.domainLookup(InternetDomainName.from("example.tld"), true, "REDACTED")
|
||||
.domainLookup(InternetDomainName.from("example.tld"), true, "REDACTED", "Not tested")
|
||||
.executeQuery(clock.nowUtc());
|
||||
assertThat(response.getResponse(false, "").plainTextOutput())
|
||||
.contains("Registrar: The Registrar");
|
||||
@@ -180,7 +182,8 @@ class WhoisCommandFactoryTest {
|
||||
.build()));
|
||||
response =
|
||||
cachedFactory
|
||||
.domainLookup(InternetDomainName.from("example.tld"), true, "REDACTED")
|
||||
.domainLookup(
|
||||
InternetDomainName.from("example.tld"), true, "REDACTED", "Blocked by BSA")
|
||||
.executeQuery(clock.nowUtc());
|
||||
assertThat(response.getResponse(false, "").plainTextOutput())
|
||||
.contains("Registrar: The Registrar");
|
||||
|
||||
@@ -16,6 +16,8 @@ package google.registry.whois;
|
||||
|
||||
import static com.google.common.net.MediaType.PLAIN_TEXT_UTF_8;
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static google.registry.bsa.persistence.BsaLabelTestingUtils.persistBsaLabel;
|
||||
import static google.registry.model.registrar.Registrar.State.ACTIVE;
|
||||
import static google.registry.testing.DatabaseHelper.createTlds;
|
||||
import static google.registry.testing.DatabaseHelper.loadRegistrar;
|
||||
import static google.registry.testing.DatabaseHelper.persistResource;
|
||||
@@ -45,6 +47,7 @@ import google.registry.testing.FullFieldsTestEntityHelper;
|
||||
import google.registry.whois.WhoisMetrics.WhoisMetric;
|
||||
import java.io.IOException;
|
||||
import java.io.Reader;
|
||||
import java.util.Optional;
|
||||
import org.joda.time.DateTime;
|
||||
import org.joda.time.Duration;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
@@ -74,7 +77,8 @@ class WhoisHttpActionTest {
|
||||
whoisAction.requestPath = WhoisHttpAction.PATH + pathInfo;
|
||||
whoisAction.response = response;
|
||||
whoisAction.whoisReader =
|
||||
new WhoisReader(WhoisCommandFactory.createCached(), "Please contact registrar");
|
||||
new WhoisReader(
|
||||
WhoisCommandFactory.createCached(), "Please contact registrar", "Blocked by BSA: %s");
|
||||
whoisAction.whoisMetrics = new WhoisMetrics();
|
||||
whoisAction.metricBuilder = WhoisMetric.builderForRequest(clock);
|
||||
whoisAction.disclaimer =
|
||||
@@ -214,6 +218,51 @@ class WhoisHttpActionTest {
|
||||
assertThat(response.getPayload()).contains("Domain Name: cat.みんな\r\n");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testRun_domainQuery_registeredDomainUnaffectedByBsa() {
|
||||
persistResource(
|
||||
Tld.get("lol")
|
||||
.asBuilder()
|
||||
.setBsaEnrollStartTime(Optional.of(clock.nowUtc().minusDays(1)))
|
||||
.build());
|
||||
persistBsaLabel("cat", clock.nowUtc());
|
||||
|
||||
Registrar registrar = persistResource(makeRegistrar("evilregistrar", "Yes Virginia", ACTIVE));
|
||||
persistResource(
|
||||
makeDomain(
|
||||
"cat.lol",
|
||||
persistResource(
|
||||
FullFieldsTestEntityHelper.makeContact(
|
||||
"5372808-ERL", "Goblin Market", "lol@cat.lol")),
|
||||
persistResource(
|
||||
FullFieldsTestEntityHelper.makeContact(
|
||||
"5372808-IRL", "Santa Claus", "BOFH@cat.lol")),
|
||||
persistResource(
|
||||
FullFieldsTestEntityHelper.makeContact("5372808-TRL", "The Raven", "bog@cat.lol")),
|
||||
persistResource(FullFieldsTestEntityHelper.makeHost("ns1.cat.lol", "1.2.3.4")),
|
||||
persistResource(
|
||||
FullFieldsTestEntityHelper.makeHost("ns2.cat.lol", "bad:f00d:cafe::15:beef")),
|
||||
registrar));
|
||||
persistSimpleResources(makeRegistrarPocs(registrar));
|
||||
newWhoisHttpAction("domain cat.lol\r\n").run();
|
||||
assertThat(response.getStatus()).isEqualTo(200);
|
||||
assertThat(response.getPayload()).isEqualTo(loadFile("whois_action_domain.txt"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testRun_domainQuery_unregisteredDomainShowBsaMessage() {
|
||||
persistResource(
|
||||
Tld.get("lol")
|
||||
.asBuilder()
|
||||
.setBsaEnrollStartTime(Optional.of(clock.nowUtc().minusDays(1)))
|
||||
.build());
|
||||
persistBsaLabel("cat", clock.nowUtc());
|
||||
|
||||
newWhoisHttpAction("domain cat.lol\r\n").run();
|
||||
assertThat(response.getStatus()).isEqualTo(404);
|
||||
assertThat(response.getPayload()).isEqualTo(loadFile("whois_action_domain_blocked_by_bsa.txt"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testRun_hostnameOnly_works() {
|
||||
persistResource(FullFieldsTestEntityHelper.makeHost("ns1.cat.みんな", "1.2.3.4"));
|
||||
|
||||
@@ -49,28 +49,29 @@ class WhoisReaderTest {
|
||||
@SuppressWarnings({"TypeParameterUnusedInFormals", "unchecked"})
|
||||
<T> T readCommand(String commandStr) throws Exception {
|
||||
return (T)
|
||||
new WhoisReader(WhoisCommandFactory.createCached(), "Please contact registrar")
|
||||
new WhoisReader(
|
||||
WhoisCommandFactory.createCached(), "Please contact registrar", "Blocked by BSA")
|
||||
.readCommand(new StringReader(commandStr), false, clock.nowUtc());
|
||||
}
|
||||
|
||||
void assertLoadsExampleTld(String commandString) throws Exception {
|
||||
DomainLookupCommand command = readCommand(commandString);
|
||||
assertThat(command.domainOrHostName.toString()).isEqualTo("example.tld");
|
||||
assertThat(command.domainName.toString()).isEqualTo("example.tld");
|
||||
}
|
||||
|
||||
void assertLoadsIDN(String commandString) throws Exception {
|
||||
DomainLookupCommand command = readCommand(commandString);
|
||||
assertThat(command.domainOrHostName.toString()).isEqualTo("xn--mgbh0fb.xn--kgbechtv");
|
||||
assertThat(command.domainName.toString()).isEqualTo("xn--mgbh0fb.xn--kgbechtv");
|
||||
}
|
||||
|
||||
void assertLoadsExampleNs(String commandString) throws Exception {
|
||||
NameserverLookupByHostCommand command = readCommand(commandString);
|
||||
assertThat(command.domainOrHostName.toString()).isEqualTo("ns.example.tld");
|
||||
assertThat(command.hostName.toString()).isEqualTo("ns.example.tld");
|
||||
}
|
||||
|
||||
void assertLoadsIDNNs(String commandString) throws Exception {
|
||||
NameserverLookupByHostCommand command = readCommand(commandString);
|
||||
assertThat(command.domainOrHostName.toString()).isEqualTo("ns.xn--mgbh0fb.xn--kgbechtv");
|
||||
assertThat(command.hostName.toString()).isEqualTo("ns.xn--mgbh0fb.xn--kgbechtv");
|
||||
}
|
||||
|
||||
void assertNsLookup(String commandString, String expectedIpAddress) throws Exception {
|
||||
@@ -173,8 +174,8 @@ class WhoisReaderTest {
|
||||
@Test
|
||||
void testDeepNameserverLookup() throws Exception {
|
||||
NameserverLookupByHostCommand command = readCommand("ns.foo.bar.baz.example.tld\r\n");
|
||||
assertThat(command.domainOrHostName.toString()).isEqualTo("ns.foo.bar.baz.example.tld");
|
||||
assertThat(command.domainOrHostName.toString()).isEqualTo("ns.foo.bar.baz.example.tld");
|
||||
assertThat(command.hostName.toString()).isEqualTo("ns.foo.bar.baz.example.tld");
|
||||
assertThat(command.hostName.toString()).isEqualTo("ns.foo.bar.baz.example.tld");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
Blocked by BSA: cat.lol
|
||||
>>> Last update of WHOIS database: 2009-06-29T20:13:00Z <<<
|
||||
|
||||
Doodle Disclaimer
|
||||
I exist so that carriage return
|
||||
in disclaimer can be tested.
|
||||
Reference in New Issue
Block a user