Add console bulk delete (#2641)
* Add bulk actions to console * Add console bulk delete * Add console bulk delete
@@ -109,6 +109,7 @@ import google.registry.tools.server.RefreshDnsForAllDomainsAction;
|
||||
import google.registry.tools.server.ToolsServerModule;
|
||||
import google.registry.tools.server.UpdateUserGroupAction;
|
||||
import google.registry.tools.server.VerifyOteAction;
|
||||
import google.registry.ui.server.console.ConsoleBulkDomainAction;
|
||||
import google.registry.ui.server.console.ConsoleDomainGetAction;
|
||||
import google.registry.ui.server.console.ConsoleDomainListAction;
|
||||
import google.registry.ui.server.console.ConsoleDumDownloadAction;
|
||||
@@ -174,6 +175,8 @@ interface RequestComponent {
|
||||
|
||||
CheckApiAction checkApiAction();
|
||||
|
||||
ConsoleBulkDomainAction consoleBulkDomainAction();
|
||||
|
||||
ConsoleDomainGetAction consoleDomainGetAction();
|
||||
|
||||
ConsoleDomainListAction consoleDomainListAction();
|
||||
|
||||
@@ -25,6 +25,7 @@ import google.registry.monitoring.whitebox.WhiteboxModule;
|
||||
import google.registry.request.RequestComponentBuilder;
|
||||
import google.registry.request.RequestModule;
|
||||
import google.registry.request.RequestScope;
|
||||
import google.registry.ui.server.console.ConsoleBulkDomainAction;
|
||||
import google.registry.ui.server.console.ConsoleDomainGetAction;
|
||||
import google.registry.ui.server.console.ConsoleDomainListAction;
|
||||
import google.registry.ui.server.console.ConsoleDumDownloadAction;
|
||||
@@ -53,6 +54,8 @@ import google.registry.ui.server.console.settings.WhoisRegistrarFieldsAction;
|
||||
WhiteboxModule.class,
|
||||
})
|
||||
public interface FrontendRequestComponent {
|
||||
ConsoleBulkDomainAction consoleBulkDomainAction();
|
||||
|
||||
ConsoleDomainGetAction consoleDomainGetAction();
|
||||
|
||||
ConsoleDomainListAction consoleDomainListAction();
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
package google.registry.ui.server.console;
|
||||
|
||||
import static com.google.common.collect.ImmutableMap.toImmutableMap;
|
||||
import static jakarta.servlet.http.HttpServletResponse.SC_FORBIDDEN;
|
||||
import static jakarta.servlet.http.HttpServletResponse.SC_OK;
|
||||
import static java.nio.charset.StandardCharsets.UTF_8;
|
||||
|
||||
@@ -52,6 +53,7 @@ import javax.inject.Inject;
|
||||
service = Action.GaeService.DEFAULT,
|
||||
gkeService = Action.GkeService.CONSOLE,
|
||||
path = ConsoleBulkDomainAction.PATH,
|
||||
method = Action.Method.POST,
|
||||
auth = Auth.AUTH_PUBLIC_LOGGED_IN)
|
||||
public class ConsoleBulkDomainAction extends ConsoleApiAction {
|
||||
|
||||
@@ -144,6 +146,11 @@ public class ConsoleBulkDomainAction extends ConsoleApiAction {
|
||||
|
||||
@Override
|
||||
protected void postHandler(User user) {
|
||||
// Temporary flag while testing
|
||||
if (!user.getUserRoles().isAdmin()) {
|
||||
consoleApiParams.response().setStatus(SC_FORBIDDEN);
|
||||
return;
|
||||
}
|
||||
BulkAction bulkAction = BulkAction.valueOf(bulkDomainAction);
|
||||
JsonElement jsonPayload =
|
||||
optionalJsonPayload.orElseThrow(
|
||||
|
||||
@@ -33,7 +33,6 @@ import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.ImmutableSortedMap;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
import google.registry.flows.DaggerEppTestComponent;
|
||||
import google.registry.flows.EppController;
|
||||
import google.registry.flows.EppTestComponent;
|
||||
@@ -50,7 +49,6 @@ import google.registry.testing.ConsoleApiParamsUtils;
|
||||
import google.registry.testing.FakeClock;
|
||||
import google.registry.testing.FakeResponse;
|
||||
import google.registry.tools.GsonUtils;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import org.joda.time.DateTime;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
@@ -205,29 +203,33 @@ public class ConsoleBulkDomainActionTest {
|
||||
assertThat(fakeResponse.getStatus()).isEqualTo(SC_FORBIDDEN);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testFailure_suspend_nonAdmin() {
|
||||
ConsoleBulkDomainAction action =
|
||||
createAction(
|
||||
"SUSPEND",
|
||||
GSON.toJsonTree(
|
||||
ImmutableMap.of("domainList", ImmutableList.of("example.tld"), "reason", "test")));
|
||||
action.run();
|
||||
assertThat(fakeResponse.getStatus()).isEqualTo(SC_OK);
|
||||
Map<String, ConsoleBulkDomainAction.ConsoleEppOutput> payload =
|
||||
GSON.fromJson(fakeResponse.getPayload(), new TypeToken<>() {});
|
||||
assertThat(payload).containsKey("example.tld");
|
||||
assertThat(payload.get("example.tld").responseCode()).isEqualTo(2004);
|
||||
assertThat(payload.get("example.tld").message()).contains("cannot be set by clients");
|
||||
assertThat(loadByEntity(domain)).isEqualTo(domain);
|
||||
}
|
||||
// @ptkach - reenable with suspend change
|
||||
// @Test
|
||||
// void testFailure_suspend_nonAdmin() {
|
||||
// ConsoleBulkDomainAction action =
|
||||
// createAction(
|
||||
// "SUSPEND",
|
||||
// GSON.toJsonTree(
|
||||
// ImmutableMap.of("domainList", ImmutableList.of("example.tld"), "reason",
|
||||
// "test")),
|
||||
// user);
|
||||
// action.run();
|
||||
// assertThat(fakeResponse.getStatus()).isEqualTo(SC_OK);
|
||||
// Map<String, ConsoleBulkDomainAction.ConsoleEppOutput> payload =
|
||||
// GSON.fromJson(fakeResponse.getPayload(), new TypeToken<>() {});
|
||||
// assertThat(payload).containsKey("example.tld");
|
||||
// assertThat(payload.get("example.tld").responseCode()).isEqualTo(2004);
|
||||
// assertThat(payload.get("example.tld").message()).contains("cannot be set by clients");
|
||||
// assertThat(loadByEntity(domain)).isEqualTo(domain);
|
||||
// }
|
||||
|
||||
private ConsoleBulkDomainAction createAction(String action, JsonElement payload) {
|
||||
User user =
|
||||
persistResource(
|
||||
new User.Builder()
|
||||
.setEmailAddress("email@email.com")
|
||||
.setUserRoles(new UserRoles.Builder().setGlobalRole(GlobalRole.FTE).build())
|
||||
.setUserRoles(
|
||||
new UserRoles.Builder().setIsAdmin(true).setGlobalRole(GlobalRole.FTE).build())
|
||||
.build());
|
||||
return createAction(action, payload, user);
|
||||
}
|
||||
|
||||
@@ -77,8 +77,10 @@ public class ConsoleScreenshotTest extends WebDriverTestCase {
|
||||
assertThat(driver.getCurrentUrl()).endsWith("?registrarId=TheRegistrar");
|
||||
}
|
||||
|
||||
|
||||
@RetryingTest(3)
|
||||
void dums_mainPage() throws Exception {
|
||||
server.setGlobalRole(GlobalRole.FTE);
|
||||
clickSidebarElementByName("Domains");
|
||||
driver.diffPage("noRegistrarSelected");
|
||||
selectRegistrar();
|
||||
@@ -90,20 +92,19 @@ public class ConsoleScreenshotTest extends WebDriverTestCase {
|
||||
driver.diffPage("actionsButtonClicked");
|
||||
}
|
||||
|
||||
// TODO: Reenable failing test after kokoro issue is resolved
|
||||
// @RetryingTest(3)
|
||||
// void settingsPage() throws Exception {
|
||||
// clickSidebarElementByName("Settings");
|
||||
// driver.diffPage("noRegistrarSelected");
|
||||
// selectRegistrar();
|
||||
// driver.diffPage("registrarSelected_contacts");
|
||||
// driver.findElement(By.cssSelector("a[routerLink=\"whois\"]")).click();
|
||||
// Thread.sleep(500);
|
||||
// driver.diffPage("registrarSelected_whois");
|
||||
// driver.findElement(By.cssSelector("a[routerLink=\"security\"]")).click();
|
||||
// Thread.sleep(500);
|
||||
// driver.diffPage("registrarSelected_security");
|
||||
// }
|
||||
@RetryingTest(3)
|
||||
void settingsPage() throws Exception {
|
||||
clickSidebarElementByName("Settings");
|
||||
driver.diffPage("noRegistrarSelected");
|
||||
selectRegistrar();
|
||||
driver.diffPage("registrarSelected_contacts");
|
||||
driver.findElement(By.cssSelector("a[routerLink=\"whois\"]")).click();
|
||||
Thread.sleep(500);
|
||||
driver.diffPage("registrarSelected_whois");
|
||||
driver.findElement(By.cssSelector("a[routerLink=\"security\"]")).click();
|
||||
Thread.sleep(500);
|
||||
driver.diffPage("registrarSelected_security");
|
||||
}
|
||||
|
||||
@RetryingTest(3)
|
||||
void billingInfo() throws Exception {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
SERVICE PATH CLASS METHODS OK MIN USER_POLICY
|
||||
FRONTEND /_dr/epp EppTlsAction POST n APP ADMIN
|
||||
CONSOLE /console-api/bulk-domain ConsoleBulkDomainAction POST n USER PUBLIC
|
||||
CONSOLE /console-api/domain ConsoleDomainGetAction GET n USER PUBLIC
|
||||
CONSOLE /console-api/domain-list ConsoleDomainListAction GET n USER PUBLIC
|
||||
CONSOLE /console-api/dum-download ConsoleDumDownloadAction GET n USER PUBLIC
|
||||
|
||||
@@ -66,6 +66,7 @@ PUBAPI /rdap/ip/(*) RdapIpAction
|
||||
PUBAPI /rdap/nameserver/(*) RdapNameserverAction GET,HEAD n NONE PUBLIC
|
||||
PUBAPI /rdap/nameservers RdapNameserverSearchAction GET,HEAD n NONE PUBLIC
|
||||
PUBAPI /whois/(*) WhoisHttpAction GET n NONE PUBLIC
|
||||
CONSOLE /console-api/bulk-domain ConsoleBulkDomainAction POST n USER PUBLIC
|
||||
CONSOLE /console-api/domain ConsoleDomainGetAction GET n USER PUBLIC
|
||||
CONSOLE /console-api/domain-list ConsoleDomainListAction GET n USER PUBLIC
|
||||
CONSOLE /console-api/dum-download ConsoleDumDownloadAction GET n USER PUBLIC
|
||||
|
||||
|
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 49 KiB |
|
Before Width: | Height: | Size: 132 KiB After Width: | Height: | Size: 127 KiB |
|
Before Width: | Height: | Size: 133 KiB After Width: | Height: | Size: 129 KiB |
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 51 KiB |
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 69 KiB |