mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-12 00:15:44 +01:00
improve validation
This commit is contained in:
50
scm-core/src/main/java/sonia/scm/Validateable.java
Normal file
50
scm-core/src/main/java/sonia/scm/Validateable.java
Normal file
@@ -0,0 +1,50 @@
|
||||
/**
|
||||
* 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
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
|
||||
package sonia.scm;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Sebastian Sdorra
|
||||
*/
|
||||
public interface Validateable
|
||||
{
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public boolean isValid();
|
||||
}
|
||||
@@ -29,11 +29,12 @@
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
|
||||
package sonia.scm.repository;
|
||||
|
||||
//~--- non-JDK imports --------------------------------------------------------
|
||||
|
||||
import sonia.scm.HandlerEvent;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Singleton;
|
||||
|
||||
@@ -41,8 +42,10 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import sonia.scm.ConfigurationException;
|
||||
import sonia.scm.HandlerEvent;
|
||||
import sonia.scm.SCMContext;
|
||||
import sonia.scm.SCMContextProvider;
|
||||
import sonia.scm.Type;
|
||||
import sonia.scm.util.AssertUtil;
|
||||
import sonia.scm.util.IOUtil;
|
||||
|
||||
@@ -57,7 +60,6 @@ import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import sonia.scm.Type;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -93,31 +95,6 @@ public class BasicRepositoryManager extends AbstractRepositoryManager
|
||||
|
||||
//~--- methods --------------------------------------------------------------
|
||||
|
||||
private void addHandler(RepositoryHandler handler)
|
||||
{
|
||||
AssertUtil.assertIsNotNull(handler);
|
||||
|
||||
Type type = handler.getType();
|
||||
|
||||
AssertUtil.assertIsNotNull(type);
|
||||
|
||||
if (handlerMap.containsKey(type.getName()))
|
||||
{
|
||||
throw new ConfigurationException(
|
||||
type.getName().concat("allready registered"));
|
||||
}
|
||||
|
||||
if (logger.isInfoEnabled())
|
||||
{
|
||||
logger.info("added RepositoryHandler {} for type {}", handler.getClass(),
|
||||
type);
|
||||
}
|
||||
|
||||
handlerMap.put(type.getName(), handler);
|
||||
handler.init(SCMContext.getContext());
|
||||
types.add(type);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
@@ -152,6 +129,7 @@ public class BasicRepositoryManager extends AbstractRepositoryManager
|
||||
repository.getType());
|
||||
}
|
||||
|
||||
AssertUtil.assertIsValid(repository);
|
||||
getHandler(repository).create(repository);
|
||||
fireEvent(repository, HandlerEvent.CREATE);
|
||||
}
|
||||
@@ -207,6 +185,7 @@ public class BasicRepositoryManager extends AbstractRepositoryManager
|
||||
repository.getType());
|
||||
}
|
||||
|
||||
AssertUtil.assertIsValid(repository);
|
||||
getHandler(repository).modify(repository);
|
||||
fireEvent(repository, HandlerEvent.MODIFY);
|
||||
}
|
||||
@@ -322,6 +301,41 @@ public class BasicRepositoryManager extends AbstractRepositoryManager
|
||||
return types;
|
||||
}
|
||||
|
||||
//~--- methods --------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
*
|
||||
* @param handler
|
||||
*/
|
||||
private void addHandler(RepositoryHandler handler)
|
||||
{
|
||||
AssertUtil.assertIsNotNull(handler);
|
||||
|
||||
Type type = handler.getType();
|
||||
|
||||
AssertUtil.assertIsNotNull(type);
|
||||
|
||||
if (handlerMap.containsKey(type.getName()))
|
||||
{
|
||||
throw new ConfigurationException(
|
||||
type.getName().concat("allready registered"));
|
||||
}
|
||||
|
||||
if (logger.isInfoEnabled())
|
||||
{
|
||||
logger.info("added RepositoryHandler {} for type {}", handler.getClass(),
|
||||
type);
|
||||
}
|
||||
|
||||
handlerMap.put(type.getName(), handler);
|
||||
handler.init(SCMContext.getContext());
|
||||
types.add(type);
|
||||
}
|
||||
|
||||
//~--- get methods ----------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
|
||||
@@ -36,7 +36,9 @@ package sonia.scm.repository;
|
||||
//~--- non-JDK imports --------------------------------------------------------
|
||||
|
||||
import sonia.scm.TypedObject;
|
||||
import sonia.scm.Validateable;
|
||||
import sonia.scm.util.Util;
|
||||
import sonia.scm.util.ValidationUtil;
|
||||
import sonia.scm.xml.XmlTimestampDateAdapter;
|
||||
|
||||
//~--- JDK imports ------------------------------------------------------------
|
||||
@@ -64,7 +66,7 @@ import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
|
||||
"id", "type", "name", "contact", "description", "creationDate", "url",
|
||||
"permissions"
|
||||
})
|
||||
public class Repository implements TypedObject, Serializable
|
||||
public class Repository implements TypedObject, Validateable, Serializable
|
||||
{
|
||||
|
||||
/** Field description */
|
||||
@@ -231,6 +233,20 @@ public class Repository implements TypedObject, Serializable
|
||||
return url;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public boolean isValid()
|
||||
{
|
||||
return Util.isNotEmpty(name) && Util.isNotEmpty(type)
|
||||
&& ((Util.isEmpty(contact))
|
||||
|| ValidationUtil.isMailAddressValid(contact));
|
||||
}
|
||||
|
||||
//~--- set methods ----------------------------------------------------------
|
||||
|
||||
/**
|
||||
|
||||
@@ -136,6 +136,7 @@ public class BasicUserManager implements UserManager
|
||||
logger.info("create user {} of type {}", user.getName(), user.getType());
|
||||
}
|
||||
|
||||
AssertUtil.assertIsValid(user);
|
||||
getHandler(user).create(user);
|
||||
fireEvent(user, HandlerEvent.CREATE);
|
||||
}
|
||||
@@ -154,7 +155,7 @@ public class BasicUserManager implements UserManager
|
||||
{
|
||||
if (logger.isInfoEnabled())
|
||||
{
|
||||
logger.info("create user {} of type {}", user.getName(), user.getType());
|
||||
logger.info("delete user {} of type {}", user.getName(), user.getType());
|
||||
}
|
||||
|
||||
getHandler(user).delete(user);
|
||||
@@ -193,6 +194,7 @@ public class BasicUserManager implements UserManager
|
||||
logger.info("modify user {} of type {}", user.getName(), user.getType());
|
||||
}
|
||||
|
||||
AssertUtil.assertIsValid(user);
|
||||
getHandler(user).modify(user);
|
||||
fireEvent(user, HandlerEvent.MODIFY);
|
||||
}
|
||||
|
||||
@@ -36,6 +36,9 @@ package sonia.scm.user;
|
||||
//~--- non-JDK imports --------------------------------------------------------
|
||||
|
||||
import sonia.scm.TypedObject;
|
||||
import sonia.scm.Validateable;
|
||||
import sonia.scm.util.Util;
|
||||
import sonia.scm.util.ValidationUtil;
|
||||
|
||||
//~--- JDK imports ------------------------------------------------------------
|
||||
|
||||
@@ -58,7 +61,8 @@ import javax.xml.bind.annotation.XmlType;
|
||||
{
|
||||
"name", "displayName", "mail", "password", "type"
|
||||
})
|
||||
public class User implements TypedObject, Principal, Cloneable, Serializable
|
||||
public class User
|
||||
implements TypedObject, Principal, Cloneable, Validateable, Serializable
|
||||
{
|
||||
|
||||
/** Field description */
|
||||
@@ -263,6 +267,20 @@ public class User implements TypedObject, Principal, Cloneable, Serializable
|
||||
return type;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public boolean isValid()
|
||||
{
|
||||
return Util.isNotEmpty(name) && Util.isNotEmpty(displayName)
|
||||
&& Util.isNotEmpty(type)
|
||||
&& ((Util.isEmpty(mail)) || ValidationUtil.isMailAddressValid(mail));
|
||||
}
|
||||
|
||||
//~--- set methods ----------------------------------------------------------
|
||||
|
||||
/**
|
||||
|
||||
@@ -29,8 +29,14 @@
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
|
||||
package sonia.scm.util;
|
||||
|
||||
//~--- non-JDK imports --------------------------------------------------------
|
||||
|
||||
import sonia.scm.Validateable;
|
||||
|
||||
//~--- JDK imports ------------------------------------------------------------
|
||||
|
||||
import java.util.Collection;
|
||||
@@ -97,4 +103,20 @@ public class AssertUtil
|
||||
throw new IllegalStateException("object is required");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
*
|
||||
* @param validateable
|
||||
*/
|
||||
public static void assertIsValid(Validateable validateable)
|
||||
{
|
||||
assertIsNotNull(validateable);
|
||||
|
||||
if (!validateable.isValid())
|
||||
{
|
||||
throw new IllegalStateException("object is not valid");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
110
scm-core/src/main/java/sonia/scm/util/ValidationUtil.java
Normal file
110
scm-core/src/main/java/sonia/scm/util/ValidationUtil.java
Normal file
@@ -0,0 +1,110 @@
|
||||
/**
|
||||
* 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
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
|
||||
package sonia.scm.util;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Sebastian Sdorra
|
||||
*/
|
||||
public class ValidationUtil
|
||||
{
|
||||
|
||||
/** Field description */
|
||||
private static final String REGEX_MAIL =
|
||||
"^[A-z0-9][\\w.-]*@[A-z0-9][\\w\\-\\.]+\\.[A-z0-9]{2,6}$";
|
||||
|
||||
//~--- get methods ----------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
*
|
||||
* @param value
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static boolean isFilenameValid(String value)
|
||||
{
|
||||
AssertUtil.assertIsNotNull(value);
|
||||
|
||||
return isNotContaining(value, "/", "\\", ":");
|
||||
}
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
*
|
||||
* @param value
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static boolean isMailAddressValid(String value)
|
||||
{
|
||||
AssertUtil.assertIsNotNull(value);
|
||||
|
||||
return value.matches(REGEX_MAIL);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
*
|
||||
* @param value
|
||||
* @param notAllowedStrings
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static boolean isNotContaining(String value,
|
||||
String... notAllowedStrings)
|
||||
{
|
||||
AssertUtil.assertIsNotNull(value);
|
||||
|
||||
boolean result = true;
|
||||
|
||||
if (notAllowedStrings != null)
|
||||
{
|
||||
for (String nas : notAllowedStrings)
|
||||
{
|
||||
if (value.indexOf(nas) >= 0)
|
||||
{
|
||||
result = false;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
109
scm-core/src/test/java/sonia/scm/util/ValidationUtilTest.java
Normal file
109
scm-core/src/test/java/sonia/scm/util/ValidationUtilTest.java
Normal file
@@ -0,0 +1,109 @@
|
||||
/**
|
||||
* 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
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
|
||||
package sonia.scm.util;
|
||||
|
||||
//~--- non-JDK imports --------------------------------------------------------
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Sebastian Sdorra
|
||||
*/
|
||||
public class ValidationUtilTest
|
||||
{
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
*/
|
||||
@Test
|
||||
public void testIsFilenameValid()
|
||||
{
|
||||
|
||||
// true
|
||||
assertTrue(ValidationUtil.isFilenameValid("test"));
|
||||
assertTrue(ValidationUtil.isFilenameValid("test 123"));
|
||||
|
||||
// false
|
||||
assertFalse(ValidationUtil.isFilenameValid("../../"));
|
||||
assertFalse(ValidationUtil.isFilenameValid("test/../.."));
|
||||
assertFalse(ValidationUtil.isFilenameValid("\\ka"));
|
||||
assertFalse(ValidationUtil.isFilenameValid("ka:on"));
|
||||
}
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
*/
|
||||
@Test
|
||||
public void testIsMailAddressValid()
|
||||
{
|
||||
|
||||
// true
|
||||
assertTrue(ValidationUtil.isMailAddressValid("s.sdorra@ostfalia.de"));
|
||||
assertTrue(ValidationUtil.isMailAddressValid("sdorra@ostfalia.de"));
|
||||
assertTrue(ValidationUtil.isMailAddressValid("s.sdorra@hbk-bs.de"));
|
||||
assertTrue(ValidationUtil.isMailAddressValid("s.sdorra@gmail.com"));
|
||||
|
||||
// false
|
||||
assertFalse(ValidationUtil.isMailAddressValid("ostfalia.de"));
|
||||
assertFalse(ValidationUtil.isMailAddressValid("@ostfalia.de"));
|
||||
assertFalse(ValidationUtil.isMailAddressValid("s.sdorra@"));
|
||||
assertFalse(ValidationUtil.isMailAddressValid("s.sdorra@ostfalia"));
|
||||
assertFalse(ValidationUtil.isMailAddressValid("s.sdorra@@ostfalia.de"));
|
||||
assertFalse(ValidationUtil.isMailAddressValid("s.sdorra@ ostfalia.de"));
|
||||
assertFalse(ValidationUtil.isMailAddressValid("s.sdorra @ostfalia.de"));
|
||||
}
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
*/
|
||||
@Test
|
||||
public void testIsNotContaining()
|
||||
{
|
||||
|
||||
// true
|
||||
assertTrue(ValidationUtil.isNotContaining("test", "abc"));
|
||||
|
||||
// false
|
||||
assertFalse(ValidationUtil.isNotContaining("test", "e"));
|
||||
assertFalse(ValidationUtil.isNotContaining("test", "e", "s"));
|
||||
assertFalse(ValidationUtil.isNotContaining("test", "es"));
|
||||
assertFalse(ValidationUtil.isNotContaining("test", "t"));
|
||||
}
|
||||
}
|
||||
@@ -88,3 +88,5 @@ function logout(){
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Ext.QuickTips.init();
|
||||
@@ -147,7 +147,7 @@ Sonia.repository.FormPanel = Ext.extend(Sonia.rest.FormPanel,{
|
||||
allowBlank: false
|
||||
},
|
||||
|
||||
{fieldLabel: 'Contact', name: 'contact'},
|
||||
{fieldLabel: 'Contact', name: 'contact', vtype: 'email'},
|
||||
{fieldLabel: 'Description', name: 'description', xtype: 'textarea'}
|
||||
]
|
||||
};
|
||||
|
||||
@@ -78,6 +78,19 @@ Sonia.user.Grid = Ext.extend(Sonia.rest.Grid, {
|
||||
// register xtype
|
||||
Ext.reg('userGrid', Sonia.user.Grid);
|
||||
|
||||
|
||||
Ext.apply(Ext.form.VTypes, {
|
||||
password: function(val, field) {
|
||||
if (field.initialPassField) {
|
||||
var pwd = Ext.getCmp(field.initialPassField);
|
||||
return (val == pwd.getValue());
|
||||
}
|
||||
return true;
|
||||
},
|
||||
passwordText: 'The passwords entered do not match!'
|
||||
});
|
||||
|
||||
|
||||
// UserFormPanel
|
||||
Sonia.user.FormPanel = Ext.extend(Sonia.rest.FormPanel,{
|
||||
|
||||
@@ -95,14 +108,24 @@ Sonia.user.FormPanel = Ext.extend(Sonia.rest.FormPanel,{
|
||||
},{
|
||||
fieldLabel: 'Mail',
|
||||
name: 'mail',
|
||||
allowBlank: false
|
||||
allowBlank: false,
|
||||
vtype: 'email'
|
||||
},{
|
||||
fieldLabel: 'Password',
|
||||
id: 'pwd',
|
||||
name: 'password',
|
||||
inputType: 'password'
|
||||
inputType: 'password',
|
||||
minLength: 6,
|
||||
maxLength: 32,
|
||||
minLengthText: 'Password must be at least 6 characters long.'
|
||||
},{
|
||||
name: 'password',
|
||||
inputType: 'password'
|
||||
inputType: 'password',
|
||||
minLength: 6,
|
||||
maxLength: 32,
|
||||
minLengthText: 'Password must be at least 6 characters long.',
|
||||
vtype: 'password',
|
||||
initialPassField: 'pwd'
|
||||
}]
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user