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 <[email protected]> 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: [email protected] For additional commands, e-mail: [email protected]
