From b1547d2b69af179d5bdcec976fc08f84388694da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Mon, 25 Mar 2019 15:41:21 +0100 Subject: [PATCH] Harmonize user and group name validation, again --- .../main/java/sonia/scm/util/ValidationUtil.java | 4 ++-- .../java/sonia/scm/util/ValidationUtilTest.java | 2 +- .../util/ValidationUtil_IllegalCharactersTest.java | 10 +++++----- .../sonia/scm/api/v2/ValidationConstraints.java | 14 -------------- .../java/sonia/scm/api/v2/resources/GroupDto.java | 5 ++--- .../api/v2/resources/RepositoryPermissionDto.java | 5 ++--- .../java/sonia/scm/api/v2/resources/UserDto.java | 5 ++--- 7 files changed, 14 insertions(+), 31 deletions(-) rename scm-webapp/src/test/java/sonia/scm/api/v2/ValidationConstraints_IllegalCharactersTest.java => scm-core/src/test/java/sonia/scm/util/ValidationUtil_IllegalCharactersTest.java (81%) delete mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/ValidationConstraints.java diff --git a/scm-core/src/main/java/sonia/scm/util/ValidationUtil.java b/scm-core/src/main/java/sonia/scm/util/ValidationUtil.java index bc710d9a50..243f5e72d7 100644 --- a/scm-core/src/main/java/sonia/scm/util/ValidationUtil.java +++ b/scm-core/src/main/java/sonia/scm/util/ValidationUtil.java @@ -53,8 +53,8 @@ public final class ValidationUtil "^[A-Za-z0-9][\\w.-]*@[A-Za-z0-9][\\w\\-\\.]*\\.[A-Za-z0-9][A-Za-z0-9-]+$"; /** Field description */ - private static final String REGEX_NAME = - "^[A-Za-z0-9\\.\\-_@]|[^ ]([A-Za-z0-9\\.\\-_@ ]*[A-Za-z0-9\\.\\-_@]|[^ ])?$"; + public static final String REGEX_NAME = + "^[A-Za-z0-9\\.\\-_][A-Za-z0-9\\.\\-_@]*$"; public static final String REGEX_REPOSITORYNAME = "(?!^\\.\\.$)(?!^\\.$)(?!.*[\\\\\\[\\]])^[A-Za-z0-9\\.][A-Za-z0-9\\.\\-_]*$"; diff --git a/scm-core/src/test/java/sonia/scm/util/ValidationUtilTest.java b/scm-core/src/test/java/sonia/scm/util/ValidationUtilTest.java index e62f208e58..972ed95a2d 100644 --- a/scm-core/src/test/java/sonia/scm/util/ValidationUtilTest.java +++ b/scm-core/src/test/java/sonia/scm/util/ValidationUtilTest.java @@ -110,10 +110,10 @@ public class ValidationUtilTest assertTrue(ValidationUtil.isNameValid("Test123-git")); assertTrue(ValidationUtil.isNameValid("Test_user-123.git")); assertTrue(ValidationUtil.isNameValid("test@scm-manager.de")); - assertTrue(ValidationUtil.isNameValid("test 123")); assertTrue(ValidationUtil.isNameValid("t")); // false + assertFalse(ValidationUtil.isNameValid("test 123")); assertFalse(ValidationUtil.isNameValid(" test 123")); assertFalse(ValidationUtil.isNameValid(" test 123 ")); assertFalse(ValidationUtil.isNameValid("test 123 ")); diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/ValidationConstraints_IllegalCharactersTest.java b/scm-core/src/test/java/sonia/scm/util/ValidationUtil_IllegalCharactersTest.java similarity index 81% rename from scm-webapp/src/test/java/sonia/scm/api/v2/ValidationConstraints_IllegalCharactersTest.java rename to scm-core/src/test/java/sonia/scm/util/ValidationUtil_IllegalCharactersTest.java index c56f6195fe..5c6431ea3a 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/ValidationConstraints_IllegalCharactersTest.java +++ b/scm-core/src/test/java/sonia/scm/util/ValidationUtil_IllegalCharactersTest.java @@ -1,4 +1,4 @@ -package sonia.scm.api.v2; +package sonia.scm.util; import org.junit.Test; import org.junit.runner.RunWith; @@ -13,18 +13,18 @@ import java.util.stream.Stream; import static java.util.Arrays.asList; import static org.junit.Assert.assertFalse; -import static sonia.scm.api.v2.ValidationConstraints.USER_GROUP_PATTERN; +import static sonia.scm.util.ValidationUtil.REGEX_NAME; @RunWith(Parameterized.class) -public class ValidationConstraints_IllegalCharactersTest { +public class ValidationUtil_IllegalCharactersTest { private static final List ACCEPTED_CHARS = asList('@', '_', '-', '.'); - private final Pattern userGroupPattern=Pattern.compile(USER_GROUP_PATTERN); + private final Pattern userGroupPattern=Pattern.compile(REGEX_NAME); private final String expression; - public ValidationConstraints_IllegalCharactersTest(String expression) { + public ValidationUtil_IllegalCharactersTest(String expression) { this.expression = expression; } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/ValidationConstraints.java b/scm-webapp/src/main/java/sonia/scm/api/v2/ValidationConstraints.java deleted file mode 100644 index b136ee1bf7..0000000000 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/ValidationConstraints.java +++ /dev/null @@ -1,14 +0,0 @@ -package sonia.scm.api.v2; - -public final class ValidationConstraints { - - private ValidationConstraints() {} - - /** - * A user or group name should not start with @ or a whitespace - * and it not contains whitespaces - * and the characters: . - _ @ are allowed - */ - public static final String USER_GROUP_PATTERN = "^[A-Za-z0-9\\.\\-_][A-Za-z0-9\\.\\-_@]*$"; - -} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupDto.java index bdbab5f9ff..3566589b3c 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupDto.java @@ -7,14 +7,13 @@ import de.otto.edison.hal.Links; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import sonia.scm.util.ValidationUtil; import javax.validation.constraints.Pattern; import java.time.Instant; import java.util.List; import java.util.Map; -import static sonia.scm.api.v2.ValidationConstraints.USER_GROUP_PATTERN; - @Getter @Setter @NoArgsConstructor public class GroupDto extends HalRepresentation { @@ -22,7 +21,7 @@ public class GroupDto extends HalRepresentation { private String description; @JsonInclude(JsonInclude.Include.NON_NULL) private Instant lastModified; - @Pattern(regexp = USER_GROUP_PATTERN) + @Pattern(regexp = ValidationUtil.REGEX_NAME) private String name; private String type; private Map properties; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPermissionDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPermissionDto.java index fe8c2c19b1..fada89c44e 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPermissionDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPermissionDto.java @@ -7,19 +7,18 @@ import lombok.NoArgsConstructor; import lombok.Setter; import lombok.ToString; import org.hibernate.validator.constraints.NotEmpty; +import sonia.scm.util.ValidationUtil; import javax.validation.constraints.Pattern; import java.util.Collection; -import static sonia.scm.api.v2.ValidationConstraints.USER_GROUP_PATTERN; - @Getter @Setter @ToString @NoArgsConstructor public class RepositoryPermissionDto extends HalRepresentation { public static final String GROUP_PREFIX = "@"; - @Pattern(regexp = USER_GROUP_PATTERN) + @Pattern(regexp = ValidationUtil.REGEX_NAME) private String name; @NotEmpty diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserDto.java index bf56f01675..a46f353be4 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserDto.java @@ -9,13 +9,12 @@ import lombok.NoArgsConstructor; import lombok.Setter; import org.hibernate.validator.constraints.Email; import org.hibernate.validator.constraints.NotEmpty; +import sonia.scm.util.ValidationUtil; import javax.validation.constraints.Pattern; import java.time.Instant; import java.util.Map; -import static sonia.scm.api.v2.ValidationConstraints.USER_GROUP_PATTERN; - @NoArgsConstructor @Getter @Setter public class UserDto extends HalRepresentation { private boolean active; @@ -26,7 +25,7 @@ public class UserDto extends HalRepresentation { private Instant lastModified; @NotEmpty @Email private String mail; - @Pattern(regexp = USER_GROUP_PATTERN) + @Pattern(regexp = ValidationUtil.REGEX_NAME) private String name; @JsonInclude(JsonInclude.Include.NON_NULL) private String password;