mirror of
https://github.com/scm-manager/scm-manager.git
synced 2026-07-20 00:50:31 +02:00
merge with branch issue-142
This commit is contained in:
@@ -52,10 +52,12 @@ public class ValidationUtil
|
||||
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 ----------------------------------------------------------
|
||||
|
||||
@@ -139,7 +141,9 @@ public class ValidationUtil
|
||||
*/
|
||||
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("//");
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -130,6 +130,33 @@ public class ValidationUtilTest
|
||||
assertFalse(ValidationUtil.isNotContaining("test", "t"));
|
||||
}
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
*/
|
||||
@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
|
||||
*
|
||||
|
||||
@@ -55,6 +55,9 @@
|
||||
<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>
|
||||
|
||||
@@ -53,7 +53,13 @@ Ext.apply(Ext.form.VTypes, {
|
||||
|
||||
// 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.',
|
||||
|
||||
39
scm-webapp/src/main/webapp/resources/js/sonia.core.js
Normal file
39
scm-webapp/src/main/webapp/resources/js/sonia.core.js
Normal file
@@ -0,0 +1,39 @@
|
||||
/* *
|
||||
* 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;
|
||||
};
|
||||
Reference in New Issue
Block a user