mirror of
https://github.com/google/nomulus
synced 2026-01-05 04:56:03 +00:00
Change RL input to be a POST body (#2503)
This commit is contained in:
@@ -19,16 +19,13 @@ import static com.google.common.collect.ImmutableList.toImmutableList;
|
||||
import static google.registry.persistence.transaction.TransactionManagerFactory.tm;
|
||||
import static google.registry.request.Action.Method.GET;
|
||||
import static google.registry.request.Action.Method.POST;
|
||||
import static google.registry.request.RequestParameters.extractBooleanParameter;
|
||||
import static google.registry.request.RequestParameters.extractOptionalLongParameter;
|
||||
import static google.registry.request.RequestParameters.extractOptionalParameter;
|
||||
import static google.registry.request.RequestParameters.extractRequiredParameter;
|
||||
import static google.registry.ui.server.registrar.RegistryLockPostAction.VERIFICATION_EMAIL_TEMPLATE;
|
||||
import static jakarta.servlet.http.HttpServletResponse.SC_OK;
|
||||
import static jakarta.servlet.http.HttpServletResponse.SC_UNAUTHORIZED;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.annotations.Expose;
|
||||
import google.registry.flows.EppException;
|
||||
import google.registry.flows.domain.DomainFlowUtils;
|
||||
import google.registry.groups.GmailClient;
|
||||
@@ -46,8 +43,8 @@ import google.registry.ui.server.registrar.ConsoleApiParams;
|
||||
import google.registry.util.EmailMessage;
|
||||
import jakarta.mail.internet.AddressException;
|
||||
import jakarta.mail.internet.InternetAddress;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import java.util.Optional;
|
||||
import javax.annotation.Nullable;
|
||||
import javax.inject.Inject;
|
||||
import org.joda.time.Duration;
|
||||
|
||||
@@ -69,6 +66,7 @@ public class ConsoleRegistryLockAction extends ConsoleApiAction {
|
||||
private final DomainLockUtils domainLockUtils;
|
||||
private final GmailClient gmailClient;
|
||||
private final Gson gson;
|
||||
private final Optional<ConsoleRegistryLockPostInput> optionalPostInput;
|
||||
private final String registrarId;
|
||||
|
||||
@Inject
|
||||
@@ -77,11 +75,14 @@ public class ConsoleRegistryLockAction extends ConsoleApiAction {
|
||||
DomainLockUtils domainLockUtils,
|
||||
GmailClient gmailClient,
|
||||
Gson gson,
|
||||
@Parameter("consoleRegistryLockPostInput")
|
||||
Optional<ConsoleRegistryLockPostInput> optionalPostInput,
|
||||
@Parameter("registrarId") String registrarId) {
|
||||
super(consoleApiParams);
|
||||
this.domainLockUtils = domainLockUtils;
|
||||
this.gmailClient = gmailClient;
|
||||
this.gson = gson;
|
||||
this.optionalPostInput = optionalPostInput;
|
||||
this.registrarId = registrarId;
|
||||
}
|
||||
|
||||
@@ -94,7 +95,6 @@ public class ConsoleRegistryLockAction extends ConsoleApiAction {
|
||||
|
||||
@Override
|
||||
protected void postHandler(User user) {
|
||||
HttpServletRequest req = consoleApiParams.request();
|
||||
Response response = consoleApiParams.response();
|
||||
// User must have the proper permission on the registrar
|
||||
checkPermission(user, registrarId, ConsolePermission.REGISTRY_LOCK);
|
||||
@@ -107,10 +107,12 @@ public class ConsoleRegistryLockAction extends ConsoleApiAction {
|
||||
registrarId);
|
||||
|
||||
// Retrieve and validate the necessary params
|
||||
String domainName = extractRequiredParameter(req, "domainName");
|
||||
boolean isLock = extractBooleanParameter(req, "isLock");
|
||||
Optional<String> maybePassword = extractOptionalParameter(req, "password");
|
||||
Optional<Long> relockDurationMillis = extractOptionalLongParameter(req, "relockDurationMillis");
|
||||
ConsoleRegistryLockPostInput postInput =
|
||||
optionalPostInput.orElseThrow(() -> new IllegalArgumentException("No POST input provided"));
|
||||
String domainName = postInput.domainName();
|
||||
boolean isLock = postInput.isLock();
|
||||
Optional<String> maybePassword = Optional.ofNullable(postInput.password());
|
||||
Optional<Long> relockDurationMillis = Optional.ofNullable(postInput.relockDurationMillis());
|
||||
|
||||
try {
|
||||
DomainFlowUtils.validateDomainName(domainName);
|
||||
@@ -176,4 +178,10 @@ public class ConsoleRegistryLockAction extends ConsoleApiAction {
|
||||
.filter(lock -> !lock.isLockRequestExpired(tm().getTransactionTime()))
|
||||
.collect(toImmutableList()));
|
||||
}
|
||||
|
||||
public record ConsoleRegistryLockPostInput(
|
||||
@Expose String domainName,
|
||||
@Expose boolean isLock,
|
||||
@Expose @Nullable String password,
|
||||
@Expose @Nullable Long relockDurationMillis) {}
|
||||
}
|
||||
|
||||
@@ -34,6 +34,7 @@ import google.registry.request.auth.AuthResult;
|
||||
import google.registry.security.XsrfTokenManager;
|
||||
import google.registry.ui.server.SendEmailUtils;
|
||||
import google.registry.ui.server.console.ConsoleEppPasswordAction.EppPasswordData;
|
||||
import google.registry.ui.server.console.ConsoleRegistryLockAction.ConsoleRegistryLockPostInput;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import java.util.Optional;
|
||||
import org.joda.time.DateTime;
|
||||
@@ -242,4 +243,11 @@ public final class RegistrarConsoleModule {
|
||||
Gson gson, @OptionalJsonPayload Optional<JsonElement> payload) {
|
||||
return payload.map(s -> gson.fromJson(s, EppPasswordData.class));
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Parameter("consoleRegistryLockPostInput")
|
||||
public static Optional<ConsoleRegistryLockPostInput> provideRegistryLockPostInput(
|
||||
Gson gson, @OptionalJsonPayload Optional<JsonElement> payload) {
|
||||
return payload.map(e -> gson.fromJson(e, ConsoleRegistryLockPostInput.class));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ import static google.registry.testing.DatabaseHelper.persistResource;
|
||||
import static google.registry.testing.SqlHelper.getMostRecentRegistryLockByRepoId;
|
||||
import static google.registry.testing.SqlHelper.saveRegistryLock;
|
||||
import static google.registry.tools.LockOrUnlockDomainCommand.REGISTRY_LOCK_STATUSES;
|
||||
import static google.registry.ui.server.console.ConsoleRegistryLockAction.ConsoleRegistryLockPostInput;
|
||||
import static jakarta.servlet.http.HttpServletResponse.SC_BAD_REQUEST;
|
||||
import static jakarta.servlet.http.HttpServletResponse.SC_FORBIDDEN;
|
||||
import static jakarta.servlet.http.HttpServletResponse.SC_OK;
|
||||
@@ -309,10 +310,7 @@ public class ConsoleRegistryLockActionTest {
|
||||
persistResource(defaultDomain.asBuilder().setStatusValues(REGISTRY_LOCK_STATUSES).build());
|
||||
action =
|
||||
createPostAction(
|
||||
"example.test",
|
||||
false,
|
||||
"registryLockPassword",
|
||||
Optional.of(Duration.standardDays(1).getMillis()));
|
||||
"example.test", false, "registryLockPassword", Duration.standardDays(1).getMillis());
|
||||
action.run();
|
||||
assertThat(response.getStatus()).isEqualTo(SC_OK);
|
||||
verifyEmail();
|
||||
@@ -348,7 +346,7 @@ public class ConsoleRegistryLockActionTest {
|
||||
.setUserRoles(
|
||||
new UserRoles.Builder().setGlobalRole(GlobalRole.FTE).setIsAdmin(true).build())
|
||||
.build();
|
||||
action = createPostAction("example.test", true, "", Optional.empty());
|
||||
action = createPostAction("example.test", true, "", null);
|
||||
action.run();
|
||||
assertThat(response.getStatus()).isEqualTo(SC_OK);
|
||||
verifyEmail();
|
||||
@@ -414,8 +412,7 @@ public class ConsoleRegistryLockActionTest {
|
||||
.setCreationRegistrarId("NewRegistrar")
|
||||
.setPersistedCurrentSponsorRegistrarId("NewRegistrar")
|
||||
.build());
|
||||
action =
|
||||
createPostAction("otherregistrar.test", true, "registryLockPassword", Optional.empty());
|
||||
action = createPostAction("otherregistrar.test", true, "registryLockPassword", null);
|
||||
action.run();
|
||||
assertThat(response.getStatus()).isEqualTo(SC_BAD_REQUEST);
|
||||
assertThat(response.getPayload())
|
||||
@@ -444,7 +441,7 @@ public class ConsoleRegistryLockActionTest {
|
||||
|
||||
@Test
|
||||
void testPost_failure_badPassword() throws Exception {
|
||||
action = createPostAction("example.test", true, "badPassword", Optional.empty());
|
||||
action = createPostAction("example.test", true, "badPassword", null);
|
||||
action.run();
|
||||
assertThat(response.getStatus()).isEqualTo(SC_UNAUTHORIZED);
|
||||
}
|
||||
@@ -483,29 +480,25 @@ public class ConsoleRegistryLockActionTest {
|
||||
}
|
||||
|
||||
private ConsoleRegistryLockAction createDefaultPostAction(boolean isLock) {
|
||||
return createPostAction("example.test", isLock, "registryLockPassword", Optional.empty());
|
||||
return createPostAction("example.test", isLock, "registryLockPassword", null);
|
||||
}
|
||||
|
||||
private ConsoleRegistryLockAction createPostAction(
|
||||
String domainName, boolean isLock, String password, Optional<Long> relockDurationMillis) {
|
||||
String domainName, boolean isLock, String password, Long relockDurationMillis) {
|
||||
ConsoleApiParams params = createParams();
|
||||
when(params.request().getParameter("domainName")).thenReturn(domainName);
|
||||
when(params.request().getParameterMap())
|
||||
.thenReturn(ImmutableMap.of("isLock", new String[] {String.valueOf(isLock)}));
|
||||
when(params.request().getParameter("isLock")).thenReturn(String.valueOf(isLock));
|
||||
when(params.request().getParameter("password")).thenReturn(password);
|
||||
relockDurationMillis.ifPresent(
|
||||
duration ->
|
||||
when(params.request().getParameter("relockDurationMillis"))
|
||||
.thenReturn(String.valueOf(duration)));
|
||||
return createGenericAction(params, "POST");
|
||||
ConsoleRegistryLockPostInput postInput =
|
||||
new ConsoleRegistryLockPostInput(domainName, isLock, password, relockDurationMillis);
|
||||
return createGenericAction(params, "POST", Optional.of(postInput));
|
||||
}
|
||||
|
||||
private ConsoleRegistryLockAction createGetAction() throws IOException {
|
||||
return createGenericAction(createParams(), "GET");
|
||||
return createGenericAction(createParams(), "GET", Optional.empty());
|
||||
}
|
||||
|
||||
private ConsoleRegistryLockAction createGenericAction(ConsoleApiParams params, String method) {
|
||||
private ConsoleRegistryLockAction createGenericAction(
|
||||
ConsoleApiParams params,
|
||||
String method,
|
||||
Optional<ConsoleRegistryLockPostInput> optionalPostInput) {
|
||||
when(params.request().getMethod()).thenReturn(method);
|
||||
when(params.request().getServerName()).thenReturn("registrarconsole.tld");
|
||||
when(params.request().getParameter("registrarId")).thenReturn("TheRegistrar");
|
||||
@@ -516,7 +509,7 @@ public class ConsoleRegistryLockActionTest {
|
||||
new CloudTasksHelper(fakeClock).getTestCloudTasksUtils());
|
||||
response = (FakeResponse) params.response();
|
||||
return new ConsoleRegistryLockAction(
|
||||
params, domainLockUtils, gmailClient, GSON, "TheRegistrar");
|
||||
params, domainLockUtils, gmailClient, GSON, optionalPostInput, "TheRegistrar");
|
||||
}
|
||||
|
||||
private ConsoleApiParams createParams() {
|
||||
|
||||
Reference in New Issue
Block a user