Commits

Sebastian Sdorra committed cff61c1 Merge

merge with branch issue-142

Comments (0)

Files changed (5)

scm-core/src/main/java/sonia/scm/util/ValidationUtil.java

   private static final String REGEX_NAME = "^[A-z0-9\\.\\-_]+$";
 
   /** Field description */
-  private static final String REGEX_REPOSITORYNAME = "^[A-z0-9\\.\\-_/]+$";
+  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\\.\\-_@]|[^ ])?$";
+  private static final String REGEX_USERNAME =
+    "^[A-z0-9\\.\\-_@]|[^ ]([A-z0-9\\.\\-_@ ]*[A-z0-9\\.\\-_@]|[^ ])?$";
 
   //~--- get methods ----------------------------------------------------------
 
    */
   public static boolean isRepositoryNameValid(String name)
   {
-    return Util.isNotEmpty(name) && name.matches(REGEX_REPOSITORYNAME);
+    return Util.isNotEmpty(name) && name.matches(REGEX_REPOSITORYNAME)
+           &&!name.contains("..") &&!name.endsWith("/.") &&!name.endsWith(".")
+           &&!name.endsWith("/") &&!name.contains("/./") &&!name.contains("//");
   }
 
   /**

scm-core/src/test/java/sonia/scm/util/ValidationUtilTest.java

    *
    */
   @Test
+  public void testIsRepositoryNameValid()
+  {
+    assertTrue(ValidationUtil.isRepositoryNameValid("scm"));
+    assertTrue(ValidationUtil.isRepositoryNameValid("scm/main"));
+    assertTrue(ValidationUtil.isRepositoryNameValid("scm/plugins/git-plugin"));
+    assertTrue(ValidationUtil.isRepositoryNameValid("s"));
+    assertTrue(ValidationUtil.isRepositoryNameValid("sc"));
+
+    // issue 142
+    assertFalse(ValidationUtil.isRepositoryNameValid("."));
+    assertFalse(ValidationUtil.isRepositoryNameValid("/"));
+    assertFalse(ValidationUtil.isRepositoryNameValid(".scm/plugins"));
+    assertFalse(ValidationUtil.isRepositoryNameValid("scm/plugins/."));
+    assertFalse(ValidationUtil.isRepositoryNameValid("scm/../plugins"));
+    assertFalse(ValidationUtil.isRepositoryNameValid("scm/main/"));
+    assertFalse(ValidationUtil.isRepositoryNameValid("/scm/main/"));
+    
+    // issue 144
+    assertFalse(ValidationUtil.isRepositoryNameValid("scm/./main"));
+    assertFalse(ValidationUtil.isRepositoryNameValid("scm//main"));
+  }
+
+  /**
+   * Method description
+   *
+   */
+  @Test
   public void testIsUsernameValid()
   {
 

scm-webapp/src/main/webapp/index.html

     <link rel="stylesheet" type="text/css" href="resources/extjs/resources/css/xtheme-scmslate.css" />
     <link rel="stylesheet" type="text/css" href="resources/css/style.css" />
 
+    <!-- core overrides -->
+    <script type="text/javascript" src="resources/js/sonia.core.js"></script>
+    
     <!-- extjs -->
     <script type="text/javascript" src="resources/extjs/adapter/ext/ext-base.js"></script>
     <script type="text/javascript" src="resources/extjs/ext-all-debug.js"></script>

scm-webapp/src/main/webapp/resources/js/override/ext.form.vtypes.js

   
   // repository name validator
   repositoryName: function(val){
-    return /^[A-z0-9\.\-_\/]+$/.test(val);
+    return /^[A-z0-9][A-z0-9\.\-_\/]*$/.test(val) 
+           && ! val.contains('..')
+           && ! val.endsWith('/.') 
+           && ! val.endsWith('/')
+           && ! val.endsWith('.')
+           && ! val.contains('/./')
+           && ! val.contains('//');
   },
   
   repositoryNameText: 'The name of the repository is invalid.',

scm-webapp/src/main/webapp/resources/js/sonia.core.js

+/* *
+ * Copyright (c) 2010, Sebastian Sdorra
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 3. Neither the name of SCM-Manager; nor the names of its
+ *    contributors may be used to endorse or promote products derived from this
+ *    software without specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * 
+ * http://bitbucket.org/sdorra/scm-manager
+ * 
+ */
+
+
+String.prototype.endsWith = function(suffix) {
+    return this.indexOf(suffix, this.length - suffix.length) !== -1;
+};
+
+String.prototype.contains = function(val) {
+    return this.indexOf(val) >= 0;
+};