Support to register a new email address via REST
By PUT on /accounts/<account-id>/emails/<email-id> a new email address can be registered for an account. A verification email is sent with a link that needs to be visited to confirm the email address. The WebUI was adapted to use this REST endpoint for registering email addresses. The old RPC to do this was removed. Change-Id: I39c1f72a0c3e0d50883c76c975bbd464f1894095 Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
This commit is contained in:
		| @@ -17,7 +17,6 @@ package com.google.gerrit.httpd.rpc.account; | ||||
| import com.google.gerrit.httpd.rpc.RpcServletModule; | ||||
| import com.google.gerrit.httpd.rpc.UiRpcModule; | ||||
| import com.google.gerrit.server.config.FactoryModule; | ||||
| import com.google.gerrit.server.mail.RegisterNewEmailSender; | ||||
|  | ||||
| public class AccountModule extends RpcServletModule { | ||||
|   public AccountModule() { | ||||
| @@ -32,7 +31,6 @@ public class AccountModule extends RpcServletModule { | ||||
|         factory(AgreementInfoFactory.Factory.class); | ||||
|         factory(DeleteExternalIds.Factory.class); | ||||
|         factory(ExternalIdDetailFactory.Factory.class); | ||||
|         factory(RegisterNewEmailSender.Factory.class); | ||||
|       } | ||||
|     }); | ||||
|     rpc(AccountSecurityImpl.class); | ||||
|   | ||||
| @@ -19,7 +19,6 @@ import com.google.gerrit.common.ChangeHooks; | ||||
| import com.google.gerrit.common.data.AccountSecurity; | ||||
| import com.google.gerrit.common.data.ContributorAgreement; | ||||
| import com.google.gerrit.common.errors.ContactInformationStoreException; | ||||
| import com.google.gerrit.common.errors.EmailException; | ||||
| import com.google.gerrit.common.errors.InvalidSshKeyException; | ||||
| import com.google.gerrit.common.errors.NoSuchEntityException; | ||||
| import com.google.gerrit.common.errors.PermissionDeniedException; | ||||
| @@ -31,7 +30,6 @@ import com.google.gerrit.reviewdb.client.AccountGroup; | ||||
| import com.google.gerrit.reviewdb.client.AccountGroupMember; | ||||
| import com.google.gerrit.reviewdb.client.AccountGroupMemberAudit; | ||||
| import com.google.gerrit.reviewdb.client.AccountSshKey; | ||||
| import com.google.gerrit.reviewdb.client.AuthType; | ||||
| import com.google.gerrit.reviewdb.client.ContactInformation; | ||||
| import com.google.gerrit.reviewdb.server.ReviewDb; | ||||
| import com.google.gerrit.server.CurrentUser; | ||||
| @@ -40,16 +38,13 @@ import com.google.gerrit.server.account.AccountByEmailCache; | ||||
| import com.google.gerrit.server.account.AccountCache; | ||||
| import com.google.gerrit.server.account.AccountException; | ||||
| import com.google.gerrit.server.account.AccountManager; | ||||
| import com.google.gerrit.server.account.AuthRequest; | ||||
| import com.google.gerrit.server.account.ChangeUserName; | ||||
| import com.google.gerrit.server.account.ClearPassword; | ||||
| import com.google.gerrit.server.account.GeneratePassword; | ||||
| import com.google.gerrit.server.account.GroupCache; | ||||
| import com.google.gerrit.server.account.Realm; | ||||
| import com.google.gerrit.server.config.AuthConfig; | ||||
| import com.google.gerrit.server.contact.ContactStore; | ||||
| import com.google.gerrit.server.mail.EmailTokenVerifier; | ||||
| import com.google.gerrit.server.mail.RegisterNewEmailSender; | ||||
| import com.google.gerrit.server.project.ProjectCache; | ||||
| import com.google.gerrit.server.ssh.SshKeyCache; | ||||
| import com.google.gwtjsonrpc.common.AsyncCallback; | ||||
| @@ -58,23 +53,17 @@ import com.google.gwtorm.server.OrmException; | ||||
| import com.google.inject.Inject; | ||||
| import com.google.inject.Provider; | ||||
|  | ||||
| import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | ||||
|  | ||||
| import java.util.Collections; | ||||
| import java.util.List; | ||||
| import java.util.Set; | ||||
|  | ||||
| class AccountSecurityImpl extends BaseServiceImplementation implements | ||||
|     AccountSecurity { | ||||
|   private final Logger log = LoggerFactory.getLogger(getClass()); | ||||
|   private final ContactStore contactStore; | ||||
|   private final AuthConfig authConfig; | ||||
|   private final Realm realm; | ||||
|   private final ProjectCache projectCache; | ||||
|   private final Provider<IdentifiedUser> user; | ||||
|   private final EmailTokenVerifier emailTokenVerifier; | ||||
|   private final RegisterNewEmailSender.Factory registerNewEmailFactory; | ||||
|   private final SshKeyCache sshKeyCache; | ||||
|   private final AccountByEmailCache byEmailCache; | ||||
|   private final AccountCache accountCache; | ||||
| @@ -93,11 +82,10 @@ class AccountSecurityImpl extends BaseServiceImplementation implements | ||||
|   @Inject | ||||
|   AccountSecurityImpl(final Provider<ReviewDb> schema, | ||||
|       final Provider<CurrentUser> currentUser, final ContactStore cs, | ||||
|       final AuthConfig ac, final Realm r, final Provider<IdentifiedUser> u, | ||||
|       final Realm r, final Provider<IdentifiedUser> u, | ||||
|       final EmailTokenVerifier etv, final ProjectCache pc, | ||||
|       final RegisterNewEmailSender.Factory esf, final SshKeyCache skc, | ||||
|       final AccountByEmailCache abec, final AccountCache uac, | ||||
|       final AccountManager am, | ||||
|       final SshKeyCache skc, final AccountByEmailCache abec, | ||||
|       final AccountCache uac, final AccountManager am, | ||||
|       final ClearPassword.Factory clearPasswordFactory, | ||||
|       final GeneratePassword.Factory generatePasswordFactory, | ||||
|       final ChangeUserName.CurrentUser changeUserNameFactory, | ||||
| @@ -106,12 +94,10 @@ class AccountSecurityImpl extends BaseServiceImplementation implements | ||||
|       final ChangeHooks hooks, final GroupCache groupCache) { | ||||
|     super(schema, currentUser); | ||||
|     contactStore = cs; | ||||
|     authConfig = ac; | ||||
|     realm = r; | ||||
|     user = u; | ||||
|     emailTokenVerifier = etv; | ||||
|     projectCache = pc; | ||||
|     registerNewEmailFactory = esf; | ||||
|     sshKeyCache = skc; | ||||
|     byEmailCache = abec; | ||||
|     accountCache = uac; | ||||
| @@ -302,31 +288,6 @@ class AccountSecurityImpl extends BaseServiceImplementation implements | ||||
|     }); | ||||
|   } | ||||
|  | ||||
|   public void registerEmail(final String address, | ||||
|       final AsyncCallback<Account> cb) { | ||||
|     if (authConfig.getAuthType() == AuthType.DEVELOPMENT_BECOME_ANY_ACCOUNT) { | ||||
|       try { | ||||
|         accountManager.link(user.get().getAccountId(), | ||||
|             AuthRequest.forEmail(address)); | ||||
|         cb.onSuccess(user.get().getAccount()); | ||||
|       } catch (AccountException e) { | ||||
|         cb.onFailure(e); | ||||
|       } | ||||
|     } else { | ||||
|       try { | ||||
|         final RegisterNewEmailSender sender; | ||||
|         sender = registerNewEmailFactory.create(address); | ||||
|         sender.send(); | ||||
|       } catch (EmailException e) { | ||||
|         log.error("Cannot send email verification message to " + address, e); | ||||
|         cb.onFailure(e); | ||||
|       } catch (RuntimeException e) { | ||||
|         log.error("Cannot send email verification message to " + address, e); | ||||
|         cb.onFailure(e); | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   public void validateEmail(final String tokenString, | ||||
|       final AsyncCallback<VoidResult> callback) { | ||||
|     try { | ||||
| @@ -342,6 +303,8 @@ class AccountSecurityImpl extends BaseServiceImplementation implements | ||||
|       callback.onFailure(e); | ||||
|     } catch (AccountException e) { | ||||
|       callback.onFailure(e); | ||||
|     } catch (OrmException e) { | ||||
|       callback.onFailure(e); | ||||
|     } | ||||
|   } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Edwin Kempin
					Edwin Kempin