diff --git a/pom.xml b/pom.xml index 372b4f04c3..c27a3b3f55 100644 --- a/pom.xml +++ b/pom.xml @@ -546,6 +546,11 @@ limitations under the License. guice-servlet 2.0 + + com.google.code.guice + guice-assistedinject + 2.0 + aopalliance diff --git a/src/main/java/com/google/gerrit/server/AccountSecurityImpl.java b/src/main/java/com/google/gerrit/server/AccountSecurityImpl.java index 098d89bcac..cf9d685f70 100644 --- a/src/main/java/com/google/gerrit/server/AccountSecurityImpl.java +++ b/src/main/java/com/google/gerrit/server/AccountSecurityImpl.java @@ -30,7 +30,6 @@ import com.google.gerrit.client.rpc.InvalidSshKeyException; import com.google.gerrit.client.rpc.NoSuchEntityException; import com.google.gerrit.server.mail.EmailException; import com.google.gerrit.server.mail.RegisterNewEmailSender; -import com.google.gerrit.server.mail.EmailSender; import com.google.gerrit.server.ssh.SshUtil; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwtjsonrpc.client.VoidResult; @@ -65,15 +64,15 @@ class AccountSecurityImpl extends BaseServiceImplementation implements private final Logger log = LoggerFactory.getLogger(getClass()); private final GerritServer server; private final ContactStore contactStore; - private final EmailSender emailSender; + private final RegisterNewEmailSender.Factory registerNewEmailFactory; @Inject AccountSecurityImpl(final SchemaFactory sf, final GerritServer gs, - final ContactStore cs, final EmailSender es) { + final ContactStore cs, final RegisterNewEmailSender.Factory esf) { super(sf); server = gs; contactStore = cs; - emailSender = es; + registerNewEmailFactory = esf; } public void mySshKeys(final AsyncCallback> callback) { @@ -289,7 +288,7 @@ class AccountSecurityImpl extends BaseServiceImplementation implements GerritJsonServlet.getCurrentCall().getHttpServletRequest(); try { final RegisterNewEmailSender sender; - sender = new RegisterNewEmailSender(server, emailSender, address, req); + sender = registerNewEmailFactory.create(address); sender.send(); cb.onSuccess(VoidResult.INSTANCE); } catch (EmailException e) { diff --git a/src/main/java/com/google/gerrit/server/GerritServerModule.java b/src/main/java/com/google/gerrit/server/GerritServerModule.java index d851bcea16..e737a71b78 100644 --- a/src/main/java/com/google/gerrit/server/GerritServerModule.java +++ b/src/main/java/com/google/gerrit/server/GerritServerModule.java @@ -29,12 +29,14 @@ import com.google.gerrit.server.config.GerritServerConfigProvider; import com.google.gerrit.server.config.SitePath; import com.google.gerrit.server.config.SitePathProvider; import com.google.gerrit.server.mail.EmailSender; +import com.google.gerrit.server.mail.RegisterNewEmailSender; import com.google.gerrit.server.mail.SmtpEmailSender; import com.google.gwtorm.client.SchemaFactory; import com.google.gwtorm.jdbc.Database; import com.google.inject.AbstractModule; import com.google.inject.Key; import com.google.inject.TypeLiteral; +import com.google.inject.assistedinject.FactoryProvider; import com.google.inject.name.Names; import org.spearce.jgit.lib.Config; @@ -72,5 +74,9 @@ public class GerritServerModule extends AbstractModule { bind(GerritConfig.class).toProvider(GerritConfigProvider.class).in( SINGLETON); bind(PatchSetInfoFactory.class); + + bind(RegisterNewEmailSender.Factory.class).toProvider( + FactoryProvider.newFactory(RegisterNewEmailSender.Factory.class, + RegisterNewEmailSender.class)); } } diff --git a/src/main/java/com/google/gerrit/server/mail/RegisterNewEmailSender.java b/src/main/java/com/google/gerrit/server/mail/RegisterNewEmailSender.java index 9c39978dea..d6c8e87362 100644 --- a/src/main/java/com/google/gerrit/server/mail/RegisterNewEmailSender.java +++ b/src/main/java/com/google/gerrit/server/mail/RegisterNewEmailSender.java @@ -16,6 +16,8 @@ package com.google.gerrit.server.mail; import com.google.gerrit.server.GerritServer; import com.google.gwtjsonrpc.server.XsrfException; +import com.google.inject.Inject; +import com.google.inject.assistedinject.Assisted; import org.spearce.jgit.util.Base64; @@ -24,11 +26,17 @@ import java.io.UnsupportedEncodingException; import javax.servlet.http.HttpServletRequest; public class RegisterNewEmailSender extends OutgoingEmail { + + public static interface Factory { + public RegisterNewEmailSender create(String address); + } + private final HttpServletRequest req; private final String addr; + @Inject public RegisterNewEmailSender(final GerritServer gs, final EmailSender sf, - final String address, final HttpServletRequest request) { + @Assisted final String address, final HttpServletRequest request) { super(gs, sf, null, "registernewemail"); addr = address; req = request;