merge with issue-69

This commit is contained in:
Sebastian Sdorra
2011-11-15 22:00:02 +01:00
5 changed files with 65 additions and 4 deletions

View File

@@ -43,6 +43,10 @@ import sonia.scm.config.ScmConfiguration;
//~--- JDK imports ------------------------------------------------------------ //~--- JDK imports ------------------------------------------------------------
import java.io.IOException; import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
@@ -58,6 +62,9 @@ public class HttpUtil
/** authentication realm for basic authentication */ /** authentication realm for basic authentication */
public static final String AUTHENTICATION_REALM = "SONIA :: SCM Manager"; public static final String AUTHENTICATION_REALM = "SONIA :: SCM Manager";
/** Field description */
public static final String ENCODING = "UTF-8";
/** authentication header */ /** authentication header */
public static final String HEADER_WWW_AUTHENTICATE = "WWW-Authenticate"; public static final String HEADER_WWW_AUTHENTICATE = "WWW-Authenticate";
@@ -112,6 +119,52 @@ public class HttpUtil
//~--- methods -------------------------------------------------------------- //~--- methods --------------------------------------------------------------
/**
* Method description
*
*
* @param value
*
* @return
* @since 1.9
*/
public static String decode(String value)
{
try
{
value = URLDecoder.decode(value, ENCODING);
}
catch (UnsupportedEncodingException ex)
{
throw new RuntimeException("could not decode", ex);
}
return value;
}
/**
* Method description
*
*
* @param value
*
* @return
* @since 1.9
*/
public static String encode(String value)
{
try
{
value = URLEncoder.encode(value, ENCODING);
}
catch (UnsupportedEncodingException ex)
{
throw new RuntimeException("could not encode", ex);
}
return value;
}
/** /**
* Send an unauthorized header back to the client * Send an unauthorized header back to the client
* *

View File

@@ -52,7 +52,7 @@ public class ValidationUtil
private static final String REGEX_NAME = "^[A-z0-9\\.\\-_]+$"; private static final String REGEX_NAME = "^[A-z0-9\\.\\-_]+$";
/** Field description */ /** Field description */
private static final String REGEX_USERNAME = "^[A-z0-9\\.\\-_@]+$"; private static final String REGEX_USERNAME = "^[^ ][A-z0-9\\.\\-_@ ]+[^ ]$";
//~--- get methods ---------------------------------------------------------- //~--- get methods ----------------------------------------------------------

View File

@@ -145,9 +145,12 @@ public class ValidationUtilTest
assertTrue(ValidationUtil.isUsernameValid("Test123-git")); assertTrue(ValidationUtil.isUsernameValid("Test123-git"));
assertTrue(ValidationUtil.isUsernameValid("Test_user-123.git")); assertTrue(ValidationUtil.isUsernameValid("Test_user-123.git"));
assertTrue(ValidationUtil.isUsernameValid("test@scm-manager.de")); assertTrue(ValidationUtil.isUsernameValid("test@scm-manager.de"));
assertTrue(ValidationUtil.isUsernameValid("test 123"));
// false // 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("test%123")); assertFalse(ValidationUtil.isUsernameValid("test%123"));
assertFalse(ValidationUtil.isUsernameValid("test:123")); assertFalse(ValidationUtil.isUsernameValid("test:123"));

View File

@@ -45,6 +45,7 @@ import sonia.scm.Manager;
import sonia.scm.ModelObject; import sonia.scm.ModelObject;
import sonia.scm.security.ScmSecurityException; import sonia.scm.security.ScmSecurityException;
import sonia.scm.util.AssertUtil; import sonia.scm.util.AssertUtil;
import sonia.scm.util.HttpUtil;
import sonia.scm.util.Util; import sonia.scm.util.Util;
//~--- JDK imports ------------------------------------------------------------ //~--- JDK imports ------------------------------------------------------------
@@ -142,9 +143,13 @@ public abstract class AbstractManagerResource<T extends ModelObject,
try try
{ {
manager.create(item); manager.create(item);
String id = getId(item);
id = HttpUtil.encode(id);
response = Response.created( response = Response.created(
uriInfo.getAbsolutePath().resolve( uriInfo.getAbsolutePath().resolve(
getPathPart().concat("/").concat(getId(item)))).build(); getPathPart().concat("/").concat(id))).build();
} }
catch (ScmSecurityException ex) catch (ScmSecurityException ex)
{ {

View File

@@ -54,7 +54,7 @@ Ext.apply(Ext.form.VTypes, {
// username validator // username validator
username: function(val){ username: function(val){
return val.match(/^[A-z0-9\.\-_@]+$/); return val.match(/^[^ ][A-z0-9\.\-_@ ]*[^ ]$/);
}, },
usernameText: 'The username is invalid.' usernameText: 'The username is invalid.'