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 1/6] 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; From 5ca4bf6b302e83256cf06de9452b70d2c1d229bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Fri, 29 Mar 2019 10:03:59 +0100 Subject: [PATCH 2/6] Create intermediate branch From b14eadb13d9fd8460acc84c52b6b6942f9d03e5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Mon, 25 Mar 2019 16:44:05 +0100 Subject: [PATCH 3/6] Add missing mockito config file --- .../resources/mockito-extensions/org.mockito.plugins.MockMaker | 1 + 1 file changed, 1 insertion(+) create mode 100644 scm-plugins/scm-git-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker diff --git a/scm-plugins/scm-git-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/scm-plugins/scm-git-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker new file mode 100644 index 0000000000..1f0955d450 --- /dev/null +++ b/scm-plugins/scm-git-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker @@ -0,0 +1 @@ +mock-maker-inline From 71f4d813056495b6b9c9398272c10c5d9a7a9e08 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Tue, 26 Mar 2019 06:57:31 +0000 Subject: [PATCH 4/6] Close branch bugfix/harmonize_name_check From 2a19313df5153c730b8266c18d31f4bda8c29dd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Fri, 29 Mar 2019 11:06:10 +0100 Subject: [PATCH 5/6] Remove unknown val --- .../main/java/sonia/scm/repository/spi/GitBranchesCommand.java | 3 +-- .../java/sonia/scm/repository/spi/GitBranchesCommandTest.java | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBranchesCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBranchesCommand.java index 81b38cab5c..ed0ac772f1 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBranchesCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBranchesCommand.java @@ -37,7 +37,6 @@ package sonia.scm.repository.spi; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Strings; import org.checkerframework.checker.nullness.qual.Nullable; -import org.checkerframework.common.value.qual.UnknownVal; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.lib.Ref; @@ -118,8 +117,8 @@ public class GitBranchesCommand extends AbstractGitCommand implements BranchesCo } } - @UnknownVal Optional getRepositoryHeadRef(Git git) { return GitUtil.getRepositoryHeadRef(git.getRepository()); } } + diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitBranchesCommandTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitBranchesCommandTest.java index af765bc7aa..1c737deab8 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitBranchesCommandTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitBranchesCommandTest.java @@ -1,6 +1,5 @@ package sonia.scm.repository.spi; -import org.checkerframework.common.value.qual.UnknownVal; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.ListBranchCommand; import org.eclipse.jgit.api.errors.GitAPIException; @@ -57,7 +56,7 @@ class GitBranchesCommandTest { } @Override - @UnknownVal Optional getRepositoryHeadRef(Git git) { + Optional getRepositoryHeadRef(Git git) { return of(master); } }; From ada8977175c03d7e091ca3c5042af36000035ab7 Mon Sep 17 00:00:00 2001 From: Rene Pfeuffer Date: Fri, 29 Mar 2019 10:23:56 +0000 Subject: [PATCH 6/6] Close branch feature/mark_default_branch