Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/gajim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYann Leboulanger <asterix@lagaule.org>2010-08-10 18:08:06 +0400
committerYann Leboulanger <asterix@lagaule.org>2010-08-10 18:08:06 +0400
commit61b26858d5d6121f45abe370004ecf2589e6c7e8 (patch)
treee1cde3f74b2b03dc1331fa97edf50f73e8801b94 /src/common/dataforms.py
parenteffa7cedfbff1c9a5a9da7f188dffe9177154dba (diff)
check jid-single and jid-multi fields when filling ad-hoc commands. Fixes #5829
Diffstat (limited to 'src/common/dataforms.py')
-rw-r--r--src/common/dataforms.py53
1 files changed, 47 insertions, 6 deletions
diff --git a/src/common/dataforms.py b/src/common/dataforms.py
index fea7187ea..6d9b46f9c 100644
--- a/src/common/dataforms.py
+++ b/src/common/dataforms.py
@@ -27,6 +27,7 @@ information how to use them, read documentation
"""
import xmpp
+import helpers
# exceptions used in this module
# base class
@@ -65,8 +66,8 @@ def Field(typ, **attrs):
'hidden': StringField,
'text-private': StringField,
'text-single': StringField,
- 'jid-multi': ListMultiField,
- 'jid-single': ListSingleField,
+ 'jid-multi': JidMultiField,
+ 'jid-single': JidSingleField,
'list-multi': ListMultiField,
'list-single': ListSingleField,
'text-multi': TextMultiField,
@@ -87,8 +88,8 @@ def ExtendField(node):
'hidden': StringField,
'text-private': StringField,
'text-single': StringField,
- 'jid-multi': ListMultiField,
- 'jid-single': ListSingleField,
+ 'jid-multi': JidMultiField,
+ 'jid-single': JidSingleField,
'list-multi': ListMultiField,
'list-single': ListSingleField,
'text-multi': TextMultiField,
@@ -247,6 +248,9 @@ class DataField(ExtendedNode):
self.delChild(t)
return locals()
+
+ def is_valid(self):
+ return True
class Uri(xmpp.Node):
def __init__(self, uri_tag):
@@ -405,13 +409,28 @@ class ListField(DataField):
class ListSingleField(ListField, StringField):
"""
- Covers list-single and jid-single fields
+ Covers list-single field
"""
pass
+class JidSingleField(ListSingleField):
+ """
+ Covers jid-single fields
+ """
+ def is_valid(self):
+ if self.value:
+ try:
+ helpers.parse_jid(self.value)
+ return True
+ except:
+ return False
+ if self.required:
+ return False
+ return True
+
class ListMultiField(ListField):
"""
- Covers list-multi and jid-multi fields
+ Covers list-multi fields
"""
@nested_property
@@ -440,6 +459,22 @@ class ListMultiField(ListField):
for element in self.getTags('value'):
yield element.getData()
+class JidMultiField(ListMultiField):
+ """
+ Covers jid-multi fields
+ """
+ def is_valid(self):
+ if len(self.values):
+ for value in self.values:
+ try:
+ helpers.parse_jid(self.value)
+ except:
+ return False
+ return True
+ if self.required:
+ return False
+ return True
+
class TextMultiField(DataField):
@nested_property
def value():
@@ -530,6 +565,12 @@ class DataRecord(ExtendedNode):
def __getitem__(self, item):
return self.vars[item]
+
+ def is_valid(self):
+ for f in self.iter_fields():
+ if not f.is_valid():
+ return False
+ return True
class DataForm(ExtendedNode):
def __init__(self, type_=None, title=None, instructions=None, extend=None):