Add hasEmailAddress to IdentifiedUser
This allows validation code to pass in an email address
for checking, and lets IdentifiedUser worry about how
that occurs.
This refactoring opens the door to delegating the check
to backend systems that are not able to supply the entire
valid email list for a user.
Change-Id: I3db2b34d311d0c8f6f5c0cfdaa109d44fd79e264
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/account/AccountSecurityImpl.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/account/AccountSecurityImpl.java
index 0ff12f0..b2a6afc 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/account/AccountSecurityImpl.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/account/AccountSecurityImpl.java
@@ -144,7 +144,7 @@
me.setFullName(Strings.emptyToNull(name));
}
if (!Strings.isNullOrEmpty(emailAddr)
- && !self.getEmailAddresses().contains(emailAddr)) {
+ && !self.hasEmailAddress(emailAddr)) {
throw new Failure(new PermissionDeniedException("Email address must be verified"));
}
me.setPreferredEmail(Strings.emptyToNull(emailAddr));
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/IdentifiedUser.java b/gerrit-server/src/main/java/com/google/gerrit/server/IdentifiedUser.java
index bb16710..a8b42ed 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/IdentifiedUser.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/IdentifiedUser.java
@@ -270,6 +270,10 @@
return diffPref;
}
+ public boolean hasEmailAddress(String email) {
+ return getEmailAddresses().contains(email);
+ }
+
public Set<String> getEmailAddresses() {
if (emailAddresses == null) {
emailAddresses = state().getEmailAddresses();
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/account/Emails.java b/gerrit-server/src/main/java/com/google/gerrit/server/account/Emails.java
index a178562..733cf5b 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/account/Emails.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/account/Emails.java
@@ -66,7 +66,7 @@
throw new ResourceNotFoundException();
}
return new AccountResource.Email(rsrc.getUser(), email);
- } else if (rsrc.getUser().getEmailAddresses().contains(id.get())) {
+ } else if (rsrc.getUser().hasEmailAddress(id.get())) {
return new AccountResource.Email(rsrc.getUser(), id.get());
} else {
throw new ResourceNotFoundException();
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeUtil.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeUtil.java
index 043e024..4a6c8de 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeUtil.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeUtil.java
@@ -379,8 +379,7 @@
final Timestamp dt = submitter.getGranted();
final TimeZone tz = myIdent.getTimeZone();
- if (emails.size() == 1
- && who.getEmailAddresses().contains(emails.iterator().next())) {
+ if (emails.size() == 1 && who.hasEmailAddress(emails.iterator().next())) {
authorIdent =
new PersonIdent(codeReviewCommits.get(0).getAuthorIdent(), dt, tz);
} else {
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java
index cfc27b6..1218a45 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java
@@ -2279,7 +2279,7 @@
break;
}
- if (defaultName && currentUser.getEmailAddresses().contains(
+ if (defaultName && currentUser.hasEmailAddress(
c.getCommitterIdent().getEmailAddress())) {
try {
Account a = db.accounts().get(currentUser.getAccountId());
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/validators/CommitValidators.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/validators/CommitValidators.java
index 901843f..d030a55 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/validators/CommitValidators.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/validators/CommitValidators.java
@@ -394,7 +394,7 @@
if (e != null) {
sboAuthor |= author.getEmailAddress().equals(e);
sboCommitter |= committer.getEmailAddress().equals(e);
- sboMe |= currentUser.getEmailAddresses().contains(e);
+ sboMe |= currentUser.hasEmailAddress(e);
}
}
}
@@ -425,7 +425,7 @@
IdentifiedUser currentUser = (IdentifiedUser) refControl.getCurrentUser();
final PersonIdent author = receiveEvent.commit.getAuthorIdent();
- if (!currentUser.getEmailAddresses().contains(author.getEmailAddress())
+ if (!currentUser.hasEmailAddress(author.getEmailAddress())
&& !refControl.canForgeAuthor()) {
List<CommitValidationMessage> messages = new LinkedList<>();
@@ -454,8 +454,7 @@
CommitReceivedEvent receiveEvent) throws CommitValidationException {
IdentifiedUser currentUser = (IdentifiedUser) refControl.getCurrentUser();
final PersonIdent committer = receiveEvent.commit.getCommitterIdent();
- if (!currentUser.getEmailAddresses()
- .contains(committer.getEmailAddress())
+ if (!currentUser.hasEmailAddress(committer.getEmailAddress())
&& !refControl.canForgeCommitter()) {
List<CommitValidationMessage> messages = new LinkedList<>();
messages.add(getInvalidEmailError(receiveEvent.commit, "committer", committer,
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java b/gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java
index d3a8b69..669afc6 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java
@@ -297,7 +297,7 @@
if (getCurrentUser().isIdentifiedUser()) {
final IdentifiedUser user = (IdentifiedUser) getCurrentUser();
final String addr = tagger.getEmailAddress();
- valid = user.getEmailAddresses().contains(addr);
+ valid = user.hasEmailAddress(addr);
} else {
valid = false;
}