From bcb2b2c784c0ed1cc9fe6a3c3356fc692c50206f Mon Sep 17 00:00:00 2001 From: Weimin Yu Date: Thu, 24 Aug 2023 15:18:47 -0400 Subject: [PATCH] Use Gmail for RegistryLock emails (#2122) --- .../registry/batch/RelockDomainAction.java | 18 +++++++++--------- .../module/frontend/FrontendComponent.java | 2 ++ .../registrar/RegistryLockPostAction.java | 10 +++++----- .../registry/batch/RelockDomainActionTest.java | 12 ++++++------ .../registrar/RegistryLockPostActionTest.java | 10 +++++----- 5 files changed, 27 insertions(+), 25 deletions(-) diff --git a/core/src/main/java/google/registry/batch/RelockDomainAction.java b/core/src/main/java/google/registry/batch/RelockDomainAction.java index 63a13a218..a49f3a323 100644 --- a/core/src/main/java/google/registry/batch/RelockDomainAction.java +++ b/core/src/main/java/google/registry/batch/RelockDomainAction.java @@ -26,6 +26,7 @@ import com.google.common.collect.ImmutableSet; import com.google.common.flogger.FluentLogger; import com.google.common.net.MediaType; import google.registry.config.RegistryConfig.Config; +import google.registry.groups.GmailClient; import google.registry.model.domain.Domain; import google.registry.model.domain.RegistryLock; import google.registry.model.eppcommon.StatusValue; @@ -40,7 +41,6 @@ import google.registry.request.auth.Auth; import google.registry.tools.DomainLockUtils; import google.registry.util.DateTimeUtils; import google.registry.util.EmailMessage; -import google.registry.util.SendEmailService; import java.util.Optional; import javax.inject.Inject; import javax.mail.internet.AddressException; @@ -84,7 +84,7 @@ public class RelockDomainAction implements Runnable { private final InternetAddress alertRecipientAddress; private final InternetAddress gSuiteOutgoingEmailAddress; private final String supportEmail; - private final SendEmailService sendEmailService; + private final GmailClient gmailClient; private final DomainLockUtils domainLockUtils; private final Response response; @@ -92,10 +92,10 @@ public class RelockDomainAction implements Runnable { public RelockDomainAction( @Parameter(OLD_UNLOCK_REVISION_ID_PARAM) long oldUnlockRevisionId, @Parameter(PREVIOUS_ATTEMPTS_PARAM) int previousAttempts, - @Config("alertRecipientEmailAddress") InternetAddress alertRecipientAddress, + @Config("newAlertRecipientEmailAddress") InternetAddress alertRecipientAddress, @Config("gSuiteOutgoingEmailAddress") InternetAddress gSuiteOutgoingEmailAddress, @Config("supportEmail") String supportEmail, - SendEmailService sendEmailService, + GmailClient gmailClient, DomainLockUtils domainLockUtils, Response response) { this.oldUnlockRevisionId = oldUnlockRevisionId; @@ -103,7 +103,7 @@ public class RelockDomainAction implements Runnable { this.alertRecipientAddress = alertRecipientAddress; this.gSuiteOutgoingEmailAddress = gSuiteOutgoingEmailAddress; this.supportEmail = supportEmail; - this.sendEmailService = sendEmailService; + this.gmailClient = gmailClient; this.domainLockUtils = domainLockUtils; this.response = response; } @@ -215,7 +215,7 @@ public class RelockDomainAction implements Runnable { oldLock.getDomainName(), t.getMessage(), supportEmail); - sendEmailService.sendEmail( + gmailClient.sendEmail( EmailMessage.newBuilder() .setFrom(gSuiteOutgoingEmailAddress) .setBody(body) @@ -245,7 +245,7 @@ public class RelockDomainAction implements Runnable { String body = String.format(RELOCK_SUCCESS_EMAIL_TEMPLATE, oldLock.getDomainName(), supportEmail); - sendEmailService.sendEmail( + gmailClient.sendEmail( EmailMessage.newBuilder() .setFrom(gSuiteOutgoingEmailAddress) .setBody(body) @@ -264,7 +264,7 @@ public class RelockDomainAction implements Runnable { .addAll(getEmailRecipients(oldLock.getRegistrarId())) .add(alertRecipientAddress) .build(); - sendEmailService.sendEmail( + gmailClient.sendEmail( EmailMessage.newBuilder() .setFrom(gSuiteOutgoingEmailAddress) .setBody(body) @@ -274,7 +274,7 @@ public class RelockDomainAction implements Runnable { } private void sendUnknownRevisionIdAlertEmail() { - sendEmailService.sendEmail( + gmailClient.sendEmail( EmailMessage.newBuilder() .setFrom(gSuiteOutgoingEmailAddress) .setBody(String.format(RELOCK_UNKNOWN_ID_FAILURE_EMAIL_TEMPLATE, oldUnlockRevisionId)) diff --git a/core/src/main/java/google/registry/module/frontend/FrontendComponent.java b/core/src/main/java/google/registry/module/frontend/FrontendComponent.java index f37d370df..dcbd7d28a 100644 --- a/core/src/main/java/google/registry/module/frontend/FrontendComponent.java +++ b/core/src/main/java/google/registry/module/frontend/FrontendComponent.java @@ -23,6 +23,7 @@ import google.registry.config.RegistryConfig.ConfigModule; import google.registry.flows.ServerTridProviderModule; import google.registry.flows.custom.CustomLogicFactoryModule; import google.registry.groups.DirectoryModule; +import google.registry.groups.GmailModule; import google.registry.groups.GroupsModule; import google.registry.groups.GroupssettingsModule; import google.registry.keyring.KeyringModule; @@ -54,6 +55,7 @@ import javax.inject.Singleton; DirectoryModule.class, DummyKeyringModule.class, FrontendRequestComponentModule.class, + GmailModule.class, GroupsModule.class, GroupssettingsModule.class, GsonModule.class, diff --git a/core/src/main/java/google/registry/ui/server/registrar/RegistryLockPostAction.java b/core/src/main/java/google/registry/ui/server/registrar/RegistryLockPostAction.java index d3d969b0d..d83d68daf 100644 --- a/core/src/main/java/google/registry/ui/server/registrar/RegistryLockPostAction.java +++ b/core/src/main/java/google/registry/ui/server/registrar/RegistryLockPostAction.java @@ -31,6 +31,7 @@ import com.google.common.flogger.FluentLogger; import com.google.gson.Gson; import google.registry.config.RegistryConfig.Config; import google.registry.flows.domain.DomainFlowUtils; +import google.registry.groups.GmailClient; import google.registry.model.domain.RegistryLock; import google.registry.model.registrar.Registrar; import google.registry.model.registrar.RegistrarPoc; @@ -46,7 +47,6 @@ import google.registry.request.auth.UserAuthInfo; import google.registry.security.JsonResponseHelper; import google.registry.tools.DomainLockUtils; import google.registry.util.EmailMessage; -import google.registry.util.SendEmailService; import java.net.URISyntaxException; import java.util.Map; import java.util.Optional; @@ -83,7 +83,7 @@ public class RegistryLockPostAction implements Runnable, JsonActionRunner.JsonAc private final JsonActionRunner jsonActionRunner; private final AuthResult authResult; private final AuthenticatedRegistrarAccessor registrarAccessor; - private final SendEmailService sendEmailService; + private final GmailClient gmailClient; private final DomainLockUtils domainLockUtils; private final InternetAddress gSuiteOutgoingEmailAddress; @@ -93,14 +93,14 @@ public class RegistryLockPostAction implements Runnable, JsonActionRunner.JsonAc JsonActionRunner jsonActionRunner, AuthResult authResult, AuthenticatedRegistrarAccessor registrarAccessor, - SendEmailService sendEmailService, + GmailClient gmailClient, DomainLockUtils domainLockUtils, @Config("gSuiteOutgoingEmailAddress") InternetAddress gSuiteOutgoingEmailAddress) { this.req = req; this.jsonActionRunner = jsonActionRunner; this.authResult = authResult; this.registrarAccessor = registrarAccessor; - this.sendEmailService = sendEmailService; + this.gmailClient = gmailClient; this.domainLockUtils = domainLockUtils; this.gSuiteOutgoingEmailAddress = gSuiteOutgoingEmailAddress; } @@ -168,7 +168,7 @@ public class RegistryLockPostAction implements Runnable, JsonActionRunner.JsonAc ImmutableList recipients = ImmutableList.of(new InternetAddress(userEmail, true)); String action = isLock ? "lock" : "unlock"; - sendEmailService.sendEmail( + gmailClient.sendEmail( EmailMessage.newBuilder() .setBody(body) .setSubject(String.format("Registry %s verification", action)) diff --git a/core/src/test/java/google/registry/batch/RelockDomainActionTest.java b/core/src/test/java/google/registry/batch/RelockDomainActionTest.java index a8b4637f6..0fb29ef72 100644 --- a/core/src/test/java/google/registry/batch/RelockDomainActionTest.java +++ b/core/src/test/java/google/registry/batch/RelockDomainActionTest.java @@ -35,6 +35,7 @@ import static org.mockito.Mockito.verifyNoMoreInteractions; import com.google.cloud.tasks.v2.HttpMethod; import com.google.common.collect.ImmutableSet; +import google.registry.groups.GmailClient; import google.registry.model.domain.Domain; import google.registry.model.domain.RegistryLock; import google.registry.model.host.Host; @@ -48,7 +49,6 @@ import google.registry.testing.FakeClock; import google.registry.testing.FakeResponse; import google.registry.tools.DomainLockUtils; import google.registry.util.EmailMessage; -import google.registry.util.SendEmailService; import google.registry.util.StringGenerator.Alphabets; import java.util.Optional; import javax.mail.internet.InternetAddress; @@ -85,7 +85,7 @@ public class RelockDomainActionTest { private Domain domain; private RegistryLock oldLock; - @Mock private SendEmailService sendEmailService; + @Mock private GmailClient gmailClient; private RelockDomainAction action; @BeforeEach @@ -107,7 +107,7 @@ public class RelockDomainActionTest { @AfterEach void afterEach() { - verifyNoMoreInteractions(sendEmailService); + verifyNoMoreInteractions(gmailClient); } @Test @@ -260,7 +260,7 @@ public class RelockDomainActionTest { ImmutableSet.of(new InternetAddress("Marla.Singer.RegistryLock@crr.com"))) .setFrom(new InternetAddress("outgoing@example.com")) .build(); - verify(sendEmailService).sendEmail(expectedEmail); + verify(gmailClient).sendEmail(expectedEmail); } private void assertNonTransientFailureEmail(String exceptionMessage) throws Exception { @@ -294,7 +294,7 @@ public class RelockDomainActionTest { .setRecipients(recipients) .setFrom(new InternetAddress("outgoing@example.com")) .build(); - verify(sendEmailService).sendEmail(expectedEmail); + verify(gmailClient).sendEmail(expectedEmail); } private void assertTaskEnqueued(int numAttempts) { @@ -328,7 +328,7 @@ public class RelockDomainActionTest { alertRecipientAddress, gSuiteOutgoingAddress, "support@example.com", - sendEmailService, + gmailClient, domainLockUtils, response); } diff --git a/core/src/test/java/google/registry/ui/server/registrar/RegistryLockPostActionTest.java b/core/src/test/java/google/registry/ui/server/registrar/RegistryLockPostActionTest.java index 239464bf3..61a557a61 100644 --- a/core/src/test/java/google/registry/ui/server/registrar/RegistryLockPostActionTest.java +++ b/core/src/test/java/google/registry/ui/server/registrar/RegistryLockPostActionTest.java @@ -33,6 +33,7 @@ import com.google.appengine.api.users.User; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; +import google.registry.groups.GmailClient; import google.registry.model.console.RegistrarRole; import google.registry.model.console.UserRoles; import google.registry.model.domain.Domain; @@ -54,7 +55,6 @@ import google.registry.testing.DeterministicStringGenerator; import google.registry.testing.FakeClock; import google.registry.tools.DomainLockUtils; import google.registry.util.EmailMessage; -import google.registry.util.SendEmailService; import google.registry.util.StringGenerator.Alphabets; import java.util.Map; import java.util.Optional; @@ -97,7 +97,7 @@ final class RegistryLockPostActionTest { private Domain domain; private RegistryLockPostAction action; - @Mock SendEmailService emailService; + @Mock GmailClient gmailClient; @Mock HttpServletRequest mockRequest; @Mock HttpServletResponse mockResponse; @@ -510,12 +510,12 @@ final class RegistryLockPostActionTest { private void assertFailureWithMessage(Map response, String message) { assertThat(response) .containsExactly("status", "ERROR", "results", ImmutableList.of(), "message", message); - verifyNoMoreInteractions(emailService); + verifyNoMoreInteractions(gmailClient); } private void verifyEmail(String recipient) throws Exception { ArgumentCaptor emailCaptor = ArgumentCaptor.forClass(EmailMessage.class); - verify(emailService).sendEmail(emailCaptor.capture()); + verify(gmailClient).sendEmail(emailCaptor.capture()); EmailMessage sentMessage = emailCaptor.getValue(); assertThat(sentMessage.subject()).matches("Registry (un)?lock verification"); assertThat(sentMessage.body()).matches(EMAIL_MESSAGE_TEMPLATE); @@ -545,7 +545,7 @@ final class RegistryLockPostActionTest { jsonActionRunner, authResult, registrarAccessor, - emailService, + gmailClient, domainLockUtils, outgoingAddress); }