From 152abc58c2d3b882fce05de36a0f57fc3761db67 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Mon, 28 Oct 2013 13:15:12 +0100 Subject: [PATCH 1/4] use same validation rules for user and group names --- .../java/sonia/scm/util/ValidationUtil.java | 11 +++-- .../sonia/scm/util/ValidationUtilTest.java | 43 +++++-------------- .../resources/js/override/ext.form.vtypes.js | 4 +- 3 files changed, 17 insertions(+), 41 deletions(-) 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 0b1a23f7bb..d0b67c5472 100644 --- a/scm-core/src/main/java/sonia/scm/util/ValidationUtil.java +++ b/scm-core/src/main/java/sonia/scm/util/ValidationUtil.java @@ -55,16 +55,13 @@ public final class ValidationUtil "^[A-z0-9][\\w.-]*@[A-z0-9][\\w\\-\\.]+\\.[A-z0-9]{2,6}$"; /** Field description */ - private static final String REGEX_NAME = "^[A-z0-9\\.\\-_]+$"; + private static final String REGEX_NAME = + "^[A-z0-9\\.\\-_@]|[^ ]([A-z0-9\\.\\-_@ ]*[A-z0-9\\.\\-_@]|[^ ])?$"; /** Field description */ private static final String REGEX_REPOSITORYNAME = "(?!^\\.\\.$)(?!^\\.$)(?!.*[\\\\\\[\\]])^[A-z0-9\\.][A-z0-9\\.\\-_/]*$"; - /** Field description */ - private static final String REGEX_USERNAME = - "^[A-z0-9\\.\\-_@]|[^ ]([A-z0-9\\.\\-_@ ]*[A-z0-9\\.\\-_@]|[^ ])?$"; - //~--- constructors --------------------------------------------------------- /** @@ -185,10 +182,12 @@ public final class ValidationUtil * @param username * * @return + * @deprecated use {@link #isNameValid(String)} */ + @Deprecated public static boolean isUsernameValid(String username) { - return Util.isNotEmpty(username) && username.matches(REGEX_USERNAME); + return isNameValid(username); } /** 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 a6ce29241c..620c2fae9d 100644 --- a/scm-core/src/test/java/sonia/scm/util/ValidationUtilTest.java +++ b/scm-core/src/test/java/sonia/scm/util/ValidationUtilTest.java @@ -102,14 +102,21 @@ public class ValidationUtilTest assertTrue(ValidationUtil.isNameValid("test.git")); assertTrue(ValidationUtil.isNameValid("Test123.git")); assertTrue(ValidationUtil.isNameValid("Test123-git")); - assertTrue(ValidationUtil.isNameValid("Test_repository-123.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 ")); + assertFalse(ValidationUtil.isNameValid("test 123 ")); assertFalse(ValidationUtil.isNameValid("test/123")); assertFalse(ValidationUtil.isNameValid("test%123")); assertFalse(ValidationUtil.isNameValid("test:123")); + assertFalse(ValidationUtil.isNameValid("t ")); + assertFalse(ValidationUtil.isNameValid(" t")); + assertFalse(ValidationUtil.isNameValid(" t ")); } /** @@ -229,34 +236,4 @@ public class ValidationUtilTest assertFalse(ValidationUtil.isRepositoryNameValid(path)); } } - - /** - * Method description - * - */ - @Test - public void testIsUsernameValid() - { - - // true - assertTrue(ValidationUtil.isUsernameValid("test")); - assertTrue(ValidationUtil.isUsernameValid("test.git")); - assertTrue(ValidationUtil.isUsernameValid("Test123.git")); - assertTrue(ValidationUtil.isUsernameValid("Test123-git")); - assertTrue(ValidationUtil.isUsernameValid("Test_user-123.git")); - assertTrue(ValidationUtil.isUsernameValid("test@scm-manager.de")); - assertTrue(ValidationUtil.isUsernameValid("test 123")); - assertTrue(ValidationUtil.isUsernameValid("t")); - - // false - assertFalse(ValidationUtil.isUsernameValid(" test 123")); - assertFalse(ValidationUtil.isUsernameValid(" test 123 ")); - assertFalse(ValidationUtil.isUsernameValid("test 123 ")); - assertFalse(ValidationUtil.isUsernameValid("test/123")); - assertFalse(ValidationUtil.isUsernameValid("test%123")); - assertFalse(ValidationUtil.isUsernameValid("test:123")); - assertFalse(ValidationUtil.isUsernameValid("t ")); - assertFalse(ValidationUtil.isUsernameValid(" t")); - assertFalse(ValidationUtil.isUsernameValid(" t ")); - } } diff --git a/scm-webapp/src/main/webapp/resources/js/override/ext.form.vtypes.js b/scm-webapp/src/main/webapp/resources/js/override/ext.form.vtypes.js index 80a5dec976..df17eeaee7 100644 --- a/scm-webapp/src/main/webapp/resources/js/override/ext.form.vtypes.js +++ b/scm-webapp/src/main/webapp/resources/js/override/ext.form.vtypes.js @@ -46,7 +46,7 @@ Ext.apply(Ext.form.VTypes, { // name validator name: function(val){ - return /^[A-z0-9\.\-_]+$/.test(val); + return val.match(/^[^ ][A-z0-9\.\-_@ ]*[^ ]$/); }, nameText: 'The name is invalid.', @@ -75,7 +75,7 @@ Ext.apply(Ext.form.VTypes, { // username validator username: function(val){ - return val.match(/^[^ ][A-z0-9\.\-_@ ]*[^ ]$/); + return name(val); }, usernameText: 'The username is invalid.' From 004720660abe29032957bff350d2c7fb1de7e369 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Mon, 28 Oct 2013 13:18:37 +0100 Subject: [PATCH 2/4] close branch issue-470 From d47eb18516071fc056416e4539615d589877e772 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Thu, 31 Oct 2013 11:49:31 +0100 Subject: [PATCH 3/4] retry delete up to 5 sec to fix problem with windows locking --- .../src/main/java/sonia/scm/util/IOUtil.java | 35 +++++++++++++------ 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/scm-core/src/main/java/sonia/scm/util/IOUtil.java b/scm-core/src/main/java/sonia/scm/util/IOUtil.java index 5745dfde8b..2e2b6b7fd6 100644 --- a/scm-core/src/main/java/sonia/scm/util/IOUtil.java +++ b/scm-core/src/main/java/sonia/scm/util/IOUtil.java @@ -370,13 +370,13 @@ public final class IOUtil } /** - * Method description + * Method description * * - * @param file + * @param file * @param silent * - * @throws IOException + * @throws IOException */ public static void delete(File file, boolean silent) throws IOException { @@ -388,22 +388,35 @@ public final class IOUtil { for (File child : children) { - delete(child); + delete(child, silent); } } } - if (!file.delete()) + for (int i = 20; !file.delete(); i--) { - String message = "could not delete file ".concat(file.getPath()); + if (i <= 20) + { + String message = "could not delete file ".concat(file.getPath()); - if (silent) - { - logger.error(message); + if (silent) + { + logger.error(message); + } + else + { + throw new IOException(message); + } } - else + + try { - throw new IOException(message); + logger.warn("sleep 250ms, because of delete for file {} failed", file); + Thread.sleep(250); + } + catch (InterruptedException ex) + { + logger.warn("sleep of delete method interrupted", ex); } } } From 0053c3693bd91d4263a08eceee64e292ec1052ef Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Fri, 1 Nov 2013 08:04:46 +0100 Subject: [PATCH 4/4] close branch issue-476