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