diff --git a/src/jcl/jabber/component.py b/src/jcl/jabber/component.py index baf7b7e..88a7f06 100644 --- a/src/jcl/jabber/component.py +++ b/src/jcl/jabber/component.py @@ -39,6 +39,7 @@ from Queue import Queue from sqlobject.sqlbuilder import AND from sqlobject.dbconnection import connectionForURI +import pyxmpp.error as error from pyxmpp.jid import JID from pyxmpp.jabberd.component import Component from pyxmpp.jabber.disco import DiscoInfo, DiscoItems, DiscoItem @@ -359,10 +360,14 @@ class JCLComponent(Component, object): x_data.from_xml(query.children) name = x_data.get_field_value("name") - if name is None: - info_query = info_query.make_error_response(\ - "not-acceptable") - self.stream.send(info_query) + self.__logger.debug("Account name received = " + str(name)) + if name is None or name == "": + iq_error = info_query.make_error_response("not-acceptable") + text = iq_error.get_error().xmlnode.newTextChild(None, \ + "text", \ + lang_class.mandatory_field % ("name")) + text.setNs(text.newNs(error.STANZA_ERROR_NS, None)) + self.stream.send(iq_error) return self.db_connect() accounts = self.account_class.select(\ @@ -382,6 +387,7 @@ class JCLComponent(Component, object): _account = self.account_class(user_jid = base_from_jid, \ name = name, \ jid = name + u"@"+unicode(self.jid)) + field = None try: for (field, field_type, field_post_func, field_default_func) in \ self.account_class.get_register_fields(): @@ -391,8 +397,12 @@ class JCLComponent(Component, object): field_default_func)) except FieldError, exception: _account.destroySelf() - info_query = info_query.make_error_response("not-acceptable") - self.stream.send(info_query) + iq_error = info_query.make_error_response("not-acceptable") + text = iq_error.get_error().xmlnode.newTextChild(None, \ + "text", \ + lang_class.mandatory_field % (field)) + text.setNs(text.newNs(error.STANZA_ERROR_NS, None)) + self.stream.send(iq_error) self.db_disconnect() return info_query = info_query.make_result_response() diff --git a/src/jcl/lang.py b/src/jcl/lang.py index f304ac9..2346e64 100644 --- a/src/jcl/lang.py +++ b/src/jcl/lang.py @@ -78,7 +78,8 @@ class Lang: "for account %s\n" new_account_message_subject = u"New account '%s' created" new_account_message_body = u"New account created" - + mandatory_field = u"%s is required" + # account_login = u"Login" # account_password = u"Password" # account_password_store = u"Store password on Jabber server?" diff --git a/tests/jcl/jabber/test_component.py b/tests/jcl/jabber/test_component.py index e426901..23689bb 100644 --- a/tests/jcl/jabber/test_component.py +++ b/tests/jcl/jabber/test_component.py @@ -32,6 +32,7 @@ import os from sqlobject import * from sqlobject.dbconnection import TheURIOpener +import pyxmpp.error as error from pyxmpp.iq import Iq from pyxmpp.stanza import Stanza from pyxmpp.presence import Presence @@ -776,8 +777,11 @@ class JCLComponent_TestCase(unittest.TestCase): self.assertEquals(len(stanza_sent), 1) self.assertTrue(isinstance(stanza_sent[0], Iq)) self.assertEquals(stanza_sent[0].get_node().prop("type"), "error") - error = stanza_sent[0].get_error() - self.assertEquals(error.get_condition().name, "not-acceptable") + stanza_error = stanza_sent[0].get_error() + self.assertEquals(stanza_error.get_condition().name, \ + "not-acceptable") + self.assertEquals(stanza_error.get_text(), \ + Lang.en.mandatory_field % ("name")) def test_handle_set_register_new_field_mandatory(self): self.comp.account_class = AccountExample @@ -807,8 +811,11 @@ class JCLComponent_TestCase(unittest.TestCase): self.assertEquals(len(stanza_sent), 1) self.assertTrue(isinstance(stanza_sent[0], Iq)) self.assertEquals(stanza_sent[0].get_node().prop("type"), "error") - error = stanza_sent[0].get_error() - self.assertEquals(error.get_condition().name, "not-acceptable") + stanza_error = stanza_sent[0].get_error() + self.assertEquals(stanza_error.get_condition().name, \ + "not-acceptable") + self.assertEquals(stanza_error.get_text(), \ + Lang.en.mandatory_field % ("login")) def test_handle_set_register_update_complex(self): self.comp.account_class = AccountExample