diff options
author | Jacek Centkowski <jcentkowski@collab.net> | 2018-08-31 15:44:44 +0200 |
---|---|---|
committer | Jacek Centkowski <jcentkowski@collab.net> | 2018-09-05 14:00:30 +0200 |
commit | dc118d9a7ee52abe4335cb7f02f0455009f9bc01 (patch) | |
tree | 34a48d9fd5dfc1cea7eb69546bb5a2771b2aeeca | |
parent | 3f9c740c4a18da4380b91bc9120fcccf1b6e35c0 (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>
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. */ |