diff options
author | James Moger <james.moger@gitblit.com> | 2013-11-25 00:00:41 -0500 |
---|---|---|
committer | James Moger <james.moger@gitblit.com> | 2013-11-29 11:05:51 -0500 |
commit | f19b78e12517db6c4dcbb1981423830ea39916b3 (patch) | |
tree | 018f2389bf235c25bb3a2eda73ae9ecd71d7f3a1 /src | |
parent | 04a98505a4ab8f48aee22800fcac193d9367d0ae (diff) | |
download | gitblit-f19b78e12517db6c4dcbb1981423830ea39916b3.tar.gz gitblit-f19b78e12517db6c4dcbb1981423830ea39916b3.zip |
Revised committer verification to require email address
Change-Id: I5298c93e03099813f5713a4effd87913429aa3dc
Diffstat (limited to 'src')
-rw-r--r-- | src/main/java/com/gitblit/git/GitblitReceivePack.java | 20 | ||||
-rw-r--r-- | src/main/java/com/gitblit/models/UserModel.java | 13 | ||||
-rw-r--r-- | src/site/administration.mkd | 4 | ||||
-rw-r--r-- | src/test/java/com/gitblit/tests/GitBlitTest.java | 12 | ||||
-rw-r--r-- | src/test/java/com/gitblit/tests/GitServletTest.java | 20 |
5 files changed, 25 insertions, 44 deletions
diff --git a/src/main/java/com/gitblit/git/GitblitReceivePack.java b/src/main/java/com/gitblit/git/GitblitReceivePack.java index 95d17fa5..ebea2658 100644 --- a/src/main/java/com/gitblit/git/GitblitReceivePack.java +++ b/src/main/java/com/gitblit/git/GitblitReceivePack.java @@ -167,8 +167,11 @@ public class GitblitReceivePack extends ReceivePack implements PreReceiveHook, P if (repository.accessRestriction.atLeast(AccessRestrictionType.PUSH) && repository.verifyCommitter) {
// enforce committer verification
if (StringUtils.isEmpty(user.emailAddress)) {
- // emit warning if user does not have an email address
- LOGGER.warn(MessageFormat.format("Consider setting an email address for {0} ({1}) to improve committer verification.", user.getDisplayName(), user.username));
+ // reject the push because the pushing account does not have an email address
+ for (ReceiveCommand cmd : commands) {
+ sendRejection(cmd, "Sorry, the account \"{0}\" does not have an email address set for committer verification!", user.username);
+ }
+ return;
}
// Optionally enforce that the committer of first parent chain
@@ -201,16 +204,9 @@ public class GitblitReceivePack extends ReceivePack implements PreReceiveHook, P PersonIdent committer = commit.getCommitterIdent();
if (!user.is(committer.getName(), committer.getEmailAddress())) {
- String reason;
- if (StringUtils.isEmpty(user.emailAddress)) {
- // account does not have an email address
- reason = MessageFormat.format("{0} by {1} <{2}> was not committed by {3} ({4})",
- commit.getId().name(), committer.getName(), StringUtils.isEmpty(committer.getEmailAddress()) ? "?":committer.getEmailAddress(), user.getDisplayName(), user.username);
- } else {
- // account has an email address
- reason = MessageFormat.format("{0} by {1} <{2}> was not committed by {3} ({4}) <{5}>",
- commit.getId().name(), committer.getName(), StringUtils.isEmpty(committer.getEmailAddress()) ? "?":committer.getEmailAddress(), user.getDisplayName(), user.username, user.emailAddress);
- }
+ // verification failed
+ String reason = MessageFormat.format("{0} by {1} <{2}> was not committed by {3} ({4}) <{5}>",
+ commit.getId().name(), committer.getName(), StringUtils.isEmpty(committer.getEmailAddress()) ? "?":committer.getEmailAddress(), user.getDisplayName(), user.username, user.emailAddress);
LOGGER.warn(reason);
cmd.setResult(Result.REJECTED_OTHER_REASON, reason);
allRejected &= true;
diff --git a/src/main/java/com/gitblit/models/UserModel.java b/src/main/java/com/gitblit/models/UserModel.java index 446db3ab..0b59927f 100644 --- a/src/main/java/com/gitblit/models/UserModel.java +++ b/src/main/java/com/gitblit/models/UserModel.java @@ -648,22 +648,19 @@ public class UserModel implements Principal, Serializable, Comparable<UserModel> * @return true, if the name and email address match this account
*/
public boolean is(String name, String email) {
- // at a minimum a usename or display name must be supplied
- if (StringUtils.isEmpty(name)) {
+ // at a minimum a username or display name AND email address must be supplied
+ if (StringUtils.isEmpty(name) || StringUtils.isEmpty(email)) {
return false;
}
boolean nameVerified = name.equalsIgnoreCase(username) || name.equalsIgnoreCase(getDisplayName());
boolean emailVerified = false;
if (StringUtils.isEmpty(emailAddress)) {
// user account has not specified an email address
- // rely on username/displayname verification
- emailVerified = true;
+ // fail
+ emailVerified = false;
} else {
// user account has specified an email address
- // require email address verification
- if (!StringUtils.isEmpty(email)) {
- emailVerified = email.equalsIgnoreCase(emailAddress);
- }
+ emailVerified = email.equalsIgnoreCase(emailAddress);
}
return nameVerified && emailVerified;
}
diff --git a/src/site/administration.mkd b/src/site/administration.mkd index dad4f414..1a5aca1a 100644 --- a/src/site/administration.mkd +++ b/src/site/administration.mkd @@ -94,7 +94,7 @@ You may optionally enable committer verification which requires that each commit **How is this enforced?**
-Bob must set his *user.name* and *user.email* values for the repository to match his Gitblit user account **BEFORE** committing to his repository.
+Bob must properly set his *user.name* and *user.email* values for the repository to match his Gitblit user account **BEFORE** committing to his repository.
```
[user "bob"]
@@ -109,7 +109,7 @@ or git config user.name bob
git config user.email bob@somewhere.com
-If the Gitblit account does not specify an email address, then the committer email address is ignored. However, if the account does specify an address it must match the committer's email address. Display name or username can be used as the committer name.
+The committer email address is required to be identical. Display name or username can be used as the committer name.
All checks are case-insensitive.
diff --git a/src/test/java/com/gitblit/tests/GitBlitTest.java b/src/test/java/com/gitblit/tests/GitBlitTest.java index c01862fe..1f81b875 100644 --- a/src/test/java/com/gitblit/tests/GitBlitTest.java +++ b/src/test/java/com/gitblit/tests/GitBlitTest.java @@ -70,13 +70,13 @@ public class GitBlitTest extends GitblitUnitTest { UserModel user = new UserModel("james");
user.displayName = "James Moger";
- assertTrue(user.is("James", null));
- assertTrue(user.is("James", ""));
- assertTrue(user.is("JaMeS", "anything"));
+ assertFalse(user.is("James", null));
+ assertFalse(user.is("James", ""));
+ assertFalse(user.is("JaMeS", "anything"));
- assertTrue(user.is("james moger", null));
- assertTrue(user.is("james moger", ""));
- assertTrue(user.is("james moger", "anything"));
+ assertFalse(user.is("james moger", null));
+ assertFalse(user.is("james moger", ""));
+ assertFalse(user.is("james moger", "anything"));
assertFalse(user.is("joe", null));
assertFalse(user.is("joe", ""));
diff --git a/src/test/java/com/gitblit/tests/GitServletTest.java b/src/test/java/com/gitblit/tests/GitServletTest.java index bc392885..ad61a676 100644 --- a/src/test/java/com/gitblit/tests/GitServletTest.java +++ b/src/test/java/com/gitblit/tests/GitServletTest.java @@ -380,27 +380,15 @@ public class GitServletTest extends GitblitUnitTest { public void testCommitterVerification() throws Exception {
UserModel user = getUser();
- // account only uses account name to verify
- testCommitterVerification(user, user.username, null, true);
- // committer email address is ignored because account does not specify email
- testCommitterVerification(user, user.username, "something", true);
- // completely different committer
testCommitterVerification(user, "joe", null, false);
+ testCommitterVerification(user, "joe", user.emailAddress, false);
+ testCommitterVerification(user, user.username, null, false);
+ testCommitterVerification(user, user.username, user.emailAddress, true);
- // test display name verification
user.displayName = "James Moger";
- testCommitterVerification(user, user.displayName, null, true);
- testCommitterVerification(user, user.displayName, "something", true);
- testCommitterVerification(user, "joe", null, false);
-
- // test email address verification
- user.emailAddress = "something";
testCommitterVerification(user, user.displayName, null, false);
- testCommitterVerification(user, user.displayName, "somethingelse", false);
+ testCommitterVerification(user, user.displayName, "something", false);
testCommitterVerification(user, user.displayName, user.emailAddress, true);
-
- // use same email address but with different committer
- testCommitterVerification(user, "joe", "somethingelse", false);
}
private void testCommitterVerification(UserModel user, String displayName, String emailAddress, boolean expectedSuccess) throws Exception {
|