You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2019/11/04 11:23:48 UTC

[james-project] 12/30: JAMES-2948 Allow 255 characters-usernames to be created

This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit b9f55a83c13c8c71562843a4e88aa0a1ea8d7911
Author: Gautier DI FOLCO <gd...@linagora.com>
AuthorDate: Wed Oct 30 14:54:14 2019 +0100

    JAMES-2948 Allow 255 characters-usernames to be created
---
 core/src/main/java/org/apache/james/core/User.java     |  4 +++-
 core/src/test/java/org/apache/james/core/UserTest.java | 18 +++++++++++++++++-
 server/protocols/webadmin/webadmin-data/pom.xml        |  9 +++++++++
 .../org/apache/james/webadmin/service/UserService.java |  6 +-----
 .../apache/james/webadmin/routes/UsersRoutesTest.java  | 12 ++++++++++++
 5 files changed, 42 insertions(+), 7 deletions(-)

diff --git a/core/src/main/java/org/apache/james/core/User.java b/core/src/main/java/org/apache/james/core/User.java
index 299f767..044f730 100644
--- a/core/src/main/java/org/apache/james/core/User.java
+++ b/core/src/main/java/org/apache/james/core/User.java
@@ -32,9 +32,11 @@ import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableList;
 
 public class User {
+    public static final int MAXIMUM_MAIL_ADDRESS_LENGTH = 255;
+
     public static User fromUsername(String username) {
-        Preconditions.checkNotNull(username);
         Preconditions.checkArgument(!Strings.isNullOrEmpty(username));
+        Preconditions.checkArgument(username.length() <= MAXIMUM_MAIL_ADDRESS_LENGTH);
 
         List<String> parts = ImmutableList.copyOf(Splitter.on('@').split(username));
         switch (parts.size()) {
diff --git a/core/src/test/java/org/apache/james/core/UserTest.java b/core/src/test/java/org/apache/james/core/UserTest.java
index 29ae95b..bbf83d9 100644
--- a/core/src/test/java/org/apache/james/core/UserTest.java
+++ b/core/src/test/java/org/apache/james/core/UserTest.java
@@ -24,6 +24,8 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import java.util.Optional;
 
+import org.apache.commons.lang3.StringUtils;
+
 import org.junit.Test;
 
 public class UserTest {
@@ -116,7 +118,7 @@ public class UserTest {
     @Test
     public void fromUsernameShouldThrowOnNull() {
         assertThatThrownBy(() -> User.fromUsername(null))
-            .isInstanceOf(NullPointerException.class);
+            .isInstanceOf(IllegalArgumentException.class);
     }
 
     @Test
@@ -126,6 +128,20 @@ public class UserTest {
     }
 
     @Test
+    public void fromUsernameShouldAllow255LongUsername() {
+        String tail = "@a";
+        assertThat(User.fromUsername(StringUtils.repeat('j', 255 - tail.length()) + tail).asString())
+            .hasSize(255);
+    }
+
+    @Test
+    public void fromUsernameShouldThrowWhenTooLong() {
+        String tail = "@a";
+        assertThatThrownBy(() -> User.fromUsername(StringUtils.repeat('j', 255 - tail.length() + 1) + tail))
+            .isInstanceOf(IllegalArgumentException.class);
+    }
+
+    @Test
     public void fromUsernameShouldThrowWhenMultipleDomainDelimiter() {
         assertThatThrownBy(() -> User.fromUsername("aa@aa@aa"))
             .isInstanceOf(IllegalArgumentException.class);
diff --git a/server/protocols/webadmin/webadmin-data/pom.xml b/server/protocols/webadmin/webadmin-data/pom.xml
index 30b0527..8694906 100644
--- a/server/protocols/webadmin/webadmin-data/pom.xml
+++ b/server/protocols/webadmin/webadmin-data/pom.xml
@@ -88,6 +88,15 @@
             <artifactId>guava</artifactId>
         </dependency>
         <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+        </dependency>
+        <dependency>
             <groupId>io.rest-assured</groupId>
             <artifactId>rest-assured</artifactId>
             <scope>test</scope>
diff --git a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/service/UserService.java b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/service/UserService.java
index c31357b..9b09d7a 100644
--- a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/service/UserService.java
+++ b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/service/UserService.java
@@ -36,8 +36,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.github.steveash.guavate.Guavate;
-import com.google.common.base.Preconditions;
-import com.google.common.base.Strings;
 
 import spark.Response;
 
@@ -51,7 +49,6 @@ public class UserService {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(UserService.class);
     private static final String EMPTY_BODY = "";
-    public static final int MAXIMUM_MAIL_ADDRESS_LENGTH = 255;
 
     private final UsersRepository usersRepository;
 
@@ -88,8 +85,7 @@ public class UserService {
 
     private void usernamePreconditions(String username) {
         try {
-            Preconditions.checkArgument(!Strings.isNullOrEmpty(username));
-            Preconditions.checkArgument(username.length() < MAXIMUM_MAIL_ADDRESS_LENGTH);
+            org.apache.james.core.User.fromUsername(username);
         } catch (IllegalArgumentException e) {
             throw new InvalidUsername(e);
         }
diff --git a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/UsersRoutesTest.java b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/UsersRoutesTest.java
index ce287bb..e43b8ea 100644
--- a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/UsersRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/UsersRoutesTest.java
@@ -32,6 +32,7 @@ import static org.mockito.Mockito.when;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.commons.lang3.StringUtils;
 import org.apache.james.core.Domain;
 import org.apache.james.domainlist.api.DomainList;
 import org.apache.james.user.api.UsersRepository;
@@ -143,6 +144,17 @@ class UsersRoutesTest {
         }
 
         @Test
+        void putShouldReturnOkWhenWithA255LongUsername() {
+            String usernameTail = "@" + DOMAIN.name();
+            given()
+                .body("{\"password\":\"password\"}")
+            .when()
+                .put(StringUtils.repeat('j', 255 - usernameTail.length()) + usernameTail)
+            .then()
+                .statusCode(HttpStatus.NO_CONTENT_204);
+        }
+
+        @Test
         void putShouldReturnRequireNonNullPassword() {
             given()
                 .body("{\"password\":null}")


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org