summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJacek Centkowski <jcentkowski@collab.net>2018-08-31 15:44:44 +0200
committerJacek Centkowski <jcentkowski@collab.net>2018-09-05 14:00:30 +0200
commitdc118d9a7ee52abe4335cb7f02f0455009f9bc01 (patch)
tree34a48d9fd5dfc1cea7eb69546bb5a2771b2aeeca
parent3f9c740c4a18da4380b91bc9120fcccf1b6e35c0 (diff)
Allow more email RFC accepted chars in username
Issue: Gerrit allows to specify email like username (especially handy when one wants to maintain unique email addresses across the server). However as opposite to what is described in [1] it allows only: ._- characters from allowed set that contains !#$%&‘*+–/=?^_`.{|}~ Considering the fact that I was able to perform clone (over SSH and HTTP) push for review, review and submit with all those characters but / this patch proposes to extend username allowed chars to !#$%&‘*+–=?^_`.{|}~ when @ is used (we have email like username) but keeps original characters set a-zA-Z0-9 when one uses single character for username. [1] https://www.mailboxvalidator.com/resources/articles/acceptable-email-address-syntax-rfc/ Change-Id: Iabb82cea5be32a68fe1d9fc65a6ca08743063a3f Signed-off-by: Jacek Centkowski <jcentkowski@collab.net>
-rw-r--r--gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/accounts/AccountIT.java13
-rw-r--r--gerrit-gwtui/src/main/java/com/google/gerrit/client/account/UsernameField.java2
-rw-r--r--gerrit-server/src/main/java/com/google/gerrit/server/account/ExternalId.java2
3 files changed, 13 insertions, 4 deletions
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/accounts/AccountIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/accounts/AccountIT.java
index e5ddbbbd87..e6fd60ddc1 100644
--- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/accounts/AccountIT.java
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/accounts/AccountIT.java
@@ -856,7 +856,13 @@ public class AccountIT extends AbstractDaemonTest {
public void createUserWithValidUsername() throws Exception {
ImmutableList<String> names =
ImmutableList.of(
- "user@domain", "user-name", "user_name", "1234", "user1234", "1234@domain");
+ "user@domain",
+ "user-name",
+ "user_name",
+ "1234",
+ "user1234",
+ "1234@domain",
+ "user!+alias{*}#$%&’^=~|@domain");
for (String name : names) {
gApi.accounts().create(name);
}
@@ -864,7 +870,10 @@ public class AccountIT extends AbstractDaemonTest {
@Test
public void createUserWithInvalidUsername() throws Exception {
- ImmutableList<String> invalidNames = ImmutableList.of("@", "@foo", "-", "-foo", "_", "_foo");
+ ImmutableList<String> invalidNames =
+ ImmutableList.of(
+ "@", "@foo", "-", "-foo", "_", "_foo", "!", "+", "{", "}", "*", "%", "#", "$", "&", "’",
+ "^", "=", "~");
for (String name : invalidNames) {
try {
gApi.accounts().create(name);
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/account/UsernameField.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/account/UsernameField.java
index a717a9038e..e201a8f74b 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/account/UsernameField.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/account/UsernameField.java
@@ -41,7 +41,7 @@ class UsernameField extends Composite {
// corresponding regular expressions in the
// com.google.gerrit.server.account.ExternalId class.
private static final String USER_NAME_PATTERN_FIRST_REGEX = "[a-zA-Z0-9]";
- private static final String USER_NAME_PATTERN_REST_REGEX = "[a-zA-Z0-9._@-]";
+ private static final String USER_NAME_PATTERN_REST_REGEX = "[a-zA-Z0-9.!#$%&’*+=?^_`\\{|\\}~@-]";
private CopyableLabel userNameLbl;
private NpTextBox userNameTxt;
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/account/ExternalId.java b/gerrit-server/src/main/java/com/google/gerrit/server/account/ExternalId.java
index ad1d2fbbf2..0a8a028712 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/account/ExternalId.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/account/ExternalId.java
@@ -42,7 +42,7 @@ public abstract class ExternalId implements Serializable {
// corresponding regular expressions in the
// com.google.gerrit.client.account.UsernameField class.
private static final String USER_NAME_PATTERN_FIRST_REGEX = "[a-zA-Z0-9]";
- private static final String USER_NAME_PATTERN_REST_REGEX = "[a-zA-Z0-9._@-]";
+ private static final String USER_NAME_PATTERN_REST_REGEX = "[a-zA-Z0-9.!#$%&’*+=?^_`\\{|\\}~@-]";
private static final String USER_NAME_PATTERN_LAST_REGEX = "[a-zA-Z0-9]";
/** Regular expression that a username must match. */