refuse account name with whitespace

This commit is contained in:
David Rousselie
2010-06-04 08:29:43 +02:00
parent 13052b4668
commit a452f26d29
4 changed files with 32 additions and 3 deletions

1
.gitignore vendored
View File

@@ -1,3 +1,4 @@
.coverage .coverage
*flymake.py *flymake.py
.ropeproject .ropeproject
*.pyc

View File

@@ -38,7 +38,7 @@ class SetRegisterHandler(object):
self.component = component self.component = component
self.account_manager = component.account_manager self.account_manager = component.account_manager
self.__logger = logging.getLogger("jcl.jabber.SetRegisterHandler") self.__logger = logging.getLogger("jcl.jabber.SetRegisterHandler")
self.field_name_regexp = re.compile("^[^@]+$") self.field_name_regexp = re.compile("^[^@\s]+$")
def filter(self, info_query, lang_class, x_data): def filter(self, info_query, lang_class, x_data):
"""Filter requests to be handled""" """Filter requests to be handled"""

View File

@@ -56,7 +56,7 @@ class SetRegisterHandler_TestCase(JCLTestCase):
result = self.handler.handle(iq_set, Lang.en, None, x_data) result = self.handler.handle(iq_set, Lang.en, None, x_data)
self.assertEquals(result, None) self.assertEquals(result, None)
def test_handle_invalid_name(self): def test_handle_invalid_name_with_invalid_char(self):
"""Test with invalid supplied name""" """Test with invalid supplied name"""
iq_set = Iq(stanza_type="set", iq_set = Iq(stanza_type="set",
from_jid="user1@test.com/res", from_jid="user1@test.com/res",
@@ -73,6 +73,23 @@ class SetRegisterHandler_TestCase(JCLTestCase):
self.assertEquals(error.get_text(), Lang.en.field_error \ self.assertEquals(error.get_text(), Lang.en.field_error \
% ("name", Lang.en.arobase_in_name_forbidden)) % ("name", Lang.en.arobase_in_name_forbidden))
def test_handle_invalid_name_with_whitespace(self):
"""Test with invalid supplied name"""
iq_set = Iq(stanza_type="set",
from_jid="user1@test.com/res",
to_jid="jcl.test.com")
x_data = Form("submit")
x_data.add_field(name="name",
value="wrong name",
field_type="text-single")
result = self.handler.handle(iq_set, Lang.en, None, x_data)
self.assertEquals(len(result), 1)
self.assertEquals(result[0].xmlnode.prop("type"), "error")
error = result[0].get_error()
self.assertEquals(error.get_condition().name, "not-acceptable")
self.assertEquals(error.get_text(), Lang.en.field_error \
% ("name", Lang.en.arobase_in_name_forbidden))
def test_handle_invalid_empty_name(self): def test_handle_invalid_empty_name(self):
"""Test with empty supplied name""" """Test with empty supplied name"""
iq_set = Iq(stanza_type="set", iq_set = Iq(stanza_type="set",

View File

@@ -27,6 +27,7 @@
__revision__ = "$Id: account.py,v 1.3 2005/09/18 20:24:07 dax Exp $" __revision__ = "$Id: account.py,v 1.3 2005/09/18 20:24:07 dax Exp $"
import datetime import datetime
import re
from sqlobject.inheritance import InheritableSQLObject from sqlobject.inheritance import InheritableSQLObject
from sqlobject.col import StringCol, IntCol, BoolCol, ForeignKey, DateTimeCol from sqlobject.col import StringCol, IntCol, BoolCol, ForeignKey, DateTimeCol
@@ -34,7 +35,7 @@ from sqlobject.joins import MultipleJoin
from sqlobject.sqlbuilder import AND from sqlobject.sqlbuilder import AND
from jcl.lang import Lang from jcl.lang import Lang
from jcl.error import MandatoryFieldError from jcl.error import FieldError, MandatoryFieldError
import jcl.model as model import jcl.model as model
OFFLINE = "offline" OFFLINE = "offline"
@@ -61,6 +62,16 @@ def mandatory_field(field_name, field_value):
raise MandatoryFieldError(field_name) raise MandatoryFieldError(field_name)
return field_value return field_value
def no_whitespace_field(field_name, field_value):
""" Check that `field_value` does not contain any whitespace character
Arguments:
- `field_name`: Field name
- `field_value`: Field value to check
"""
if re.compile("\s").search(field_value) is not None:
raise FieldError(field_name, message_property="no_whitespace_in_field")
return field_value
class User(InheritableSQLObject): class User(InheritableSQLObject):
class sqlmeta: class sqlmeta:
table = "user_table" table = "user_table"