Accept email address automatically
When we do Gerrit development work we start by creating a "gerrit test site". During test site initialization, normally we select "DEVELOPMENT_BECOME_ANY_ACCOUNT" mode. However, to setup test user accounts we need to register users. For every test-user we add to the test site, Gerrit wants to send a confirmation email which we need to receive and then click the link in it. This change will enable Gerrit accept email address automatically in "DEVELOPMENT_BECOME_ANY_ACCOUNT" mode. Change-Id: Iec6f34e0ecd335b04ef5bf1a5d61c8a906cfd19f
This commit is contained in:
@@ -72,7 +72,7 @@ public interface AccountSecurity extends RemoteJsonService {
|
|||||||
AsyncCallback<VoidResult> callback);
|
AsyncCallback<VoidResult> callback);
|
||||||
|
|
||||||
@SignInRequired
|
@SignInRequired
|
||||||
void registerEmail(String address, AsyncCallback<VoidResult> callback);
|
void registerEmail(String address, AsyncCallback<Account> callback);
|
||||||
|
|
||||||
@SignInRequired
|
@SignInRequired
|
||||||
void validateEmail(String token, AsyncCallback<VoidResult> callback);
|
void validateEmail(String token, AsyncCallback<VoidResult> callback);
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ public interface AccountConstants extends Constants {
|
|||||||
String buttonClearPassword();
|
String buttonClearPassword();
|
||||||
String buttonGeneratePassword();
|
String buttonGeneratePassword();
|
||||||
String invalidUserName();
|
String invalidUserName();
|
||||||
|
String invalidUserEmail();
|
||||||
|
|
||||||
String sshKeyInvalid();
|
String sshKeyInvalid();
|
||||||
String sshKeyAlgorithm();
|
String sshKeyAlgorithm();
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ buttonChangeUserName = Change Username
|
|||||||
buttonClearPassword = Clear Password
|
buttonClearPassword = Clear Password
|
||||||
buttonGeneratePassword = Generate Password
|
buttonGeneratePassword = Generate Password
|
||||||
invalidUserName = Username must contain only letters, numbers, _, - or .
|
invalidUserName = Username must contain only letters, numbers, _, - or .
|
||||||
|
invalidUserEmail = Email format is wrong.
|
||||||
sshKeyInvalid = Invalid Key
|
sshKeyInvalid = Invalid Key
|
||||||
sshKeyAlgorithm = Algorithm
|
sshKeyAlgorithm = Algorithm
|
||||||
sshKeyKey = Key
|
sshKeyKey = Key
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
|
|
||||||
package com.google.gerrit.client.account;
|
package com.google.gerrit.client.account;
|
||||||
|
|
||||||
|
import com.google.gerrit.client.ErrorDialog;
|
||||||
import com.google.gerrit.client.Gerrit;
|
import com.google.gerrit.client.Gerrit;
|
||||||
import com.google.gerrit.client.rpc.GerritCallback;
|
import com.google.gerrit.client.rpc.GerritCallback;
|
||||||
import com.google.gerrit.client.ui.OnEditEnabler;
|
import com.google.gerrit.client.ui.OnEditEnabler;
|
||||||
@@ -21,6 +22,7 @@ import com.google.gerrit.reviewdb.Account;
|
|||||||
import com.google.gerrit.reviewdb.AccountExternalId;
|
import com.google.gerrit.reviewdb.AccountExternalId;
|
||||||
import com.google.gerrit.reviewdb.ContactInformation;
|
import com.google.gerrit.reviewdb.ContactInformation;
|
||||||
import com.google.gerrit.reviewdb.Account.FieldName;
|
import com.google.gerrit.reviewdb.Account.FieldName;
|
||||||
|
import com.google.gerrit.reviewdb.AuthType;
|
||||||
import com.google.gwt.event.dom.client.ChangeEvent;
|
import com.google.gwt.event.dom.client.ChangeEvent;
|
||||||
import com.google.gwt.event.dom.client.ChangeHandler;
|
import com.google.gwt.event.dom.client.ChangeHandler;
|
||||||
import com.google.gwt.event.dom.client.ClickEvent;
|
import com.google.gwt.event.dom.client.ClickEvent;
|
||||||
@@ -38,7 +40,6 @@ import com.google.gwt.user.client.ui.Widget;
|
|||||||
import com.google.gwt.user.client.ui.FormPanel.SubmitEvent;
|
import com.google.gwt.user.client.ui.FormPanel.SubmitEvent;
|
||||||
import com.google.gwtexpui.globalkey.client.NpTextBox;
|
import com.google.gwtexpui.globalkey.client.NpTextBox;
|
||||||
import com.google.gwtexpui.user.client.AutoCenterDialogBox;
|
import com.google.gwtexpui.user.client.AutoCenterDialogBox;
|
||||||
import com.google.gwtjsonrpc.client.VoidResult;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
@@ -205,30 +206,7 @@ class ContactPanelShort extends Composite {
|
|||||||
|
|
||||||
private void postLoad() {
|
private void postLoad() {
|
||||||
if (haveAccount && haveEmails) {
|
if (haveAccount && haveEmails) {
|
||||||
if (currentEmail != null) {
|
updateEmailList();
|
||||||
boolean found = false;
|
|
||||||
for (int i = 0; i < emailPick.getItemCount(); i++) {
|
|
||||||
if (currentEmail.equals(emailPick.getValue(i))) {
|
|
||||||
emailPick.setSelectedIndex(i);
|
|
||||||
found = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!found) {
|
|
||||||
emailPick.addItem(currentEmail);
|
|
||||||
emailPick.setSelectedIndex(emailPick.getItemCount() - 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (emailPick.getItemCount() > 0) {
|
|
||||||
emailPick.setVisible(true);
|
|
||||||
emailPick.setEnabled(true);
|
|
||||||
if (canRegisterNewEmail()) {
|
|
||||||
final String t = Util.C.buttonOpenRegisterNewEmail();
|
|
||||||
emailPick.addItem("... " + t + " ", t);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
emailPick.setVisible(false);
|
|
||||||
}
|
|
||||||
registerNewEmail.setEnabled(true);
|
registerNewEmail.setEnabled(true);
|
||||||
}
|
}
|
||||||
display();
|
display();
|
||||||
@@ -270,14 +248,24 @@ class ContactPanelShort extends Composite {
|
|||||||
event.cancel();
|
event.cancel();
|
||||||
final String addr = inEmail.getText().trim();
|
final String addr = inEmail.getText().trim();
|
||||||
if (!addr.contains("@")) {
|
if (!addr.contains("@")) {
|
||||||
|
new ErrorDialog(Util.C.invalidUserEmail()).center();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
inEmail.setEnabled(false);
|
inEmail.setEnabled(false);
|
||||||
register.setEnabled(false);
|
register.setEnabled(false);
|
||||||
Util.ACCOUNT_SEC.registerEmail(addr, new GerritCallback<VoidResult>() {
|
Util.ACCOUNT_SEC.registerEmail(addr, new GerritCallback<Account>() {
|
||||||
public void onSuccess(VoidResult result) {
|
public void onSuccess(Account currentUser) {
|
||||||
box.hide();
|
box.hide();
|
||||||
|
if (Gerrit.getConfig().getAuthType() == AuthType.DEVELOPMENT_BECOME_ANY_ACCOUNT) {
|
||||||
|
currentEmail = addr;
|
||||||
|
if (emailPick.getItemCount() == 0) {
|
||||||
|
onSaveSuccess(currentUser);
|
||||||
|
} else {
|
||||||
|
save.setEnabled(true);
|
||||||
|
}
|
||||||
|
updateEmailList();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -309,7 +297,9 @@ class ContactPanelShort extends Composite {
|
|||||||
buttons.add(register);
|
buttons.add(register);
|
||||||
buttons.add(cancel);
|
buttons.add(cancel);
|
||||||
|
|
||||||
body.add(new HTML(Util.C.descRegisterNewEmail()));
|
if (Gerrit.getConfig().getAuthType() != AuthType.DEVELOPMENT_BECOME_ANY_ACCOUNT) {
|
||||||
|
body.add(new HTML(Util.C.descRegisterNewEmail()));
|
||||||
|
}
|
||||||
body.add(inEmail);
|
body.add(inEmail);
|
||||||
body.add(buttons);
|
body.add(buttons);
|
||||||
|
|
||||||
@@ -367,4 +357,39 @@ class ContactPanelShort extends Composite {
|
|||||||
ContactInformation toContactInformation() {
|
ContactInformation toContactInformation() {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int emailListIndexOf(String value) {
|
||||||
|
for (int i = 0; i < emailPick.getItemCount(); i++) {
|
||||||
|
if (value.equalsIgnoreCase(emailPick.getValue(i))) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateEmailList() {
|
||||||
|
if (currentEmail != null) {
|
||||||
|
int index = emailListIndexOf(currentEmail);
|
||||||
|
if (index == -1) {
|
||||||
|
emailPick.addItem(currentEmail);
|
||||||
|
emailPick.setSelectedIndex(emailPick.getItemCount() - 1);
|
||||||
|
} else {
|
||||||
|
emailPick.setSelectedIndex(index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (emailPick.getItemCount() > 0) {
|
||||||
|
emailPick.setVisible(true);
|
||||||
|
emailPick.setEnabled(true);
|
||||||
|
if (canRegisterNewEmail()) {
|
||||||
|
final String t = Util.C.buttonOpenRegisterNewEmail();
|
||||||
|
int index = emailListIndexOf(t);
|
||||||
|
if (index != -1) {
|
||||||
|
emailPick.removeItem(index);
|
||||||
|
}
|
||||||
|
emailPick.addItem("... " + t + " ", t);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
emailPick.setVisible(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import com.google.gerrit.reviewdb.AccountAgreement;
|
|||||||
import com.google.gerrit.reviewdb.AccountExternalId;
|
import com.google.gerrit.reviewdb.AccountExternalId;
|
||||||
import com.google.gerrit.reviewdb.AccountGroup;
|
import com.google.gerrit.reviewdb.AccountGroup;
|
||||||
import com.google.gerrit.reviewdb.AccountSshKey;
|
import com.google.gerrit.reviewdb.AccountSshKey;
|
||||||
|
import com.google.gerrit.reviewdb.AuthType;
|
||||||
import com.google.gerrit.reviewdb.ContactInformation;
|
import com.google.gerrit.reviewdb.ContactInformation;
|
||||||
import com.google.gerrit.reviewdb.ContributorAgreement;
|
import com.google.gerrit.reviewdb.ContributorAgreement;
|
||||||
import com.google.gerrit.reviewdb.ReviewDb;
|
import com.google.gerrit.reviewdb.ReviewDb;
|
||||||
@@ -270,18 +271,27 @@ class AccountSecurityImpl extends BaseServiceImplementation implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void registerEmail(final String address,
|
public void registerEmail(final String address,
|
||||||
final AsyncCallback<VoidResult> cb) {
|
final AsyncCallback<Account> cb) {
|
||||||
try {
|
if (authConfig.getAuthType() == AuthType.DEVELOPMENT_BECOME_ANY_ACCOUNT) {
|
||||||
final RegisterNewEmailSender sender;
|
try {
|
||||||
sender = registerNewEmailFactory.create(address);
|
accountManager.link(user.get().getAccountId(),
|
||||||
sender.send();
|
AuthRequest.forEmail(address));
|
||||||
cb.onSuccess(VoidResult.INSTANCE);
|
cb.onSuccess(user.get().getAccount());
|
||||||
} catch (EmailException e) {
|
} catch (AccountException e) {
|
||||||
log.error("Cannot send email verification message to " + address, e);
|
cb.onFailure(e);
|
||||||
cb.onFailure(e);
|
}
|
||||||
} catch (RuntimeException e) {
|
} else {
|
||||||
log.error("Cannot send email verification message to " + address, e);
|
try {
|
||||||
cb.onFailure(e);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user